Esempio n. 1
0
 public function rebuild()
 {
     $per_page = Input::query('i_per_page') ? intval(Input::query('i_per_page')) : 0;
     $per_page = Container::get('hooks')->fire('model.admin.maintenance.rebuild.per_page', $per_page);
     // Check per page is > 0
     if ($per_page < 1) {
         throw new Error(__('Posts must be integer message'), 400);
     }
     @set_time_limit(0);
     // If this is the first cycle of posts we empty the search index before we proceed
     if (Input::query('i_empty_index')) {
         DB::for_table('search_words')->raw_execute('TRUNCATE ' . ForumSettings::get('db_prefix') . 'search_words');
         DB::for_table('search_matches')->raw_execute('TRUNCATE ' . ForumSettings::get('db_prefix') . 'search_matches');
         // Reset the sequence for the search words (not needed for SQLite)
         switch (ForumSettings::get('db_type')) {
             case 'mysql':
             case 'mysqli':
             case 'mysql_innodb':
             case 'mysqli_innodb':
                 DB::for_table('search_words')->raw_execute('ALTER TABLE ' . ForumSettings::get('db_prefix') . 'search_words auto_increment=1');
                 break;
             case 'pgsql':
                 DB::for_table('search_words')->raw_execute('SELECT setval(\'' . ForumSettings::get('db_prefix') . 'search_words_id_seq\', 1, false)');
         }
     }
 }
Esempio n. 2
0
 public function display($req, $res, $args)
 {
     Container::get('hooks')->fire('controller.search.display');
     if (User::get()->g_search == '0') {
         throw new Error(__('No search permission'), 403);
     }
     // Figure out what to do :-)
     if (Input::query('action') || Input::query('search_id')) {
         $search = $this->model->get_search_results();
         // We have results to display
         if (!is_object($search) && isset($search['is_result'])) {
             View::setPageInfo(array('title' => array(Utils::escape(ForumSettings::get('o_board_title')), __('Search results')), 'active_page' => 'search', 'search' => $search, 'footer' => $search));
             $display = $this->model->display_search_results($search);
             View::setPageInfo(array('display' => $display));
             View::addTemplate('search/header.php', 1);
             if ($search['show_as'] == 'posts') {
                 View::addTemplate('search/posts.php', 5);
             } else {
                 View::addTemplate('search/topics.php', 5);
             }
             View::addTemplate('search/footer.php', 10)->display();
         } else {
             return Router::redirect(Router::pathFor('search'), __('No hits'));
         }
     } else {
         View::setPageInfo(array('title' => array(Utils::escape(ForumSettings::get('o_board_title')), __('Search')), 'active_page' => 'search', 'focus_element' => array('search', 'keywords'), 'is_indexed' => true, 'forums' => $this->model->get_list_forums()))->addTemplate('search/form.php')->display();
     }
 }
Esempio n. 3
0
 public function display($req, $res, $args)
 {
     Container::get('hooks')->fire('controller.userlist.display');
     if (User::get()->g_view_users == '0') {
         throw new Error(__('No permission'), 403);
     }
     // Determine if we are allowed to view post counts
     $show_post_count = ForumSettings::get('o_show_post_count') == '1' || User::get()->is_admmod ? true : false;
     $username = Input::query('username') && User::get()->g_search_users == '1' ? Utils::trim(Input::query('username')) : '';
     $show_group = Input::query('show_group') ? intval(Input::query('show_group')) : -1;
     $sort_by = Input::query('sort_by') && (in_array(Input::query('sort_by'), array('username', 'registered')) || Input::query('sort_by') == 'num_posts' && $show_post_count) ? Input::query('sort_by') : 'username';
     $sort_dir = Input::query('sort_dir') && Input::query('sort_dir') == 'DESC' ? 'DESC' : 'ASC';
     $num_users = $this->model->fetch_user_count($username, $show_group);
     // Determine the user offset (based on $page)
     $num_pages = ceil($num_users / 50);
     $p = !Input::query('p') || $page <= 1 || $page > $num_pages ? 1 : intval($page);
     $start_from = 50 * ($p - 1);
     if (User::get()->g_search_users == '1') {
         $focus_element = array('userlist', 'username');
     } else {
         $focus_element = array();
     }
     // Generate paging links
     $paging_links = '<span class="pages-label">' . __('Pages') . ' </span>' . Url::paginate_old($num_pages, $p, '?username='******'&amp;show_group=' . $show_group . '&amp;sort_by=' . $sort_by . '&amp;sort_dir=' . $sort_dir);
     View::setPageInfo(array('title' => array(Utils::escape(ForumSettings::get('o_board_title')), __('User list')), 'active_page' => 'userlist', 'page_number' => $p, 'paging_links' => $paging_links, 'focus_element' => $focus_element, 'is_indexed' => true, 'username' => $username, 'show_group' => $show_group, 'sort_by' => $sort_by, 'sort_dir' => $sort_dir, 'show_post_count' => $show_post_count, 'dropdown_menu' => $this->model->generate_dropdown_menu($show_group), 'userlist_data' => $this->model->print_users($username, $start_from, $sort_by, $sort_dir, $show_group)))->addTemplate('userlist.php')->display();
 }
