Example #1
0
 public function display($req, $res, $args)
 {
     if (!isset($args['page'])) {
         $args['page'] = null;
     }
     if (!isset($args['pid'])) {
         $args['pid'] = null;
     }
     if (!isset($args['name'])) {
         $args['name'] = null;
     }
     Container::get('hooks')->fire('controller.topic.display', $args['id'], $args['name'], $args['page'], $args['pid']);
     // Antispam feature
     $lang_antispam_questions = (require ForumEnv::get('FEATHER_ROOT') . 'featherbb/lang/' . User::get()->language . '/antispam.php');
     $index_questions = rand(0, count($lang_antispam_questions) - 1);
     // Fetch some informations about the topic
     $cur_topic = $this->model->get_info_topic($args['id']);
     // Sort out who the moderators are and if we are currently a moderator (or an admin)
     $mods_array = $cur_topic['moderators'] != '' ? unserialize($cur_topic['moderators']) : array();
     $is_admmod = User::get()->g_id == ForumEnv::get('FEATHER_ADMIN') || User::get()->g_moderator == '1' && array_key_exists(User::get()->username, $mods_array) ? true : false;
     // Can we or can we not post replies?
     $post_link = $this->model->get_post_link($args['id'], $cur_topic['closed'], $cur_topic['post_replies'], $is_admmod);
     // Add/update this topic in our list of tracked topics
     if (!User::get()->is_guest) {
         $tracked_topics = Track::get_tracked_topics();
         $tracked_topics['topics'][$args['id']] = time();
         Track::set_tracked_topics($tracked_topics);
     }
     // Determine the post offset (based on $_GET['p'])
     $num_pages = ceil(($cur_topic['num_replies'] + 1) / User::get()->disp_posts);
     $p = !isset($args['page']) || $args['page'] <= 1 || $args['page'] > $num_pages ? 1 : intval($args['page']);
     $start_from = User::get()->disp_posts * ($p - 1);
     $url_topic = Url::url_friendly($cur_topic['subject']);
     $url_forum = Url::url_friendly($cur_topic['forum_name']);
     // Generate paging links
     $paging_links = '<span class="pages-label">' . __('Pages') . ' </span>' . Url::paginate($num_pages, $p, 'topic/' . $args['id'] . '/' . $url_topic . '/#');
     if (ForumSettings::get('o_censoring') == '1') {
         $cur_topic['subject'] = Utils::censor($cur_topic['subject']);
     }
     $quickpost = $this->model->is_quickpost($cur_topic['post_replies'], $cur_topic['closed'], $is_admmod);
     $subscraction = $this->model->get_subscraction($cur_topic['is_subscribed'] == User::get()->id, $args['id']);
     View::addAsset('canonical', Router::pathFor('Forum', ['id' => $args['id'], 'name' => $url_forum]));
     if ($num_pages > 1) {
         if ($p > 1) {
             View::addAsset('prev', Router::pathFor('ForumPaginate', ['id' => $args['id'], 'name' => $url_forum, 'page' => intval($p - 1)]));
         }
         if ($p < $num_pages) {
             View::addAsset('next', Router::pathFor('ForumPaginate', ['id' => $args['id'], 'name' => $url_forum, 'page' => intval($p + 1)]));
         }
     }
     if (ForumSettings::get('o_feed_type') == '1') {
         View::addAsset('feed', 'extern.php?action=feed&amp;fid=' . $args['id'] . '&amp;type=rss', array('title' => __('RSS forum feed')));
     } elseif (ForumSettings::get('o_feed_type') == '2') {
         View::addAsset('feed', 'extern.php?action=feed&amp;fid=' . $args['id'] . '&amp;type=atom', array('title' => __('Atom forum feed')));
     }
     View::setPageInfo(array('title' => array(Utils::escape(ForumSettings::get('o_board_title')), Utils::escape($cur_topic['forum_name']), Utils::escape($cur_topic['subject'])), 'active_page' => 'Topic', 'page_number' => $p, 'paging_links' => $paging_links, 'is_indexed' => true, 'id' => $args['id'], 'pid' => $args['pid'], 'tid' => $args['id'], 'fid' => $cur_topic['forum_id'], 'post_data' => $this->model->print_posts($args['id'], $start_from, $cur_topic, $is_admmod), 'cur_topic' => $cur_topic, 'subscraction' => $subscraction, 'post_link' => $post_link, 'start_from' => $start_from, 'quickpost' => $quickpost, 'index_questions' => $index_questions, 'lang_antispam_questions' => $lang_antispam_questions, 'url_forum' => $url_forum, 'url_topic' => $url_topic))->addTemplate('topic.php')->display();
     // Increment "num_views" for topic
     $this->model->increment_views($args['id']);
 }
 public function addToolbar()
 {
     View::addAsset('css', 'plugins/bbcode-toolbar/assets/bbeditor.css', array('type' => 'text/css', 'rel' => 'stylesheet'));
     View::addAsset('css', 'plugins/bbcode-toolbar/assets/colorPicker.css', array('type' => 'text/css', 'rel' => 'stylesheet'));
     View::addAsset('js', 'plugins/bbcode-toolbar/assets/bbeditor.js', array('type' => 'text/javascript'));
     View::addAsset('js', 'plugins/bbcode-toolbar/assets/colorPicker.js', array('type' => 'text/javascript'));
     return true;
 }
