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&fid=' . $args['id'] . '&type=rss', array('title' => __('RSS forum feed'))); } elseif (ForumSettings::get('o_feed_type') == '2') { View::addAsset('feed', 'extern.php?action=feed&fid=' . $args['id'] . '&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; }
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(); }
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=&' . implode('&', $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(); }
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&fid=' . $args['fid'] . '&type=rss', array('title' => __('RSS forum feed'))); } elseif (ForumSettings::get('o_feed_type') == '2') { View::addAsset('feed', 'extern.php?action=feed&fid=' . $args['fid'] . '&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'); }