Esempio n. 4
0
 public function display($req, $res, $args)
 {
     Container::get('hooks')->fire('controller.admin.statistics.display');
     AdminUtils::generateAdminMenu('index');
     $total = $this->model->get_total_size();
     return View::setPageInfo(array('title' => array(Utils::escape(ForumSettings::get('o_board_title')), __('Admin'), __('Server statistics')), 'active_page' => 'admin', 'admin_console' => true, 'server_load' => $this->model->get_server_load(), 'num_online' => $this->model->get_num_online(), 'total_size' => $total['size'], 'total_records' => $total['records'], 'php_accelerator' => $this->model->get_php_accelerator()))->addTemplate('admin/statistics.php')->display();
 }
Esempio n. 5
0
 public function display($req, $res, $args)
 {
     Container::get('hooks')->fire('controller.admin.maintenance.display');
     $action = '';
     if (Input::post('action')) {
         $action = Input::post('action');
     } elseif (Input::query('action')) {
         $action = Input::query('action');
     }
     if ($action == 'rebuild') {
         $this->model->rebuild();
         View::setPageInfo(array('page_title' => array(Utils::escape(ForumSettings::get('o_board_title')), __('Rebuilding search index')), 'query_str' => $this->model->get_query_str()))->addTemplate('admin/maintenance/rebuild.php')->display();
     }
     if ($action == 'prune') {
         $prune_from = Utils::trim(Input::post('prune_from'));
         $prune_sticky = intval(Input::post('prune_sticky'));
         AdminUtils::generateAdminMenu('maintenance');
         if (Input::post('prune_comply')) {
             $this->model->prune_comply($prune_from, $prune_sticky);
         }
         View::setPageInfo(array('title' => array(Utils::escape(ForumSettings::get('o_board_title')), __('Admin'), __('Prune')), 'active_page' => 'admin', 'admin_console' => true, 'prune_sticky' => $prune_sticky, 'prune_from' => $prune_from, 'prune' => $this->model->get_info_prune($prune_sticky, $prune_from)))->addTemplate('admin/maintenance/prune.php')->display();
     }
     AdminUtils::generateAdminMenu('maintenance');
     View::setPageInfo(array('title' => array(Utils::escape(ForumSettings::get('o_board_title')), __('Admin'), __('Maintenance')), 'active_page' => 'admin', 'admin_console' => true, 'first_id' => $this->model->get_first_id(), 'categories' => $this->model->get_categories()))->addTemplate('admin/maintenance/admin_maintenance.php')->display();
 }
Esempio n. 6
0
 public function rules()
 {
     Container::get('hooks')->fire('controller.index.rules');
     if (ForumSettings::get('o_rules') == '0' || User::get()->is_guest && User::get()->g_read_board == '0' && ForumSettings::get('o_regs_allow') == '0') {
         throw new Error(__('Bad request'), 404);
     }
     View::setPageInfo(array('title' => array(Utils::escape(ForumSettings::get('o_board_title')), __('Forum rules')), 'active_page' => 'rules'))->addTemplate('misc/rules.php')->display();
 }
Esempio n. 7
0
 public function display($req, $res, $args)
 {
     Container::get('hooks')->fire('controller.admin.options.display');
     if (Request::isPost()) {
         return $this->model->update_options();
     }
     AdminUtils::generateAdminMenu('options');
     View::setPageInfo(array('title' => array(Utils::escape(ForumSettings::get('o_board_title')), __('Admin'), __('Options')), 'active_page' => 'admin', 'admin_console' => true, 'languages' => $this->model->get_langs(), 'styles' => $this->model->get_styles(), 'times' => $this->model->get_times()))->addTemplate('admin/options.php')->display();
 }
Esempio n. 8
0
 public static function get_tracked_topics()
 {
     $cookie_raw = Container::get('cookie')->get(ForumSettings::get('cookie_name') . '_track');
     if (isset($cookie_raw)) {
         $cookie_data = json_decode($cookie_raw, true);
         return $cookie_data;
     }
     return array('topics' => array(), 'forums' => array());
 }
Esempio n. 9
0
 public function edit($req, $res, $args)
 {
     Container::get('hooks')->fire('controller.admin.bans.edit');
     if (Input::post('add_edit_ban')) {
         return $this->model->insert_ban();
     }
     AdminUtils::generateAdminMenu('bans');
     View::setPageInfo(array('admin_console' => true, 'focus_element' => array('bans2', 'ban_user'), 'title' => array(Utils::escape(ForumSettings::get('o_board_title')), __('Admin'), __('Bans')), 'ban' => $this->model->edit_ban_info($args['id'])))->addTemplate('admin/bans/add_ban.php')->display();
 }
Esempio n. 10
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();
 }
Esempio n. 11
0
 public function display($req, $res, $args)
 {
     Container::get('hooks')->fire('controller.admin.permissions.display');
     // Update permissions
     if (Request::isPost()) {
         return $this->model->update_permissions();
     }
     AdminUtils::generateAdminMenu('permissions');
     return View::setPageInfo(array('title' => array(Utils::escape(ForumSettings::get('o_board_title')), __('Admin'), __('Permissions')), 'active_page' => 'admin', 'admin_console' => true))->addTemplate('admin/permissions.php')->display();
 }
