my local repository broke so all this shit happened, have a nice day
This commit is contained in:
parent
af2eefff5d
commit
9aaf4877d9
2476 changed files with 3696 additions and 36242 deletions
0
.gitattributes
vendored
Executable file → Normal file
0
.gitattributes
vendored
Executable file → Normal file
0
.gitignore
vendored
Executable file → Normal file
0
.gitignore
vendored
Executable file → Normal file
1
CONTRIBUTORS.md
Executable file → Normal file
1
CONTRIBUTORS.md
Executable file → Normal file
|
@ -17,3 +17,4 @@ This is a list of people who have contributed to Sakura and also a list of the l
|
||||||
- [Parsedown](http://parsedown.org/)
|
- [Parsedown](http://parsedown.org/)
|
||||||
- [PHPMailer](https://github.com/PHPMailer/PHPMailer)
|
- [PHPMailer](https://github.com/PHPMailer/PHPMailer)
|
||||||
- [PayPal API](https://paypal.com/)
|
- [PayPal API](https://paypal.com/)
|
||||||
|
- [jBBCode](http://jbbcode.com/)
|
||||||
|
|
0
LICENSE
Executable file → Normal file
0
LICENSE
Executable file → Normal file
0
README.md
Executable file → Normal file
0
README.md
Executable file → Normal file
107
_sakura/components/BBcode.php
Normal file
107
_sakura/components/BBcode.php
Normal file
|
@ -0,0 +1,107 @@
|
||||||
|
<?php
|
||||||
|
/*
|
||||||
|
* BBcode Wrapper
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Sakura;
|
||||||
|
|
||||||
|
use JBBCode\Parser;
|
||||||
|
use JBBCode\DefaultCodeDefinitionSet;
|
||||||
|
use JBBCode\CodeDefinitionBuilder;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class BBcode
|
||||||
|
* @package Sakura
|
||||||
|
*/
|
||||||
|
class BBcode
|
||||||
|
{
|
||||||
|
// Parser container
|
||||||
|
private $bbcode;
|
||||||
|
|
||||||
|
// Constructor
|
||||||
|
public function __construct($text = null) {
|
||||||
|
// Create new parser class
|
||||||
|
$this->bbcode = new Parser();
|
||||||
|
|
||||||
|
// Add the standard definitions
|
||||||
|
$this->loadStandardCodes();
|
||||||
|
|
||||||
|
// Immediately parse the text if set
|
||||||
|
if ($text != null) {
|
||||||
|
$this->bbcode->parse($text);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add basic bbcodes
|
||||||
|
public function loadStandardCodes() {
|
||||||
|
// Add the standard definitions
|
||||||
|
$this->bbcode->addCodeDefinitionSet(new DefaultCodeDefinitionSet());
|
||||||
|
|
||||||
|
// Header tag
|
||||||
|
$builder = new CodeDefinitionBuilder('header', '<h2>{param}</h2>');
|
||||||
|
$this->bbcode->addCodeDefinition($builder->build());
|
||||||
|
|
||||||
|
// Strike tag
|
||||||
|
$builder = new CodeDefinitionBuilder('s', '<del>{param}</del>');
|
||||||
|
$this->bbcode->addCodeDefinition($builder->build());
|
||||||
|
|
||||||
|
// Spoiler tag
|
||||||
|
$builder = new CodeDefinitionBuilder('spoiler', '<div class="spoiler">{param}</div>');
|
||||||
|
$this->bbcode->addCodeDefinition($builder->build());
|
||||||
|
|
||||||
|
// Box tag
|
||||||
|
$builder = new CodeDefinitionBuilder('box', '<div class="spoiler-box-container"><div class="spoiler-box-title">Click to open.</div><div class="spoiler-box-content">{param}</div></div>');
|
||||||
|
$this->bbcode->addCodeDefinition($builder->build());
|
||||||
|
|
||||||
|
// Box tag
|
||||||
|
$builder = new CodeDefinitionBuilder('box', '<div class="spoiler-box-container"><div class="spoiler-box-title">{option}</div><div class="spoiler-box-content">{param}</div></div>');
|
||||||
|
$builder->setUseOption(true);
|
||||||
|
$this->bbcode->addCodeDefinition($builder->build());
|
||||||
|
|
||||||
|
// Quote tag
|
||||||
|
$builder = new CodeDefinitionBuilder('quote', '<blockquote>{param}</blockquote>');
|
||||||
|
$this->bbcode->addCodeDefinition($builder->build());
|
||||||
|
|
||||||
|
// Quote tag
|
||||||
|
$builder = new CodeDefinitionBuilder('quote', '<h4>{option} wrote:</h4><blockquote>{param}</blockquote>');
|
||||||
|
$builder->setUseOption(true);
|
||||||
|
$this->bbcode->addCodeDefinition($builder->build());
|
||||||
|
|
||||||
|
// Add special definitions (PHP files MUST have the same name as the definition class
|
||||||
|
foreach (glob(ROOT . '_sakura/components/BBcodeDefinitions/*.php') as $ext) {
|
||||||
|
// Include the class
|
||||||
|
require_once $ext;
|
||||||
|
|
||||||
|
// Clean the file path
|
||||||
|
$ext = str_replace(ROOT . '_sakura/components/', '', $ext);
|
||||||
|
$ext = str_replace('.php', '', $ext);
|
||||||
|
$ext = str_replace('/', '\\', $ext);
|
||||||
|
|
||||||
|
// Build the classname
|
||||||
|
$className = __NAMESPACE__ . '\\' . $ext;
|
||||||
|
|
||||||
|
// Add the BBcode definition
|
||||||
|
$this->bbcode->addCodeDefinition(new $className);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set text
|
||||||
|
public function text($text) {
|
||||||
|
$this->bbcode->parse($text);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get as HTML
|
||||||
|
public function toHTML() {
|
||||||
|
return nl2br($this->bbcode->getAsHtml());
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get as BBmarkup
|
||||||
|
public function toEditor() {
|
||||||
|
return $this->bbcode->getAsBBCode();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get as plaintext
|
||||||
|
public function toPlain() {
|
||||||
|
return $this->bbcode->getAsText();
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,65 +0,0 @@
|
||||||
<?php
|
|
||||||
/*
|
|
||||||
* BBcode main
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace Sakura\BBcode;
|
|
||||||
|
|
||||||
class BBcode
|
|
||||||
{
|
|
||||||
// Text
|
|
||||||
private $text;
|
|
||||||
private $seed;
|
|
||||||
|
|
||||||
// Contructor
|
|
||||||
public function __construct($text = "", $seed = '9001')
|
|
||||||
{
|
|
||||||
$this->setText($text);
|
|
||||||
$this->seed = $seed;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set text
|
|
||||||
public function setText($text)
|
|
||||||
{
|
|
||||||
$this->text = $text;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Convert to storage format
|
|
||||||
public function toStore()
|
|
||||||
{
|
|
||||||
// Create new Store
|
|
||||||
$store = new Store($this->text, $this->seed);
|
|
||||||
|
|
||||||
// Parse
|
|
||||||
$store = $store->generate();
|
|
||||||
|
|
||||||
// And return
|
|
||||||
return $store;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Convert to HTML
|
|
||||||
public function toHTML()
|
|
||||||
{
|
|
||||||
// Create new Parse
|
|
||||||
$parse = new Parse($this->text, $this->seed);
|
|
||||||
|
|
||||||
// Parse
|
|
||||||
$parse = $parse->parse();
|
|
||||||
|
|
||||||
// And return
|
|
||||||
return $parse;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Convert to plain text
|
|
||||||
public function toEditor()
|
|
||||||
{
|
|
||||||
// Create new Parse
|
|
||||||
$parse = new Parse($this->text, $this->seed);
|
|
||||||
|
|
||||||
// Parse
|
|
||||||
$parse = $parse->toEditor();
|
|
||||||
|
|
||||||
// And return
|
|
||||||
return $parse;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,178 +0,0 @@
|
||||||
<?php
|
|
||||||
/*
|
|
||||||
* BBcode parser
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace Sakura\BBcode;
|
|
||||||
|
|
||||||
use \HTMLPurifier;
|
|
||||||
use \HTMLPurifier_Config;
|
|
||||||
use Sakura\Main;
|
|
||||||
|
|
||||||
class Parse
|
|
||||||
{
|
|
||||||
// Text
|
|
||||||
private $text;
|
|
||||||
private $seed;
|
|
||||||
|
|
||||||
// Simple bbcodes
|
|
||||||
private $simple = [
|
|
||||||
'b' => 'strong',
|
|
||||||
'i' => 'em',
|
|
||||||
'u' => 'u',
|
|
||||||
's' => 'del',
|
|
||||||
'h' => 'h2',
|
|
||||||
];
|
|
||||||
|
|
||||||
// Advanced bbcodes
|
|
||||||
private $advanced = [
|
|
||||||
'spoiler' => '<span class="spoiler">|</span>',
|
|
||||||
];
|
|
||||||
|
|
||||||
public function __construct($text = "", $seed = '9001')
|
|
||||||
{
|
|
||||||
$this->setText($text);
|
|
||||||
$this->seed = $seed;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function setText($text)
|
|
||||||
{
|
|
||||||
$this->text = $text;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function parseImage($text)
|
|
||||||
{
|
|
||||||
return preg_replace_callback(
|
|
||||||
"#\[img:{$this->seed}\](?<url>[^[]+)\[/img:{$this->seed}\]#",
|
|
||||||
function ($i) {
|
|
||||||
return "<img src=\"{$i['url']}\" alt=\"{$i['url']}\" />";
|
|
||||||
},
|
|
||||||
$text
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function parseList($text)
|
|
||||||
{
|
|
||||||
$text = preg_replace("#\[list=\d+:{$this->seed}\]#", '<ol>', $text);
|
|
||||||
$text = preg_replace("#\[list(=.?)?:{$this->seed}\]#", "<ol class='unordered'>", $text);
|
|
||||||
$text = preg_replace("#\[/\*(:m)?:{$this->seed}\]\n?#", '</li>', $text);
|
|
||||||
$text = str_replace("[*:{$this->seed}]", '<li>', $text);
|
|
||||||
$text = str_replace("[/list:o:{$this->seed}]", '</ol>', $text);
|
|
||||||
$text = str_replace("[/list:u:{$this->seed}]", '</ol>', $text);
|
|
||||||
|
|
||||||
return $text;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function parseCode($text)
|
|
||||||
{
|
|
||||||
return preg_replace_callback(
|
|
||||||
"#[\r|\n]*\[code:{$this->seed}\][\r|\n]*(.*?)[\r|\n]*\[/code:{$this->seed}\][\r|\n]*#s",
|
|
||||||
function ($c) {
|
|
||||||
return '<pre class="prettyprint linenums">' . str_replace('<br />', '', $c[1]) . '</pre>';
|
|
||||||
},
|
|
||||||
$text
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function parseQuote($text)
|
|
||||||
{
|
|
||||||
$text = preg_replace("#\[quote="([^:]+)":{$this->seed}\]#", '<blockquote><h4>\\1 wrote:</h4>', $text);
|
|
||||||
$text = str_replace("[quote:{$this->seed}]", '<blockquote>', $text);
|
|
||||||
$text = str_replace("[/quote:{$this->seed}]", '</blockquote>', $text);
|
|
||||||
|
|
||||||
return $text;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function parseSimple($text)
|
|
||||||
{
|
|
||||||
// Parse all simple tags
|
|
||||||
foreach ($this->simple as $code => $tag) {
|
|
||||||
$text = str_replace("[{$code}:{$this->seed}]", "<{$tag}>", $text);
|
|
||||||
$text = str_replace("[/{$code}:{$this->seed}]", "</{$tag}>", $text);
|
|
||||||
}
|
|
||||||
return $text;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function parseAdvanced($text)
|
|
||||||
{
|
|
||||||
// Parse all advanced tags
|
|
||||||
foreach ($this->advanced as $code => $tags) {
|
|
||||||
$tags = explode('|', $tags);
|
|
||||||
|
|
||||||
$text = str_replace("[{$code}:{$this->seed}]", $tags[0], $text);
|
|
||||||
$text = str_replace("[/{$code}:{$this->seed}]", $tags[1], $text);
|
|
||||||
}
|
|
||||||
return $text;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function parseColour($text)
|
|
||||||
{
|
|
||||||
$text = preg_replace("#\[color=([^:]+):{$this->seed}\]#", "<span style='color:\\1'>", $text);
|
|
||||||
$text = str_replace("[/color:{$this->seed}]", '</span>', $text);
|
|
||||||
|
|
||||||
return $text;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function parseUrl($text)
|
|
||||||
{
|
|
||||||
$text = preg_replace("#\[url:{$this->seed}\](.+?)\[/url:{$this->seed}\]#", "<a rel='nofollow' href='\\1'>\\1</a>", $text);
|
|
||||||
$text = preg_replace("#\[url=(.+?):{$this->seed}\]#", "<a rel='nofollow' href='\\1'>", $text);
|
|
||||||
$text = str_replace("[/url:{$this->seed}]", '</a>', $text);
|
|
||||||
|
|
||||||
return $text;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function purify($text)
|
|
||||||
{
|
|
||||||
$config = HTMLPurifier_Config::createDefault();
|
|
||||||
$config->set('Cache.SerializerPath', ROOT . 'cache/htmlpurifier');
|
|
||||||
$config->set('Attr.AllowedRel', ['nofollow']);
|
|
||||||
$config->set('HTML.Trusted', true);
|
|
||||||
|
|
||||||
$def = $config->getHTMLDefinition(true);
|
|
||||||
|
|
||||||
$def->addAttribute('img', 'src', 'Text');
|
|
||||||
|
|
||||||
$purifier = new HTMLPurifier($config);
|
|
||||||
|
|
||||||
return $purifier->purify($text);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function parse()
|
|
||||||
{
|
|
||||||
// Get text
|
|
||||||
$text = $this->text;
|
|
||||||
|
|
||||||
$text = $this->parseCode($text);
|
|
||||||
$text = $this->parseList($text);
|
|
||||||
$text = $this->parseQuote($text);
|
|
||||||
|
|
||||||
$text = $this->parseAdvanced($text);
|
|
||||||
$text = $this->parseColour($text);
|
|
||||||
$text = $this->parseImage($text);
|
|
||||||
$text = $this->parseSimple($text);
|
|
||||||
$text = $this->parseUrl($text);
|
|
||||||
|
|
||||||
$text = Main::parseEmotes($text);
|
|
||||||
|
|
||||||
$text = str_replace("\n", '<br />', $text);
|
|
||||||
//$text = $this->purify($text);
|
|
||||||
|
|
||||||
return $text;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function toEditor()
|
|
||||||
{
|
|
||||||
$text = $this->text;
|
|
||||||
|
|
||||||
$text = str_replace("[/*:m:{$this->seed}]", '', $text);
|
|
||||||
|
|
||||||
$text = preg_replace("#\[/list:[ou]:{$this->seed}\]#", '[/list]', $text);
|
|
||||||
|
|
||||||
$text = str_replace(":{$this->seed}]", ']', $text);
|
|
||||||
|
|
||||||
$text = preg_replace('#<!-- ([emw]) --><a.*?>(.*?)</a><!-- \\1 -->#', '\\2', $text);
|
|
||||||
|
|
||||||
return html_entity_decode($text);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,225 +0,0 @@
|
||||||
<?php
|
|
||||||
/*
|
|
||||||
* BBcode storage format generator/converter
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace Sakura\BBcode;
|
|
||||||
|
|
||||||
use Sakura\Database;
|
|
||||||
|
|
||||||
class Store
|
|
||||||
{
|
|
||||||
// Text
|
|
||||||
private $text;
|
|
||||||
private $seed;
|
|
||||||
|
|
||||||
// Special escapes
|
|
||||||
protected $escapes = [
|
|
||||||
'[' => '[',
|
|
||||||
']' => ']',
|
|
||||||
'.' => '.',
|
|
||||||
':' => ':',
|
|
||||||
];
|
|
||||||
|
|
||||||
// Spaces
|
|
||||||
protected $spaces = [
|
|
||||||
"(^|\s)",
|
|
||||||
"((?:\.|\))?(?:$|\s|\n|\r))",
|
|
||||||
];
|
|
||||||
|
|
||||||
// Simple bbcodes
|
|
||||||
protected $simple = [
|
|
||||||
'b',
|
|
||||||
'i',
|
|
||||||
'u',
|
|
||||||
's',
|
|
||||||
'h',
|
|
||||||
'img',
|
|
||||||
'spoiler',
|
|
||||||
];
|
|
||||||
|
|
||||||
// Constructor
|
|
||||||
public function __construct($text = "", $seed = "")
|
|
||||||
{
|
|
||||||
$this->setText($text);
|
|
||||||
$this->seed = $seed;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set text
|
|
||||||
public function setText($text)
|
|
||||||
{
|
|
||||||
$this->text = $text;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Colour tag
|
|
||||||
public function parseColour($text)
|
|
||||||
{
|
|
||||||
return preg_replace(
|
|
||||||
",\[(color=(?:#[[:xdigit:]]{6}|[[:alpha:]]+))\](.+?)\[(/color)\],",
|
|
||||||
"[\\1:{$this->seed}]\\2[\\3:{$this->seed}]",
|
|
||||||
$text
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Align tag
|
|
||||||
public function parseAlign($text)
|
|
||||||
{
|
|
||||||
return preg_replace(
|
|
||||||
",\[(align=(?:[[:alpha:]]+))\](.+?)\[(/align)\],",
|
|
||||||
"[\\1:{$this->seed}]\\2[\\3:{$this->seed}]",
|
|
||||||
$text
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Size tag
|
|
||||||
public function parseSize($text)
|
|
||||||
{
|
|
||||||
return preg_replace(
|
|
||||||
",\[(size=(?:[[:digit:]]+))\](.+?)\[(/size)\],",
|
|
||||||
"[\\1:{$this->seed}]\\2[\\3:{$this->seed}]",
|
|
||||||
$text
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Simple tags
|
|
||||||
public function parseSimple($text)
|
|
||||||
{
|
|
||||||
// Parse all simple tags
|
|
||||||
foreach ($this->simple as $code) {
|
|
||||||
$text = preg_replace(
|
|
||||||
"#\[{$code}](.*?)\[/{$code}\]#s",
|
|
||||||
"[{$code}:{$this->seed}]\\1[/{$code}:{$this->seed}]",
|
|
||||||
$text
|
|
||||||
);
|
|
||||||
}
|
|
||||||
return $text;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Code tag
|
|
||||||
public function parseCode($text)
|
|
||||||
{
|
|
||||||
$text = preg_replace_callback(
|
|
||||||
"#\[code\](((?R)|.)*?)\[/code\]#s",
|
|
||||||
function ($t) {
|
|
||||||
$escaped = $this->escape($t[1]);
|
|
||||||
|
|
||||||
return "[code:{$this->seed}]{$escaped}[/code:{$this->seed}]";
|
|
||||||
},
|
|
||||||
$text
|
|
||||||
);
|
|
||||||
|
|
||||||
return $text;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Quote tag
|
|
||||||
public function parseQuote($text)
|
|
||||||
{
|
|
||||||
$patterns = ["/\[(quote(?:=".+?")?)\]/", '[/quote]'];
|
|
||||||
$counts = [preg_match_all($patterns[0], $text), substr_count($text, $patterns[1])];
|
|
||||||
$limit = min($counts);
|
|
||||||
|
|
||||||
$text = preg_replace($patterns[0], "[\\1:{$this->seed}]", $text, $limit);
|
|
||||||
$text = preg_replace('/' . preg_quote($patterns[1], '/') . '/', "[/quote:{$this->seed}]", $text, $limit);
|
|
||||||
|
|
||||||
return $text;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function parseList($text)
|
|
||||||
{
|
|
||||||
$patterns = ["/\[(list(?:=.+?)?)\]/", '[/list]'];
|
|
||||||
$counts = [preg_match_all($patterns[0], $text), substr_count($text, $patterns[1])];
|
|
||||||
$limit = min($counts);
|
|
||||||
|
|
||||||
$text = str_replace('[*]', "[*:{$this->seed}]", $text);
|
|
||||||
$text = str_replace('[/*]', '', $text);
|
|
||||||
|
|
||||||
$text = preg_replace($patterns[0], "[\\1:{$this->seed}]", $text, $limit);
|
|
||||||
$text = preg_replace('/' . preg_quote($patterns[1], '/') . '/', "[/list:o:{$this->seed}]", $text, $limit);
|
|
||||||
|
|
||||||
return $text;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function parseUrl($text)
|
|
||||||
{
|
|
||||||
$urlPattern = '(?:https?|ftp)://.+?';
|
|
||||||
|
|
||||||
$text = preg_replace_callback(
|
|
||||||
"#\[url\]({$urlPattern})\[/url\]#",
|
|
||||||
function ($m) {
|
|
||||||
$url = $this->escape($m[1]);
|
|
||||||
return "[url:{$this->seed}]{$url}[/url:{$this->seed}]";
|
|
||||||
},
|
|
||||||
$text
|
|
||||||
);
|
|
||||||
|
|
||||||
$text = preg_replace_callback(
|
|
||||||
"#\[url=({$urlPattern})\](.+?)\[/url\]#",
|
|
||||||
function ($m) {
|
|
||||||
$url = $this->escape($m[1]);
|
|
||||||
return "[url={$url}:{$this->seed}]{$m[2]}[/url:{$this->seed}]";
|
|
||||||
},
|
|
||||||
$text
|
|
||||||
);
|
|
||||||
|
|
||||||
return $text;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function parseLinks($text)
|
|
||||||
{
|
|
||||||
// Spaces
|
|
||||||
$spaces = ["(^|\s)", "((?:\.|\))?(?:$|\s|\n|\r))"];
|
|
||||||
|
|
||||||
// HTTP(s), FTP, IRC and osu
|
|
||||||
$text = preg_replace(
|
|
||||||
"#{$spaces[0]}((?:https?|ftp|irc|osu)://[^\s]+?){$spaces[1]}#",
|
|
||||||
"\\1<!-- m --><a href='\\2' rel='nofollow'>\\2</a><!-- m -->\\3",
|
|
||||||
$text
|
|
||||||
);
|
|
||||||
|
|
||||||
// Prefixed with www.
|
|
||||||
$text = preg_replace(
|
|
||||||
"/{$spaces[0]}(www\.[^\s]+){$spaces[1]}/",
|
|
||||||
"\\1<!-- w --><a href='http://\\2' rel='nofollow'>\\2</a><!-- w -->\\3",
|
|
||||||
$text
|
|
||||||
);
|
|
||||||
|
|
||||||
// E-mail addresses
|
|
||||||
$text = preg_replace(
|
|
||||||
"/{$spaces[0]}([A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z-]+){$spaces[1]}/",
|
|
||||||
"\\1<!-- e --><a href='mailto:\\2' rel='nofollow'>\\2</a><!-- m -->\\3",
|
|
||||||
$text
|
|
||||||
);
|
|
||||||
|
|
||||||
return $text;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Escapes
|
|
||||||
public function escape($text)
|
|
||||||
{
|
|
||||||
return str_replace(
|
|
||||||
array_keys($this->escapes),
|
|
||||||
$this->escapes,
|
|
||||||
$text
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Generator
|
|
||||||
public function generate()
|
|
||||||
{
|
|
||||||
$text = htmlentities($this->text);
|
|
||||||
|
|
||||||
$text = $this->parseCode($text);
|
|
||||||
$text = $this->parseQuote($text);
|
|
||||||
$text = $this->parseList($text);
|
|
||||||
|
|
||||||
$text = $this->parseSimple($text);
|
|
||||||
$text = $this->parseAlign($text);
|
|
||||||
$text = $this->parseUrl($text);
|
|
||||||
$text = $this->parseSize($text);
|
|
||||||
$text = $this->parseColour($text);
|
|
||||||
|
|
||||||
$text = $this->parseLinks($text);
|
|
||||||
|
|
||||||
return $text;
|
|
||||||
}
|
|
||||||
}
|
|
42
_sakura/components/BBcodeDefinitions/Align.php
Normal file
42
_sakura/components/BBcodeDefinitions/Align.php
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
<?php
|
||||||
|
/*
|
||||||
|
* Text align bbcode
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Sakura\BBcodeDefinitions;
|
||||||
|
|
||||||
|
use JBBCode\Parser;
|
||||||
|
use JBBCode\CodeDefinition;
|
||||||
|
use JBBCode\ElementNode;
|
||||||
|
|
||||||
|
class Align extends CodeDefinition {
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct();
|
||||||
|
$this->setTagName("align");
|
||||||
|
$this->setUseOption(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function asHtml(ElementNode $el)
|
||||||
|
{
|
||||||
|
$alignments = [
|
||||||
|
'left',
|
||||||
|
'center',
|
||||||
|
'right'
|
||||||
|
];
|
||||||
|
|
||||||
|
$content = "";
|
||||||
|
|
||||||
|
foreach($el->getChildren() as $child) {
|
||||||
|
$content .= $child->getAsHTML();
|
||||||
|
}
|
||||||
|
|
||||||
|
$alignment = $el->getAttribute()['align'];
|
||||||
|
|
||||||
|
if (!in_array($alignment, $alignments)) {
|
||||||
|
return $el->getAsBBCode();
|
||||||
|
}
|
||||||
|
|
||||||
|
return '<div style="text-align: ' . $alignment . ';">' . $content . '</div>';
|
||||||
|
}
|
||||||
|
}
|
23
_sakura/components/BBcodeDefinitions/Code.php
Normal file
23
_sakura/components/BBcodeDefinitions/Code.php
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
<?php
|
||||||
|
/*
|
||||||
|
* Code bbcode
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Sakura\BBcodeDefinitions;
|
||||||
|
|
||||||
|
use JBBCode\Parser;
|
||||||
|
use JBBCode\CodeDefinition;
|
||||||
|
use JBBCode\ElementNode;
|
||||||
|
|
||||||
|
class Code extends CodeDefinition {
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct();
|
||||||
|
$this->setTagName("code");
|
||||||
|
}
|
||||||
|
|
||||||
|
public function asHtml(ElementNode $el)
|
||||||
|
{
|
||||||
|
return preg_replace("#\n*\[code\]\n*(.*?)\n*\[/code\]\n*#s", '<pre class="code prettyprint linenums">\\1</pre>', $el->getAsBBCode());
|
||||||
|
}
|
||||||
|
}
|
47
_sakura/components/BBcodeDefinitions/Lists.php
Normal file
47
_sakura/components/BBcodeDefinitions/Lists.php
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
<?php
|
||||||
|
/*
|
||||||
|
* List BBcode
|
||||||
|
* https://gist.github.com/jbowens/5646994
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Sakura\BBcodeDefinitions;
|
||||||
|
|
||||||
|
use JBBCode\Parser;
|
||||||
|
use JBBCode\CodeDefinition;
|
||||||
|
use JBBCode\ElementNode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Implements a [list] code definition that provides the following syntax:
|
||||||
|
*
|
||||||
|
* [list]
|
||||||
|
* [*] first item
|
||||||
|
* [*] second item
|
||||||
|
* [*] third item
|
||||||
|
* [/list]
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class Lists extends CodeDefinition
|
||||||
|
{
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
$this->parseContent = true;
|
||||||
|
$this->useOption = false;
|
||||||
|
$this->setTagName('list');
|
||||||
|
$this->nestLimit = -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function asHtml(ElementNode $el)
|
||||||
|
{
|
||||||
|
$bodyHtml = '';
|
||||||
|
foreach ($el->getChildren() as $child) {
|
||||||
|
$bodyHtml .= $child->getAsHTML();
|
||||||
|
}
|
||||||
|
|
||||||
|
$listPieces = explode('[*]', $bodyHtml);
|
||||||
|
unset($listPieces[0]);
|
||||||
|
$listPieces = array_map(function($li) {
|
||||||
|
return '<li>'.$li.'</li>';
|
||||||
|
}, $listPieces);
|
||||||
|
return '<ul>'.implode('', $listPieces).'</ul>';
|
||||||
|
}
|
||||||
|
}
|
39
_sakura/components/BBcodeDefinitions/Size.php
Normal file
39
_sakura/components/BBcodeDefinitions/Size.php
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
<?php
|
||||||
|
/*
|
||||||
|
* Font size BBcode
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Sakura\BBcodeDefinitions;
|
||||||
|
|
||||||
|
use JBBCode\Parser;
|
||||||
|
use JBBCode\CodeDefinition;
|
||||||
|
use JBBCode\ElementNode;
|
||||||
|
|
||||||
|
class Size extends CodeDefinition {
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct();
|
||||||
|
$this->setTagName("size");
|
||||||
|
$this->setUseOption(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function asHtml(ElementNode $el)
|
||||||
|
{
|
||||||
|
$minSize = 0;
|
||||||
|
$maxSize = 200;
|
||||||
|
|
||||||
|
$content = "";
|
||||||
|
|
||||||
|
foreach($el->getChildren() as $child) {
|
||||||
|
$content .= $child->getAsHTML();
|
||||||
|
}
|
||||||
|
|
||||||
|
$size = $el->getAttribute()['size'];
|
||||||
|
|
||||||
|
if ($size < $minSize || $size > $maxSize) {
|
||||||
|
return $el->getAsBBCode();
|
||||||
|
}
|
||||||
|
|
||||||
|
return '<span style="font-size: ' . ($size / 100) . 'em;">' . $content . '</span>';
|
||||||
|
}
|
||||||
|
}
|
36
_sakura/components/BBcodeDefinitions/YouTube.php
Normal file
36
_sakura/components/BBcodeDefinitions/YouTube.php
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
<?php
|
||||||
|
/*
|
||||||
|
* YouTube BBcode
|
||||||
|
* As displayed on this page http://jbbcode.com/docs
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Sakura\BBcodeDefinitions;
|
||||||
|
|
||||||
|
use JBBCode\Parser;
|
||||||
|
use JBBCode\CodeDefinition;
|
||||||
|
use JBBCode\ElementNode;
|
||||||
|
|
||||||
|
class YouTube extends CodeDefinition {
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct();
|
||||||
|
$this->setTagName("youtube");
|
||||||
|
}
|
||||||
|
|
||||||
|
public function asHtml(ElementNode $el)
|
||||||
|
{
|
||||||
|
$content = "";
|
||||||
|
|
||||||
|
foreach($el->getChildren() as $child) {
|
||||||
|
$content .= $child->getAsBBCode();
|
||||||
|
}
|
||||||
|
|
||||||
|
$foundMatch = preg_match('/^([A-z0-9=\-]+?)$/i', $content, $matches);
|
||||||
|
|
||||||
|
if(!$foundMatch) {
|
||||||
|
return $el->getAsBBCode();
|
||||||
|
} else {
|
||||||
|
return "<iframe width=\"640\" height=\"390\" src=\"https://www.youtube.com/embed/".$matches[1]."\" frameborder=\"0\" allowfullscreen></iframe>";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
0
_sakura/components/Bans.php
Executable file → Normal file
0
_sakura/components/Bans.php
Executable file → Normal file
0
_sakura/components/Comments.php
Executable file → Normal file
0
_sakura/components/Comments.php
Executable file → Normal file
0
_sakura/components/Database.php
Executable file → Normal file
0
_sakura/components/Database.php
Executable file → Normal file
|
@ -8,7 +8,7 @@ namespace Sakura\Forum;
|
||||||
use Sakura\Main;
|
use Sakura\Main;
|
||||||
use Sakura\Database;
|
use Sakura\Database;
|
||||||
use Sakura\User;
|
use Sakura\User;
|
||||||
use Sakura\BBcode\BBcode;
|
use Sakura\BBcode;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class Forums
|
* Class Forums
|
||||||
|
@ -209,7 +209,7 @@ class Forums
|
||||||
'user' => (new User($post['poster_id'])),
|
'user' => (new User($post['poster_id'])),
|
||||||
'elapsed' => Main::timeElapsed($post['post_time']),
|
'elapsed' => Main::timeElapsed($post['post_time']),
|
||||||
'is_op' => ($post['poster_id'] == $firstPost['poster_id'] ? '1' : '0'),
|
'is_op' => ($post['poster_id'] == $firstPost['poster_id'] ? '1' : '0'),
|
||||||
'parsed_post' => self::parseMarkUp($post['post_text'], 1, 1),
|
'parsed_post' => (new BBcode($post['post_text']))->toHTML(),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
// Just in case
|
// Just in case
|
||||||
|
@ -256,30 +256,6 @@ class Forums
|
||||||
return $post['topic_id'];
|
return $post['topic_id'];
|
||||||
}
|
}
|
||||||
|
|
||||||
// Parse different markup flavours
|
|
||||||
public static function parseMarkUp($text, $mode, $emotes = 1)
|
|
||||||
{
|
|
||||||
|
|
||||||
// Clean string
|
|
||||||
$text = Main::cleanString($text);
|
|
||||||
|
|
||||||
// Parse emotes
|
|
||||||
if ($emotes) {
|
|
||||||
$text = Main::parseEmotes($text);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Switch between modes
|
|
||||||
switch ($mode) {
|
|
||||||
case 1:
|
|
||||||
case 2:
|
|
||||||
return Main::bbParse($text);
|
|
||||||
|
|
||||||
case 0:
|
|
||||||
default:
|
|
||||||
return $text;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get forum statistics of a user
|
// Get forum statistics of a user
|
||||||
public static function getUserStats($uid)
|
public static function getUserStats($uid)
|
||||||
{
|
{
|
||||||
|
@ -308,10 +284,6 @@ class Forums
|
||||||
// Check if we're replying to a thread
|
// Check if we're replying to a thread
|
||||||
$getThread = Database::fetch('topics', false, ['topic_id' => [$topic, '=']]);
|
$getThread = Database::fetch('topics', false, ['topic_id' => [$topic, '=']]);
|
||||||
|
|
||||||
// Convert the text to storage format
|
|
||||||
$bbcode = new BBcode($text);
|
|
||||||
$text = $bbcode->toStore();
|
|
||||||
|
|
||||||
// If nothing was returned create a new thread
|
// If nothing was returned create a new thread
|
||||||
if (!$getThread) {
|
if (!$getThread) {
|
||||||
// Insert the required data
|
// Insert the required data
|
||||||
|
|
|
@ -8,7 +8,7 @@ namespace Sakura\Forum;
|
||||||
use Sakura\Main;
|
use Sakura\Main;
|
||||||
use Sakura\Database;
|
use Sakura\Database;
|
||||||
use Sakura\User;
|
use Sakura\User;
|
||||||
use Sakura\BBcode\BBcode;
|
use Sakura\BBcode;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class Post
|
* Class Post
|
||||||
|
@ -56,9 +56,7 @@ class Post
|
||||||
}
|
}
|
||||||
|
|
||||||
// Parse the markup
|
// Parse the markup
|
||||||
$bbcode = new BBcode($this->text);
|
$this->parsed = (new BBcode(htmlentities($this->text)))->toHTML();
|
||||||
|
|
||||||
$this->parsed = $bbcode->toHTML();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Time elapsed since creation
|
// Time elapsed since creation
|
||||||
|
|
0
_sakura/components/Hashing.php
Executable file → Normal file
0
_sakura/components/Hashing.php
Executable file → Normal file
32
_sakura/components/Main.php
Executable file → Normal file
32
_sakura/components/Main.php
Executable file → Normal file
|
@ -37,36 +37,6 @@ class Main
|
||||||
$pd->text($text);
|
$pd->text($text);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get bbcodes
|
|
||||||
public static function getBBcodes()
|
|
||||||
{
|
|
||||||
return Database::fetch('bbcodes');
|
|
||||||
}
|
|
||||||
|
|
||||||
// Parse bbcodes
|
|
||||||
public static function bbParse($text)
|
|
||||||
{
|
|
||||||
|
|
||||||
// Get bbcode regex from the database
|
|
||||||
$bbcodes = Database::fetch('bbcodes');
|
|
||||||
|
|
||||||
// Split the regex
|
|
||||||
$regex = array_map(function ($arr) {
|
|
||||||
return $arr['bbcode_regex'];
|
|
||||||
}, $bbcodes);
|
|
||||||
|
|
||||||
// Split the replacement
|
|
||||||
$replace = array_map(function ($arr) {
|
|
||||||
return $arr['bbcode_replace'];
|
|
||||||
}, $bbcodes);
|
|
||||||
|
|
||||||
// Do the replacement
|
|
||||||
$text = preg_replace($regex, $replace, $text);
|
|
||||||
|
|
||||||
// Return the parsed text
|
|
||||||
return $text;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get emoticons
|
// Get emoticons
|
||||||
public static function getEmotes()
|
public static function getEmotes()
|
||||||
{
|
{
|
||||||
|
@ -78,7 +48,7 @@ class Main
|
||||||
{
|
{
|
||||||
|
|
||||||
// Get emoticons from the database
|
// Get emoticons from the database
|
||||||
$emotes = Database::fetch('emoticons');
|
$emotes = self::getEmotes();
|
||||||
|
|
||||||
// Do the replacements
|
// Do the replacements
|
||||||
foreach ($emotes as $emote) {
|
foreach ($emotes as $emote) {
|
||||||
|
|
0
_sakura/components/Manage.php
Executable file → Normal file
0
_sakura/components/Manage.php
Executable file → Normal file
0
_sakura/components/News.php
Executable file → Normal file
0
_sakura/components/News.php
Executable file → Normal file
0
_sakura/components/Payments.php
Executable file → Normal file
0
_sakura/components/Payments.php
Executable file → Normal file
0
_sakura/components/Permissions.php
Executable file → Normal file
0
_sakura/components/Permissions.php
Executable file → Normal file
0
_sakura/components/Rank.php
Executable file → Normal file
0
_sakura/components/Rank.php
Executable file → Normal file
0
_sakura/components/Session.php
Executable file → Normal file
0
_sakura/components/Session.php
Executable file → Normal file
0
_sakura/components/Urls.php
Executable file → Normal file
0
_sakura/components/Urls.php
Executable file → Normal file
10
_sakura/components/User.php
Executable file → Normal file
10
_sakura/components/User.php
Executable file → Normal file
|
@ -659,13 +659,11 @@ class User
|
||||||
public function signature()
|
public function signature()
|
||||||
{
|
{
|
||||||
return isset($this->data['user_data']['signature']) ?
|
return isset($this->data['user_data']['signature']) ?
|
||||||
Main::bbParse(
|
(new BBcode(
|
||||||
Main::parseEmotes(
|
base64_decode(
|
||||||
base64_decode(
|
$this->data['user_data']['signature']
|
||||||
$this->data['user_data']['signature']
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
) :
|
))->toHTML() :
|
||||||
null;
|
null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
0
_sakura/components/Users.php
Executable file → Normal file
0
_sakura/components/Users.php
Executable file → Normal file
0
_sakura/components/Whois.php
Executable file → Normal file
0
_sakura/components/Whois.php
Executable file → Normal file
2
_sakura/composer.json
Executable file → Normal file
2
_sakura/composer.json
Executable file → Normal file
|
@ -7,6 +7,6 @@
|
||||||
"phpmailer/phpmailer": "*",
|
"phpmailer/phpmailer": "*",
|
||||||
"erusev/parsedown": "*",
|
"erusev/parsedown": "*",
|
||||||
"paypal/rest-api-sdk-php": "*",
|
"paypal/rest-api-sdk-php": "*",
|
||||||
"ezyang/htmlpurifier": "^4.7"
|
"jbbcode/jbbcode": "^1.3"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
46
_sakura/composer.lock
generated
Executable file → Normal file
46
_sakura/composer.lock
generated
Executable file → Normal file
|
@ -4,8 +4,8 @@
|
||||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
|
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
|
||||||
"This file is @generated automatically"
|
"This file is @generated automatically"
|
||||||
],
|
],
|
||||||
"hash": "29ea55613191818528056f73ac659e20",
|
"hash": "796d45b3f4f6323302ad5e3c26545cb3",
|
||||||
"content-hash": "ce72fbc116b66a47e04e66357ac173ce",
|
"content-hash": "6fb7e8cc79bc78343a4854b1cafe547b",
|
||||||
"packages": [
|
"packages": [
|
||||||
{
|
{
|
||||||
"name": "erusev/parsedown",
|
"name": "erusev/parsedown",
|
||||||
|
@ -47,48 +47,50 @@
|
||||||
"time": "2015-10-04 16:44:32"
|
"time": "2015-10-04 16:44:32"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "ezyang/htmlpurifier",
|
"name": "jbbcode/jbbcode",
|
||||||
"version": "v4.7.0",
|
"version": "v1.3.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/ezyang/htmlpurifier.git",
|
"url": "https://github.com/jbowens/jBBCode.git",
|
||||||
"reference": "ae1828d955112356f7677c465f94f7deb7d27a40"
|
"reference": "645b6a1c0afa92b7d029d3417ebd8b60a5c578b3"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/ae1828d955112356f7677c465f94f7deb7d27a40",
|
"url": "https://api.github.com/repos/jbowens/jBBCode/zipball/645b6a1c0afa92b7d029d3417ebd8b60a5c578b3",
|
||||||
"reference": "ae1828d955112356f7677c465f94f7deb7d27a40",
|
"reference": "645b6a1c0afa92b7d029d3417ebd8b60a5c578b3",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": ">=5.2"
|
"php": ">=5.3.0"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"phpunit/phpunit": "3.7.*"
|
||||||
},
|
},
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-0": {
|
"psr-0": {
|
||||||
"HTMLPurifier": "library/"
|
"JBBCode": "."
|
||||||
},
|
}
|
||||||
"files": [
|
|
||||||
"library/HTMLPurifier.composer.php"
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
"notification-url": "https://packagist.org/downloads/",
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
"license": [
|
"license": [
|
||||||
"LGPL"
|
"MIT"
|
||||||
],
|
],
|
||||||
"authors": [
|
"authors": [
|
||||||
{
|
{
|
||||||
"name": "Edward Z. Yang",
|
"name": "Jackson Owens",
|
||||||
"email": "admin@htmlpurifier.org",
|
"email": "jackson_owens@alumni.brown.edu",
|
||||||
"homepage": "http://ezyang.com"
|
"homepage": "http://jbowens.org/",
|
||||||
|
"role": "Developer"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"description": "Standards compliant HTML filter written in PHP",
|
"description": "A lightweight but extensible BBCode parser written in PHP 5.3.",
|
||||||
"homepage": "http://htmlpurifier.org/",
|
"homepage": "http://jbbcode.com/",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"html"
|
"BB",
|
||||||
|
"bbcode"
|
||||||
],
|
],
|
||||||
"time": "2015-08-05 01:03:42"
|
"time": "2014-07-06 05:48:20"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "paypal/rest-api-sdk-php",
|
"name": "paypal/rest-api-sdk-php",
|
||||||
|
|
0
_sakura/config/cloudflare.ipv4
Executable file → Normal file
0
_sakura/config/cloudflare.ipv4
Executable file → Normal file
0
_sakura/config/cloudflare.ipv6
Executable file → Normal file
0
_sakura/config/cloudflare.ipv6
Executable file → Normal file
0
_sakura/config/config.example.ini
Executable file → Normal file
0
_sakura/config/config.example.ini
Executable file → Normal file
0
_sakura/config/iso3166.json
Executable file → Normal file
0
_sakura/config/iso3166.json
Executable file → Normal file
0
_sakura/config/whois.json
Executable file → Normal file
0
_sakura/config/whois.json
Executable file → Normal file
0
_sakura/cron.php
Executable file → Normal file
0
_sakura/cron.php
Executable file → Normal file
8
_sakura/sakura.php
Executable file → Normal file
8
_sakura/sakura.php
Executable file → Normal file
|
@ -8,7 +8,7 @@
|
||||||
namespace Sakura;
|
namespace Sakura;
|
||||||
|
|
||||||
// Define Sakura version
|
// Define Sakura version
|
||||||
define('SAKURA_VERSION', '20151125');
|
define('SAKURA_VERSION', '20151202');
|
||||||
define('SAKURA_VLABEL', 'Eminence');
|
define('SAKURA_VLABEL', 'Eminence');
|
||||||
define('SAKURA_COLOUR', '#6C3082');
|
define('SAKURA_COLOUR', '#6C3082');
|
||||||
define('SAKURA_STABLE', false);
|
define('SAKURA_STABLE', false);
|
||||||
|
@ -32,6 +32,7 @@ require_once ROOT . '_sakura/vendor/autoload.php';
|
||||||
|
|
||||||
// Include components
|
// Include components
|
||||||
require_once ROOT . '_sakura/components/Bans.php';
|
require_once ROOT . '_sakura/components/Bans.php';
|
||||||
|
require_once ROOT . '_sakura/components/BBcode.php';
|
||||||
require_once ROOT . '_sakura/components/Comments.php';
|
require_once ROOT . '_sakura/components/Comments.php';
|
||||||
require_once ROOT . '_sakura/components/Config.php';
|
require_once ROOT . '_sakura/components/Config.php';
|
||||||
require_once ROOT . '_sakura/components/Database.php';
|
require_once ROOT . '_sakura/components/Database.php';
|
||||||
|
@ -50,9 +51,6 @@ require_once ROOT . '_sakura/components/Urls.php';
|
||||||
require_once ROOT . '_sakura/components/User.php';
|
require_once ROOT . '_sakura/components/User.php';
|
||||||
require_once ROOT . '_sakura/components/Users.php';
|
require_once ROOT . '_sakura/components/Users.php';
|
||||||
require_once ROOT . '_sakura/components/Whois.php';
|
require_once ROOT . '_sakura/components/Whois.php';
|
||||||
require_once ROOT . '_sakura/components/BBcode/BBcode.php';
|
|
||||||
require_once ROOT . '_sakura/components/BBcode/Parse.php';
|
|
||||||
require_once ROOT . '_sakura/components/BBcode/Store.php';
|
|
||||||
require_once ROOT . '_sakura/components/Forum/Forum.php';
|
require_once ROOT . '_sakura/components/Forum/Forum.php';
|
||||||
require_once ROOT . '_sakura/components/Forum/Forums.php';
|
require_once ROOT . '_sakura/components/Forum/Forums.php';
|
||||||
require_once ROOT . '_sakura/components/Forum/Post.php';
|
require_once ROOT . '_sakura/components/Forum/Post.php';
|
||||||
|
@ -184,11 +182,9 @@ if (!defined('SAKURA_NO_TPL')) {
|
||||||
if (Config::getConfig('site_closed')) {
|
if (Config::getConfig('site_closed')) {
|
||||||
// Additional render data
|
// Additional render data
|
||||||
$renderData = array_merge($renderData, [
|
$renderData = array_merge($renderData, [
|
||||||
|
|
||||||
'page' => [
|
'page' => [
|
||||||
'message' => Config::getConfig('site_closed_reason'),
|
'message' => Config::getConfig('site_closed_reason'),
|
||||||
],
|
],
|
||||||
|
|
||||||
]);
|
]);
|
||||||
|
|
||||||
// Initialise templating engine
|
// Initialise templating engine
|
||||||
|
|
0
_sakura/templates/broomcloset/global/master.tpl
Executable file → Normal file
0
_sakura/templates/broomcloset/global/master.tpl
Executable file → Normal file
0
_sakura/templates/broomcloset/global/restricted.tpl
Executable file → Normal file
0
_sakura/templates/broomcloset/global/restricted.tpl
Executable file → Normal file
0
_sakura/templates/broomcloset/pages/general.configuration.tpl
Executable file → Normal file
0
_sakura/templates/broomcloset/pages/general.configuration.tpl
Executable file → Normal file
0
_sakura/templates/broomcloset/pages/index.dashboard.tpl
Executable file → Normal file
0
_sakura/templates/broomcloset/pages/index.dashboard.tpl
Executable file → Normal file
0
_sakura/templates/broomcloset/pages/index.error.tpl
Executable file → Normal file
0
_sakura/templates/broomcloset/pages/index.error.tpl
Executable file → Normal file
0
_sakura/templates/broomcloset/template.ini
Executable file → Normal file
0
_sakura/templates/broomcloset/template.ini
Executable file → Normal file
0
_sakura/templates/htmlEmail.tpl
Executable file → Normal file
0
_sakura/templates/htmlEmail.tpl
Executable file → Normal file
0
_sakura/templates/mio/elements/newsPost.tpl
Executable file → Normal file
0
_sakura/templates/mio/elements/newsPost.tpl
Executable file → Normal file
0
_sakura/templates/mio/global/footer.tpl
Executable file → Normal file
0
_sakura/templates/mio/global/footer.tpl
Executable file → Normal file
0
_sakura/templates/mio/global/header.tpl
Executable file → Normal file
0
_sakura/templates/mio/global/header.tpl
Executable file → Normal file
0
_sakura/templates/mio/main/index.tpl
Executable file → Normal file
0
_sakura/templates/mio/main/index.tpl
Executable file → Normal file
0
_sakura/templates/mio/template.ini
Executable file → Normal file
0
_sakura/templates/mio/template.ini
Executable file → Normal file
0
_sakura/templates/misaki/elements/newsPost.tpl
Executable file → Normal file
0
_sakura/templates/misaki/elements/newsPost.tpl
Executable file → Normal file
0
_sakura/templates/misaki/elements/settingsNavigation.tpl
Executable file → Normal file
0
_sakura/templates/misaki/elements/settingsNavigation.tpl
Executable file → Normal file
0
_sakura/templates/misaki/elements/statsHeader.tpl
Executable file → Normal file
0
_sakura/templates/misaki/elements/statsHeader.tpl
Executable file → Normal file
0
_sakura/templates/misaki/global/information.tpl
Executable file → Normal file
0
_sakura/templates/misaki/global/information.tpl
Executable file → Normal file
0
_sakura/templates/misaki/global/master.tpl
Executable file → Normal file
0
_sakura/templates/misaki/global/master.tpl
Executable file → Normal file
0
_sakura/templates/misaki/global/notfound.tpl
Executable file → Normal file
0
_sakura/templates/misaki/global/notfound.tpl
Executable file → Normal file
0
_sakura/templates/misaki/main/index.tpl
Executable file → Normal file
0
_sakura/templates/misaki/main/index.tpl
Executable file → Normal file
0
_sakura/templates/misaki/main/infopage.tpl
Executable file → Normal file
0
_sakura/templates/misaki/main/infopage.tpl
Executable file → Normal file
0
_sakura/templates/misaki/main/profile.tpl
Executable file → Normal file
0
_sakura/templates/misaki/main/profile.tpl
Executable file → Normal file
0
_sakura/templates/misaki/main/search.tpl
Executable file → Normal file
0
_sakura/templates/misaki/main/search.tpl
Executable file → Normal file
0
_sakura/templates/misaki/main/settings.tpl
Executable file → Normal file
0
_sakura/templates/misaki/main/settings.tpl
Executable file → Normal file
0
_sakura/templates/misaki/profile/index.tpl
Executable file → Normal file
0
_sakura/templates/misaki/profile/index.tpl
Executable file → Normal file
0
_sakura/templates/misaki/settings/general.home.tpl
Executable file → Normal file
0
_sakura/templates/misaki/settings/general.home.tpl
Executable file → Normal file
0
_sakura/templates/misaki/settings/general.options.tpl
Executable file → Normal file
0
_sakura/templates/misaki/settings/general.options.tpl
Executable file → Normal file
0
_sakura/templates/misaki/template.ini
Executable file → Normal file
0
_sakura/templates/misaki/template.ini
Executable file → Normal file
0
_sakura/templates/yuuno/elements/captcha.tpl
Executable file → Normal file
0
_sakura/templates/yuuno/elements/captcha.tpl
Executable file → Normal file
0
_sakura/templates/yuuno/elements/comment.tpl
Executable file → Normal file
0
_sakura/templates/yuuno/elements/comment.tpl
Executable file → Normal file
0
_sakura/templates/yuuno/elements/comments.tpl
Executable file → Normal file
0
_sakura/templates/yuuno/elements/comments.tpl
Executable file → Normal file
0
_sakura/templates/yuuno/elements/indexPanel.tpl
Executable file → Normal file
0
_sakura/templates/yuuno/elements/indexPanel.tpl
Executable file → Normal file
0
_sakura/templates/yuuno/elements/newsPost.tpl
Executable file → Normal file
0
_sakura/templates/yuuno/elements/newsPost.tpl
Executable file → Normal file
2
_sakura/templates/yuuno/elements/pagination.tpl
Executable file → Normal file
2
_sakura/templates/yuuno/elements/pagination.tpl
Executable file → Normal file
|
@ -1,4 +1,4 @@
|
||||||
{% set paginationSeparator %}{% if '?' in paginationUrl %}&{% else %}?{% endif %}{% endset %}
|
{% set paginationSeparator %}{% if '%3F' in paginationUrl|url_encode %}&{% else %}?{% endif %}{% endset %}
|
||||||
{% set paginationPage = get.page|default(1) %}
|
{% set paginationPage = get.page|default(1) %}
|
||||||
|
|
||||||
<div class="pagination{% if paginationClass %} {{ paginationClass }}{% endif %}">
|
<div class="pagination{% if paginationClass %} {{ paginationClass }}{% endif %}">
|
||||||
|
|
0
_sakura/templates/yuuno/elements/settingsNav.tpl
Executable file → Normal file
0
_sakura/templates/yuuno/elements/settingsNav.tpl
Executable file → Normal file
0
_sakura/templates/yuuno/forum/forum.tpl
Executable file → Normal file
0
_sakura/templates/yuuno/forum/forum.tpl
Executable file → Normal file
0
_sakura/templates/yuuno/forum/forumBtns.tpl
Executable file → Normal file
0
_sakura/templates/yuuno/forum/forumBtns.tpl
Executable file → Normal file
0
_sakura/templates/yuuno/forum/forumEntry.tpl
Executable file → Normal file
0
_sakura/templates/yuuno/forum/forumEntry.tpl
Executable file → Normal file
0
_sakura/templates/yuuno/forum/index.tpl
Executable file → Normal file
0
_sakura/templates/yuuno/forum/index.tpl
Executable file → Normal file
0
_sakura/templates/yuuno/forum/posting.tpl
Executable file → Normal file
0
_sakura/templates/yuuno/forum/posting.tpl
Executable file → Normal file
0
_sakura/templates/yuuno/forum/topicEntry.tpl
Executable file → Normal file
0
_sakura/templates/yuuno/forum/topicEntry.tpl
Executable file → Normal file
0
_sakura/templates/yuuno/forum/viewforum.tpl
Executable file → Normal file
0
_sakura/templates/yuuno/forum/viewforum.tpl
Executable file → Normal file
0
_sakura/templates/yuuno/forum/viewtopic.tpl
Executable file → Normal file
0
_sakura/templates/yuuno/forum/viewtopic.tpl
Executable file → Normal file
0
_sakura/templates/yuuno/global/chat.tpl
Executable file → Normal file
0
_sakura/templates/yuuno/global/chat.tpl
Executable file → Normal file
0
_sakura/templates/yuuno/global/information.tpl
Executable file → Normal file
0
_sakura/templates/yuuno/global/information.tpl
Executable file → Normal file
0
_sakura/templates/yuuno/global/master.tpl
Executable file → Normal file
0
_sakura/templates/yuuno/global/master.tpl
Executable file → Normal file
0
_sakura/templates/yuuno/global/notfound.tpl
Executable file → Normal file
0
_sakura/templates/yuuno/global/notfound.tpl
Executable file → Normal file
0
_sakura/templates/yuuno/global/restricted.tpl
Executable file → Normal file
0
_sakura/templates/yuuno/global/restricted.tpl
Executable file → Normal file
0
_sakura/templates/yuuno/group/index.tpl
Executable file → Normal file
0
_sakura/templates/yuuno/group/index.tpl
Executable file → Normal file
0
_sakura/templates/yuuno/main/authenticate.tpl
Executable file → Normal file
0
_sakura/templates/yuuno/main/authenticate.tpl
Executable file → Normal file
0
_sakura/templates/yuuno/main/banned.tpl
Executable file → Normal file
0
_sakura/templates/yuuno/main/banned.tpl
Executable file → Normal file
0
_sakura/templates/yuuno/main/faq.tpl
Executable file → Normal file
0
_sakura/templates/yuuno/main/faq.tpl
Executable file → Normal file
0
_sakura/templates/yuuno/main/forgotpassword.tpl
Executable file → Normal file
0
_sakura/templates/yuuno/main/forgotpassword.tpl
Executable file → Normal file
0
_sakura/templates/yuuno/main/index.tpl
Executable file → Normal file
0
_sakura/templates/yuuno/main/index.tpl
Executable file → Normal file
0
_sakura/templates/yuuno/main/infopage.tpl
Executable file → Normal file
0
_sakura/templates/yuuno/main/infopage.tpl
Executable file → Normal file
0
_sakura/templates/yuuno/main/memberlist.tpl
Executable file → Normal file
0
_sakura/templates/yuuno/main/memberlist.tpl
Executable file → Normal file
0
_sakura/templates/yuuno/main/news.tpl
Executable file → Normal file
0
_sakura/templates/yuuno/main/news.tpl
Executable file → Normal file
0
_sakura/templates/yuuno/main/premiumcomplete.tpl
Executable file → Normal file
0
_sakura/templates/yuuno/main/premiumcomplete.tpl
Executable file → Normal file
0
_sakura/templates/yuuno/main/profile.tpl
Executable file → Normal file
0
_sakura/templates/yuuno/main/profile.tpl
Executable file → Normal file
0
_sakura/templates/yuuno/main/report.tpl
Executable file → Normal file
0
_sakura/templates/yuuno/main/report.tpl
Executable file → Normal file
0
_sakura/templates/yuuno/main/search.tpl
Executable file → Normal file
0
_sakura/templates/yuuno/main/search.tpl
Executable file → Normal file
Some files were not shown because too many files have changed in this diff Show more
Reference in a new issue