r20151211
Signed-off-by: Flashwave <me@flash.moe>
This commit is contained in:
parent
5cce6c3e82
commit
cf33d8a059
17 changed files with 199 additions and 426 deletions
|
@ -76,7 +76,8 @@ class mysql
|
|||
PDO::ATTR_EMULATE_PREPARES => false,
|
||||
PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING,
|
||||
]);
|
||||
} catch (PDOException $e) {
|
||||
}
|
||||
catch (PDOException $e) {
|
||||
// Catch connection errors
|
||||
trigger_error('SQL Driver: ' . $e->getMessage(), E_USER_ERROR);
|
||||
}
|
||||
|
|
|
@ -25,6 +25,7 @@ class Forum
|
|||
private $_lastPost = null;
|
||||
private $_forums = [];
|
||||
private $_threads = [];
|
||||
private $_permissions;
|
||||
|
||||
// Constructor
|
||||
public function __construct($forumId = 0)
|
||||
|
|
|
@ -1,333 +0,0 @@
|
|||
<?php
|
||||
/*
|
||||
* Discussion Board
|
||||
*/
|
||||
|
||||
namespace Sakura\Forum;
|
||||
|
||||
use Sakura\Main;
|
||||
use Sakura\Database;
|
||||
use Sakura\User;
|
||||
use Sakura\BBcode;
|
||||
|
||||
/**
|
||||
* Class Forums
|
||||
* @package Sakura
|
||||
*/
|
||||
class Forums
|
||||
{
|
||||
// Empty forum template
|
||||
public static $emptyForum = [
|
||||
'forum_id' => 0,
|
||||
'forum_name' => 'Forum',
|
||||
'forum_desc' => '',
|
||||
'forum_link' => '',
|
||||
'forum_category' => 0,
|
||||
'forum_type' => 1,
|
||||
'forum_posts' => 0,
|
||||
'forum_topics' => 0,
|
||||
];
|
||||
|
||||
// Get a forum or category
|
||||
public static function getForum($id)
|
||||
{
|
||||
|
||||
// Get the forumlist from the database
|
||||
$forums = Database::fetch('forums');
|
||||
|
||||
// Sneak the template in the array
|
||||
$forums['fb'] = self::$emptyForum;
|
||||
|
||||
// Create an array to store the forum once we found it
|
||||
$forum = [];
|
||||
|
||||
// Try to find the requested forum
|
||||
foreach ($forums as $list) {
|
||||
// Once found set $forum to $list and break the loop
|
||||
if ($list['forum_id'] == $id) {
|
||||
$forum['forum'] = $list;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// If $forum is still empty after the foreach return false
|
||||
if (empty($forum)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Create conditions for fetching the forums
|
||||
$conditions['forum_category'] = [$id, '='];
|
||||
|
||||
// If the current category is 0 (the built in fallback) prevent getting categories
|
||||
if ($id == 0) {
|
||||
$conditions['forum_type'] = ['1', '!='];
|
||||
}
|
||||
|
||||
// Check if this forum/category has any subforums
|
||||
$forum['forums'] = Database::fetch('forums', true, $conditions);
|
||||
|
||||
// Get the userdata related to last posts
|
||||
foreach ($forum['forums'] as $key => $sub) {
|
||||
// Get last post in forum
|
||||
$lastPost = Database::fetch('posts', false, [
|
||||
'forum_id' => [$sub['forum_id'], '='],
|
||||
], ['post_id', true]);
|
||||
|
||||
$forum['forums'][$key]['last_poster'] = new User($lastPost['poster_id']);
|
||||
$forum['forums'][$key]['last_post'] = array_merge(
|
||||
empty($lastPost) ? [] : $lastPost,
|
||||
['elapsed' => Main::timeElapsed($lastPost['post_time'])]
|
||||
);
|
||||
}
|
||||
|
||||
// Lastly grab the topics for this forum
|
||||
$forum['topics'] = self::getTopics($forum['forum']['forum_id']);
|
||||
|
||||
// Return the forum/category
|
||||
return $forum;
|
||||
}
|
||||
|
||||
// Getting all topics from a forum
|
||||
public static function getTopics($id)
|
||||
{
|
||||
|
||||
// Get the topics from the database
|
||||
$topics = Database::fetch('topics', true, [
|
||||
'forum_id' => [$id, '='],
|
||||
]);
|
||||
|
||||
// Get the userdata related to last posts
|
||||
foreach ($topics as $key => $topic) {
|
||||
// Get the reply count
|
||||
$topics[$key]['reply_count'] = Database::count('posts', [
|
||||
'topic_id' => [$topic['topic_id'], '='],
|
||||
])[0];
|
||||
|
||||
// Get first post in topics
|
||||
$firstPost = Database::fetch('posts', false, [
|
||||
'topic_id' => [$topic['topic_id'], '='],
|
||||
]);
|
||||
|
||||
$topics[$key]['first_poster'] = new User($firstPost['poster_id']);
|
||||
|
||||
$topics[$key]['first_post'] = array_merge(
|
||||
empty($firstPost) ? [] : $firstPost,
|
||||
['elapsed' => Main::timeElapsed($firstPost['post_time'])]
|
||||
);
|
||||
|
||||
// Get last post in topics
|
||||
$lastPost = Database::fetch('posts', false, [
|
||||
'topic_id' => [$topic['topic_id'], '='],
|
||||
], ['post_id', true]);
|
||||
|
||||
$topics[$key]['last_poster'] = new User($lastPost['poster_id']);
|
||||
|
||||
$topics[$key]['last_post'] = array_merge(
|
||||
empty($lastPost) ? [] : $lastPost,
|
||||
['elapsed' => Main::timeElapsed($lastPost['post_time'])]
|
||||
);
|
||||
}
|
||||
|
||||
return $topics;
|
||||
}
|
||||
|
||||
// Get posts of a thread
|
||||
public static function getTopic($id, $ignoreView = false)
|
||||
{
|
||||
|
||||
// Get the topic data from the database
|
||||
$topicInfo = Database::fetch('topics', false, [
|
||||
'topic_id' => [$id, '='],
|
||||
]);
|
||||
|
||||
// Check if there actually is anything
|
||||
if (empty($topicInfo)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Up the view count
|
||||
if (!$ignoreView) {
|
||||
// Get the new count
|
||||
$topicInfo['topic_views'] = $topicInfo['topic_views'] + 1;
|
||||
|
||||
// Update the count
|
||||
Database::update('topics', [
|
||||
[
|
||||
'topic_views' => $topicInfo['topic_views'],
|
||||
],
|
||||
[
|
||||
'topic_id' => [$id, '='],
|
||||
],
|
||||
]);
|
||||
}
|
||||
|
||||
// Get the posts from the database
|
||||
$rawPosts = Database::fetch('posts', true, [
|
||||
'topic_id' => [$id, '='],
|
||||
]);
|
||||
|
||||
// Create storage array
|
||||
$topic = [];
|
||||
|
||||
// Add forum data
|
||||
$topic['forum'] = self::getForum($topicInfo['forum_id']);
|
||||
|
||||
// Store the topic info
|
||||
$topic['topic'] = $topicInfo;
|
||||
|
||||
// Get first post in topics
|
||||
$firstPost = Database::fetch('posts', false, [
|
||||
'topic_id' => [$topic['topic']['topic_id'], '='],
|
||||
]);
|
||||
|
||||
$topic['topic']['first_poster'] = new User($firstPost['poster_id']);
|
||||
|
||||
$topic['topic']['first_post'] = array_merge(
|
||||
empty($firstPost) ? [] : $firstPost,
|
||||
['elapsed' => Main::timeElapsed($firstPost['post_time'])]
|
||||
);
|
||||
|
||||
// Get last post in topics
|
||||
$lastPost = Database::fetch('posts', false, [
|
||||
'topic_id' => [$topic['topic']['topic_id'], '='],
|
||||
], ['post_id', true]);
|
||||
|
||||
$topic['topic']['last_poster'] = new User($lastPost['poster_id']);
|
||||
|
||||
$topic['topic']['last_post'] = array_merge(
|
||||
empty($lastPost) ? [] : $lastPost,
|
||||
['elapsed' => Main::timeElapsed($lastPost['post_time'])]
|
||||
);
|
||||
|
||||
// Create space for posts
|
||||
$topic['posts'] = [];
|
||||
|
||||
// Parse the data of every post
|
||||
foreach ($rawPosts as $post) {
|
||||
// Add post and metadata to the global storage array
|
||||
$topic['posts'][$post['post_id']] = array_merge($post, [
|
||||
'user' => (new User($post['poster_id'])),
|
||||
'elapsed' => Main::timeElapsed($post['post_time']),
|
||||
'is_op' => ($post['poster_id'] == $firstPost['poster_id'] ? '1' : '0'),
|
||||
'parsed_post' => BBcode::toHTML($post['post_text']),
|
||||
]);
|
||||
|
||||
// Just in case
|
||||
unset($_POSTER);
|
||||
}
|
||||
|
||||
// Return the compiled topic data
|
||||
return $topic;
|
||||
}
|
||||
|
||||
// Get a forum ID from a topic ID
|
||||
public static function getForumIdFromTopicId($id)
|
||||
{
|
||||
|
||||
// Get the topic
|
||||
$topic = Database::fetch('topics', false, [
|
||||
'topic_id' => [$id, '='],
|
||||
]);
|
||||
|
||||
// Return false if nothing was returned
|
||||
if (empty($topic)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Return the forum id
|
||||
return $topic['forum_id'];
|
||||
}
|
||||
|
||||
// Get a topic ID from a post ID
|
||||
public static function getTopicIdFromPostId($id)
|
||||
{
|
||||
|
||||
// Get the post
|
||||
$post = Database::fetch('posts', false, [
|
||||
'post_id' => [$id, '='],
|
||||
]);
|
||||
|
||||
// Return false if nothing was returned
|
||||
if (empty($post)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Return the topic id
|
||||
return $post['topic_id'];
|
||||
}
|
||||
|
||||
// Get forum statistics of a user
|
||||
public static function getUserStats($uid)
|
||||
{
|
||||
|
||||
// Collect the stats
|
||||
return [
|
||||
'posts' => Database::count(
|
||||
'posts',
|
||||
['poster_id' => [$uid, '=']]
|
||||
)[0],
|
||||
'topics' => count(Database::fetch(
|
||||
'posts',
|
||||
true,
|
||||
['poster_id' => [$uid, '=']],
|
||||
['post_time'],
|
||||
null,
|
||||
['topic_id']
|
||||
)),
|
||||
];
|
||||
}
|
||||
|
||||
// Creating a new post
|
||||
public static function createPost($poster, $title, $text, $forum, $topic = 0, $parse = 0, $signature = 0, $emotes = 0, $type = 0, $status = 0)
|
||||
{
|
||||
|
||||
// Check if we're replying to a thread
|
||||
$getThread = Database::fetch('topics', false, ['topic_id' => [$topic, '=']]);
|
||||
|
||||
// If nothing was returned create a new thread
|
||||
if (!$getThread) {
|
||||
// Insert the required data
|
||||
Database::insert('topics', [
|
||||
'forum_id' => $forum,
|
||||
'topic_title' => $title,
|
||||
'topic_time' => time(),
|
||||
'topic_status' => $status,
|
||||
'topic_type' => $type,
|
||||
]);
|
||||
|
||||
// Fetch the last insert
|
||||
$getThread = Database::fetch('topics', false, [
|
||||
'topic_id' => [Database::lastInsertID(), '='],
|
||||
]);
|
||||
}
|
||||
|
||||
// Insert the post
|
||||
Database::insert('posts', [
|
||||
'topic_id' => $getThread['topic_id'],
|
||||
'forum_id' => $getThread['forum_id'],
|
||||
'poster_id' => $poster,
|
||||
'post_time' => time(),
|
||||
'post_signature' => $signature,
|
||||
'post_subject' => $title,
|
||||
'post_text' => $text,
|
||||
]);
|
||||
|
||||
// Fetch the last insert
|
||||
$getPost = Database::fetch('posts', false, [
|
||||
'post_id' => [Database::lastInsertID(), '='],
|
||||
]);
|
||||
|
||||
// Update the topic with the last details
|
||||
Database::update('topics', [
|
||||
[
|
||||
'topic_last_reply' => time(),
|
||||
],
|
||||
[
|
||||
'topic_id' => [$getPost['topic_id'], '='],
|
||||
],
|
||||
]);
|
||||
|
||||
// Return success
|
||||
return [1, 'SUCCESS', $getPost['forum_id'], $getPost['topic_id'], $getPost['post_id']];
|
||||
}
|
||||
}
|
26
libraries/Forum/Permissions.php
Normal file
26
libraries/Forum/Permissions.php
Normal file
|
@ -0,0 +1,26 @@
|
|||
<?php
|
||||
/*
|
||||
* Forum specific permissions class
|
||||
*/
|
||||
|
||||
namespace Sakura\Forum;
|
||||
|
||||
use Sakura\Database;
|
||||
|
||||
/**
|
||||
* Class Permissions
|
||||
* @package Sakura
|
||||
*/
|
||||
class Permissions
|
||||
{
|
||||
// Permissions
|
||||
const VIEW = 1;
|
||||
const REPLY = 2;
|
||||
const CREATE_THREADS = 4;
|
||||
const EDIT_OWN = 8;
|
||||
const DELETE_OWN = 16;
|
||||
const STICKY = 32;
|
||||
const ANNOUNCEMENT = 64;
|
||||
const EDIT_ANY = 128;
|
||||
const DELETE_ANY = 256;
|
||||
}
|
|
@ -59,6 +59,43 @@ class Post
|
|||
$this->parsed = BBcode::toHTML(htmlentities($this->text));
|
||||
}
|
||||
|
||||
// Create a new post
|
||||
public static function create($subject, $text, User $poster, $thread = 0, $forum = 0)
|
||||
{
|
||||
// If no thread is specified create a new one
|
||||
if ($thread) {
|
||||
$thread = new Thread($thread);
|
||||
} else {
|
||||
$thread = Thread::create($forum, $subject);
|
||||
}
|
||||
|
||||
// Stop if the thread ID is 0
|
||||
if ($thread->id == 0) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// Insert the post
|
||||
Database::insert('posts', [
|
||||
'topic_id' => $thread->id,
|
||||
'forum_id' => $thread->forum,
|
||||
'poster_id' => $poster->id(),
|
||||
'poster_ip' => Main::getRemoteIP(),
|
||||
'post_time' => time(),
|
||||
'post_signature' => '1',
|
||||
'post_subject' => $subject,
|
||||
'post_text' => $text,
|
||||
]);
|
||||
|
||||
// Get post id
|
||||
$id = Database::lastInsertID();
|
||||
|
||||
// Update the last post date
|
||||
$thread->lastUpdate();
|
||||
|
||||
// Return the object
|
||||
return new Post($id);
|
||||
}
|
||||
|
||||
// Time elapsed since creation
|
||||
public function timeElapsed()
|
||||
{
|
||||
|
|
|
@ -1,23 +0,0 @@
|
|||
<?php
|
||||
/*
|
||||
* Posting handler
|
||||
*/
|
||||
|
||||
namespace Sakura\Forum;
|
||||
|
||||
use Sakura\Main;
|
||||
use Sakura\Database;
|
||||
use Sakura\User;
|
||||
use Sakura\BBcode;
|
||||
|
||||
/**
|
||||
* Class Posting
|
||||
* @package Sakura
|
||||
*/
|
||||
class Posting
|
||||
{
|
||||
// Construct a new post action
|
||||
public function __construct($forum, $thread = null)
|
||||
{
|
||||
}
|
||||
}
|
|
@ -50,6 +50,22 @@ class Thread
|
|||
}
|
||||
}
|
||||
|
||||
// Create a new topic
|
||||
public static function create($forum, $title, $status = 0, $type = 0)
|
||||
{
|
||||
// Create the database entry
|
||||
Database::insert('topics', [
|
||||
'forum_id' => $forum,
|
||||
'topic_title' => $title,
|
||||
'topic_time' => time(),
|
||||
'topic_status' => $status,
|
||||
'topic_type' => $type,
|
||||
]);
|
||||
|
||||
// Return the thread object
|
||||
return new Thread(Database::lastInsertID());
|
||||
}
|
||||
|
||||
// Posts
|
||||
public function posts()
|
||||
{
|
||||
|
@ -190,4 +206,17 @@ class Thread
|
|||
],
|
||||
]);
|
||||
}
|
||||
|
||||
// Update last post timestamp
|
||||
public function lastUpdate()
|
||||
{
|
||||
Database::update('topics', [
|
||||
[
|
||||
'topic_last_reply' => time(),
|
||||
],
|
||||
[
|
||||
'topic_id' => [$this->id, '='],
|
||||
],
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -13,22 +13,17 @@ class Permissions
|
|||
{
|
||||
// Fallback permission data
|
||||
private static $fallback = [
|
||||
|
||||
'rank_id' => 0,
|
||||
'user_id' => 0,
|
||||
'permissions_site' => 1,
|
||||
'permissions_manage' => 0,
|
||||
'permissions_forums' => 0,
|
||||
'permissions_inherit' => 111,
|
||||
|
||||
'permissions_inherit' => 11,
|
||||
];
|
||||
|
||||
// Global permissions table
|
||||
protected static $permissions = [
|
||||
|
||||
// Site permissions
|
||||
'SITE' => [
|
||||
|
||||
'DEACTIVATED' => 1, // Is a user deactivated
|
||||
'RESTRICTED' => 2, // Is a user restricted
|
||||
'ALTER_PROFILE' => 4, // Can alter their profile data
|
||||
|
@ -61,29 +56,17 @@ class Permissions
|
|||
'DELETE_COMMENTS' => 536870912, // User can delete own comments
|
||||
'VOTE_COMMENTS' => 1073741824, // User can vote on comments
|
||||
'CHANGE_SIGNATURE' => 2147483648, // User can vote on comments
|
||||
|
||||
],
|
||||
|
||||
// Forum permissions
|
||||
'FORUM' => [
|
||||
|
||||
'USE_FORUM' => 1,
|
||||
|
||||
],
|
||||
|
||||
// Site management permissions
|
||||
'MANAGE' => [
|
||||
|
||||
'USE_MANAGE' => 1,
|
||||
|
||||
],
|
||||
|
||||
];
|
||||
|
||||
// Checking if a user has the permissions to do a thing
|
||||
public static function check($layer, $action, $operator, $mode = 0)
|
||||
{
|
||||
|
||||
// Check if the permission layer and the permission itself exists
|
||||
if (!array_key_exists($layer, self::$permissions) || !array_key_exists($action, self::$permissions[$layer])) {
|
||||
return false;
|
||||
|
@ -108,7 +91,6 @@ class Permissions
|
|||
// Get permission data of a rank from the database
|
||||
public static function getRankPermissions($ranks)
|
||||
{
|
||||
|
||||
// Container array
|
||||
$getRanks = [];
|
||||
$perms = [];
|
||||
|
@ -129,20 +111,14 @@ class Permissions
|
|||
if (empty($perms)) {
|
||||
// Store the data of the current rank in $perms
|
||||
$perms = [
|
||||
|
||||
'SITE' => $rank['permissions_site'],
|
||||
'MANAGE' => $rank['permissions_manage'],
|
||||
'FORUM' => $rank['permissions_forums'],
|
||||
|
||||
];
|
||||
} else {
|
||||
// Perform a bitwise OR on the ranks
|
||||
$perms = [
|
||||
|
||||
'SITE' => $perms['SITE'] | $rank['permissions_site'],
|
||||
'MANAGE' => $perms['MANAGE'] | $rank['permissions_manage'],
|
||||
'FORUM' => $perms['FORUM'] | $rank['permissions_forums'],
|
||||
|
||||
];
|
||||
}
|
||||
}
|
||||
|
@ -154,7 +130,6 @@ class Permissions
|
|||
// Get permission data for a user
|
||||
public static function getUserPermissions($uid)
|
||||
{
|
||||
|
||||
// Get user data
|
||||
$user = new User($uid);
|
||||
|
||||
|
@ -182,11 +157,6 @@ class Permissions
|
|||
$rankPerms['MANAGE'] = $userPerms['permissions_manage'];
|
||||
}
|
||||
|
||||
// Override forum permissions
|
||||
if (!$inheritance[2]) {
|
||||
$rankPerms['FORUM'] = $userPerms['permissions_forums'];
|
||||
}
|
||||
|
||||
// Return permissions
|
||||
return $rankPerms;
|
||||
}
|
||||
|
|
|
@ -191,7 +191,20 @@ class User
|
|||
// Get user's forum statistics
|
||||
public function forumStats()
|
||||
{
|
||||
return Forum\Forums::getUserStats($this->data['user_id']);
|
||||
return [
|
||||
'posts' => Database::count(
|
||||
'posts',
|
||||
['poster_id' => [$this->id(), '=']]
|
||||
)[0],
|
||||
'topics' => count(Database::fetch(
|
||||
'posts',
|
||||
true,
|
||||
['poster_id' => [$this->id(), '=']],
|
||||
['post_time'],
|
||||
null,
|
||||
['topic_id']
|
||||
)),
|
||||
];
|
||||
}
|
||||
|
||||
// Get amount of time since user events using the same format as dates()
|
||||
|
|
|
@ -156,6 +156,22 @@ a:active {
|
|||
top: 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Logo
|
||||
*/
|
||||
#banner {
|
||||
height: 120px;
|
||||
width: 1024px;
|
||||
margin: 0 auto 5px;
|
||||
box-shadow: 0 2px 6px rgba(0, 0, 0, .75);
|
||||
}
|
||||
|
||||
#banner > a {
|
||||
display: block;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
/*
|
||||
* Site footer
|
||||
*/
|
||||
|
|
|
@ -640,6 +640,25 @@ a.default:active {
|
|||
text-align: center;
|
||||
}
|
||||
|
||||
.headerAnnouncement {
|
||||
display: block;
|
||||
margin: 10px auto;
|
||||
text-align: center;
|
||||
padding: 2px;
|
||||
border: 1px solid #9475B2;
|
||||
box-shadow: 0 0 3px #9475B2;
|
||||
border-radius: 3px;
|
||||
max-width: 1024px;
|
||||
height: 120px;
|
||||
background: #D3BFFF no-repeat scroll center center;
|
||||
}
|
||||
|
||||
.headerAnnouncement > a {
|
||||
display: block;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
/*
|
||||
* Site footer styling
|
||||
*/
|
||||
|
|
|
@ -20,13 +20,13 @@ $topicId = isset($_GET['t']) ?
|
|||
$_GET['t'] :
|
||||
(
|
||||
isset($_GET['p']) ?
|
||||
Forum\Forums::getTopicIdFromPostId($_GET['p']) :
|
||||
(new Forum\Post($_GET['p']))->thread :
|
||||
0
|
||||
);
|
||||
|
||||
$forumId = isset($_GET['f']) ?
|
||||
$_GET['f'] :
|
||||
Forum\Forums::getForumIdFromTopicId($topicId);
|
||||
($thread = new Forum\Thread($topicId))->forum;
|
||||
|
||||
$mode = isset($_GET['f']) ? 'f' : (isset($_GET['t']) ? 't' : (isset($_GET['p']) ? 'p' : null));
|
||||
|
||||
|
@ -38,10 +38,10 @@ $posting = [
|
|||
// Check if we're in reply mode
|
||||
if ($mode != 'f') {
|
||||
// Attempt to get the topic
|
||||
$thread = Forum\Forums::getTopic($topicId, true);
|
||||
$thread = $thread ? $thread : new Forum\Thread($topicId);
|
||||
|
||||
// Prompt an error if the topic doesn't exist
|
||||
if (!$thread) {
|
||||
if (!$thread->id) {
|
||||
// Add page specific things
|
||||
$renderData['page'] = [
|
||||
'redirect' => (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : $urls->format('FORUM_INDEX')),
|
||||
|
@ -57,17 +57,17 @@ if ($mode != 'f') {
|
|||
}
|
||||
|
||||
// Check if we're in quote mode
|
||||
if ($mode == 'p' && isset($_GET['quote']) && $_GET['quote'] == $_GET['p'] && array_key_exists($_GET['p'], $thread['posts'])) {
|
||||
if ($mode == 'p' && isset($_GET['quote']) && $_GET['quote'] == $_GET['p'] && array_key_exists($_GET['p'], $thread->posts())) {
|
||||
// Reassign post for ease
|
||||
$post = $thread['posts'][$_GET['p']];
|
||||
$post = $thread->posts()[$_GET['p']];
|
||||
|
||||
// Add subject to render data
|
||||
$posting['text'] = '[quote=' . (new User($post['poster_id']))->username() . ']' . BBcode::toEditor($post['post_text']) . '[/quote]';
|
||||
$posting['text'] = '[quote=' . $post->poster->username() . ']' . BBcode::toEditor($post->text) . '[/quote]';
|
||||
|
||||
// Post editing
|
||||
} elseif ($mode == 'p' && isset($_GET['edit']) && $_GET['edit'] == $_GET['p'] && array_key_exists($_GET['p'], $thread['posts'])) {
|
||||
} elseif ($mode == 'p' && isset($_GET['edit']) && $_GET['edit'] == $_GET['p'] && array_key_exists($_GET['p'], $thread->posts())) {
|
||||
// Checks
|
||||
if ($thread['posts'][$_GET['p']]['poster_id'] != $currentUser->id()) {
|
||||
if ($thread->posts()[$_GET['p']]->poster->id() != $currentUser->id()) {
|
||||
// Add page specific things
|
||||
$renderData['page'] = [
|
||||
'redirect' => (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : $urls->format('FORUM_INDEX')),
|
||||
|
@ -83,18 +83,18 @@ if ($mode != 'f') {
|
|||
}
|
||||
|
||||
// Reassign post for ease
|
||||
$post = $thread['posts'][$_GET['p']];
|
||||
$post = $thread->posts()[$_GET['p']];
|
||||
|
||||
// Set variables
|
||||
$posting = array_merge($posting, [
|
||||
'subject' => $post['post_subject'],
|
||||
'text' => BBcode::toEditor($post['post_text']),
|
||||
'id' => $post['post_id'],
|
||||
'subject' => $post->subject,
|
||||
'text' => BBcode::toEditor($post->text),
|
||||
'id' => $post->id,
|
||||
]);
|
||||
// Post deletion
|
||||
} elseif ($mode == 'p' && isset($_GET['delete']) && $_GET['delete'] == $_GET['p'] && array_key_exists($_GET['p'], $thread['posts'])) {
|
||||
} elseif ($mode == 'p' && isset($_GET['delete']) && $_GET['delete'] == $_GET['p'] && array_key_exists($_GET['p'], $thread->posts())) {
|
||||
// Checks
|
||||
if ($thread['posts'][$_GET['p']]['poster_id'] != $currentUser->id()) {
|
||||
if ($thread->posts()[$_GET['p']]->poster->id() != $currentUser->id()) {
|
||||
// Add page specific things
|
||||
$renderData['page'] = [
|
||||
'redirect' => (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : $urls->format('FORUM_INDEX')),
|
||||
|
@ -119,18 +119,18 @@ if ($mode != 'f') {
|
|||
]);
|
||||
|
||||
// Reload the topic
|
||||
$thread = Forum\Forums::getTopic($topicId, true);
|
||||
$thread = new Forum\Thread($topicId);
|
||||
|
||||
// If there's no more posts left in the topic delete it as well
|
||||
if (!count($thread['posts'])) {
|
||||
if (!$thread->replyCount()) {
|
||||
Database::delete('topics', [
|
||||
'topic_id' => [$thread['topic']['topic_id'], '='],
|
||||
'topic_id' => [$thread->id, '='],
|
||||
]);
|
||||
}
|
||||
|
||||
// Add page specific things
|
||||
$renderData['page'] = [
|
||||
'redirect' => (count($thread['posts']) ? $urls->format('FORUM_THREAD', [$thread['topic']['topic_id']]) : $urls->format('FORUM_INDEX')),
|
||||
'redirect' => ($thread->replyCount() ? $urls->format('FORUM_THREAD', [$thread->id]) : $urls->format('FORUM_INDEX')),
|
||||
'message' => 'Your post has been deleted!',
|
||||
];
|
||||
|
||||
|
@ -149,9 +149,9 @@ if ($mode != 'f') {
|
|||
|
||||
// Form mode
|
||||
$renderData = array_merge($renderData, [
|
||||
'message' => 'Are you sure you want to delete your reply to ' . $thread['topic']['topic_title'] . '?',
|
||||
'message' => 'Are you sure you want to delete your reply to ' . $thread->title . '?',
|
||||
'conditions' => [
|
||||
'post_id' => $thread['posts'][$_GET['p']]['post_id'],
|
||||
'post_id' => $thread->posts()[$_GET['p']]->id,
|
||||
],
|
||||
]);
|
||||
|
||||
|
@ -165,20 +165,20 @@ if ($mode != 'f') {
|
|||
|
||||
// Add subject to render data
|
||||
if (!isset($posting['subject'])) {
|
||||
$posting['subject'] = 'Re: ' . $thread['topic']['topic_title'];
|
||||
$posting['subject'] = 'Re: ' . $thread->title;
|
||||
}
|
||||
}
|
||||
|
||||
// Check if a post is being made
|
||||
if (isset($_POST['post'])) {
|
||||
// Attempt to make the post
|
||||
$makePost = Forum\Forums::createPost($currentUser->id(), $_POST['subject'], $_POST['text'], $forumId, $topicId, 1, 1, 1);
|
||||
$post = Forum\Post::create($_POST['subject'], $_POST['text'], $currentUser, $topicId, $forumId);
|
||||
|
||||
// Add page specific things
|
||||
$renderData['page'] = [
|
||||
'redirect' => $urls->format('FORUM_THREAD', [$makePost[3]]),
|
||||
'redirect' => $urls->format('FORUM_POST', [$post->id]) . '#p' . $post->id,
|
||||
'message' => 'Made the post!',
|
||||
'success' => $makePost[0],
|
||||
'success' => 1,
|
||||
];
|
||||
|
||||
// Print page contents or if the AJAX request is set only display the render data
|
||||
|
|
|
@ -18,7 +18,7 @@ $template->setTemplate($templateName);
|
|||
// Switch between modes (we only allow this to be used by logged in user)
|
||||
if (isset($_REQUEST['mode'])
|
||||
&& Users::checkLogin()
|
||||
&& Permissions::check('SITE', 'OBTAIN_PREMIUM', $currentUser->id(), 1)) {
|
||||
&& $currentUser->checkPermission('SITE', 'OBTAIN_PREMIUM')) {
|
||||
// Initialise Payments class
|
||||
if (!Payments::init()) {
|
||||
header('Location: ' . $urls->format('SITE_PREMIUM') . '?fail=true');
|
||||
|
|
|
@ -12,7 +12,7 @@ require_once str_replace(basename(__DIR__), '', dirname(__FILE__)) . 'sakura.php
|
|||
// Attempt to get the thread
|
||||
$thread = new Forum\Thread(
|
||||
isset($_GET['p'])
|
||||
? Forum\Forums::getTopicIdFromPostId($_GET['p'])
|
||||
? (new Forum\Post($_GET['p']))->thread
|
||||
: (isset($_GET['t']) ? $_GET['t'] : 0)
|
||||
);
|
||||
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
namespace Sakura;
|
||||
|
||||
// Define Sakura version
|
||||
define('SAKURA_VERSION', '20151210');
|
||||
define('SAKURA_VERSION', '20151211');
|
||||
define('SAKURA_VLABEL', 'Eminence');
|
||||
define('SAKURA_COLOUR', '#6C3082');
|
||||
|
||||
|
@ -54,7 +54,7 @@ require_once ROOT . 'libraries/User.php';
|
|||
require_once ROOT . 'libraries/Users.php';
|
||||
require_once ROOT . 'libraries/Whois.php';
|
||||
require_once ROOT . 'libraries/Forum/Forum.php';
|
||||
require_once ROOT . 'libraries/Forum/Forums.php';
|
||||
require_once ROOT . 'libraries/Forum/Permissions.php';
|
||||
require_once ROOT . 'libraries/Forum/Post.php';
|
||||
require_once ROOT . 'libraries/Forum/Thread.php';
|
||||
|
||||
|
@ -154,6 +154,8 @@ if (!defined('SAKURA_NO_TPL')) {
|
|||
'currentPage' => '//' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'],
|
||||
'referrer' => (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : null),
|
||||
'onlineTimeout' => Config::get('max_online_time'),
|
||||
'announcementImage' => Config::get('header_announcement_image'),
|
||||
'announcementLink' => Config::get('header_announcement_link'),
|
||||
|
||||
'recaptchaPublic' => Config::get('recaptcha_public'),
|
||||
'recaptchaEnabled' => Config::get('recaptcha'),
|
||||
|
|
|
@ -82,7 +82,7 @@
|
|||
{% endif %}
|
||||
<div id="navigation">
|
||||
<ul class="site-menu">
|
||||
<li title="Home" class="logo"><a href="{{ urls.format('SITE_HOME') }}" {% if sakura.siteLogo %} style="background-image: url('{{ sakura.siteLogo }}');"{% endif %}></a></li>
|
||||
<li title="Home" class="logo"><a href="{{ urls.format('SITE_HOME') }}"></a></li>
|
||||
<li title="News"><a href="{{ urls.format('SITE_NEWS') }}" class="fa fa-newspaper-o"></a></li>
|
||||
<li title="Chat"><a href="//chat.{{ sakura.urlMain }}/" class="fa fa-commenting"></a></li>
|
||||
<li title="Forums"><a href="{{ urls.format('FORUM_INDEX') }}" class="fa fa-comments"></a></li>
|
||||
|
@ -115,7 +115,13 @@
|
|||
<li><a href="{% if session.checkLogin %}{{ urls.format('USER_PROFILE', [user.id]) }}{% else %}{{ urls.format('SITE_LOGIN') }}{% endif %}"><img src="{{ sakura.contentPath }}/pixel.png" alt="{{ user.username }}" style="background-image: url('{{ urls.format('IMAGE_AVATAR', [user.id]) }}');" class="nav-avatar" /></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
{#<div id="banner" style="height: 120px; width: 1024px; background: url('http://i.flash.moe/headtest.png'); margin: 0 auto 5px; box-shadow: 0 2px 6px rgba(0, 0, 0, .75);"></div>#}
|
||||
|
||||
{% if sakura.siteLogo or sakura.announcementImage %}
|
||||
<div id="banner" style="background: url('{% if sakura.announcementImage %}{{ sakura.announcementImage }}{% else %}{{ sakura.siteLogo }}{% endif %}');">
|
||||
<a href="{% if sakura.announcementImage and sakura.announcementLink %}{{ sakura.announcementLink }}{% else %}{{ urls.format('SITE_HOME') }}{% endif %}"></a>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<div id="content">
|
||||
{% block content %}
|
||||
<div class="platform">
|
||||
|
@ -128,7 +134,7 @@
|
|||
<div class="inner">
|
||||
<div class="ft-logo"></div>
|
||||
<div class="ft-text">
|
||||
<div>Powered by <a href="https://github.com/flashwave/sakura/" target="_blank">Sakura</a>, <a href="http://flash.moe/" target="_blank">Flashwave</a> 2013-2015</div>
|
||||
<div>Powered by <a href="https://github.com/flashwave/sakura/" target="_blank">Sakura</a>, <a href="https://flash.moe/" target="_blank">Flashwave</a> 2013-2015</div>
|
||||
<div><a href="{{ urls.format('INFO_PAGE', ['terms']) }}">Terms of Service</a> | <a href="{{ urls.format('INFO_PAGE', ['contact']) }}">Contact</a> | <a href="{{ urls.format('SITE_FAQ') }}">FAQ</a> | <a href="{{ urls.format('INFO_PAGE', ['rules']) }}">Rules</a> | <a href="https://sakura.flash.moe/">Changelog</a> | <a href="https://fiistat.us/">Status</a></div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -222,6 +222,14 @@
|
|||
</div>
|
||||
</noscript>
|
||||
|
||||
{% if sakura.announcementImage %}
|
||||
<div class="headerAnnouncement" style="background-image: url('{{ sakura.announcementImage }}');">
|
||||
{% if sakura.announcementLink %}
|
||||
<a href="{{ sakura.announcementLink }}" class="clean"></a>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% block content %}
|
||||
<h1 class="stylised" style="text-align: center; margin: 2em auto;">{{ php.self }} is now printing!</h1>
|
||||
{% endblock %}
|
||||
|
@ -268,11 +276,12 @@
|
|||
// Column colours for actions
|
||||
var changelogColours = [
|
||||
'inherit', // Unknown
|
||||
'#2A2', // Added
|
||||
'#2AA', // Updated
|
||||
'#2AA', // Fixed
|
||||
'#A22', // Removed
|
||||
'#62C' // Exported
|
||||
'#2A2', // Add
|
||||
'#2AA', // Update
|
||||
'#2AA', // Fix
|
||||
'#A22', // Remove
|
||||
'#62C', // Export
|
||||
'#C44' // Revert
|
||||
];
|
||||
|
||||
window.addEventListener("load", function() {
|
||||
|
|
Reference in a new issue