Esempio n. 12
0
 public function get_page_head()
 {
     Container::get('hooks')->fire('model.index.get_page_head_start');
     if (ForumSettings::get('o_feed_type') == '1') {
         $page_head = array('feed' => '<link rel="alternate" type="application/rss+xml" href="extern.php?action=feed&amp;type=rss" title="' . __('RSS active topics feed') . '" />');
     } elseif (ForumSettings::get('o_feed_type') == '2') {
         $page_head = array('feed' => '<link rel="alternate" type="application/atom+xml" href="extern.php?action=feed&amp;type=atom" title="' . __('Atom active topics feed') . '" />');
     }
     $page_head = Container::get('hooks')->fire('model.index.get_page_head', $page_head);
     return $page_head;
 }
Esempio n. 13
0
 public function display($req, $res, $args)
 {
     Container::get('hooks')->fire('controller.admin.reports.display');
     // Zap a report
     if (Request::isPost()) {
         $zap_id = intval(key(Input::post('zap_id')));
         $this->model->zap_report($zap_id);
         return Router::redirect(Router::pathFor('adminReports'), __('Report zapped redirect'));
     }
     AdminUtils::generateAdminMenu('reports');
     return View::setPageInfo(array('title' => array(Utils::escape(ForumSettings::get('o_board_title')), __('Admin'), __('Reports')), 'active_page' => 'admin', 'admin_console' => true, 'report_data' => $this->model->get_reports(), 'report_zapped_data' => $this->model->get_zapped_reports()))->addTemplate('admin/reports.php')->display();
 }
Esempio n. 14
0
 public function addedit($req, $res, $args)
 {
     Container::get('hooks')->fire('controller.admin.groups.addedit');
     $groups = $this->model->fetch_groups();
     // Add/edit a group (stage 2)
     if (Input::post('add_edit_group')) {
         return $this->model->add_edit_group($groups);
     } elseif (Input::post('add_group') || isset($args['id'])) {
         AdminUtils::generateAdminMenu('groups');
         $group = $this->model->info_add_group($groups, $args['id']);
         View::setPageInfo(array('title' => array(Utils::escape(ForumSettings::get('o_board_title')), __('Admin'), __('User groups')), 'active_page' => 'admin', 'admin_console' => true, 'focus_element' => array('groups2', 'req_title'), 'required_fields' => array('req_title' => __('Group title label')), 'group' => $group, 'groups' => $groups, 'id' => $args['id'], 'group_list' => $this->model->get_group_list($groups, $group)))->addTemplate('admin/groups/add_edit_group.php')->display();
     }
 }
Esempio n. 15
0
 public function display($req, $res, $args)
 {
     Container::get('hooks')->fire('controller.admin.censoring.display');
     // Add a censor word
     if (Input::post('add_word')) {
         return $this->model->add_word();
     } elseif (Input::post('update')) {
         return $this->model->update_word();
     } elseif (Input::post('remove')) {
         return $this->model->remove_word();
     }
     AdminUtils::generateAdminMenu('censoring');
     return View::setPageInfo(array('title' => array(Utils::escape(ForumSettings::get('o_board_title')), __('Admin'), __('Censoring')), 'focus_element' => array('censoring', 'new_search_for'), 'active_page' => 'admin', 'admin_console' => true, 'word_data' => $this->model->get_words()))->addTemplate('admin/censoring.php')->display();
 }
Esempio n. 16
0
 public function rules($req, $res, $args)
 {
     Container::get('hooks')->fire('controller.register.rules');
     // If we are logged in, we shouldn't be here
     if (!User::get()->is_guest) {
         return Router::redirect(Router::pathFor('home'));
     }
     // Display an error message if new registrations are disabled
     if (ForumSettings::get('o_regs_allow') == '0') {
         throw new Error(__('No new regs'), 403);
     }
     if (ForumSettings::get('o_rules') != '1') {
         return Router::redirect(Router::pathFor('register'));
     }
     View::setPageInfo(array('title' => array(Utils::escape(ForumSettings::get('o_board_title')), __('Register'), __('Forum rules')), 'active_page' => 'register'))->addTemplate('register/rules.php')->display();
 }
Esempio n. 17
0
 public function get_total_size()
 {
     $total = array();
     if (ForumSettings::get('db_type') == 'mysql' || ForumSettings::get('db_type') == 'mysqli' || ForumSettings::get('db_type') == 'mysql_innodb' || ForumSettings::get('db_type') == 'mysqli_innodb') {
         // Calculate total db size/row count
         $result = DB::for_table('users')->raw_query('SHOW TABLE STATUS LIKE \'' . ForumSettings::get('db_prefix') . '%\'')->find_many();
         $result = Container::get('hooks')->fire('model.admin.model.statistics.get_total_size.raw_data', $result);
         $total['size'] = $total['records'] = 0;
         foreach ($result as $status) {
             $total['records'] += $status['Rows'];
             $total['size'] += $status['Data_length'] + $status['Index_length'];
         }
         $total['size'] = Utils::file_size($total['size']);
     }
     $total = Container::get('hooks')->fire('model.admin.model.statistics.get_total_size.total', $total);
     return $total;
 }
