zira/forum/forum.php
2019-10-09 18:27:31 +05:00

129 lines
5.9 KiB
PHP

<?php
/**
* Zira project.
* forum.php
* (c)2016 https://github.com/ziracms/zira
*/
namespace Forum;
use Zira;
use Dash;
class Forum {
const ROUTE = 'forum';
const VIEW_PLACEHOLDER_LABEL = 'label';
const PERMISSION_MODERATE = 'Moderate forum';
private static $_instance;
public static function getInstance() {
if (self::$_instance === null) {
self::$_instance = new self();
}
return self::$_instance;
}
public function onActivate() {
Zira\Assets::registerCSSAsset('forum/forum.css');
Zira\Assets::registerJSAsset('forum/forum.js');
}
public function onDeactivate() {
Zira\Assets::unregisterCSSAsset('forum/forum.css');
Zira\Assets::unregisterJSAsset('forum/forum.js');
}
public function beforeDispatch() {
Zira\Router::addRoute(self::ROUTE,'forum/index/index');
Zira\Router::addRoute(self::ROUTE.'/group','forum/index/group');
Zira\Router::addRoute(self::ROUTE.'/threads','forum/index/threads');
Zira\Router::addRoute(self::ROUTE.'/thread','forum/index/thread');
Zira\Router::addRoute(self::ROUTE.'/compose','forum/index/compose');
Zira\Router::addRoute(self::ROUTE.'/poll','forum/index/poll');
Zira\Router::addRoute(self::ROUTE.'/user','forum/index/user');
Zira\Router::addRoute(self::ROUTE.'/search','forum/index/search');
Zira\Assets::registerCSSAsset('forum/forum.css');
Zira\Assets::registerJSAsset('forum/forum.js');
}
public function bootstrap() {
Zira\View::addDefaultAssets();
Zira\View::addStyle('forum/forum.css');
Zira\View::addScript('forum/forum.js');
Zira\View::addParser(); // required for widget
if (ENABLE_CONFIG_DATABASE && Dash\Dash::getInstance()->isPanelEnabled() && Zira\Permission::check(Zira\Permission::TO_ACCESS_DASHBOARD) && (Zira\Permission::check(Zira\Permission::TO_CHANGE_OPTIONS) || Zira\Permission::check(self::PERMISSION_MODERATE))) {
Dash\Dash::loadDashLanguage();
Dash\Dash::getInstance()->addPanelModulesGroupItem('glyphicon glyphicon-comment', Zira\Locale::tm('Forum', 'forum', null, Dash\Dash::getDashLanguage()), null, 'forumsWindow()');
Dash\Dash::getInstance()->registerModuleWindowClass('forumsWindow', 'Forum\Windows\Forums', 'Forum\Models\Forums');
Dash\Dash::getInstance()->registerModuleWindowClass('forumCategoriesWindow', 'Forum\Windows\Categories', 'Forum\Models\Categories');
Dash\Dash::getInstance()->registerModuleWindowClass('forumCategoryWindow', 'Forum\Windows\Category', 'Forum\Models\Categories');
Dash\Dash::getInstance()->registerModuleWindowClass('forumWindow', 'Forum\Windows\Forum', 'Forum\Models\Forums');
Dash\Dash::getInstance()->registerModuleWindowClass('forumTopicsWindow', 'Forum\Windows\Topics', 'Forum\Models\Topics');
Dash\Dash::getInstance()->registerModuleWindowClass('forumTopicWindow', 'Forum\Windows\Topic', 'Forum\Models\Topics');
Dash\Dash::getInstance()->registerModuleWindowClass('forumMessagesWindow', 'Forum\Windows\Messages', 'Forum\Models\Messages');
Dash\Dash::getInstance()->registerModuleWindowClass('forumMessageWindow', 'Forum\Windows\Message', 'Forum\Models\Messages');
Dash\Dash::getInstance()->registerModuleWindowClass('forumFilesWindow', 'Forum\Windows\Files', 'Forum\Models\Files');
Dash\Dash::getInstance()->registerModuleWindowClass('forumSettingsWindow', 'Forum\Windows\Settings', 'Forum\Models\Settings');
Dash\Dash::unloadDashLanguage();
Dash\Dash::registerRenderJSHook(get_class(), 'moderatorJSHook');
}
if (Zira\User::isAuthorized()) {
Zira\Hook::register(Zira\User::PROFILE_LINKS_HOOK, array(get_class(), 'profileLinksHook'));
if (Zira\Permission::check(Zira\Permission::TO_ACCESS_DASHBOARD)) {
Zira\Hook::register(Dash\Dash::NOTIFICATION_HOOK, array(get_class(), 'newMessagesHook'));
}
}
Zira\Hook::register(Zira\User::PROFILE_INFO_HOOK, array(get_class(), 'profileInfoHook'));
}
public static function moderatorJSHook() {
$js = '$(document).ready(function(){';
$js .= 'if ($(\'.moderator-links-wrapper\').length>0){';
$js .= '$(\'.moderator-links-wrapper\').addClass(\'active\');';
$js .= '$(\'.moderator-links-wrapper\').children(\'.forum\').click(desk_forum_editor_forum_callback);';
$js .= '$(\'.moderator-links-wrapper\').children(\'.topic\').click(desk_forum_editor_topic_callback);';
$js .= '$(\'.moderator-links-wrapper\').children(\'.messages\').click(desk_forum_editor_messages_callback);';
$js .= '}';
$js .= '});'."\r\n";
return $js;
}
public static function profileLinksHook() {
return array(
'url' => self::ROUTE.'/user',
'icon' => 'glyphicon glyphicon-comment',
'title' => Zira\Locale::tm('My discussions', 'forum')
);
}
public static function profileInfoHook($user) {
return array(
'icon' => 'glyphicon glyphicon-pencil',
'title' => Zira\Locale::tm('Forum posts', 'forum'),
'description' => (int)$user->posts
);
}
public static function newMessagesHook() {
$messages = \Forum\Models\Message::getNewMessagesCount();
if ($messages == 0) return false;
return array(
'message'=>Zira\Locale::tm('%s forum messages was posted', 'forum', $messages),
'callback'=>Dash\Dash::getInstance()->getWindowJSName(\Forum\Windows\Forums::getClass())
);
}
public static function getThreadsOrderColumn() {
$order_by = Zira\Config::get('forum_threads_sorting', 'id');
if (!in_array($order_by, \Forum\Models\Topic::getFields())) {
$order_by = 'id';
}
return $order_by;
}
}