r20160204
This commit is contained in:
parent
38ddeb2a52
commit
7bf64954ec
23 changed files with 537 additions and 728 deletions
|
@ -1,65 +0,0 @@
|
||||||
<?php
|
|
||||||
/**
|
|
||||||
* Holds the forum pages controllers.
|
|
||||||
*
|
|
||||||
* @package Sakura
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace Sakura\Controllers;
|
|
||||||
|
|
||||||
use Sakura\Config;
|
|
||||||
use Sakura\Database;
|
|
||||||
use Sakura\Forum as ForumData;
|
|
||||||
use Sakura\Perms\Forum as ForumPerms;
|
|
||||||
use Sakura\Template;
|
|
||||||
use Sakura\User;
|
|
||||||
use Sakura\Users;
|
|
||||||
use Sakura\Utils;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Forum page controllers.
|
|
||||||
*
|
|
||||||
* @package Sakura
|
|
||||||
* @author Julian van de Groep <me@flash.moe>
|
|
||||||
*/
|
|
||||||
class Forum
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Serves the forum index.
|
|
||||||
*
|
|
||||||
* @return mixed HTML for the forum index.
|
|
||||||
*/
|
|
||||||
public static function index()
|
|
||||||
{
|
|
||||||
// Get the global renderData
|
|
||||||
global $renderData;
|
|
||||||
|
|
||||||
// Initialise templating engine
|
|
||||||
$template = new Template();
|
|
||||||
|
|
||||||
// Merge index specific stuff with the global render data
|
|
||||||
$renderData = array_merge(
|
|
||||||
$renderData,
|
|
||||||
[
|
|
||||||
'forum' => (new ForumData\Forum()),
|
|
||||||
'stats' => [
|
|
||||||
'userCount' => Database::count('users', ['password_algo' => ['nologin', '!='], 'rank_main' => ['1', '!=']])[0],
|
|
||||||
'newestUser' => User::construct(Users::getNewestUserId()),
|
|
||||||
'lastRegData' => date_diff(
|
|
||||||
date_create(date('Y-m-d', User::construct(Users::getNewestUserId())->registered)),
|
|
||||||
date_create(date('Y-m-d'))
|
|
||||||
)->format('%a'),
|
|
||||||
'topicCount' => Database::count('topics')[0],
|
|
||||||
'postCount' => Database::count('posts')[0],
|
|
||||||
'onlineUsers' => Users::checkAllOnline(),
|
|
||||||
],
|
|
||||||
]
|
|
||||||
);
|
|
||||||
|
|
||||||
// Set parse variables
|
|
||||||
$template->setVariables($renderData);
|
|
||||||
|
|
||||||
// Return the compiled page
|
|
||||||
return $template->render('forum/index');
|
|
||||||
}
|
|
||||||
}
|
|
134
libraries/Controllers/Forums.php
Normal file
134
libraries/Controllers/Forums.php
Normal file
|
@ -0,0 +1,134 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Holds the forum pages controllers.
|
||||||
|
*
|
||||||
|
* @package Sakura
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Sakura\Controllers;
|
||||||
|
|
||||||
|
use Sakura\Config;
|
||||||
|
use Sakura\Database;
|
||||||
|
use Sakura\Forum;
|
||||||
|
use Sakura\Perms\Forum as ForumPerms;
|
||||||
|
use Sakura\Template;
|
||||||
|
use Sakura\User;
|
||||||
|
use Sakura\Users;
|
||||||
|
use Sakura\Utils;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Forum page controllers.
|
||||||
|
*
|
||||||
|
* @package Sakura
|
||||||
|
* @author Julian van de Groep <me@flash.moe>
|
||||||
|
*/
|
||||||
|
class Forums
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Serves the forum index.
|
||||||
|
*
|
||||||
|
* @return mixed HTML for the forum index.
|
||||||
|
*/
|
||||||
|
public static function index()
|
||||||
|
{
|
||||||
|
// Merge index specific stuff with the global render data
|
||||||
|
Template::vars([
|
||||||
|
'forum' => (new Forum\Forum()),
|
||||||
|
'stats' => [
|
||||||
|
'userCount' => Database::count('users', ['password_algo' => ['nologin', '!='], 'rank_main' => ['1', '!=']])[0],
|
||||||
|
'newestUser' => User::construct(Users::getNewestUserId()),
|
||||||
|
'lastRegData' => date_diff(
|
||||||
|
date_create(date('Y-m-d', User::construct(Users::getNewestUserId())->registered)),
|
||||||
|
date_create(date('Y-m-d'))
|
||||||
|
)->format('%a'),
|
||||||
|
'topicCount' => Database::count('topics')[0],
|
||||||
|
'postCount' => Database::count('posts')[0],
|
||||||
|
'onlineUsers' => Users::checkAllOnline(),
|
||||||
|
],
|
||||||
|
]);
|
||||||
|
|
||||||
|
// Return the compiled page
|
||||||
|
return Template::render('forum/index');
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function forum($id = 0)
|
||||||
|
{
|
||||||
|
global $currentUser;
|
||||||
|
|
||||||
|
// Get the forum
|
||||||
|
$forum = new Forum\Forum($id);
|
||||||
|
|
||||||
|
// Redirect forum id 0 to the main page
|
||||||
|
if ($forum->id === 0) {
|
||||||
|
header('Location: ' . (new \Sakura\Urls)->format('FORUM_INDEX'));
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check if the forum exists
|
||||||
|
if ($forum->id < 0) {
|
||||||
|
// Set render data
|
||||||
|
Template::vars([
|
||||||
|
'page' => [
|
||||||
|
'message' => 'The forum you tried to access does not exist.',
|
||||||
|
],
|
||||||
|
]);
|
||||||
|
|
||||||
|
// Print page contents
|
||||||
|
return Template::render('global/information');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check if the user has access to the forum
|
||||||
|
if (!$forum->permission(ForumPerms::VIEW, $currentUser->id)) {
|
||||||
|
// Set render data
|
||||||
|
Template::vars([
|
||||||
|
'page' => [
|
||||||
|
'message' => 'You do not have access to this forum.',
|
||||||
|
],
|
||||||
|
]);
|
||||||
|
|
||||||
|
// Print page contents
|
||||||
|
return Template::render('global/information');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check if the forum isn't a link
|
||||||
|
if ($forum->type === 2) {
|
||||||
|
// Set render data
|
||||||
|
Template::vars([
|
||||||
|
'page' => [
|
||||||
|
'message' => 'The forum you tried to access is a link. You\'re being redirected.',
|
||||||
|
'redirect' => $forum->link,
|
||||||
|
]
|
||||||
|
]);
|
||||||
|
|
||||||
|
// Print page contents
|
||||||
|
return Template::render('global/information');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check if we're marking as read
|
||||||
|
if (isset($_GET['read']) && $_GET['read'] && isset($_GET['session']) && $_GET['session'] == session_id()) {
|
||||||
|
// Run the function
|
||||||
|
$forum->trackUpdateAll($currentUser->id);
|
||||||
|
|
||||||
|
// Set render data
|
||||||
|
Template::vars([
|
||||||
|
'page' => [
|
||||||
|
'message' => 'All threads have been marked as read.',
|
||||||
|
'redirect' => (new \Sakura\Urls)->format('FORUM_SUB', [$forum->id]),
|
||||||
|
]
|
||||||
|
]);
|
||||||
|
|
||||||
|
// Print page contents
|
||||||
|
return Template::render('global/information');
|
||||||
|
}
|
||||||
|
|
||||||
|
$renderData['forum'] = $forum;
|
||||||
|
|
||||||
|
// Set parse variables
|
||||||
|
Template::vars([
|
||||||
|
'forum' => $forum,
|
||||||
|
]);
|
||||||
|
|
||||||
|
// Print page contents
|
||||||
|
return Template::render('forum/viewforum');
|
||||||
|
}
|
||||||
|
}
|
|
@ -30,37 +30,25 @@ class Meta
|
||||||
*/
|
*/
|
||||||
public static function index()
|
public static function index()
|
||||||
{
|
{
|
||||||
// Get the global renderData
|
|
||||||
global $renderData;
|
|
||||||
|
|
||||||
// Initialise templating engine
|
|
||||||
$template = new Template();
|
|
||||||
|
|
||||||
// Merge index specific stuff with the global render data
|
// Merge index specific stuff with the global render data
|
||||||
$renderData = array_merge(
|
Template::vars([
|
||||||
$renderData,
|
'news' => new News(Config::get('site_news_category')),
|
||||||
[
|
'newsCount' => Config::get('front_page_news_posts'),
|
||||||
'news' => new News(Config::get('site_news_category')),
|
'stats' => [
|
||||||
'newsCount' => Config::get('front_page_news_posts'),
|
'userCount' => Database::count('users', ['password_algo' => ['nologin', '!='], 'rank_main' => ['1', '!=']])[0],
|
||||||
'stats' => [
|
'newestUser' => User::construct(Users::getNewestUserId()),
|
||||||
'userCount' => Database::count('users', ['password_algo' => ['nologin', '!='], 'rank_main' => ['1', '!=']])[0],
|
'lastRegDate' => date_diff(
|
||||||
'newestUser' => User::construct(Users::getNewestUserId()),
|
date_create(date('Y-m-d', User::construct(Users::getNewestUserId())->registered)),
|
||||||
'lastRegDate' => date_diff(
|
date_create(date('Y-m-d'))
|
||||||
date_create(date('Y-m-d', User::construct(Users::getNewestUserId())->registered)),
|
)->format('%a'),
|
||||||
date_create(date('Y-m-d'))
|
'topicCount' => Database::count('topics')[0],
|
||||||
)->format('%a'),
|
'postCount' => Database::count('posts')[0],
|
||||||
'topicCount' => Database::count('topics')[0],
|
'onlineUsers' => Users::checkAllOnline(),
|
||||||
'postCount' => Database::count('posts')[0],
|
],
|
||||||
'onlineUsers' => Users::checkAllOnline(),
|
]);
|
||||||
],
|
|
||||||
]
|
|
||||||
);
|
|
||||||
|
|
||||||
// Set parse variables
|
|
||||||
$template->setVariables($renderData);
|
|
||||||
|
|
||||||
// Return the compiled page
|
// Return the compiled page
|
||||||
return $template->render('main/index');
|
return Template::render('main/index');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -70,9 +58,6 @@ class Meta
|
||||||
*/
|
*/
|
||||||
public static function news()
|
public static function news()
|
||||||
{
|
{
|
||||||
// Get the global renderData
|
|
||||||
global $renderData;
|
|
||||||
|
|
||||||
// Get arguments
|
// Get arguments
|
||||||
$args = func_get_args();
|
$args = func_get_args();
|
||||||
$category = isset($args[0]) && !is_numeric($args[0]) ? $args[0] : Config::get('site_news_category');
|
$category = isset($args[0]) && !is_numeric($args[0]) ? $args[0] : Config::get('site_news_category');
|
||||||
|
@ -83,22 +68,16 @@ class Meta
|
||||||
// Create news object
|
// Create news object
|
||||||
$news = new News($category);
|
$news = new News($category);
|
||||||
|
|
||||||
// Merge the data for this page with the global
|
// Set parse variables
|
||||||
$renderData = array_merge($renderData, [
|
Template::vars([
|
||||||
'news' => $news,
|
'news' => $news,
|
||||||
'postsPerPage' => Config::get('news_posts_per_page'),
|
'postsPerPage' => Config::get('news_posts_per_page'),
|
||||||
'viewPost' => $post != 0,
|
'viewPost' => $post != 0,
|
||||||
'postExists' => $news->postExists($post),
|
'postExists' => $news->postExists($post),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
// Initialise templating engine
|
|
||||||
$template = new Template();
|
|
||||||
|
|
||||||
// Set parse variables
|
|
||||||
$template->setVariables($renderData);
|
|
||||||
|
|
||||||
// Print page contents
|
// Print page contents
|
||||||
return $template->render('main/news');
|
return Template::render('main/news');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -108,23 +87,16 @@ class Meta
|
||||||
*/
|
*/
|
||||||
public static function faq()
|
public static function faq()
|
||||||
{
|
{
|
||||||
// Get the global renderData
|
|
||||||
global $renderData;
|
|
||||||
|
|
||||||
// Add page specific things
|
|
||||||
$renderData['page'] = [
|
|
||||||
'title' => 'Frequently Asked Questions',
|
|
||||||
'questions' => Utils::getFaqData(),
|
|
||||||
];
|
|
||||||
|
|
||||||
// Initialise templating engine
|
|
||||||
$template = new Template();
|
|
||||||
|
|
||||||
// Set parse variables
|
// Set parse variables
|
||||||
$template->setVariables($renderData);
|
Template::vars([
|
||||||
|
'page' => [
|
||||||
|
'title' => 'Frequently Asked Questions',
|
||||||
|
'questions' => Utils::getFaqData(),
|
||||||
|
],
|
||||||
|
]);
|
||||||
|
|
||||||
// Print page contents
|
// Print page contents
|
||||||
return $template->render('main/faq');
|
return Template::render('main/faq');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -136,12 +108,6 @@ class Meta
|
||||||
*/
|
*/
|
||||||
public static function infoPage($id = null)
|
public static function infoPage($id = null)
|
||||||
{
|
{
|
||||||
// Get the global renderData
|
|
||||||
global $renderData;
|
|
||||||
|
|
||||||
// Initialise templating engine
|
|
||||||
$template = new Template();
|
|
||||||
|
|
||||||
// Set default variables
|
// Set default variables
|
||||||
$renderData['page'] = [
|
$renderData['page'] = [
|
||||||
'content' => '<h1>Unable to load the requested info page.</h1><p>Check the URL and try again.</p>',
|
'content' => '<h1>Unable to load the requested info page.</h1><p>Check the URL and try again.</p>',
|
||||||
|
@ -161,10 +127,10 @@ class Meta
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set parse variables
|
// Set parse variables
|
||||||
$template->setVariables($renderData);
|
Template::vars($renderData);
|
||||||
|
|
||||||
// Return the compiled page
|
// Return the compiled page
|
||||||
return $template->render('main/infopage');
|
return Template::render('main/infopage');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -174,21 +140,14 @@ class Meta
|
||||||
*/
|
*/
|
||||||
public static function search()
|
public static function search()
|
||||||
{
|
{
|
||||||
// Get the global renderData
|
|
||||||
global $renderData;
|
|
||||||
|
|
||||||
// Add page specific things
|
|
||||||
$renderData['page'] = [
|
|
||||||
'title' => 'Search',
|
|
||||||
];
|
|
||||||
|
|
||||||
// Initialise templating engine
|
|
||||||
$template = new Template();
|
|
||||||
|
|
||||||
// Set parse variables
|
// Set parse variables
|
||||||
$template->setVariables($renderData);
|
Template::vars([
|
||||||
|
'page' => [
|
||||||
|
'title' => 'Search',
|
||||||
|
],
|
||||||
|
]);
|
||||||
|
|
||||||
// Print page contents
|
// Print page contents
|
||||||
return $template->render('main/search');
|
return Template::render('main/search');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
110
libraries/Controllers/User.php
Normal file
110
libraries/Controllers/User.php
Normal file
|
@ -0,0 +1,110 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Holds the user page controllers.
|
||||||
|
*
|
||||||
|
* @package Sakura
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Sakura\Controllers;
|
||||||
|
|
||||||
|
use Sakura\Config;
|
||||||
|
use Sakura\Database;
|
||||||
|
use Sakura\Template;
|
||||||
|
use Sakura\User as UserContext;
|
||||||
|
use Sakura\Utils;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Everything that is just for serving user data.
|
||||||
|
*
|
||||||
|
* @package Sakura
|
||||||
|
* @author Julian van de Groep <me@flash.moe>
|
||||||
|
*/
|
||||||
|
class User
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Display the profile of a user
|
||||||
|
*
|
||||||
|
* @param mixed $id The user ID.
|
||||||
|
*
|
||||||
|
* @return bool|string The profile page.
|
||||||
|
*/
|
||||||
|
public static function profile($id = 0)
|
||||||
|
{
|
||||||
|
global $currentUser;
|
||||||
|
|
||||||
|
// Get the user's context
|
||||||
|
$profile = UserContext::construct($id);
|
||||||
|
|
||||||
|
// If the user id is zero check if there was a namechange
|
||||||
|
if ($profile->id == 0) {
|
||||||
|
// Fetch from username_history
|
||||||
|
$check = Database::fetch('username_history', false, ['username_old_clean' => [Utils::cleanString(isset($_GET['u']) ? $_GET['u'] : 0, true, true), '=']]);
|
||||||
|
|
||||||
|
// Redirect if so
|
||||||
|
if ($check) {
|
||||||
|
Template::vars([
|
||||||
|
'message' => 'The user this profile belongs to changed their username, you are being redirected.',
|
||||||
|
'redirect' => (new \Sakura\Urls)->format('USER_PROFILE', [$check['user_id']]),
|
||||||
|
]);
|
||||||
|
|
||||||
|
// Print page contents
|
||||||
|
return Template::render('global/information');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check if we're trying to restrict
|
||||||
|
if (isset($_GET['restrict']) && $_GET['restrict'] == session_id() && $currentUser->permission(\Sakura\Perms\Manage::CAN_RESTRICT_USERS, \Sakura\Perms::MANAGE)) {
|
||||||
|
// Check restricted status
|
||||||
|
$restricted = $profile->permission(\Sakura\Perms\Site::RESTRICTED);
|
||||||
|
|
||||||
|
if ($restricted) {
|
||||||
|
$profile->removeRanks([Config::get('restricted_rank_id')]);
|
||||||
|
$profile->addRanks([2]);
|
||||||
|
} else {
|
||||||
|
$profile->addRanks([Config::get('restricted_rank_id')]);
|
||||||
|
$profile->removeRanks(array_keys($profile->ranks));
|
||||||
|
}
|
||||||
|
|
||||||
|
Template::vars([
|
||||||
|
'page' => [
|
||||||
|
'message' => 'Toggled the restricted status of the user.',
|
||||||
|
'redirect' => (new \Sakura\Urls)->format('USER_PROFILE', [$profile->id]),
|
||||||
|
],
|
||||||
|
]);
|
||||||
|
|
||||||
|
// Print page contents
|
||||||
|
return Template::render('global/information');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set parse variables
|
||||||
|
Template::vars([
|
||||||
|
'profile' => $profile,
|
||||||
|
]);
|
||||||
|
|
||||||
|
// Print page contents
|
||||||
|
return Template::render('main/profile');
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function members($rank = 0)
|
||||||
|
{
|
||||||
|
global $currentUser;
|
||||||
|
|
||||||
|
// Check permission
|
||||||
|
if (!$currentUser->permission(\Sakura\Perms\Site::VIEW_MEMBERLIST)) {
|
||||||
|
return Template::render('global/restricted');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set parse variables
|
||||||
|
Template::vars([
|
||||||
|
'memberlist' => [
|
||||||
|
'ranks' => ($_MEMBERLIST_RANKS = \Sakura\Users::getAllRanks()),
|
||||||
|
'active' => ($_MEMBERLIST_ACTIVE = (array_key_exists($rank, $_MEMBERLIST_RANKS) ? $rank : 0)),
|
||||||
|
'users' => ($_MEMBERLIST_ACTIVE ? \Sakura\Users::getUsersInRank($_MEMBERLIST_ACTIVE) : \Sakura\Users::getAllUsers(false)),
|
||||||
|
'membersPerPage' => Config::get('members_per_page'),
|
||||||
|
]
|
||||||
|
]);
|
||||||
|
|
||||||
|
// Render the template
|
||||||
|
return Template::render('main/memberlist');
|
||||||
|
}
|
||||||
|
}
|
|
@ -7,8 +7,10 @@
|
||||||
|
|
||||||
namespace Sakura;
|
namespace Sakura;
|
||||||
|
|
||||||
use Phroute\Phroute\RouteCollector;
|
|
||||||
use Phroute\Phroute\Dispatcher;
|
use Phroute\Phroute\Dispatcher;
|
||||||
|
use Phroute\Phroute\Exception\HttpRouteNotFoundException;
|
||||||
|
use Phroute\Phroute\Exception\HttpMethodNotAllowedException;
|
||||||
|
use Phroute\Phroute\RouteCollector;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sakura Wrapper for Phroute.
|
* Sakura Wrapper for Phroute.
|
||||||
|
@ -108,6 +110,19 @@ class Router
|
||||||
return parse_url($url, PHP_URL_PATH);
|
return parse_url($url, PHP_URL_PATH);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generate the URI of a route using names.
|
||||||
|
*
|
||||||
|
* @param string $name The identifier of the route.
|
||||||
|
* @param string|array $args The route arguments.
|
||||||
|
*
|
||||||
|
* @return string The generated URI.
|
||||||
|
*/
|
||||||
|
public static function url($name, $args = null)
|
||||||
|
{
|
||||||
|
return self::$router->route($name, $args);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handle requests.
|
* Handle requests.
|
||||||
*
|
*
|
||||||
|
@ -127,6 +142,13 @@ class Router
|
||||||
$url = self::parseUrl($url);
|
$url = self::parseUrl($url);
|
||||||
|
|
||||||
// Handle the request
|
// Handle the request
|
||||||
return self::$dispatcher->dispatch($method, $url);
|
try {
|
||||||
|
try {
|
||||||
|
return self::$dispatcher->dispatch($method, $url);
|
||||||
|
} catch (HttpMethodNotAllowedException $e) {}
|
||||||
|
} catch (HttpRouteNotFoundException $e) {}
|
||||||
|
|
||||||
|
// Default to the not found page
|
||||||
|
return Template::render('global/notfound');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,51 +24,40 @@ class Template
|
||||||
*
|
*
|
||||||
* @var array
|
* @var array
|
||||||
*/
|
*/
|
||||||
private $vars = [];
|
private static $vars = [];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The templating engine.
|
* The templating engine.
|
||||||
*
|
*
|
||||||
* @var Twig_Environment
|
* @var Twig_Environment
|
||||||
*/
|
*/
|
||||||
private $template;
|
private static $template;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The template name.
|
* The template name.
|
||||||
*
|
*
|
||||||
* @var string
|
* @var string
|
||||||
*/
|
*/
|
||||||
private $templateName;
|
private static $templateName;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The template options.
|
* The template options.
|
||||||
*
|
*
|
||||||
* @var array
|
* @var array
|
||||||
*/
|
*/
|
||||||
private $templateOptions;
|
private static $templateOptions;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The file extension used by template files
|
* The file extension used by template files
|
||||||
*
|
|
||||||
* @var string
|
|
||||||
*/
|
*/
|
||||||
protected $templateFileExtension = ".twig";
|
const FILE_EXT = '.twig';
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructor.
|
|
||||||
*/
|
|
||||||
public function __construct()
|
|
||||||
{
|
|
||||||
// Set template to default
|
|
||||||
$this->setTemplate(Config::get('site_style'));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the template name.
|
* Set the template name.
|
||||||
*
|
*
|
||||||
* @param string $name The name of the template directory.
|
* @param string $name The name of the template directory.
|
||||||
*/
|
*/
|
||||||
public function setTemplate($name)
|
public static function set($name)
|
||||||
{
|
{
|
||||||
// Assign config path to a variable so we don't have to type it out twice
|
// Assign config path to a variable so we don't have to type it out twice
|
||||||
$confPath = ROOT . 'templates/' . $name . '/template.ini';
|
$confPath = ROOT . 'templates/' . $name . '/template.ini';
|
||||||
|
@ -79,22 +68,22 @@ class Template
|
||||||
}
|
}
|
||||||
|
|
||||||
// Parse and store the configuration
|
// Parse and store the configuration
|
||||||
$this->templateOptions = parse_ini_file($confPath, true);
|
self::$templateOptions = parse_ini_file($confPath, true);
|
||||||
|
|
||||||
// Set variables
|
// Set variables
|
||||||
$this->templateName = $name;
|
self::$templateName = $name;
|
||||||
|
|
||||||
// Reinitialise
|
// Reinitialise
|
||||||
$this->initTemplate();
|
self::init();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initialise the templating engine.
|
* Initialise the templating engine.
|
||||||
*/
|
*/
|
||||||
public function initTemplate()
|
public static function init()
|
||||||
{
|
{
|
||||||
// Initialise Twig Filesystem Loader
|
// Initialise Twig Filesystem Loader
|
||||||
$twigLoader = new Twig_Loader_Filesystem(ROOT . 'templates/' . $this->templateName);
|
$twigLoader = new Twig_Loader_Filesystem(ROOT . 'templates/' . self::$templateName);
|
||||||
|
|
||||||
// Environment variable
|
// Environment variable
|
||||||
$twigEnv = [];
|
$twigEnv = [];
|
||||||
|
@ -105,10 +94,10 @@ class Template
|
||||||
}
|
}
|
||||||
|
|
||||||
// And now actually initialise the templating engine
|
// And now actually initialise the templating engine
|
||||||
$this->template = new Twig_Environment($twigLoader, $twigEnv);
|
self::$template = new Twig_Environment($twigLoader, $twigEnv);
|
||||||
|
|
||||||
// Load String template loader
|
// Load String template loader
|
||||||
$this->template->addExtension(new Twig_Extension_StringLoader());
|
self::$template->addExtension(new Twig_Extension_StringLoader());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -116,9 +105,9 @@ class Template
|
||||||
*
|
*
|
||||||
* @param array $vars The new variables.
|
* @param array $vars The new variables.
|
||||||
*/
|
*/
|
||||||
public function setVariables($vars)
|
public static function vars($vars)
|
||||||
{
|
{
|
||||||
$this->vars = array_merge($this->vars, $vars);
|
self::$vars = array_merge(self::$vars, $vars);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -128,10 +117,10 @@ class Template
|
||||||
*
|
*
|
||||||
* @return bool|string An error or the HTML.
|
* @return bool|string An error or the HTML.
|
||||||
*/
|
*/
|
||||||
public function render($file)
|
public static function render($file)
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
return $this->template->render($file . $this->templateFileExtension, $this->vars);
|
return self::$template->render($file . self::FILE_EXT, self::$vars);
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
return trigger_error($e->getMessage(), E_USER_ERROR);
|
return trigger_error($e->getMessage(), E_USER_ERROR);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,25 +0,0 @@
|
||||||
<?php
|
|
||||||
/*
|
|
||||||
* Flashii.net Main Index
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Declare Namespace
|
|
||||||
namespace Sakura;
|
|
||||||
|
|
||||||
// Include components
|
|
||||||
require_once str_replace(basename(__DIR__), '', dirname(__FILE__)) . 'sakura.php';
|
|
||||||
|
|
||||||
// Set 404 header
|
|
||||||
header('HTTP/1.0 404 Not Found');
|
|
||||||
|
|
||||||
// Initialise templating engine
|
|
||||||
$template = new Template();
|
|
||||||
|
|
||||||
// Change templating engine
|
|
||||||
$template->setTemplate($templateName);
|
|
||||||
|
|
||||||
// Set parse variables
|
|
||||||
$template->setVariables($renderData);
|
|
||||||
|
|
||||||
// Print page contents
|
|
||||||
echo $template->render('global/notfound');
|
|
|
@ -9,12 +9,6 @@ namespace Sakura;
|
||||||
// Include components
|
// Include components
|
||||||
require_once str_replace(basename(__DIR__), '', dirname(__FILE__)) . 'sakura.php';
|
require_once str_replace(basename(__DIR__), '', dirname(__FILE__)) . 'sakura.php';
|
||||||
|
|
||||||
// Initialise templating engine
|
|
||||||
$template = new Template();
|
|
||||||
|
|
||||||
// Change templating engine
|
|
||||||
$template->setTemplate($templateName);
|
|
||||||
|
|
||||||
// Page actions
|
// Page actions
|
||||||
if (isset($_REQUEST['mode'])) {
|
if (isset($_REQUEST['mode'])) {
|
||||||
// Continue
|
// Continue
|
||||||
|
@ -108,7 +102,6 @@ if (isset($_REQUEST['mode'])) {
|
||||||
|
|
||||||
// Add page specific things
|
// Add page specific things
|
||||||
$renderData['page'] = [
|
$renderData['page'] = [
|
||||||
|
|
||||||
'redirect' => (
|
'redirect' => (
|
||||||
$passforget[0] ?
|
$passforget[0] ?
|
||||||
$urls->format('SITE_LOGIN') :
|
$urls->format('SITE_LOGIN') :
|
||||||
|
@ -116,7 +109,6 @@ if (isset($_REQUEST['mode'])) {
|
||||||
),
|
),
|
||||||
'message' => $messages[$passforget[1]],
|
'message' => $messages[$passforget[1]],
|
||||||
'success' => $passforget[0],
|
'success' => $passforget[0],
|
||||||
|
|
||||||
];
|
];
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -289,8 +281,8 @@ if (isset($_REQUEST['mode'])) {
|
||||||
$renderData['page']['success'] . '|' .
|
$renderData['page']['success'] . '|' .
|
||||||
$renderData['page']['redirect'];
|
$renderData['page']['redirect'];
|
||||||
} else {
|
} else {
|
||||||
$template->setVariables($renderData);
|
Template::vars($renderData);
|
||||||
echo $template->render('global/information');
|
echo Template::render('global/information');
|
||||||
}
|
}
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
@ -317,8 +309,8 @@ if (Users::checkLogin()) {
|
||||||
|
|
||||||
];
|
];
|
||||||
|
|
||||||
$template->setVariables($renderData);
|
Template::vars($renderData);
|
||||||
echo $template->render('global/information');
|
echo Template::render('global/information');
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -341,11 +333,11 @@ if (isset($_REQUEST['pw']) && $_REQUEST['pw']) {
|
||||||
$renderData['auth']['forgotKey'] = $_REQUEST['key'];
|
$renderData['auth']['forgotKey'] = $_REQUEST['key'];
|
||||||
}
|
}
|
||||||
|
|
||||||
$template->setVariables($renderData);
|
Template::vars($renderData);
|
||||||
echo $template->render('main/forgotpassword');
|
echo Template::render('main/forgotpassword');
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Print page contents
|
// Print page contents
|
||||||
$template->setVariables($renderData);
|
Template::vars($renderData);
|
||||||
echo $template->render('main/authenticate');
|
echo Template::render('main/authenticate');
|
||||||
|
|
|
@ -15,19 +15,13 @@ define('SAKURA_MANAGE', true);
|
||||||
// Include components
|
// Include components
|
||||||
require_once str_replace(basename(__DIR__), '', dirname(__FILE__)) . 'sakura.php';
|
require_once str_replace(basename(__DIR__), '', dirname(__FILE__)) . 'sakura.php';
|
||||||
|
|
||||||
// Initialise templating engine
|
|
||||||
$template = new Template();
|
|
||||||
|
|
||||||
// Change templating engine
|
|
||||||
$template->setTemplate($templateName);
|
|
||||||
|
|
||||||
// Make sure user has the permissions to view this
|
// Make sure user has the permissions to view this
|
||||||
if (!$currentUser->permission(Manage::USE_MANAGE, Perms::MANAGE)) {
|
if (!$currentUser->permission(Manage::USE_MANAGE, Perms::MANAGE)) {
|
||||||
// Set parse variables
|
// Set parse variables
|
||||||
$template->setVariables($renderData);
|
Template::vars($renderData);
|
||||||
|
|
||||||
// Print page contents
|
// Print page contents
|
||||||
echo $template->render('global/restricted');
|
echo Template::render('global/restricted');
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -268,10 +262,10 @@ if (!$category
|
||||||
header('HTTP/1.0 404 Not Found');
|
header('HTTP/1.0 404 Not Found');
|
||||||
|
|
||||||
// Set parse variables
|
// Set parse variables
|
||||||
$template->setVariables($renderData);
|
Template::vars($renderData);
|
||||||
|
|
||||||
// Print page contents
|
// Print page contents
|
||||||
echo $template->render('global/notfound');
|
echo Template::render('global/notfound');
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -313,7 +307,7 @@ switch ($category . '.' . $mode) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set parse variables
|
// Set parse variables
|
||||||
$template->setVariables($renderData);
|
Template::vars($renderData);
|
||||||
|
|
||||||
// Print page contents
|
// Print page contents
|
||||||
echo $template->render('main/settings');
|
echo Template::render('main/settings');
|
||||||
|
|
|
@ -1,43 +0,0 @@
|
||||||
<?php
|
|
||||||
/*
|
|
||||||
* Sakura Memberlist
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Declare Namespace
|
|
||||||
namespace Sakura;
|
|
||||||
|
|
||||||
// Include components
|
|
||||||
require_once str_replace(basename(__DIR__), '', dirname(__FILE__)) . 'sakura.php';
|
|
||||||
|
|
||||||
// Initialise templating engine
|
|
||||||
$template = new Template();
|
|
||||||
|
|
||||||
// Change templating engine
|
|
||||||
$template->setTemplate($templateName);
|
|
||||||
|
|
||||||
// CHeck if the user is logged in
|
|
||||||
if (Users::checkLogin()) {
|
|
||||||
// Add page specific things
|
|
||||||
$renderData['memberlist'] = [
|
|
||||||
'ranks' => ($_MEMBERLIST_RANKS = Users::getAllRanks()),
|
|
||||||
'active' => ($_MEMBERLIST_ACTIVE = (
|
|
||||||
isset($_GET['rank'])
|
|
||||||
&& $_GET['rank']
|
|
||||||
&& array_key_exists($_GET['rank'], $_MEMBERLIST_RANKS) ? $_GET['rank'] : 0
|
|
||||||
)),
|
|
||||||
'users' => ($_MEMBERLIST_ACTIVE ? Users::getUsersInRank($_MEMBERLIST_ACTIVE) : Users::getAllUsers(false)),
|
|
||||||
'membersPerPage' => Config::get('members_per_page'),
|
|
||||||
];
|
|
||||||
|
|
||||||
// Set parse variables
|
|
||||||
$template->setVariables($renderData);
|
|
||||||
|
|
||||||
// Print page contents
|
|
||||||
echo $template->render('main/memberlist');
|
|
||||||
} else {
|
|
||||||
// Set parse variables
|
|
||||||
$template->setVariables($renderData);
|
|
||||||
|
|
||||||
// Print page contents
|
|
||||||
echo $template->render('global/restricted');
|
|
||||||
}
|
|
|
@ -12,12 +12,6 @@ use Sakura\Perms\Forum as ForumPerms;
|
||||||
// Include components
|
// Include components
|
||||||
require_once str_replace(basename(__DIR__), '', dirname(__FILE__)) . 'sakura.php';
|
require_once str_replace(basename(__DIR__), '', dirname(__FILE__)) . 'sakura.php';
|
||||||
|
|
||||||
// Initialise templating engine
|
|
||||||
$template = new Template();
|
|
||||||
|
|
||||||
// Change templating engine
|
|
||||||
$template->setTemplate($templateName);
|
|
||||||
|
|
||||||
// Set location
|
// Set location
|
||||||
$topicId = isset($_GET['t']) ?
|
$topicId = isset($_GET['t']) ?
|
||||||
$_GET['t'] :
|
$_GET['t'] :
|
||||||
|
@ -48,10 +42,10 @@ if (!$forum->permission(ForumPerms::VIEW, $currentUser->id) || !$forum->permissi
|
||||||
];
|
];
|
||||||
|
|
||||||
// Set parse variables
|
// Set parse variables
|
||||||
$template->setVariables($renderData);
|
Template::vars($renderData);
|
||||||
|
|
||||||
// Print page contents
|
// Print page contents
|
||||||
echo $template->render('global/information');
|
echo Template::render('global/information');
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -64,10 +58,10 @@ if (!isset($thread) && !$forum->permission(ForumPerms::CREATE_THREADS, $currentU
|
||||||
];
|
];
|
||||||
|
|
||||||
// Set parse variables
|
// Set parse variables
|
||||||
$template->setVariables($renderData);
|
Template::vars($renderData);
|
||||||
|
|
||||||
// Print page contents
|
// Print page contents
|
||||||
echo $template->render('global/information');
|
echo Template::render('global/information');
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -92,10 +86,10 @@ if ($mode != 'f') {
|
||||||
];
|
];
|
||||||
|
|
||||||
// Set parse variables
|
// Set parse variables
|
||||||
$template->setVariables($renderData);
|
Template::vars($renderData);
|
||||||
|
|
||||||
// Print page contents
|
// Print page contents
|
||||||
echo $template->render('global/information');
|
echo Template::render('global/information');
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -108,10 +102,10 @@ if ($mode != 'f') {
|
||||||
];
|
];
|
||||||
|
|
||||||
// Set parse variables
|
// Set parse variables
|
||||||
$template->setVariables($renderData);
|
Template::vars($renderData);
|
||||||
|
|
||||||
// Print page contents
|
// Print page contents
|
||||||
echo $template->render('global/information');
|
echo Template::render('global/information');
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -134,10 +128,10 @@ if ($mode != 'f') {
|
||||||
];
|
];
|
||||||
|
|
||||||
// Set parse variables
|
// Set parse variables
|
||||||
$template->setVariables($renderData);
|
Template::vars($renderData);
|
||||||
|
|
||||||
// Print page contents
|
// Print page contents
|
||||||
echo $template->render('global/information');
|
echo Template::render('global/information');
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
// Checks
|
// Checks
|
||||||
|
@ -149,10 +143,10 @@ if ($mode != 'f') {
|
||||||
];
|
];
|
||||||
|
|
||||||
// Set parse variables
|
// Set parse variables
|
||||||
$template->setVariables($renderData);
|
Template::vars($renderData);
|
||||||
|
|
||||||
// Print page contents
|
// Print page contents
|
||||||
echo $template->render('global/information');
|
echo Template::render('global/information');
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -176,10 +170,10 @@ if ($mode != 'f') {
|
||||||
];
|
];
|
||||||
|
|
||||||
// Set parse variables
|
// Set parse variables
|
||||||
$template->setVariables($renderData);
|
Template::vars($renderData);
|
||||||
|
|
||||||
// Print page contents
|
// Print page contents
|
||||||
echo $template->render('global/information');
|
echo Template::render('global/information');
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -192,10 +186,10 @@ if ($mode != 'f') {
|
||||||
];
|
];
|
||||||
|
|
||||||
// Set parse variables
|
// Set parse variables
|
||||||
$template->setVariables($renderData);
|
Template::vars($renderData);
|
||||||
|
|
||||||
// Print page contents
|
// Print page contents
|
||||||
echo $template->render('global/information');
|
echo Template::render('global/information');
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -225,10 +219,10 @@ if ($mode != 'f') {
|
||||||
];
|
];
|
||||||
|
|
||||||
// Set parse variables
|
// Set parse variables
|
||||||
$template->setVariables($renderData);
|
Template::vars($renderData);
|
||||||
|
|
||||||
// Print page contents
|
// Print page contents
|
||||||
echo $template->render('global/information');
|
echo Template::render('global/information');
|
||||||
exit;
|
exit;
|
||||||
// Return to previous page
|
// Return to previous page
|
||||||
} else {
|
} else {
|
||||||
|
@ -246,10 +240,10 @@ if ($mode != 'f') {
|
||||||
]);
|
]);
|
||||||
|
|
||||||
// Set parse variables
|
// Set parse variables
|
||||||
$template->setVariables($renderData);
|
Template::vars($renderData);
|
||||||
|
|
||||||
// Print page contents
|
// Print page contents
|
||||||
echo $template->render('global/confirm');
|
echo Template::render('global/confirm');
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -296,10 +290,10 @@ if (isset($_POST['post'])) {
|
||||||
$renderData['page']['redirect'];
|
$renderData['page']['redirect'];
|
||||||
} else {
|
} else {
|
||||||
// Set parse variables
|
// Set parse variables
|
||||||
$template->setVariables($renderData);
|
Template::vars($renderData);
|
||||||
|
|
||||||
// Print page contents
|
// Print page contents
|
||||||
echo $template->render('global/information');
|
echo Template::render('global/information');
|
||||||
}
|
}
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
@ -310,7 +304,7 @@ $renderData = array_merge($renderData, [
|
||||||
]);
|
]);
|
||||||
|
|
||||||
// Set parse variables
|
// Set parse variables
|
||||||
$template->setVariables($renderData);
|
Template::vars($renderData);
|
||||||
|
|
||||||
// Print page contents
|
// Print page contents
|
||||||
echo $template->render('forum/posting');
|
echo Template::render('forum/posting');
|
||||||
|
|
|
@ -1,86 +0,0 @@
|
||||||
<?php
|
|
||||||
/*
|
|
||||||
* Sakura User Profiles
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Declare Namespace
|
|
||||||
namespace Sakura;
|
|
||||||
|
|
||||||
// Include components
|
|
||||||
require_once str_replace(basename(__DIR__), '', dirname(__FILE__)) . 'sakura.php';
|
|
||||||
|
|
||||||
// Initialise templating engine
|
|
||||||
$template = new Template();
|
|
||||||
|
|
||||||
// Change templating engine
|
|
||||||
$template->setTemplate($templateName);
|
|
||||||
|
|
||||||
// Get the user's context
|
|
||||||
$profile = User::construct(isset($_GET['u']) ? $_GET['u'] : 0);
|
|
||||||
|
|
||||||
// Views array
|
|
||||||
$views = [
|
|
||||||
'index',
|
|
||||||
'friends',
|
|
||||||
//'threads',
|
|
||||||
//'posts',
|
|
||||||
'comments',
|
|
||||||
//'groups',
|
|
||||||
];
|
|
||||||
|
|
||||||
// Assign the object to a renderData variable
|
|
||||||
$renderData['profile'] = $profile;
|
|
||||||
$renderData['profileView'] = isset($_GET['view']) && in_array($_GET['view'], $views) ? $_GET['view'] : $views[0];
|
|
||||||
|
|
||||||
// If the user id is zero check if there was a namechange
|
|
||||||
if ($profile->id == 0) {
|
|
||||||
// Fetch from username_history
|
|
||||||
$check = Database::fetch('username_history', false, ['username_old_clean' => [Utils::cleanString(isset($_GET['u']) ? $_GET['u'] : 0, true, true), '=']]);
|
|
||||||
|
|
||||||
// Redirect if so
|
|
||||||
if ($check) {
|
|
||||||
$renderData['page'] = [
|
|
||||||
'message' => 'The user this profile belongs to changed their username, you are being redirected.',
|
|
||||||
'redirect' => $urls->format('USER_PROFILE', [$check['user_id']]),
|
|
||||||
];
|
|
||||||
|
|
||||||
// Set parse variables
|
|
||||||
$template->setVariables($renderData);
|
|
||||||
|
|
||||||
// Print page contents
|
|
||||||
echo $template->render('global/information');
|
|
||||||
exit;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// If the user id is zero check if there was a namechange
|
|
||||||
if (isset($_GET['restrict']) && $_GET['restrict'] == session_id() && $currentUser->permission(Perms\Manage::CAN_RESTRICT_USERS, Perms::MANAGE)) {
|
|
||||||
// Check restricted status
|
|
||||||
$restricted = $profile->permission(Perms\Site::RESTRICTED);
|
|
||||||
|
|
||||||
if ($restricted) {
|
|
||||||
$profile->removeRanks([Config::get('restricted_rank_id')]);
|
|
||||||
$profile->addRanks([2]);
|
|
||||||
} else {
|
|
||||||
$profile->addRanks([Config::get('restricted_rank_id')]);
|
|
||||||
$profile->removeRanks(array_keys($profile->ranks));
|
|
||||||
}
|
|
||||||
|
|
||||||
$renderData['page'] = [
|
|
||||||
'message' => 'Toggled the restricted status of the user.',
|
|
||||||
'redirect' => $urls->format('USER_PROFILE', [$profile->id]),
|
|
||||||
];
|
|
||||||
|
|
||||||
// Set parse variables
|
|
||||||
$template->setVariables($renderData);
|
|
||||||
|
|
||||||
// Print page contents
|
|
||||||
echo $template->render('global/information');
|
|
||||||
exit;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set parse variables
|
|
||||||
$template->setVariables($renderData);
|
|
||||||
|
|
||||||
// Print page contents
|
|
||||||
echo $template->render('main/profile');
|
|
|
@ -1,22 +0,0 @@
|
||||||
<?php
|
|
||||||
/*
|
|
||||||
* Sakura Reporting
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Declare Namespace
|
|
||||||
namespace Sakura;
|
|
||||||
|
|
||||||
// Include components
|
|
||||||
require_once str_replace(basename(__DIR__), '', dirname(__FILE__)) . 'sakura.php';
|
|
||||||
|
|
||||||
// Initialise templating engine
|
|
||||||
$template = new Template();
|
|
||||||
|
|
||||||
// Change templating engine
|
|
||||||
$template->setTemplate($templateName);
|
|
||||||
|
|
||||||
// Set parse variables
|
|
||||||
$template->setVariables($renderData);
|
|
||||||
|
|
||||||
// Print page contents
|
|
||||||
echo $template->render('main/report');
|
|
|
@ -16,14 +16,6 @@ if (isset($_REQUEST['request-notifications']) && $_REQUEST['request-notification
|
||||||
// Include components
|
// Include components
|
||||||
require_once str_replace(basename(__DIR__), '', dirname(__FILE__)) . 'sakura.php';
|
require_once str_replace(basename(__DIR__), '', dirname(__FILE__)) . 'sakura.php';
|
||||||
|
|
||||||
if (!defined('SAKURA_NO_TPL')) {
|
|
||||||
// Initialise templating engine
|
|
||||||
$template = new Template();
|
|
||||||
|
|
||||||
// Change templating engine
|
|
||||||
$template->setTemplate($templateName);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Notifications
|
// Notifications
|
||||||
if (isset($_REQUEST['request-notifications']) && $_REQUEST['request-notifications']) {
|
if (isset($_REQUEST['request-notifications']) && $_REQUEST['request-notifications']) {
|
||||||
// Create the notification container array
|
// Create the notification container array
|
||||||
|
@ -275,10 +267,10 @@ if (isset($_REQUEST['request-notifications']) && $_REQUEST['request-notification
|
||||||
$renderData['page']['redirect'];
|
$renderData['page']['redirect'];
|
||||||
} else {
|
} else {
|
||||||
// If not allowed print the restricted page
|
// If not allowed print the restricted page
|
||||||
$template->setVariables($renderData);
|
Template::vars($renderData);
|
||||||
|
|
||||||
// Print page contents
|
// Print page contents
|
||||||
echo $template->render('global/information');
|
echo Template::render('global/information');
|
||||||
}
|
}
|
||||||
exit;
|
exit;
|
||||||
} elseif (isset($_REQUEST['friend-action']) && $_REQUEST['friend-action'] && Users::checkLogin()) {
|
} elseif (isset($_REQUEST['friend-action']) && $_REQUEST['friend-action'] && Users::checkLogin()) {
|
||||||
|
@ -404,10 +396,10 @@ if (isset($_REQUEST['request-notifications']) && $_REQUEST['request-notification
|
||||||
$renderData['page']['redirect'];
|
$renderData['page']['redirect'];
|
||||||
} else {
|
} else {
|
||||||
// If not allowed print the restricted page
|
// If not allowed print the restricted page
|
||||||
$template->setVariables($renderData);
|
Template::vars($renderData);
|
||||||
|
|
||||||
// Print page contents
|
// Print page contents
|
||||||
echo $template->render('global/information');
|
echo Template::render('global/information');
|
||||||
}
|
}
|
||||||
exit;
|
exit;
|
||||||
} elseif (isset($_POST['submit']) && isset($_POST['submit'])) {
|
} elseif (isset($_POST['submit']) && isset($_POST['submit'])) {
|
||||||
|
@ -1158,10 +1150,10 @@ if (isset($_REQUEST['request-notifications']) && $_REQUEST['request-notification
|
||||||
$renderData['page']['redirect'];
|
$renderData['page']['redirect'];
|
||||||
} else {
|
} else {
|
||||||
// If not allowed print the restricted page
|
// If not allowed print the restricted page
|
||||||
$template->setVariables($renderData);
|
Template::vars($renderData);
|
||||||
|
|
||||||
// Print page contents
|
// Print page contents
|
||||||
echo $template->render('global/information');
|
echo Template::render('global/information');
|
||||||
}
|
}
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
@ -1429,10 +1421,10 @@ if (Users::checkLogin()) {
|
||||||
header('HTTP/1.0 404 Not Found');
|
header('HTTP/1.0 404 Not Found');
|
||||||
|
|
||||||
// Set parse variables
|
// Set parse variables
|
||||||
$template->setVariables($renderData);
|
Template::vars($renderData);
|
||||||
|
|
||||||
// Print page contents
|
// Print page contents
|
||||||
echo $template->render('global/notfound');
|
echo Template::render('global/notfound');
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1518,14 +1510,14 @@ if (Users::checkLogin()) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set parse variables
|
// Set parse variables
|
||||||
$template->setVariables($renderData);
|
Template::vars($renderData);
|
||||||
|
|
||||||
// Print page contents
|
// Print page contents
|
||||||
echo $template->render('main/settings');
|
echo Template::render('main/settings');
|
||||||
} else {
|
} else {
|
||||||
// If not allowed print the restricted page
|
// If not allowed print the restricted page
|
||||||
$template->setVariables($renderData);
|
Template::vars($renderData);
|
||||||
|
|
||||||
// Print page contents
|
// Print page contents
|
||||||
echo $template->render('global/restricted');
|
echo Template::render('global/restricted');
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,12 +11,6 @@ use Sakura\Perms\Site;
|
||||||
// Include components
|
// Include components
|
||||||
require_once str_replace(basename(__DIR__), '', dirname(__FILE__)) . 'sakura.php';
|
require_once str_replace(basename(__DIR__), '', dirname(__FILE__)) . 'sakura.php';
|
||||||
|
|
||||||
// Initialise templating engine
|
|
||||||
$template = new Template();
|
|
||||||
|
|
||||||
// Change templating engine
|
|
||||||
$template->setTemplate($templateName);
|
|
||||||
|
|
||||||
// Switch between modes (we only allow this to be used by logged in user)
|
// Switch between modes (we only allow this to be used by logged in user)
|
||||||
if (isset($_REQUEST['mode'])
|
if (isset($_REQUEST['mode'])
|
||||||
&& Users::checkLogin()
|
&& Users::checkLogin()
|
||||||
|
@ -126,10 +120,10 @@ if (isset($_REQUEST['mode'])
|
||||||
], $renderData);
|
], $renderData);
|
||||||
|
|
||||||
// Set parse variables
|
// Set parse variables
|
||||||
$template->setVariables($renderData);
|
Template::vars($renderData);
|
||||||
|
|
||||||
// Print page contents
|
// Print page contents
|
||||||
echo $template->render('main/premiumcomplete');
|
echo Template::render('main/premiumcomplete');
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
@ -147,10 +141,10 @@ if (isset($_GET['tracker'])) {
|
||||||
$renderData['tracker'] = Utils::getPremiumTrackerData();
|
$renderData['tracker'] = Utils::getPremiumTrackerData();
|
||||||
|
|
||||||
// Set parse variables
|
// Set parse variables
|
||||||
$template->setVariables($renderData);
|
Template::vars($renderData);
|
||||||
|
|
||||||
// Print page contents
|
// Print page contents
|
||||||
echo $template->render('main/supporttracker');
|
echo Template::render('main/supporttracker');
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -165,7 +159,7 @@ $renderData['page'] = [
|
||||||
];
|
];
|
||||||
|
|
||||||
// Set parse variables
|
// Set parse variables
|
||||||
$template->setVariables($renderData);
|
Template::vars($renderData);
|
||||||
|
|
||||||
// Print page contents
|
// Print page contents
|
||||||
echo $template->render('main/support');
|
echo Template::render('main/support');
|
||||||
|
|
|
@ -1,104 +0,0 @@
|
||||||
<?php
|
|
||||||
/*
|
|
||||||
* Sakura Forum List Viewer
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Declare Namespace
|
|
||||||
namespace Sakura;
|
|
||||||
|
|
||||||
use Sakura\Perms\Forum as ForumPerms;
|
|
||||||
|
|
||||||
// Include components
|
|
||||||
require_once str_replace(basename(__DIR__), '', dirname(__FILE__)) . 'sakura.php';
|
|
||||||
|
|
||||||
// Get the forum's data
|
|
||||||
$forum = new Forum\Forum(isset($_GET['f']) ? $_GET['f'] : -1);
|
|
||||||
|
|
||||||
// Initialise templating engine
|
|
||||||
$template = new Template();
|
|
||||||
|
|
||||||
// Change templating engine
|
|
||||||
$template->setTemplate($templateName);
|
|
||||||
|
|
||||||
// Check if the forum exists
|
|
||||||
if ($forum->id < 0) {
|
|
||||||
// Set render data
|
|
||||||
$renderData['page'] = [
|
|
||||||
'title' => 'Information',
|
|
||||||
'message' => 'The forum you tried to access does not exist.',
|
|
||||||
];
|
|
||||||
|
|
||||||
// Set parse variables
|
|
||||||
$template->setVariables($renderData);
|
|
||||||
|
|
||||||
// Print page contents
|
|
||||||
echo $template->render('global/information');
|
|
||||||
exit;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check if the user has access to the forum
|
|
||||||
if (!$forum->permission(ForumPerms::VIEW, $currentUser->id)) {
|
|
||||||
// Set render data
|
|
||||||
$renderData['page'] = [
|
|
||||||
'title' => 'Information',
|
|
||||||
'message' => 'You do not have access to this forum.',
|
|
||||||
];
|
|
||||||
|
|
||||||
// Set parse variables
|
|
||||||
$template->setVariables($renderData);
|
|
||||||
|
|
||||||
// Print page contents
|
|
||||||
echo $template->render('global/information');
|
|
||||||
exit;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check if the forum isn't a link
|
|
||||||
if ($forum->type === 2) {
|
|
||||||
// Set render data
|
|
||||||
$renderData['page'] = [
|
|
||||||
'title' => 'Information',
|
|
||||||
'message' => 'The forum you tried to access is a link. You\'re being redirected.',
|
|
||||||
'redirect' => $forum->link,
|
|
||||||
];
|
|
||||||
|
|
||||||
// Set parse variables
|
|
||||||
$template->setVariables($renderData);
|
|
||||||
|
|
||||||
// Print page contents
|
|
||||||
echo $template->render('global/information');
|
|
||||||
exit;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check if we're marking as read
|
|
||||||
if (isset($_GET['read']) && $_GET['read'] && isset($_GET['session']) && $_GET['session'] == session_id()) {
|
|
||||||
// Run the function
|
|
||||||
$forum->trackUpdateAll($currentUser->id);
|
|
||||||
|
|
||||||
// Set render data
|
|
||||||
$renderData['page'] = [
|
|
||||||
'title' => 'Information',
|
|
||||||
'message' => 'All threads have been marked as read.',
|
|
||||||
'redirect' => $urls->format('FORUM_SUB', [$forum->id]),
|
|
||||||
];
|
|
||||||
|
|
||||||
// Set parse variables
|
|
||||||
$template->setVariables($renderData);
|
|
||||||
|
|
||||||
// Print page contents
|
|
||||||
echo $template->render('global/information');
|
|
||||||
exit;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Redirect forum id 0 to the main page
|
|
||||||
if ($forum->id === 0) {
|
|
||||||
header('Location: ' . $urls->format('FORUM_INDEX'));
|
|
||||||
exit;
|
|
||||||
}
|
|
||||||
|
|
||||||
$renderData['forum'] = $forum;
|
|
||||||
|
|
||||||
// Set parse variables
|
|
||||||
$template->setVariables($renderData);
|
|
||||||
|
|
||||||
// Print page contents
|
|
||||||
echo $template->render('forum/viewforum');
|
|
|
@ -21,12 +21,6 @@ $thread = new Forum\Thread(
|
||||||
// And attempt to get the forum
|
// And attempt to get the forum
|
||||||
$forum = new Forum\Forum($thread->forum);
|
$forum = new Forum\Forum($thread->forum);
|
||||||
|
|
||||||
// Initialise templating engine
|
|
||||||
$template = new Template();
|
|
||||||
|
|
||||||
// Change templating engine
|
|
||||||
$template->setTemplate($templateName);
|
|
||||||
|
|
||||||
// Check if the forum exists
|
// Check if the forum exists
|
||||||
if (!$thread) {
|
if (!$thread) {
|
||||||
// Set render data
|
// Set render data
|
||||||
|
@ -36,10 +30,10 @@ if (!$thread) {
|
||||||
];
|
];
|
||||||
|
|
||||||
// Set parse variables
|
// Set parse variables
|
||||||
$template->setVariables($renderData);
|
Template::vars($renderData);
|
||||||
|
|
||||||
// Print page contents
|
// Print page contents
|
||||||
echo $template->render('global/information');
|
echo Template::render('global/information');
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -52,10 +46,10 @@ if (!$forum->permission(ForumPerms::VIEW, $currentUser->id)) {
|
||||||
];
|
];
|
||||||
|
|
||||||
// Set parse variables
|
// Set parse variables
|
||||||
$template->setVariables($renderData);
|
Template::vars($renderData);
|
||||||
|
|
||||||
// Print page contents
|
// Print page contents
|
||||||
echo $template->render('global/information');
|
echo Template::render('global/information');
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -78,10 +72,10 @@ if (isset($_GET['sticky']) && $_GET['sticky'] == session_id() && $forum->permiss
|
||||||
];
|
];
|
||||||
|
|
||||||
// Set parse variables
|
// Set parse variables
|
||||||
$template->setVariables($renderData);
|
Template::vars($renderData);
|
||||||
|
|
||||||
// Print page contents
|
// Print page contents
|
||||||
echo $template->render('global/information');
|
echo Template::render('global/information');
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -103,10 +97,10 @@ if (isset($_GET['announce']) && $_GET['announce'] == session_id() && $forum->per
|
||||||
];
|
];
|
||||||
|
|
||||||
// Set parse variables
|
// Set parse variables
|
||||||
$template->setVariables($renderData);
|
Template::vars($renderData);
|
||||||
|
|
||||||
// Print page contents
|
// Print page contents
|
||||||
echo $template->render('global/information');
|
echo Template::render('global/information');
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -128,10 +122,10 @@ if (isset($_GET['lock']) && $_GET['lock'] == session_id() && $forum->permission(
|
||||||
];
|
];
|
||||||
|
|
||||||
// Set parse variables
|
// Set parse variables
|
||||||
$template->setVariables($renderData);
|
Template::vars($renderData);
|
||||||
|
|
||||||
// Print page contents
|
// Print page contents
|
||||||
echo $template->render('global/information');
|
echo Template::render('global/information');
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -155,10 +149,10 @@ if (isset($_GET['trash']) && $_GET['trash'] == session_id() && $forum->permissio
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set parse variables
|
// Set parse variables
|
||||||
$template->setVariables($renderData);
|
Template::vars($renderData);
|
||||||
|
|
||||||
// Print page contents
|
// Print page contents
|
||||||
echo $template->render('global/information');
|
echo Template::render('global/information');
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -183,10 +177,10 @@ if (isset($_GET['restore']) && $_GET['restore'] == session_id() && $forum->permi
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set parse variables
|
// Set parse variables
|
||||||
$template->setVariables($renderData);
|
Template::vars($renderData);
|
||||||
|
|
||||||
// Print page contents
|
// Print page contents
|
||||||
echo $template->render('global/information');
|
echo Template::render('global/information');
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -210,10 +204,10 @@ if (isset($_GET['prune']) && $_GET['prune'] == session_id() && $forum->permissio
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set parse variables
|
// Set parse variables
|
||||||
$template->setVariables($renderData);
|
Template::vars($renderData);
|
||||||
|
|
||||||
// Print page contents
|
// Print page contents
|
||||||
echo $template->render('global/information');
|
echo Template::render('global/information');
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -230,7 +224,7 @@ $renderData = array_merge($renderData, [
|
||||||
]);
|
]);
|
||||||
|
|
||||||
// Set parse variables
|
// Set parse variables
|
||||||
$template->setVariables($renderData);
|
Template::vars($renderData);
|
||||||
|
|
||||||
// Print page contents
|
// Print page contents
|
||||||
echo $template->render('forum/viewtopic');
|
echo Template::render('forum/viewtopic');
|
||||||
|
|
55
routes.php
55
routes.php
|
@ -18,7 +18,15 @@ Router::get('/news/{category}', 'Sakura\Controllers\Meta@news', 'news.category')
|
||||||
Router::get('/news/{category}/{id}', 'Sakura\Controllers\Meta@news', 'news.post');
|
Router::get('/news/{category}/{id}', 'Sakura\Controllers\Meta@news', 'news.post');
|
||||||
|
|
||||||
// Forum
|
// Forum
|
||||||
Router::get('/forum', 'Sakura\Controllers\Forum@index', 'forum.index');
|
Router::get('/forum', 'Sakura\Controllers\Forums@index', 'forums.index');
|
||||||
|
Router::get('/forum/{id}', 'Sakura\Controllers\Forums@forum', 'forums.forum');
|
||||||
|
|
||||||
|
// Members
|
||||||
|
Router::get('/members', 'Sakura\Controllers\User@members', 'members.all');
|
||||||
|
Router::get('/members/{rank}', 'Sakura\Controllers\User@members', 'members.rank');
|
||||||
|
|
||||||
|
// User
|
||||||
|
Router::get('/u/{id}', 'Sakura\Controllers\User@profile', 'user.profile');
|
||||||
|
|
||||||
// Redirections
|
// Redirections
|
||||||
Router::any('/index.php', function () {
|
Router::any('/index.php', function () {
|
||||||
|
@ -61,6 +69,51 @@ Router::any('/news.php', function () {
|
||||||
header('Location: /news');
|
header('Location: /news');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Router::any('/profile.php', function () {
|
||||||
|
// Redirect to the profile
|
||||||
|
if (isset($_REQUEST['u'])) {
|
||||||
|
header('Location: /u/' . $_REQUEST['u']);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Redirect to index
|
||||||
|
header('Location: /');
|
||||||
|
});
|
||||||
|
|
||||||
|
Router::any('/members.php', function () {
|
||||||
|
// Append sort
|
||||||
|
$append = isset($_REQUEST['sort']) ? '?sort=' . $_REQUEST['sort'] : '';
|
||||||
|
|
||||||
|
// Redirect to the profile
|
||||||
|
if (isset($_REQUEST['rank'])) {
|
||||||
|
header('Location: /members/' . $_REQUEST['rank'] . $append);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Redirect to index
|
||||||
|
header('Location: /members/' . $append);
|
||||||
|
});
|
||||||
|
|
||||||
|
Router::any('/viewforum.php', function () {
|
||||||
|
// Redirect to the profile
|
||||||
|
if (isset($_REQUEST['f'])) {
|
||||||
|
$req = [];
|
||||||
|
foreach ($_REQUEST as $k => $v) {
|
||||||
|
if ($k == 'f') {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$req[] = $k . '=' . $v;
|
||||||
|
}
|
||||||
|
|
||||||
|
header('Location: /forum/' . $_REQUEST['f'] . ($req ? '?' . implode('&', $req) : ''));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Redirect to index
|
||||||
|
header('Location: /forum/');
|
||||||
|
});
|
||||||
|
|
||||||
Router::any('/faq.php', function () {
|
Router::any('/faq.php', function () {
|
||||||
header('Location: /faq');
|
header('Location: /faq');
|
||||||
});
|
});
|
||||||
|
|
39
sakura.php
39
sakura.php
|
@ -8,7 +8,7 @@
|
||||||
namespace Sakura;
|
namespace Sakura;
|
||||||
|
|
||||||
// Define Sakura version
|
// Define Sakura version
|
||||||
define('SAKURA_VERSION', '20160202');
|
define('SAKURA_VERSION', '20160204');
|
||||||
define('SAKURA_VLABEL', 'Amethyst');
|
define('SAKURA_VLABEL', 'Amethyst');
|
||||||
define('SAKURA_COLOUR', '#9966CC');
|
define('SAKURA_COLOUR', '#9966CC');
|
||||||
|
|
||||||
|
@ -59,8 +59,9 @@ require_once ROOT . 'libraries/Users.php';
|
||||||
require_once ROOT . 'libraries/Utils.php';
|
require_once ROOT . 'libraries/Utils.php';
|
||||||
require_once ROOT . 'libraries/Whois.php';
|
require_once ROOT . 'libraries/Whois.php';
|
||||||
require_once ROOT . 'libraries/Console/Application.php';
|
require_once ROOT . 'libraries/Console/Application.php';
|
||||||
require_once ROOT . 'libraries/Controllers/Forum.php';
|
require_once ROOT . 'libraries/Controllers/Forums.php';
|
||||||
require_once ROOT . 'libraries/Controllers/Meta.php';
|
require_once ROOT . 'libraries/Controllers/Meta.php';
|
||||||
|
require_once ROOT . 'libraries/Controllers/User.php';
|
||||||
require_once ROOT . 'libraries/Forum/Forum.php';
|
require_once ROOT . 'libraries/Forum/Forum.php';
|
||||||
require_once ROOT . 'libraries/Forum/Post.php';
|
require_once ROOT . 'libraries/Forum/Post.php';
|
||||||
require_once ROOT . 'libraries/Forum/Thread.php';
|
require_once ROOT . 'libraries/Forum/Thread.php';
|
||||||
|
@ -140,6 +141,9 @@ $templateName =
|
||||||
'misaki' : Config::get('site_style');
|
'misaki' : Config::get('site_style');
|
||||||
|
|
||||||
if (!defined('SAKURA_NO_TPL')) {
|
if (!defined('SAKURA_NO_TPL')) {
|
||||||
|
// Start templating engine
|
||||||
|
Template::set($templateName);
|
||||||
|
|
||||||
// Set base page rendering data
|
// Set base page rendering data
|
||||||
$renderData = [
|
$renderData = [
|
||||||
'sakura' => [
|
'sakura' => [
|
||||||
|
@ -202,33 +206,27 @@ if (!defined('SAKURA_NO_TPL')) {
|
||||||
'post' => $_POST,
|
'post' => $_POST,
|
||||||
];
|
];
|
||||||
|
|
||||||
|
// Add the default render data
|
||||||
|
Template::vars($renderData);
|
||||||
|
|
||||||
// Site closing
|
// Site closing
|
||||||
if (Config::get('site_closed')) {
|
if (Config::get('site_closed')) {
|
||||||
// Additional render data
|
// Set parse variables
|
||||||
$renderData = array_merge($renderData, [
|
Template::vars([
|
||||||
'page' => [
|
'page' => [
|
||||||
'message' => Config::get('site_closed_reason'),
|
'message' => Config::get('site_closed_reason'),
|
||||||
],
|
],
|
||||||
]);
|
]);
|
||||||
|
|
||||||
// Initialise templating engine
|
|
||||||
$template = new Template();
|
|
||||||
|
|
||||||
// Change templating engine
|
|
||||||
$template->setTemplate($templateName);
|
|
||||||
|
|
||||||
// Set parse variables
|
|
||||||
$template->setVariables($renderData);
|
|
||||||
|
|
||||||
// Print page contents
|
// Print page contents
|
||||||
echo $template->render('global/information');
|
echo Template::render('global/information');
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Ban checking
|
// Ban checking
|
||||||
if ($authCheck && !in_array($_SERVER['PHP_SELF'], [$urls->format('AUTH_ACTION', [], false)]) && $ban = Bans::checkBan($currentUser->id)) {
|
if ($authCheck && !in_array($_SERVER['PHP_SELF'], [$urls->format('AUTH_ACTION', [], false)]) && $ban = Bans::checkBan($currentUser->id)) {
|
||||||
// Additional render data
|
// Additional render data
|
||||||
$renderData = array_merge($renderData, [
|
Template::vars([
|
||||||
'ban' => [
|
'ban' => [
|
||||||
'reason' => $ban['reason'],
|
'reason' => $ban['reason'],
|
||||||
'issued' => $ban['issued'],
|
'issued' => $ban['issued'],
|
||||||
|
@ -237,17 +235,8 @@ if (!defined('SAKURA_NO_TPL')) {
|
||||||
],
|
],
|
||||||
]);
|
]);
|
||||||
|
|
||||||
// Initialise templating engine
|
|
||||||
$template = new Template();
|
|
||||||
|
|
||||||
// Change templating engine
|
|
||||||
$template->setTemplate($templateName);
|
|
||||||
|
|
||||||
// Set parse variables
|
|
||||||
$template->setVariables($renderData);
|
|
||||||
|
|
||||||
// Print page contents
|
// Print page contents
|
||||||
echo $template->render('main/banned');
|
echo Template::render('main/banned');
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,10 +3,13 @@
|
||||||
* mod_rewrite emulator for php's build in server
|
* mod_rewrite emulator for php's build in server
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
// Decode and parse the request uri
|
||||||
$uri = urldecode(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH));
|
$uri = urldecode(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH));
|
||||||
|
|
||||||
|
// Check if the file exist in the public directory and if it does serve it.
|
||||||
if ($uri !== '/' && file_exists(__DIR__ . '/public' . $uri)) {
|
if ($uri !== '/' && file_exists(__DIR__ . '/public' . $uri)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Otherwise include the router
|
||||||
require_once __DIR__ . '/public/index.php';
|
require_once __DIR__ . '/public/index.php';
|
||||||
|
|
|
@ -4,8 +4,6 @@
|
||||||
|
|
||||||
{% block title %}{{ title }}{% endblock %}
|
{% block title %}{{ title }}{% endblock %}
|
||||||
|
|
||||||
{% set forumMarkRead %}{{ urls.format('FORUM_MARK_READ', [forum.id, php.sessionid]) }}{% endset %}
|
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<div class="content homepage forum">
|
<div class="content homepage forum">
|
||||||
<div class="content-right content-column">
|
<div class="content-right content-column">
|
||||||
|
@ -13,7 +11,6 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="content-left content-column">
|
<div class="content-left content-column">
|
||||||
{% include 'forum/forum.twig' %}
|
{% include 'forum/forum.twig' %}
|
||||||
{% include 'forum/forumBtns.twig' %}
|
|
||||||
</div>
|
</div>
|
||||||
<div class="clear"></div>
|
<div class="clear"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -8,6 +8,55 @@
|
||||||
|
|
||||||
{% block title %}{% if profileHidden %}User not found!{% else %}Profile of {{ profile.username }}{% endif %}{% endblock %}
|
{% block title %}{% if profileHidden %}User not found!{% else %}Profile of {{ profile.username }}{% endif %}{% endblock %}
|
||||||
|
|
||||||
|
{% block js %}
|
||||||
|
<script type="text/javascript">
|
||||||
|
window.addEventListener('load', function () {
|
||||||
|
// Check if location.hash is set
|
||||||
|
if (location.hash) {
|
||||||
|
var open = location.hash.slice(2);
|
||||||
|
|
||||||
|
// Check if the element exists
|
||||||
|
if (document.getElementById('profile-mode-' + open)) {
|
||||||
|
profileMode(open);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var profileUserpage = document.getElementById('profile-mode-userpage');
|
||||||
|
|
||||||
|
// Check if the user page has contents
|
||||||
|
if (profileUserpage.children[0].innerHTML.trim().length) {
|
||||||
|
profileMode('userpage');
|
||||||
|
} else {
|
||||||
|
profileMode('comments');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Switch to a different mode
|
||||||
|
function profileMode(id) {
|
||||||
|
// Get other active modes and fetch the new element
|
||||||
|
var current = document.getElementsByClassName('profile-mode-current'),
|
||||||
|
newMode = document.getElementById('profile-mode-' + id);
|
||||||
|
|
||||||
|
// Check if the new mode exists
|
||||||
|
if (typeof newMode == 'undefined') {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check if there's any active
|
||||||
|
if (current) {
|
||||||
|
// Hide them all
|
||||||
|
for (i in current) {
|
||||||
|
current[i].className = 'hidden';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set the new to active
|
||||||
|
newMode.className = 'profile-mode-current';
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
{% if profileHidden %}
|
{% if profileHidden %}
|
||||||
<div class="content standalone">
|
<div class="content standalone">
|
||||||
|
@ -22,133 +71,6 @@
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% elseif get.old %}
|
|
||||||
<div class="content profile">
|
|
||||||
<div class="content-right content-column">
|
|
||||||
<div style="text-align: center;">
|
|
||||||
<img src="{{ urls.format('IMAGE_AVATAR', [profile.id]) }}" alt="{{ profile.username }}'s Avatar" class="default-avatar-setting" style="box-shadow: 0 3px 7px #{% if profile.isOnline %}484{% else %}844{% endif %};" /><br />
|
|
||||||
{% if profile.mainRankId > 1 and profile.checkBan|length < 1 %}
|
|
||||||
<span style="font-size: .8em;">{{ profile.title }}</span>
|
|
||||||
<h1 style="color: {{ profile.colour }}; text-shadow: 0 0 7px {% if profile.colour != 'inherit' %}{{ profile.colour }}{% else %}#222{% endif %}; padding: 0 0 2px;" {% if profile.getUsernameHistory %} title="Known as {{ profile.getUsernameHistory[0]['username_old'] }} before {{ profile.getUsernameHistory[0]['change_time']|date(sakura.dateFormat) }}." {% endif %}>{{ profile.username }}</h1>
|
|
||||||
{% if profile.isPremium[0] %}<img src="{{ sakura.contentPath }}/images/tenshi.png" alt="Tenshi" style="vertical-align: middle;" /> {% endif %}<img src="{{ sakura.contentPath }}/images/flags/{{ profile.country|lower }}.png" alt="{{ profile.country }}" style="vertical-align: middle;" /> <span style="font-size: .8em; line-height: 11px;">{{ profile.country(true) }}</span>
|
|
||||||
{% if session.checkLogin %}
|
|
||||||
<div class="user-actions">
|
|
||||||
{% if user.id == profile.id %}
|
|
||||||
<a class="fa fa-pencil-square-o" title="Edit your profile" href="{{ urls.format('SETTING_MODE', ['general', 'profile']) }}"></a>
|
|
||||||
{% else %}
|
|
||||||
{% if user.isFriends(profile.id) != 0 %}<a class="fa fa-{% if user.isFriends(profile.id) == 2 %}heart{% else %}star{% endif %}" title="You are friends"></a>{% endif %}
|
|
||||||
<a class="fa fa-user-{% if user.isFriends(profile.id) == 0 %}plus{% else %}times{% endif %}" title="{% if user.isFriends(profile.id) == 0 %}Add {{ profile.username }} as a friend{% else %}Remove friend{% endif %}" href="{% if user.isFriends(profile.id) == 0 %}{{ urls.format('FRIEND_ADD', [profile.id, php.sessionid, php.time, sakura.currentPage]) }}{% else %}{{ urls.format('FRIEND_REMOVE', [profile.id, php.sessionid, php.time, sakura.currentPage]) }}{% endif %}" id="profileFriendToggle"></a>
|
|
||||||
<a class="fa fa-exclamation-circle" title="Report {{ profile.username }}" href="{{ urls.format('USER_REPORT', [profile.id]) }}"></a>
|
|
||||||
{% endif %}
|
|
||||||
{% if user.permission(constant('Sakura\\Perms\\Manage::CAN_RESTRICT_USERS'), constant('Sakura\\Perms::MANAGE')) %}
|
|
||||||
<a class="fa fa-trash" title="Restrict {{ profile.username }}" href="?restrict={{ php.sessionid }}"></a>
|
|
||||||
{% endif %}
|
|
||||||
<hr class="default" />
|
|
||||||
<a class="fa fa-file-text-o" title="View {{ profile.username }}'s user page" href="{{ urls.format('USER_PROFILE', [profile.id]) }}"></a>
|
|
||||||
{#<a class="fa fa-list" title="View {{ profile.username }}'s threads" href="{{ urls.format('USER_THREADS', [profile.id]) }}"></a>
|
|
||||||
<a class="fa fa-reply" title="View {{ profile.username }}'s posts" href="{{ urls.format('USER_POSTS', [profile.id]) }}"></a> shh #}
|
|
||||||
<a class="fa fa-star" title="View {{ profile.username }}'s friends" href="{{ urls.format('USER_FRIENDS', [profile.id]) }}"></a>
|
|
||||||
{#<a class="fa fa-users" title="View {{ profile.username }}'s groups" href="{{ urls.format('USER_GROUPS', [profile.id]) }}"></a>#}
|
|
||||||
{% if not noUserpage %}
|
|
||||||
<a class="fa fa-comments-o" title="View {{ profile.username }}'s profile comments" href="{{ urls.format('USER_COMMENTS', [profile.id]) }}"></a>
|
|
||||||
{% endif %}
|
|
||||||
</div>
|
|
||||||
{% endif %}
|
|
||||||
<hr class="default" />
|
|
||||||
<b>Joined</b> <span title="{{ profile.registered|date(sakura.dateFormat) }}">{{ profile.elapsed.joined }}</span>
|
|
||||||
<br />
|
|
||||||
{% if profile.lastOnline < 1 %}
|
|
||||||
<b>{{ profile.username }} hasn't logged in yet.</b>
|
|
||||||
{% else %}
|
|
||||||
<b>Last online</b> <span title="{{ profile.lastOnline|date(sakura.dateFormat) }}">{{ profile.elapsed.lastOnline }}</span>
|
|
||||||
{% endif %}
|
|
||||||
<br />
|
|
||||||
<b>{{ profile.username }} has {% if not profile.forumStats.posts %}no{% else %}{{ profile.forumStats.posts }}{% endif %} forum post{% if profile.forumStats.posts != 1 %}s{% endif %}.</b>
|
|
||||||
{% if profile.birthday != '0000-00-00' and profile.birthday|split('-')[0] > 0 %}
|
|
||||||
<br /><b>Age</b> <span title="{{ profile.birthday }}">{{ profile.birthday(true) }} years old</span>
|
|
||||||
{% endif %}
|
|
||||||
{% if profile.profileFields or user.permission(constant('Sakura\\Perms\\Manage::USE_MANAGE'), constant('Sakura\\Perms::MANAGE')) %}
|
|
||||||
<hr class="default" />
|
|
||||||
{% if session.checkLogin %}
|
|
||||||
<table style="width: 100%;">
|
|
||||||
{% for name,field in profile.profileFields %}
|
|
||||||
<tr>
|
|
||||||
<td style="text-align: left; font-weight: bold;">
|
|
||||||
{{ field.name }}
|
|
||||||
</td>
|
|
||||||
<td style="text-align: right;">
|
|
||||||
{% if name == 'youtube' %}
|
|
||||||
<a href="https://youtube.com/{% if field.youtubetype == true %}channel{% else %}user{% endif %}/{{ field.value }}" class="default">{% if field.youtubetype == true %}{{ profile.username }}'s Channel{% else %}{{ field.value }}{% endif %}</a>
|
|
||||||
{% else %}
|
|
||||||
{% if field.islink %}
|
|
||||||
<a href="{{ field.link }}" class="default">
|
|
||||||
{% endif %}
|
|
||||||
{{ field.value }}
|
|
||||||
{% if field.islink %}
|
|
||||||
</a>
|
|
||||||
{% endif %}
|
|
||||||
{% endif %}
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
{% endfor %}
|
|
||||||
{% if user.permission(constant('Sakura\\Perms\\Manage::USE_MANAGE'), constant('Sakura\\Perms::MANAGE')) %}
|
|
||||||
<tr>
|
|
||||||
<td style="text-align: left; font-weight: bold;">E-mail address</td>
|
|
||||||
<td style="text-align: right;"><a href="mailto:{{ profile.email }}" class="default">{{ profile.email }}</a></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td style="text-align: left; font-weight: bold;">Register IP</td>
|
|
||||||
<td style="text-align: right;">{{ profile.registerIp }}</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td style="text-align: left; font-weight: bold;">Last IP</td>
|
|
||||||
<td style="text-align: right;">{{ profile.lastIp }}</td>
|
|
||||||
</tr>
|
|
||||||
{% endif %}
|
|
||||||
</table>
|
|
||||||
{% else %}
|
|
||||||
<b>Log in to view the full profile!</b>
|
|
||||||
{% endif %}
|
|
||||||
{% endif %}
|
|
||||||
{% else %}
|
|
||||||
<h1 style="color: #222; text-shadow: 0 0 7px #888; padding: 0 0 2px;">{{ profile.username }}</h1>
|
|
||||||
{% endif %}
|
|
||||||
<hr class="default" />
|
|
||||||
<b>Account Standing</b>
|
|
||||||
{% if profile.permission(constant('Sakura\\Perms\\Site::DEACTIVATED')) %}
|
|
||||||
<h2 style="color: #888; text-shadow: 0 0 7px #888; margin-top: 0;">Deactivated</h2>
|
|
||||||
{% elseif profile.checkBan %}
|
|
||||||
<h2 style="color: #222; text-shadow: 0 0 7px #222; margin-top: 0;">Banned</h2>
|
|
||||||
{% elseif profile.permission(constant('Sakura\\Perms\\Site::RESTRICTED')) %}
|
|
||||||
<h2 style="color: #800; text-shadow: 0 0 7px #800; margin-top: 0;">Restricted</h2>
|
|
||||||
{% elseif profile.getWarnings %}
|
|
||||||
<h2 style="color: #A00; text-shadow: 0 0 7px #A00; margin-top: 0;">Bad</h2>
|
|
||||||
{% else %}
|
|
||||||
<h2 style="color: #080; text-shadow: 0 0 7px #080; margin-top: 0;">Good</h2>
|
|
||||||
{% endif %}
|
|
||||||
{% if profile.getWarnings %}
|
|
||||||
<table class="panelTable">
|
|
||||||
<tr>
|
|
||||||
<th>Action</th>
|
|
||||||
<th>Duration</th>
|
|
||||||
<th>Reason</th>
|
|
||||||
</tr>
|
|
||||||
{% for warning in profile.getWarnings %}
|
|
||||||
<tr class="{{ warning.warning_action_text|lower }}">
|
|
||||||
<td>{{ warning.warning_action_text }}</td>
|
|
||||||
<td>{{ warning.warning_length }} minute{% if warning.warning_length != 1 %}s{% endif %}</td>
|
|
||||||
<td>{{ warning.warning_reason }}</td>
|
|
||||||
</tr>
|
|
||||||
{% endfor %}
|
|
||||||
</table>
|
|
||||||
{% endif %}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="content-left content-column">
|
|
||||||
{% include 'profile/' ~ profileView ~ '.twig' %}
|
|
||||||
</div>
|
|
||||||
<div class="clear"></div>
|
|
||||||
</div>
|
|
||||||
{% else %}
|
{% else %}
|
||||||
<div class="content new-profile">
|
<div class="content new-profile">
|
||||||
<div class="new-profile-container">
|
<div class="new-profile-container">
|
||||||
|
@ -175,14 +97,14 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="new-profile-interactions">
|
<div class="new-profile-interactions">
|
||||||
<div class="new-profile-navigation">
|
<div class="new-profile-navigation">
|
||||||
<a class="fa fa-file-text-o" title="View {{ profile.username }}'s user page" href="{{ urls.format('USER_PROFILE', [profile.id]) }}"></a>
|
|
||||||
{#<a class="fa fa-list" title="View {{ profile.username }}'s threads" href="{{ urls.format('USER_THREADS', [profile.id]) }}"></a>
|
|
||||||
<a class="fa fa-reply" title="View {{ profile.username }}'s posts" href="{{ urls.format('USER_POSTS', [profile.id]) }}"></a>#}
|
|
||||||
<a class="fa fa-star" title="View {{ profile.username }}'s friends" href="{{ urls.format('USER_FRIENDS', [profile.id]) }}"></a>
|
|
||||||
{#<a class="fa fa-users" title="View {{ profile.username }}'s groups" href="{{ urls.format('USER_GROUPS', [profile.id]) }}"></a>#}
|
|
||||||
{% if not noUserpage %}
|
{% if not noUserpage %}
|
||||||
<a class="fa fa-comments-o" title="View {{ profile.username }}'s profile comments" href="{{ urls.format('USER_COMMENTS', [profile.id]) }}"></a>
|
<a class="fa fa-file-text-o" title="View {{ profile.username }}'s user page" href="#_userpage" onclick="profileMode('userpage');"></a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
{#<a class="fa fa-list" title="View {{ profile.username }}'s threads" href="#_threads" onclick="profileMode('threads');"></a>
|
||||||
|
<a class="fa fa-reply" title="View {{ profile.username }}'s posts" href="#_posts" onclick="profileMode('posts');"></a>#}
|
||||||
|
<a class="fa fa-star" title="View {{ profile.username }}'s friends" href="#_friends" onclick="profileMode('friends');"></a>
|
||||||
|
{#<a class="fa fa-users" title="View {{ profile.username }}'s groups" href="#_groups" onclick="profileMode('groups');"></a>#}
|
||||||
|
<a class="fa fa-comments-o" title="View {{ profile.username }}'s profile comments" href="#_comments" onclick="profileMode('comments');"></a>
|
||||||
</div>
|
</div>
|
||||||
{% if session.checkLogin %}
|
{% if session.checkLogin %}
|
||||||
<div class="new-profile-actions">
|
<div class="new-profile-actions">
|
||||||
|
@ -201,8 +123,24 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="new-profile-content">
|
<div class="new-profile-content">
|
||||||
<div class="new-profile-mode">
|
<div class="new-profile-mode">
|
||||||
<div>
|
<noscript><h1 class="stylised" style="text-align: center;">Please enable Javascript!</h1></noscript>
|
||||||
{% include 'profile/' ~ profileView ~ '.twig' %}
|
<div id="profile-mode-userpage" class="hidden">
|
||||||
|
{% include 'profile/userpage.twig' %}
|
||||||
|
</div>
|
||||||
|
<div id="profile-mode-friends" class="hidden">
|
||||||
|
{% include 'profile/friends.twig' %}
|
||||||
|
</div>
|
||||||
|
<div id="profile-mode-groups" class="hidden">
|
||||||
|
{% include 'profile/groups.twig' %}
|
||||||
|
</div>
|
||||||
|
<div id="profile-mode-threads" class="hidden">
|
||||||
|
{% include 'profile/threads.twig' %}
|
||||||
|
</div>
|
||||||
|
<div id="profile-mode-posts" class="hidden">
|
||||||
|
{% include 'profile/posts.twig' %}
|
||||||
|
</div>
|
||||||
|
<div id="profile-mode-comments" class="hidden">
|
||||||
|
{% include 'profile/comments.twig' %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="new-profile-data">
|
<div class="new-profile-data">
|
||||||
|
|
Reference in a new issue