Esempio n. 18
0
 public function update_permissions()
 {
     $form = array_map('intval', Input::post('form'));
     $form = Container::get('hooks')->fire('model.admin.permissions.update_permissions.form', $form);
     foreach ($form as $key => $input) {
         // Make sure the input is never a negative value
         if ($input < 0) {
             $input = 0;
         }
         // Only update values that have changed
         if (array_key_exists('p_' . $key, Container::get('forum_settings')) && ForumSettings::get('p_' . $key) != $input) {
             DB::for_table('config')->where('conf_name', 'p_' . $key)->update_many('conf_value', $input);
         }
     }
     // Regenerate the config cache
     Container::get('cache')->store('config', Cache::get_config());
     // $this->clear_feed_cache();
     return Router::redirect(Router::pathFor('adminPermissions'), __('Perms updated redirect'));
 }
Esempio n. 19
0
 public function display($req, $res, $args)
 {
     if (!isset($args['action'])) {
         $args['action'] = null;
     }
     Container::get('hooks')->fire('controller.admin.index.display');
     // Check for upgrade
     if ($args['action'] == 'check_upgrade') {
         if (!ini_get('allow_url_fopen')) {
             throw new Error(__('fopen disabled message'), 500);
         }
         $latest_version = trim(@file_get_contents('http://featherbb.org/latest_version.html'));
         if (empty($latest_version)) {
             throw new Error(__('Upgrade check failed message'), 500);
         }
         if (version_compare(ForumSettings::get('o_cur_version'), $latest_version, '>=')) {
             return Router::redirect(Router::pathFor('adminIndex'), __('Running latest version message'));
         } else {
             return Router::redirect(Router::pathFor('adminIndex'), sprintf(__('New version available message'), '<a href="http://featherbb.org/">FeatherBB.org</a>'));
         }
     }
     AdminUtils::generateAdminMenu('index');
     return View::setPageInfo(array('title' => array(Utils::escape(ForumSettings::get('o_board_title')), __('Admin'), __('Index')), 'active_page' => 'admin', 'admin_console' => true))->addTemplate('admin/index.php')->display();
 }
Esempio n. 20
0
echo $csrf_name;
?>
"><input type="hidden" name="csrf_value" value="<?php 
echo $csrf_value;
?>
">
                <div class="inform">
                    <fieldset>
                        <legend><?php 
_e('Add word subhead');
?>
</legend>
                        <div class="infldset">
                            <p><?php 
_e('Add word info');
echo ForumSettings::get('o_censoring') == '1' ? sprintf(__('Censoring enabled'), '<a href="' . Router::pathFor('adminOptions') . '#censoring">' . __('Options') . '</a>') : sprintf(__('Censoring disabled'), '<a href="' . Router::pathFor('adminOptions') . '#censoring">' . __('Options') . '</a>');
?>
</p>
                            <table>
                            <thead>
                                <tr>
                                    <th class="tcl" scope="col"><?php 
_e('Censored word label');
?>
</th>
                                    <th class="tc2" scope="col"><?php 
_e('Replacement label');
?>
</th>
                                    <th class="hidehead" scope="col"><?php 
_e('Action label');
Esempio n. 21
0
 public function report($req, $res, $args)
 {
     $args['id'] = Container::get('hooks')->fire('controller.post.report', $args['id']);
     if (Request::isPost()) {
         $this->model->insert_report($args['id']);
     }
     // Fetch some info about the post, the topic and the forum
     $cur_post = $this->model->get_info_report($args['id']);
     if (ForumSettings::get('o_censoring') == '1') {
         $cur_post['subject'] = Utils::censor($cur_post['subject']);
     }
     View::setPageInfo(array('title' => array(Utils::escape(ForumSettings::get('o_board_title')), __('Report post')), 'active_page' => 'report', 'required_fields' => array('req_reason' => __('Reason')), 'focus_element' => array('report', 'req_reason'), 'id' => $args['id'], 'cur_post' => $cur_post))->addTemplate('misc/report.php')->display();
 }