Example #3
0
 public function index($req, $res, $args)
 {
     Container::get('hooks')->fire('controller.admin.plugins.index');
     View::addAsset('js', 'style/imports/common.js', array('type' => 'text/javascript'));
     $availablePlugins = Lister::getPlugins();
     $activePlugins = Container::get('cache')->isCached('activePlugins') ? Container::get('cache')->retrieve('activePlugins') : array();
     $officialPlugins = Lister::getOfficialPlugins();
     AdminUtils::generateAdminMenu('plugins');
     View::setPageInfo(array('admin_console' => true, 'active_page' => 'admin', 'availablePlugins' => $availablePlugins, 'activePlugins' => $activePlugins, 'officialPlugins' => $officialPlugins, 'title' => array(Utils::escape(ForumSettings::get('o_board_title')), __('Admin'), __('Extension'))))->addTemplate('admin/plugins.php')->display();
 }
Example #4
0
 public function display($req, $res, $args)
 {
     Container::get('hooks')->fire('controller.admin.users.display');
     // Move multiple users to other user groups
     if (Input::post('move_users') || Input::post('move_users_comply')) {
         if (User::get()->g_id > ForumEnv::get('FEATHER_ADMIN')) {
             throw new Error(__('No permission'), 403);
         }
         AdminUtils::generateAdminMenu('users');
         return View::setPageInfo(array('title' => array(Utils::escape(ForumSettings::get('o_board_title')), __('Admin'), __('Users'), __('Move users')), 'active_page' => 'moderate', 'admin_console' => true, 'move' => $this->model->move_users()))->addTemplate('admin/users/move_users.php')->display();
     }
     // Delete multiple users
     if (Input::post('delete_users') || Input::post('delete_users_comply')) {
         if (User::get()->g_id > ForumEnv::get('FEATHER_ADMIN')) {
             throw new Error(__('No permission'), 403);
         }
         AdminUtils::generateAdminMenu('users');
         return View::setPageInfo(array('title' => array(Utils::escape(ForumSettings::get('o_board_title')), __('Admin'), __('Users'), __('Delete users')), 'active_page' => 'moderate', 'admin_console' => true, 'user_ids' => $this->model->delete_users()))->addTemplate('admin/users/delete_users.php')->display();
     }
     // Ban multiple users
     if (Input::post('ban_users') || Input::post('ban_users_comply')) {
         if (User::get()->g_id != ForumEnv::get('FEATHER_ADMIN') && (User::get()->g_moderator != '1' || User::get()->g_mod_ban_users == '0')) {
             throw new Error(__('No permission'), 403);
         }
         AdminUtils::generateAdminMenu('users');
         return View::setPageInfo(array('title' => array(Utils::escape(ForumSettings::get('o_board_title')), __('Admin'), __('Users'), __('Bans')), 'active_page' => 'moderate', 'focus_element' => array('bans2', 'ban_message'), 'admin_console' => true, 'user_ids' => $this->model->ban_users()))->addTemplate('admin/users/ban_users.php')->display();
     }
     // Display bans
     if (Input::query('find_user')) {
         // Return conditions and query string for the URL
         $search = $this->model->get_user_search();
         // Fetch user count
         $num_users = $this->model->get_num_users_search($search['conditions']);
         // Determine the user offset (based on $_GET['p'])
         $num_pages = ceil($num_users / 50);
         $p = !Input::query('p') || Input::query('p') <= 1 || Input::query('p') > $num_pages ? 1 : intval(Input::query('p'));
         $start_from = 50 * ($p - 1);
         // Generate paging links
         $paging_links = '<span class="pages-label">' . __('Pages') . ' </span>' . Url::paginate_old($num_pages, $p, '?find_user=&amp;' . implode('&amp;', $search['query_str']));
         // Some helper variables for permissions
         $can_delete = $can_move = User::get()->g_id == ForumEnv::get('FEATHER_ADMIN');
         $can_ban = User::get()->g_id == ForumEnv::get('FEATHER_ADMIN') || User::get()->g_moderator == '1' && User::get()->g_mod_ban_users == '1';
         $can_action = ($can_delete || $can_ban || $can_move) && $num_users > 0;
         View::addAsset('js', 'style/imports/common.js', array('type' => 'text/javascript'));
         View::setPageInfo(array('title' => array(Utils::escape(ForumSettings::get('o_board_title')), __('Admin'), __('Users'), __('Results head')), 'active_page' => 'admin', 'admin_console' => true, 'paging_links' => $paging_links, 'search' => $search, 'start_from' => $start_from, 'can_delete' => $can_delete, 'can_ban' => $can_ban, 'can_action' => $can_action, 'can_move' => $can_move, 'user_data' => $this->model->print_users($search['conditions'], $search['order_by'], $search['direction'], $start_from)))->addTemplate('admin/users/find_users.php')->display();
     } else {
         AdminUtils::generateAdminMenu('users');
         return View::setPageInfo(array('title' => array(Utils::escape(ForumSettings::get('o_board_title')), __('Admin'), __('Users')), 'active_page' => 'admin', 'admin_console' => true, 'focus_element' => array('find_user', 'form[username]'), 'group_list' => $this->model->get_group_list()))->addTemplate('admin/users/admin_users.php')->display();
     }
 }
 public function index($req, $res, $args)
 {
     // Set default page to "Inbox" folder
     if (!isset($args['inbox_id'])) {
         $args['inbox_id'] = 2;
     }
     if (!isset($args['page'])) {
         $args['page'] = 1;
     }
     $uid = intval(User::get()->id);
     if ($action = Input::post('action')) {
         switch ($action) {
             case 'move':
                 $this->move($req, $res, $args);
                 break;
             case 'delete':
                 $this->delete($req, $res, $args);
                 break;
             case 'read':
                 $this->markRead($req, $res, $args);
                 break;
             case 'unread':
                 $this->markRead($req, $res, $args);
                 break;
             default:
                 return Router::redirect(Router::pathFor('Conversations.home', ['inbox_id' => Input::post('inbox_id')]));
                 break;
         }
     }
     if ($this->inboxes = $this->model->getInboxes(User::get()->id)) {
         if (!in_array($args['inbox_id'], array_keys($this->inboxes))) {
             throw new Error(__('Wrong folder owner', 'private_messages'), 403);
         }
     }
     // Page data
     $num_pages = ceil($this->inboxes[$args['inbox_id']]['nb_msg'] / User::getPref('disp.topics'));
     $p = !isset($args['page']) || $args['page'] <= 1 || $args['page'] > $num_pages ? 1 : intval($args['page']);
     $start_from = User::getPref('disp.topics') * ($p - 1);
     $paging_links = Url::paginate($num_pages, $p, Router::pathFor('Conversations.home', ['id' => $args['inbox_id']]) . '/#');
     // Make breadcrumbs
     $this->crumbs[Router::pathFor('Conversations.home', ['inbox_id' => $args['inbox_id']])] = $this->inboxes[$args['inbox_id']]['name'];
     $this->crumbs[] = __('My conversations', 'private_messages');
     Utils::generateBreadcrumbs($this->crumbs, array('link' => Router::pathFor('Conversations.send'), 'text' => __('Send', 'private_messages')));
     $this->generateMenu($this->inboxes[$args['inbox_id']]['name']);
     View::addAsset('js', 'style/imports/common.js', array('type' => 'text/javascript'));
     View::setPageInfo(array('title' => array(Utils::escape(ForumSettings::get('o_board_title')), __('PMS', 'private_messages'), $this->inboxes[$args['inbox_id']]['name']), 'admin_console' => true, 'inboxes' => $this->inboxes, 'current_inbox_id' => $args['inbox_id'], 'paging_links' => $paging_links, 'rightLink' => ['link' => Router::pathFor('Conversations.send'), 'text' => __('Send', 'private_messages')], 'conversations' => $this->model->getConversations($args['inbox_id'], $uid, User::getPref('disp.topics'), $start_from)))->addTemplate('index.php')->display();
 }
