// Parse and show the overall page header global $page_cfg, $userdata, $user, $ft_cfg, $template, $lang, $images; $logged_in = (int) (!empty($userdata['session_logged_in'])); // Generate logged in/logged out status if ($logged_in) { $u_login_logout = FT_ROOT . LOGIN_URL . "?logout=1"; } else { $u_login_logout = FT_ROOT . LOGIN_URL; } if (defined('SHOW_ONLINE') && SHOW_ONLINE) { $online_full = !empty($_REQUEST['online_full']); $online_list = $online_full ? 'online_' . $userdata['user_lang'] : 'online_short_' . $userdata['user_lang']; ${$online_list} = array('stat' => '', 'userlist' => '', 'cnt' => ''); if (defined('IS_GUEST') && !(IS_GUEST || IS_USER)) { $template->assign_var('SHOW_ONLINE_LIST'); if (!(${$online_list} = CACHE('ft_cache')->get($online_list))) { require INC_DIR . 'show_online_list.php'; } } $template->assign_vars(array('TOTAL_USERS_ONLINE' => ${$online_list}['stat'], 'LOGGED_IN_USER_LIST' => ${$online_list}['userlist'], 'USERS_ONLINE_COUNTS' => ${$online_list}['cnt'], 'RECORD_USERS' => sprintf($lang['RECORD_ONLINE_USERS'], $ft_cfg['record_online_users'], create_date($ft_cfg['default_dateformat'], $ft_cfg['record_online_date'], $ft_cfg['board_timezone'])))); } // Obtain number of new private messages if (@$userdata['session_logged_in'] && empty($gen_simple_header)) { if ($userdata['user_new_privmsg']) { $l_message_new = $userdata['user_new_privmsg'] == 1 ? $lang['New_pm'] : $lang['New_pms']; $l_privmsgs_text = sprintf($l_message_new, $userdata['user_new_privmsg']); if ($userdata['user_last_privmsg'] > $userdata['user_lastvisit']) { $sql = "UPDATE " . USERS_TABLE . "\r\n\t\t\t\tSET user_last_privmsg = " . $userdata['user_lastvisit'] . "\r\n\t\t\t\tWHERE user_id = " . $userdata['user_id']; if (!DB()->sql_query($sql)) { message_die(GENERAL_ERROR, 'Could not update private message new/read time for user', '', __LINE__, __FILE__, $sql); }
} else { return $language; } } /** * Get attachment mod configuration */ function get_config() { global $bb_cfg; $attach_config = array(); $sql = 'SELECT * FROM ' . BB_ATTACH_CONFIG; if (!($result = DB()->sql_query($sql))) { bb_die('Could not query attachment information'); } while ($row = DB()->sql_fetchrow($result)) { $attach_config[$row['config_name']] = trim($row['config_value']); } // We assign the original default board language here, because it gets overwritten later with the users default language $attach_config['board_lang'] = trim($bb_cfg['default_lang']); return $attach_config; } // Get Attachment Config $attach_config = array(); if (!($attach_config = CACHE('bb_cache')->get('attach_config'))) { $attach_config = get_config(); CACHE('bb_cache')->set('attach_config', $attach_config, 86400); } include ATTACH_DIR . 'displaying.php'; include ATTACH_DIR . 'posting_attachments.php'; $upload_dir = $attach_config['upload_dir'];
CACHE('bb_cache')->rm(); $show_main_page = true; break; case 'cat_order': $move = (int) $_GET['move']; $cat_id = (int) $_GET['c']; DB()->query("\n\t\t\t\tUPDATE " . BB_CATEGORIES . " SET\n\t\t\t\t\tcat_order = cat_order + {$move}\n\t\t\t\tWHERE cat_id = {$cat_id}\n\t\t\t"); renumber_order('category'); $datastore->update('cat_forums'); CACHE('bb_cache')->rm(); $show_main_page = true; break; case 'forum_sync': sync('forum', intval($_GET['f'])); $datastore->update('cat_forums'); CACHE('bb_cache')->rm(); $show_main_page = true; break; default: bb_die($lang['NO_MODE']); break; } } if (!$mode || $show_main_page) { $template->assign_vars(array('TPL_FORUMS_LIST' => true, 'S_FORUM_ACTION' => 'admin_forums.php', 'L_FORUM_TITLE' => $lang['FORUM_ADMIN_MAIN'])); $sql = "SELECT cat_id, cat_title, cat_order FROM " . BB_CATEGORIES . " ORDER BY cat_order"; if (!($q_categories = DB()->sql_query($sql))) { bb_die('Could not query categories list'); } if ($total_categories = DB()->num_rows($q_categories)) { $category_rows = DB()->sql_fetchrowset($q_categories);
/** * Log slow query */ function log_slow_query($log_file = 'sql_slow_bb') { if (!defined('IN_FIRST_SLOW_QUERY') && CACHE('bb_cache')->get('dont_log_slow_query')) { return; } $this->log_query($log_file); }
} $logged_online += count($users); } $online['userlist'] = join(",\n", $inline) . join("\n", $block); $online_short['userlist'] = join(",\n", $short); } if (!$online['userlist']) { $online['userlist'] = $online_short['userlist'] = $lang['NONE']; } else { if (isset($_REQUEST['f'])) { $online['userlist'] = $online_short['userlist'] = $lang['BROWSING_FORUM'] . ' ' . $online['userlist']; } } $total_online = $logged_online + $guests_online; if ($total_online > $bb_cfg['record_online_users']) { bb_update_config(array('record_online_users' => $total_online, 'record_online_date' => TIMENOW)); } $online['stat'] = $online_short['stat'] = sprintf($lang['ONLINE_USERS'], $total_online, $logged_online, $guests_online); $online['cnt'] = $online_short['cnt'] = <<<HTML [ \t<span class="colorAdmin bold">{$users_cnt['admin']}</span> <span class="small">·</span> \t<span class="colorMod bold">{$users_cnt['mod']}</span> <span class="small">·</span> \t<span class="colorGroup bold">{$users_cnt['group_member']}</span> <span class="small">·</span> \t<span class="colorISL">{$users_cnt['ignore_load']}</span> <span class="small">·</span> \t<span>{$users_cnt['user']}</span> <span class="small">·</span> \t<span>{$users_cnt['guest']}</span> ] HTML; CACHE('bb_cache')->set('online_' . $userdata['user_lang'], $online, 60); CACHE('bb_cache')->set('online_short_' . $userdata['user_lang'], $online_short, 60);
function cache_rm_user_sessions($user_id) { $user_id = get_id_csv($user_id); $rowset = DB()->fetch_rowset("\n\t\tSELECT session_id FROM " . SESSIONS_TABLE . " WHERE session_user_id IN({$user_id})\n\t"); foreach ($rowset as $row) { CACHE('session_cache')->rm($row['session_id']); } }
function delete_votes_data($topic_id) { DB()->query("DELETE FROM " . BB_POLL_VOTES . " WHERE topic_id = {$topic_id}"); DB()->query("DELETE FROM " . BB_POLL_USERS . " WHERE topic_id = {$topic_id}"); CACHE('bb_poll_data')->rm("poll_{$topic_id}"); }
} $sql = "UPDATE " . BB_ATTACH_CONFIG . "\n\t\t\t\tSET\tconfig_value = '" . attach_mod_sql_escape($new_attach[$config_name]) . "'\n\t\t\t\tWHERE config_name = '" . attach_mod_sql_escape($config_name) . "'"; } else { $sql = "UPDATE " . BB_ATTACH_CONFIG . "\n\t\t\t\tSET\tconfig_value = '" . attach_mod_sql_escape($new_attach[$config_name]) . "'\n\t\t\t\tWHERE config_name = '" . attach_mod_sql_escape($config_name) . "'"; } if (!DB()->sql_query($sql)) { bb_die('Failed to update attachment configuration for ' . $config_name); } if ($config_name == 'max_filesize' || $config_name == 'attachment_quota' || $config_name == 'max_filesize_pm') { $new_attach[$config_name] = $old; } } } DB()->sql_freeresult($result); // Clear cached config CACHE('bb_cache')->rm('attach_config'); $select_size_mode = size_select('size', $size); $select_quota_size_mode = size_select('quota_size', $quota_size); $select_pm_size_mode = size_select('pm_size', $pm_size); // Search Imagick if ($search_imagick) { $imagick = ''; if (preg_match('/convert/i', $imagick)) { return true; } else { if ($imagick != 'none') { if (!preg_match('/WIN/i', PHP_OS)) { $retval = @exec('whereis convert'); $paths = explode(' ', $retval); if (is_array($paths)) { for ($i = 0; $i < sizeof($paths); $i++) {
} if (!($result = DB()->sql_query($sql))) { bb_die('Could not insert data into words table'); } CACHE('bb_cache')->rm('censored'); $message .= '<br /><br />' . sprintf($lang['CLICK_RETURN_WORDADMIN'], '<a href="admin_words.php">', '</a>') . '<br /><br />' . sprintf($lang['CLICK_RETURN_ADMIN_INDEX'], '<a href="index.php?pane=right">', '</a>'); bb_die($message); } else { if ($mode == 'delete') { $word_id = intval(request_var('id', 0)); if ($word_id) { $sql = "DELETE FROM " . BB_WORDS . " WHERE word_id = {$word_id}"; if (!($result = DB()->sql_query($sql))) { bb_die('Could not remove data from words table'); } CACHE('bb_cache')->rm('censored'); bb_die($lang['WORD_REMOVED'] . '<br /><br />' . sprintf($lang['CLICK_RETURN_WORDADMIN'], '<a href="admin_words.php">', '</a>') . '<br /><br />' . sprintf($lang['CLICK_RETURN_ADMIN_INDEX'], '<a href="index.php?pane=right">', '</a>')); } else { bb_die($lang['NO_WORD_SELECTED']); } } } } } else { $sql = "SELECT * FROM " . BB_WORDS . " ORDER BY word"; if (!($result = DB()->sql_query($sql))) { bb_die('Could not query words table #2'); } $word_rows = DB()->sql_fetchrowset($result); $word_count = count($word_rows); $template->assign_vars(array('TPL_ADMIN_WORDS_LIST' => true, 'S_WORDS_ACTION' => 'admin_words.php', 'S_HIDDEN_FIELDS' => ''));
<?php require './pagestart.php'; // Generate relevant output if (isset($_GET['pane']) && $_GET['pane'] == 'left') { if (!($module = CACHE('bb_cache')->get('admin_module'))) { $dir = @opendir('.'); $setmodules = 1; while ($file = @readdir($dir)) { if (preg_match('/^admin_.*?\\.php$/', $file)) { include './' . $file; } } unset($setmodules); @closedir($dir); CACHE('bb_cache')->set('admin_module', $module, 600); } $template->assign_vars(array('TPL_ADMIN_NAVIGATE' => true, 'U_FORUM_INDEX' => '../index.php', 'U_ADMIN_INDEX' => 'index.php?pane=right')); ksort($module); while (list($cat, $action_array) = each($module)) { $cat = !empty($lang[$cat]) ? $lang[$cat] : preg_replace('/_/', ' ', $cat); $template->assign_block_vars('catrow', array('ADMIN_CATEGORY' => $cat)); ksort($action_array); $row_count = 0; while (list($action, $file) = each($action_array)) { $row_class = !($row_count % 2) ? 'row1' : 'row2'; $action = !empty($lang[$action]) ? $lang[$action] : preg_replace('/_/', ' ', $action); $template->assign_block_vars('catrow.modulerow', array('ROW_CLASS' => $row_class, 'ADMIN_MODULE' => $action, 'U_ADMIN_MODULE' => $file)); $row_count++; } }
if (!$login_errors) { if ($user->login($_POST, $mod_admin_login)) { $redirect_url = defined('FIRST_LOGON') ? $bb_cfg['first_logon_redirect_url'] : $redirect_url; // Обнуление при введении правильно комбинации логин/пароль CACHE('bb_login_err')->set('l_err_' . USER_IP, 0, 3600); if ($redirect_url == '/' . LOGIN_URL || $redirect_url == LOGIN_URL) { $redirect_url = 'index.php'; } redirect($redirect_url); } $login_errors[] = $lang['ERROR_LOGIN']; if (!$mod_admin_login) { $login_err = CACHE('bb_login_err')->get('l_err_' . USER_IP); if ($login_err > $bb_cfg['invalid_logins']) { $need_captcha = true; } if ($login_err > 50) { // TODO temp ban ip } CACHE('bb_login_err')->set('l_err_' . USER_IP, $login_err + 1, 3600); } else { $need_captcha = false; } } } // Login page if (IS_GUEST || $mod_admin_login) { $template->assign_vars(array('LOGIN_USERNAME' => htmlCHR($login_username), 'LOGIN_PASSWORD' => htmlCHR($login_password), 'ERROR_MESSAGE' => join('<br />', $login_errors), 'ADMIN_LOGIN' => $mod_admin_login, 'REDIRECT_URL' => htmlCHR($redirect_url), 'CAPTCHA_HTML' => $need_captcha && !$bb_cfg['captcha']['disabled'] ? bb_captcha('get') : '', 'PAGE_TITLE' => $lang['LOGIN'], 'S_LOGIN_ACTION' => LOGIN_URL)); print_page('login.tpl'); } redirect($redirect_url);
function caching_output($enabled, $mode, $cache_var_name, $ttl = 300) { if (!$enabled || !CACHE('ft_cache')->used) { return; } if ($mode == 'send') { if ($cached_contents = CACHE('ft_cache')->get($cache_var_name)) { ft_exit($cached_contents); } } else { if ($mode == 'store') { if ($output = ob_get_contents()) { CACHE('ft_cache')->set($cache_var_name, $output, $ttl); } } } }
<?php if (!defined('IN_AJAX')) { die(basename(__FILE__)); } global $userdata, $lang, $bb_cfg; $mode = (string) $this->request['mode']; switch ($mode) { case 'clear_cache': foreach ($bb_cfg['cache']['engines'] as $cache_name => $cache_val) { if (!in_array('db_sqlite', $cache_val)) { CACHE($cache_name)->rm(); } } $this->response['cache_html'] = '<span class="seed bold">' . $lang['ALL_CACHE_CLEARED'] . '</span>'; break; case 'clear_datastore': global $datastore; $datastore->clean(); $this->response['datastore_html'] = '<span class="seed bold">' . $lang['DATASTORE_CLEARED'] . '</span>'; break; case 'clear_template_cache': global $template; $match = 'tpl_'; $match_len = strlen($match); $dir = $template->cachedir; $res = @opendir($dir); while (($file = readdir($res)) !== false) { if (substr($file, 0, $match_len) === $match) { @unlink($dir . $file); }
$numwant = (int) $tr_cfg['numwant']; $compact_mode = $tr_cfg['compact_mode'] || !empty($compact); $rowset = DB()->fetch_rowset("\n\t\tSELECT ip, port\n\t\tFROM " . BB_BT_TRACKER . "\n\t\tWHERE topic_id = {$topic_id}\n\t\tORDER BY RAND()\n\t\tLIMIT {$numwant}\n\t"); if ($compact_mode) { $peers = ''; foreach ($rowset as $peer) { $peers .= pack('Nn', ip2long(decode_ip($peer['ip'])), $peer['port']); } } else { $peers = array(); foreach ($rowset as $peer) { $peers[] = array('ip' => decode_ip($peer['ip']), 'port' => intval($peer['port'])); } } $seeders = 0; $leechers = 0; if ($tr_cfg['scrape']) { $row = DB()->fetch_row("\n\t\t\tSELECT seeders, leechers\n\t\t\tFROM " . BB_BT_TRACKER_SNAP . "\n\t\t\tWHERE topic_id = {$topic_id}\n\t\t\tLIMIT 1\n\t\t"); $seeders = $row['seeders']; $leechers = $row['leechers']; } $output = array('interval' => (int) $announce_interval, 'min interval' => (int) $announce_interval, 'peers' => $peers, 'complete' => (int) $seeders, 'incomplete' => (int) $leechers); $peers_list_cached = CACHE('tr_cache')->set(PEERS_LIST_PREFIX . $topic_id, $output, PEERS_LIST_EXPIRE); if (DBG_LOG && !$peers_list_cached) { dbg_log(' ', '$output-caching-FAIL'); } } // Return data to client echo bencode($output); tracker_exit(); exit;
<?php if (!defined('BB_ROOT')) { die(basename(__FILE__)); } global $cron_runtime_log; foreach ($bb_cfg['cache']['engines'] as $cache_name => $cache_val) { if (method_exists(CACHE($cache_name), 'gc')) { $changes = CACHE($cache_name)->gc(); $cron_runtime_log = date('Y-m-d H:i:s') . " -- " . str_pad("{$cache_name} ", 25, '-', STR_PAD_RIGHT) . " del: {$changes}\n"; } }
} } if ($show_subforums && $row['show_on_index']) { $parent['last_sf_id'] = $forum_id; } else { continue; } } else { $f =& $forums['f'][$forum_id]; $row['forum_desc'] = $f['forum_desc']; $row['forum_posts'] = $f['forum_posts']; $row['forum_topics'] = $f['forum_topics']; } $cat_forums[$cat_id]['f'][$forum_id] = $row; } CACHE('bb_cache')->set($cache_name, $cat_forums, 180); unset($row, $forums); $datastore->rm('cat_forums'); } // Obtain list of moderators $moderators = array(); if (!($mod = $datastore->get('moderators'))) { $datastore->update('moderators'); $mod = $datastore->get('moderators'); } if (!empty($mod)) { foreach ($mod['mod_users'] as $forum_id => $user_ids) { foreach ($user_ids as $user_id) { $moderators[$forum_id][] = '<a href="' . PROFILE_URL . $user_id . '">' . $mod['name_users'][$user_id] . '</a>'; } }