Esempio n. 22
0
 public function insert_user($user)
 {
     $user = Container::get('hooks')->fire('model.register.insert_user_start', $user);
     // Insert the new user into the database. We do this now to get the last inserted ID for later use
     $now = time();
     $intial_group_id = ForumSettings::get('o_regs_verify') == '0' ? ForumSettings::get('o_default_user_group') : ForumEnv::get('FEATHER_UNVERIFIED');
     $password_hash = Random::hash($user['password1']);
     // Add the user
     $user['insert'] = array('username' => $user['username'], 'group_id' => $intial_group_id, 'password' => $password_hash, 'email' => $user['email1'], 'email_setting' => ForumSettings::get('o_default_email_setting'), 'timezone' => ForumSettings::get('o_default_timezone'), 'dst' => 0, 'language' => $user['language'], 'style' => ForumSettings::get('o_default_style'), 'registered' => $now, 'registration_ip' => Utils::getIp(), 'last_visit' => $now);
     $user = DB::for_table('users')->create()->set($user['insert']);
     $user = Container::get('hooks')->fireDB('model.register.insert_user_query', $user);
     $user = $user->save();
     $new_uid = DB::get_db()->lastInsertId(ForumSettings::get('db_prefix') . 'users');
     // If the mailing list isn't empty, we may need to send out some alerts
     if (ForumSettings::get('o_mailing_list') != '') {
         // If we previously found out that the email was banned
         if (isset($user['banned_email'])) {
             // Load the "banned email register" template
             $mail_tpl = trim(file_get_contents(ForumEnv::get('FEATHER_ROOT') . 'featherbb/lang/' . User::get()->language . '/mail_templates/banned_email_register.tpl'));
             $mail_tpl = Container::get('hooks')->fire('model.register.insert_user_banned_mail_tpl', $mail_tpl);
             // The first row contains the subject
             $first_crlf = strpos($mail_tpl, "\n");
             $mail_subject = trim(substr($mail_tpl, 8, $first_crlf - 8));
             $mail_subject = Container::get('hooks')->fire('model.register.insert_user_banned_mail_subject', $mail_subject);
             $mail_message = trim(substr($mail_tpl, $first_crlf));
             $mail_message = str_replace('<username>', $user['username'], $mail_message);
             $mail_message = str_replace('<email>', $user['email1'], $mail_message);
             $mail_message = str_replace('<profile_url>', Router::pathFor('userProfile', ['id' => $new_uid]), $mail_message);
             $mail_message = str_replace('<board_mailer>', ForumSettings::get('o_board_title'), $mail_message);
             $mail_message = Container::get('hooks')->fire('model.register.insert_user_banned_mail_message', $mail_message);
             Container::get('email')->feather_mail(ForumSettings::get('o_mailing_list'), $mail_subject, $mail_message);
         }
         // If we previously found out that the email was a dupe
         if (!empty($dupe_list)) {
             // Load the "dupe email register" template
             $mail_tpl = trim(file_get_contents(ForumEnv::get('FEATHER_ROOT') . 'featherbb/lang/' . User::get()->language . '/mail_templates/dupe_email_register.tpl'));
             $mail_tpl = Container::get('hooks')->fire('model.register.insert_user_dupe_mail_tpl', $mail_tpl);
             // The first row contains the subject
             $first_crlf = strpos($mail_tpl, "\n");
             $mail_subject = trim(substr($mail_tpl, 8, $first_crlf - 8));
             $mail_subject = Container::get('hooks')->fire('model.register.insert_user_dupe_mail_subject', $mail_subject);
             $mail_message = trim(substr($mail_tpl, $first_crlf));
             $mail_message = str_replace('<username>', $user['username'], $mail_message);
             $mail_message = str_replace('<dupe_list>', implode(', ', $dupe_list), $mail_message);
             $mail_message = str_replace('<profile_url>', Router::pathFor('userProfile', ['id' => $new_uid]), $mail_message);
             $mail_message = str_replace('<board_mailer>', ForumSettings::get('o_board_title'), $mail_message);
             $mail_message = Container::get('hooks')->fire('model.register.insert_user_dupe_mail_message', $mail_message);
             Container::get('email')->feather_mail(ForumSettings::get('o_mailing_list'), $mail_subject, $mail_message);
         }
         // Should we alert people on the admin mailing list that a new user has registered?
         if (ForumSettings::get('o_regs_report') == '1') {
             // Load the "new user" template
             $mail_tpl = trim(file_get_contents(ForumEnv::get('FEATHER_ROOT') . 'featherbb/lang/' . User::get()->language . '/mail_templates/new_user.tpl'));
             $mail_tpl = Container::get('hooks')->fire('model.register.insert_user_new_mail_tpl', $mail_tpl);
             // The first row contains the subject
             $first_crlf = strpos($mail_tpl, "\n");
             $mail_subject = trim(substr($mail_tpl, 8, $first_crlf - 8));
             $mail_subject = Container::get('hooks')->fire('model.register.insert_user_new_mail_subject', $mail_subject);
             $mail_message = trim(substr($mail_tpl, $first_crlf));
             $mail_message = str_replace('<username>', $user['username'], $mail_message);
             $mail_message = str_replace('<base_url>', Router::pathFor('home'), $mail_message);
             $mail_message = str_replace('<profile_url>', Router::pathFor('userProfile', ['id' => $new_uid]), $mail_message);
             $mail_message = str_replace('<admin_url>', Router::pathFor('profileSection', ['id' => $new_uid, 'section' => 'admin']), $mail_message);
             $mail_message = str_replace('<board_mailer>', ForumSettings::get('o_board_title'), $mail_message);
             $mail_message = Container::get('hooks')->fire('model.register.insert_user_new_mail_message', $mail_message);
             Container::get('email')->feather_mail(ForumSettings::get('o_mailing_list'), $mail_subject, $mail_message);
         }
     }
     // Must the user verify the registration or do we log him/her in right now?
     if (ForumSettings::get('o_regs_verify') == '1') {
         // Load the "welcome" template
         $mail_tpl = trim(file_get_contents(ForumEnv::get('FEATHER_ROOT') . 'featherbb/lang/' . User::get()->language . '/mail_templates/welcome.tpl'));
         $mail_tpl = Container::get('hooks')->fire('model.register.insert_user_welcome_mail_tpl', $mail_tpl);
         // The first row contains the subject
         $first_crlf = strpos($mail_tpl, "\n");
         $mail_subject = trim(substr($mail_tpl, 8, $first_crlf - 8));
         $mail_subject = Container::get('hooks')->fire('model.register.insert_user_welcome_mail_subject', $mail_subject);
         $mail_message = trim(substr($mail_tpl, $first_crlf));
         $mail_subject = str_replace('<board_title>', ForumSettings::get('o_board_title'), $mail_subject);
         $mail_message = str_replace('<base_url>', Router::pathFor('home'), $mail_message);
         $mail_message = str_replace('<username>', $user['username'], $mail_message);
         $mail_message = str_replace('<password>', $user['password1'], $mail_message);
         $mail_message = str_replace('<login_url>', Router::pathFor('login'), $mail_message);
         $mail_message = str_replace('<board_mailer>', ForumSettings::get('o_board_title'), $mail_message);
         $mail_message = Container::get('hooks')->fire('model.register.insert_user_welcome_mail_message', $mail_message);
         Container::get('email')->feather_mail($user['email1'], $mail_subject, $mail_message);
         return Router::redirect(Router::pathFor('home'), __('Reg email') . ' <a href="mailto:' . Utils::escape(ForumSettings::get('o_admin_email')) . '">' . Utils::escape(ForumSettings::get('o_admin_email')) . '</a>.');
     }
     $user_object = new \stdClass();
     $user_object->id = $new_uid;
     $user_object->username = $user['username'];
     $expire = time() + ForumSettings::get('o_timeout_visit');
     $jwt = AuthModel::generate_jwt($user_object, $expire);
     AuthModel::feather_setcookie('Bearer ' . $jwt, $expire);
     // Refresh cache
     Container::get('cache')->store('users_info', Cache::get_users_info());
     Container::get('hooks')->fire('model.register.insert_user');
     return Router::redirect(Router::pathFor('home'), __('Reg complete'));
 }