Example #6
0
 public function display($req, $res, $args)
 {
     $args['fid'] = $args['id'];
     Container::get('hooks')->fire('controller.forum.display');
     // Fetch some informations about the forum
     $cur_forum = $this->model->get_forum_info($args['fid']);
     // Is this a redirect forum? In that case, redirect!
     if ($cur_forum['redirect_url'] != '') {
         return Router::redirect(Router::pathFor('Forum', ['id' => $cur_forum['redirect_url']]));
     }
     // Sort out who the moderators are and if we are currently a moderator (or an admin)
     $mods_array = $cur_forum['moderators'] != '' ? unserialize($cur_forum['moderators']) : array();
     $is_admmod = User::get()->g_id == ForumEnv::get('FEATHER_ADMIN') || User::get()->g_moderator == '1' && array_key_exists(User::get()->username, $mods_array) ? true : false;
     $sort_by = $this->model->sort_forum_by($cur_forum['sort_by']);
     // Can we or can we not post new topics?
     if ($cur_forum['post_topics'] == '' && User::get()->g_post_topics == '1' || $cur_forum['post_topics'] == '1' || $is_admmod) {
         $post_link = "\t\t\t" . '<p class="postlink conr"><a href="' . Router::pathFor('newTopic', ['fid' => $args['fid']]) . '">' . __('Post topic') . '</a></p>' . "\n";
     } else {
         $post_link = '';
     }
     // Determine the topic offset (based on $args['page'])
     $num_pages = ceil($cur_forum['num_topics'] / User::get()->disp_topics);
     $p = !isset($args['page']) || $args['page'] <= 1 || $args['page'] > $num_pages ? 1 : intval($args['page']);
     $start_from = User::get()->disp_topics * ($p - 1);
     $url_forum = Url::url_friendly($cur_forum['forum_name']);
     // Generate paging links
     $paging_links = '<span class="pages-label">' . __('Pages') . ' </span>' . Url::paginate($num_pages, $p, 'forum/' . $args['fid'] . '/' . $url_forum . '/#');
     $forum_actions = $this->model->get_forum_actions($args['fid'], ForumSettings::get('o_forum_subscriptions'), $cur_forum['is_subscribed'] == User::get()->id);
     View::addAsset('canonical', Router::pathFor('Forum', ['id' => $args['fid'], 'name' => $url_forum]));
     if ($num_pages > 1) {
         if ($p > 1) {
             View::addAsset('prev', Router::pathFor('ForumPaginate', ['id' => $args['fid'], 'name' => $url_forum, 'page' => intval($p - 1)]));
         }
         if ($p < $num_pages) {
             View::addAsset('next', Router::pathFor('ForumPaginate', ['id' => $args['fid'], 'name' => $url_forum, 'page' => intval($p + 1)]));
         }
     }
     if (ForumSettings::get('o_feed_type') == '1') {
         View::addAsset('feed', 'extern.php?action=feed&amp;fid=' . $args['fid'] . '&amp;type=rss', array('title' => __('RSS forum feed')));
     } elseif (ForumSettings::get('o_feed_type') == '2') {
         View::addAsset('feed', 'extern.php?action=feed&amp;fid=' . $args['fid'] . '&amp;type=atom', array('title' => __('Atom forum feed')));
     }
     View::setPageInfo(array('title' => array(Utils::escape(ForumSettings::get('o_board_title')), Utils::escape($cur_forum['forum_name'])), 'active_page' => 'Forum', 'page_number' => $p, 'paging_links' => $paging_links, 'is_indexed' => true, 'id' => $args['fid'], 'fid' => $args['fid'], 'forum_data' => $this->model->print_topics($args['fid'], $sort_by, $start_from), 'cur_forum' => $cur_forum, 'post_link' => $post_link, 'start_from' => $start_from, 'url_forum' => $url_forum, 'forum_actions' => $forum_actions))->addTemplate('forum.php')->display();
 }
 public function run()
 {
     Container::get('hooks')->bind('admin.plugin.menu', [$this, 'getName']);
     Container::get('hooks')->bind('view.header.navlinks', [$this, 'addNavlink']);
     Container::get('hooks')->bind('model.print_posts.one', function ($cur_post) {
         $cur_post['user_contacts'][] = '<span class="email"><a href="' . Router::pathFor('Conversations.send', ['uid' => $cur_post['poster_id']]) . '">PM</a></span>';
         return $cur_post;
     });
     Route::group('/conversations', function () {
         Route::map(['GET', 'POST'], '/inbox[/{inbox_id:[0-9]+}]', '\\FeatherBB\\Plugins\\Controller\\PrivateMessages:index')->setName('Conversations.home');
         Route::map(['GET', 'POST'], '/inbox/{inbox_id:[0-9]+}/page/{page:[0-9]+}', '\\FeatherBB\\Plugins\\Controller\\PrivateMessages:index')->setName('Conversations.home.page');
         Route::get('/thread/{tid:[0-9]+}', '\\FeatherBB\\Plugins\\Controller\\PrivateMessages:show')->setName('Conversations.show');
         Route::get('/thread/{tid:[0-9]+}/page/{page:[0-9]+}', '\\FeatherBB\\Plugins\\Controller\\PrivateMessages:show')->setName('Conversations.show.page');
         Route::map(['GET', 'POST'], '/send[/{uid:[0-9]+}]', '\\FeatherBB\\Plugins\\Controller\\PrivateMessages:send')->setName('Conversations.send');
         Route::map(['GET', 'POST'], '/reply/{tid:[0-9]+}', '\\FeatherBB\\Plugins\\Controller\\PrivateMessages:reply')->setName('Conversations.reply');
         Route::map(['GET', 'POST'], '/quote/{mid:[0-9]+}', '\\FeatherBB\\Plugins\\Controller\\PrivateMessages:reply')->setName('Conversations.quote');
         Route::map(['GET', 'POST'], '/options/blocked', '\\FeatherBB\\Plugins\\Controller\\PrivateMessages:blocked')->setName('Conversations.blocked');
         Route::map(['GET', 'POST'], '/options/folders', '\\FeatherBB\\Plugins\\Controller\\PrivateMessages:folders')->setName('Conversations.folders');
     })->add(new \FeatherBB\Plugins\Middleware\LoggedIn());
     View::addAsset('css', 'plugins/private-messages/src/style/private-messages.css');
 }