Esempio n. 23
0
 public function __invoke($req, $res, $next)
 {
     // Set headers
     $res = $this->set_headers($res);
     // Block prefetch requests
     if (isset($this->app->environment['HTTP_X_MOZ']) && $this->app->environment['HTTP_X_MOZ'] == 'prefetch') {
         return $this->app->response->setStatus(403);
         // Send forbidden header
     }
     // Populate Slim object with forum_env vars
     Container::set('forum_env', $this->forum_env);
     // Load FeatherBB utils class
     Container::set('utils', function ($container) {
         return new Utils();
     });
     // Record start time
     Container::set('start', Utils::get_microtime());
     // Define now var
     Container::set('now', function () {
         return time();
     });
     // Load FeatherBB cache
     Container::set('cache', function ($container) {
         $path = $this->forum_env['FORUM_CACHE_DIR'];
         return new \FeatherBB\Core\Cache(array('name' => 'feather', 'path' => $path, 'extension' => '.cache'));
     });
     // Load FeatherBB permissions
     Container::set('perms', function ($container) {
         return new \FeatherBB\Core\Permissions();
     });
     // Load FeatherBB preferences
     Container::set('prefs', function ($container) {
         return new \FeatherBB\Core\Preferences();
     });
     // Load FeatherBB view
     Container::set('template', function ($container) {
         return new View();
     });
     // Load FeatherBB url class
     Container::set('url', function ($container) {
         return new Url();
     });
     // Load FeatherBB hooks
     Container::set('hooks', function ($container) {
         return new Hooks();
     });
     // Load FeatherBB email class
     Container::set('email', function ($container) {
         return new Email();
     });
     Container::set('parser', function ($container) {
         return new Parser();
     });
     // Set cookies
     Container::set('cookie', function ($container) {
         $request = $container->get('request');
         return new \Slim\Http\Cookies($request->getCookieParams());
     });
     Container::set('flash', function ($c) {
         return new \Slim\Flash\Messages();
     });
     // This is the very first hook fired
     Container::get('hooks')->fire('core.start');
     if (!is_file(ForumEnv::get('FORUM_CONFIG_FILE'))) {
         // Reset cache
         Container::get('cache')->flush();
         $installer = new \FeatherBB\Controller\Install();
         return $installer->run();
     }
     // Load config from disk
     include ForumEnv::get('FORUM_CONFIG_FILE');
     if (isset($featherbb_config) && is_array($featherbb_config)) {
         $this->forum_settings = array_merge(self::load_default_forum_settings(), $featherbb_config);
     } else {
         $this->app->response->setStatus(500);
         // Send forbidden header
         return $this->app->response->setBody('Wrong config file format');
     }
     // Init DB and configure Slim
     self::init_db($this->forum_settings, ForumEnv::get('FEATHER_SHOW_INFO'));
     Config::set('displayErrorDetails', ForumEnv::get('FEATHER_DEBUG'));
     if (!Container::get('cache')->isCached('config')) {
         Container::get('cache')->store('config', \FeatherBB\Model\Cache::get_config());
     }
     // Finalize forum_settings array
     $this->forum_settings = array_merge(Container::get('cache')->retrieve('config'), $this->forum_settings);
     Container::set('forum_settings', $this->forum_settings);
     // Set default style and assets
     Container::get('template')->setStyle(ForumSettings::get('o_default_style'));
     Container::get('template')->addAsset('js', 'style/themes/FeatherBB/phone.min.js');
     // Run activated plugins
     self::loadPlugins();
     // Define time formats and add them to the container
     Container::set('forum_time_formats', array(ForumSettings::get('o_time_format'), 'H:i:s', 'H:i', 'g:i:s a', 'g:i a'));
     Container::set('forum_date_formats', array(ForumSettings::get('o_date_format'), 'Y-m-d', 'Y-d-m', 'd-m-Y', 'm-d-Y', 'M j Y', 'jS M Y'));
     // Call FeatherBBAuth middleware
     return $next($req, $res);
 }
Esempio n. 24
0
 public function moderate($req, $res, $args)
 {
     Container::get('hooks')->fire('controller.topic.moderate');
     // Make sure that only admmods allowed access this page
     $forumModel = new \FeatherBB\Model\Forum();
     $moderators = $forumModel->get_moderators($args['id']);
     $mods_array = $moderators != '' ? unserialize($moderators) : array();
     if (User::get()->g_id != ForumEnv::get('FEATHER_ADMIN') && (User::get()->g_moderator == '0' || !array_key_exists(User::get()->username, $mods_array))) {
         throw new Error(__('No permission'), 403);
     }
     $cur_topic = $this->model->get_topic_info($args['fid'], $args['id']);
     // 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);
     // Delete one or more posts
     if (Input::post('delete_posts_comply')) {
         return $this->model->delete_posts($args['id'], $args['fid']);
     } else {
         if (Input::post('delete_posts')) {
             $posts = $this->model->delete_posts($args['id'], $args['fid']);
             View::setPageInfo(array('title' => array(Utils::escape(ForumSettings::get('o_board_title')), __('Moderate')), 'active_page' => 'moderate', 'posts' => $posts))->addTemplate('moderate/delete_posts.php')->display();
         } else {
             if (Input::post('split_posts_comply')) {
                 return $this->model->split_posts($args['id'], $args['fid'], $p);
             } else {
                 if (Input::post('split_posts')) {
                     View::setPageInfo(array('title' => array(Utils::escape(ForumSettings::get('o_board_title')), __('Moderate')), 'focus_element' => array('subject', 'new_subject'), 'page' => $p, 'active_page' => 'moderate', 'id' => $args['id'], 'posts' => $this->model->split_posts($args['id'], $args['fid'], $p), 'list_forums' => $this->model->get_forum_list_split($args['fid'])))->addTemplate('moderate/split_posts.php')->display();
                 } else {
                     // Show the moderate posts view
                     // Used to disable the Move and Delete buttons if there are no replies to this topic
                     $button_status = $cur_topic['num_replies'] == 0 ? ' disabled="disabled"' : '';
                     /*if (isset($_GET['action']) && $_GET['action'] == 'all') {
                               User::get()->disp_posts = $cur_topic['num_replies'] + 1;
                       }*/
                     if (ForumSettings::get('o_censoring') == '1') {
                         $cur_topic['subject'] = Utils::censor($cur_topic['subject']);
                     }
                     View::setPageInfo(array('title' => array(Utils::escape(ForumSettings::get('o_board_title')), Utils::escape($cur_topic['forum_name']), Utils::escape($cur_topic['subject'])), 'page' => $p, 'active_page' => 'moderate', 'cur_topic' => $cur_topic, 'url_topic' => Url::url_friendly($cur_topic['subject']), 'url_forum' => Url::url_friendly($cur_topic['forum_name']), 'fid' => $args['fid'], 'id' => $args['id'], 'paging_links' => '<span class="pages-label">' . __('Pages') . ' </span>' . Url::paginate($num_pages, $p, 'topic/moderate/' . $args['id'] . '/forum/' . $args['fid'] . '/#'), 'post_data' => $this->model->display_posts_moderate($args['id'], $start_from), 'button_status' => $button_status, 'start_from' => $start_from))->addTemplate('moderate/posts_view.php')->display();
                 }
             }
         }
     }
 }
Esempio n. 25
0
 protected function getDefaultPageInfo()
 {
     // Check if config file exists to avoid error when installing forum
     if (!Container::get('cache')->isCached('quickjump') && is_file(ForumEnv::get('FORUM_CONFIG_FILE'))) {
         Container::get('cache')->store('quickjump', \FeatherBB\Model\Cache::get_quickjump());
     }
     $title = Container::get('forum_settings') ? ForumSettings::get('o_board_title') : 'FeatherBB';
     $data = array('title' => Utils::escape($title), 'page_number' => null, 'active_page' => 'index', 'focus_element' => null, 'is_indexed' => true, 'admin_console' => false, 'page_head' => null, 'paging_links' => null, 'required_fields' => null, 'footer_style' => null, 'quickjump' => Container::get('cache')->retrieve('quickjump'), 'fid' => null, 'pid' => null, 'tid' => null);
     if (is_object(User::get()) && User::get()->is_admmod) {
         $data['has_reports'] = \FeatherBB\Model\Admin\Reports::has_reports();
     }
     if (ForumEnv::get('FEATHER_SHOW_INFO')) {
         $data['exec_info'] = \FeatherBB\Model\Debug::get_info();
         if (ForumEnv::get('FEATHER_SHOW_QUERIES')) {
             $data['queries_info'] = \FeatherBB\Model\Debug::get_queries();
         }
     }
     return $data;
 }
Esempio n. 26
0
    _e('Subscription legend');
    ?>
</legend>
                    <div class="infldset">
                        <div class="rbox">
                            <label><input type="checkbox" name="form_notify_with_post" value="1"<?php 
    if ($user['notify_with_post'] == '1') {
        echo ' checked="checked"';
    }
    ?>
 /><?php 
    _e('Notify full');
    ?>
<br /></label>
<?php 
    if (ForumSettings::get('o_topic_subscriptions') == '1') {
        ?>
                                <label><input type="checkbox" name="form_auto_notify" value="1"<?php 
        if ($user['auto_notify'] == '1') {
            echo ' checked="checked"';
        }
        ?>
 /><?php 
        _e('Auto notify full');
        ?>
<br /></label>
<?php 
    }
    ?>
                        </div>
                    </div>
 public function getMessages($conv_id = null, $limit = 50, $start = 0)
 {
     $select = array('m.id', 'username' => 'm.poster', 'm.poster_id', 'poster_gid' => 'u.group_id', 'u.title', 'm.message', 'm.hide_smilies', 'm.sent', 'm.conversation_id', 'g.g_id', 'g.g_user_title', 'is_online' => 'o.user_id');
     $result = DB::for_table('pms_messages')->table_alias('m')->select_many($select)->left_outer_join('users', array('u.id', '=', 'm.poster_id'), 'u')->inner_join('groups', array('g.g_id', '=', 'u.group_id'), 'g')->raw_join('LEFT OUTER JOIN ' . ForumSettings::get('db_prefix') . 'online', "o.user_id!=1 AND o.idle=0 AND o.user_id=u.id", 'o')->where('m.conversation_id', $conv_id)->order_by_asc('m.sent')->find_array();
     return $result;
 }
Esempio n. 28
0
                                        </select><br /><?php 
echo $lang_admin_parser['New smiley image'];
?>
                                    </td>
                                    <td></td>
                                </tr>
                                <tr>
                                    <th scope="row"><?php 
echo $lang_admin_parser['smiley_upload'];
?>
</th>
 <?php 
if (ini_get('file_uploads')) {
    ?>
                                    <td><input type="hidden" name="MAX_FILE_SIZE" value="<?php 
    echo ForumSettings::get('o_avatars_size');
    ?>
" />
                                        <input type="file" name="new_smiley" id="upload_smiley" /></td>
                                    <td><input type="submit" name="upload" value="<?php 
    echo $lang_admin_parser['upload_button'];
    ?>
" /></td>
<?php 
} else {
    ?>
                                    <td colspan="2"><?php 
    echo $lang_admin_parser['upload_off'];
    ?>
</td>
<?php 
Esempio n. 29
0
?>
" onclick="window.open(this.href); return false;"><?php 
_e('img tag');
?>
</a> <?php 
echo ForumSettings::get('p_message_bbcode') == '1' && ForumSettings::get('p_message_img_tag') == '1' ? __('on') : __('off');
?>
</span></li>
                                    <li><span><a href="<?php 
echo Router::pathFor('help') . '#smilies';
?>
" onclick="window.open(this.href); return false;"><?php 
_e('Smilies');
?>
</a> <?php 
echo ForumSettings::get('o_smilies') == '1' ? __('on') : __('off');
?>
</span></li>
                                </ul>
                            </div>
                        </fieldset>
                    </div>
                    <div class="inform">
                        <fieldset>
                            <legend><?php 
_e('Options');
?>
</legend>
                            <div class="infldset">
                                <div class="rbox">
                                    <label><input type="checkbox" name="smilies" value="1" tabindex="3" /><?php 
Esempio n. 30
0
                    </div>
                </div>
                <div class="clear"></div>
            </div>
<?php 
if (User::get()->g_read_board == '1' && ForumSettings::get('o_announcement') == '1') {
    ?>
            <div id="announce" class="block">
                <div class="hd"><h2><span><?php 
    _e('Announcement');
    ?>
</span></h2></div>
                <div class="box">
                    <div id="announce-block" class="inbox">
                        <div class="usercontent"><?php 
    echo ForumSettings::get('o_announcement_message');
    ?>
</div>
                    </div>
                </div>
            </div>
<?php 
}
if (!empty(Container::get('flash')->getMessages())) {
    ?>
            <script type="text/javascript">
                window.onload = function() {
                    var flashMessage = document.getElementById('flashmsg');
                    flashMessage.className = 'flashmsg '+flashMessage.getAttribute('data-type')+' show';
                    setTimeout(function () {
                        flashMessage.className = 'flashmsg '+flashMessage.getAttribute('data-type');