require STK_ROOT_PATH . 'common.' . PHP_EXT; // Setup the user $user->session_begin(); $auth->acl($user->data); $user->setup('acp/common', $config['default_style']); // Load UMIL $umil = new umil(true); // Set a constant so we know when the STK got to a point where it savely loaded all absolutely required stuff define('IN_STK', true); // The PHPBB_VERSION constant was introduced in phpBB 3.0.3, some tools rely on this constant // if it isn't set here fill it with $config['version'] for backward compatibility if (!defined('PHPBB_VERSION')) { define('PHPBB_VERSION', $config['version']); } // Language path. We are using a custom language path to keep all the files within the stk/ folder. First check if the $user->data['user_lang'] path exists, if not, check if the default lang path exists, and if still not use english. stk_add_lang('common'); // Do not use the normal template path (to prevent issues with boards using alternate styles) $template->set_custom_template(STK_ROOT_PATH . 'style', 'stk'); // Work around for a bug in phpBB3. $user->theme['template_storedb'] = false; // Setup some variables $action = request_var('action', ''); $submit = request_var('submit', false); // Perform some quick tasks here that don't require any authentication! perform_unauthed_quick_tasks($action); /* * Start Login */ $stk_passwd = $stk_passwd_expiration = FALSE; // See whether we have an emergency login file if (file_exists(STK_ROOT_PATH . 'passwd.' . PHP_EXT) && $user->data['user_type'] != USER_FOUNDER) {
/** * Load the requested tool * * @param String $tool_cat The category of this tool. * @param String $tool_name The name of this tool * @param Boolean $return Specify whether an object of this tool will be returned * @return The object of the requested tool if $return is set to true else this method will return true */ function load_tool($tool_cat, $tool_name, $return = true) { global $user; static $tools_loaded = array(); if (isset($tools_loaded[$tool_name])) { return $return ? $tools_loaded[$tool_name] : true; } $tool_path = $this->tool_box_path . $tool_cat . '/' . $tool_name . '.' . PHP_EXT; if (false === @(include $tool_path)) { trigger_error(sprintf($user->lang['TOOL_INCLUTION_NOT_FOUND'], $tool_path), E_USER_ERROR); } if (!class_exists($tool_name)) { trigger_error(sprintf($user->lang['INCORRECT_CLASS'], $tool_name, PHP_EXT), E_USER_ERROR); } // Construct the class $tools_loaded[$tool_name] = new $tool_name(); // Add the language file (not needed for 'erk' ;)) if ($tool_name != 'erk') { // SRT Generator gets handled a bit different $force_lang = $tool_name == 'srt_generator' ? 'en' : false; stk_add_lang('tools/' . $tool_cat . '/' . $tool_name, $force_lang); } // Return return $return ? $tools_loaded[$tool_name] : true; }
require STK_ROOT_PATH . 'common.' . PHP_EXT; // Setup the user $user->session_begin(); $auth->acl($user->data); $user->setup('acp/common', $config['default_style']); if (!isset($user->data['session_admin']) || !$user->data['session_admin']) { exit; } else { // Only Board Founders may use the STK if ($user->data['user_type'] != USER_FOUNDER) { trigger_error('BOARD_FOUNDER_ONLY'); } } // Language path. We are using a custom language path to keep all the files within the stk/ folder. First check if the $user->data['user_lang'] path exists, if not, check if the default lang path exists, and if still not use english. stk_add_lang('common'); stk_add_lang('tools/ext/ext_finder'); // Do not use the normal template path (to prevent issues with boards using alternate styles) $template->set_custom_style('stk', STK_ROOT_PATH . 'style'); $table = request_var('t', ''); $column = request_var('col', ''); $_config = request_var('c', ''); $module = request_var('m', ''); $permission = request_var('p', ''); // Try get data from cache $extra_data = $cache->get('_stk_ext'); if (!$extra_data) { // No data in cache // Try to override some limits - maybe it helps some... @set_time_limit(0); $mem_limit = @ini_get('memory_limit'); if (!empty($mem_limit)) {
/** * Support Toolkit Error handler * * A wrapper for the phpBB `msg_handler` function, which is mainly used * to update variables before calling the actual msg_handler and is able * to handle various special cases. * * @global type $stk_no_error * @global string $phpbb_root_path * @param type $errno * @param string $msg_text * @param type $errfile * @param type $errline * @return boolean */ function stk_msg_handler($errno, $msg_text, $errfile, $errline) { // First and foremost handle the case where phpBB calls trigger error // but the STK really needs to continue. global $critical_repair, $stk_no_error, $user; if (!isset($user->lang['STK_FATAL_ERROR'])) { stk_add_lang('common'); } if ($stk_no_error === true) { return true; } // Do not display notices if we suppress them via @ if (error_reporting() == 0 && $errno != E_USER_ERROR && $errno != E_USER_WARNING && $errno != E_USER_NOTICE) { return; } if (!defined('E_DEPRECATED')) { define('E_DEPRECATED', 8192); } // Ignore Strict and Deprecated notices if (in_array($errno, array(E_STRICT, E_DEPRECATED))) { return true; } // We encounter an error while in the ERK, this need some special treatment $error_level = array(E_ERROR => 'Fatal error', E_WARNING => 'Runtime Error', E_PARSE => 'Parse error', E_NOTICE => 'Notice'); switch ($errno) { case E_ERROR: case E_PARSE: case E_WARNING: case E_NOTICE: case E_CORE_ERROR: case E_COMPILE_ERROR: case E_USER_ERROR: case E_RECOVERABLE_ERROR: $backtrace = get_backtrace(); $msg_text = '<br /><b>[phpBB Debug] PHP ' . $error_level[$errno] . ':</b> in file ' . phpbb_filter_root_path($errfile) . ' on line <b>' . $errline . ': ' . $msg_text . '</b><br />' . $backtrace . ''; break; default: break; } if (defined('IN_ERK')) { $critical_repair->trigger_error($msg_text, $errno == E_USER_ERROR ? false : true); } else { if (!defined('IN_STK')) { // We're encountering an error before the STK is fully loaded // Set out own message if needed if ($errno == E_USER_ERROR) { $msg_text = $user->lang['STK_FATAL_ERROR']; } if (!isset($critical_repair)) { $critical_repair = new critical_repair(); } $critical_repair->trigger_error($msg_text, $errno == E_USER_ERROR ? false : true); } } //-- Normal phpBB msg_handler global $cache, $db, $auth, $template, $config, $user; global $phpEx, $phpbb_root_path, $msg_title, $msg_long_text; // Message handler is stripping text. In case we need it, we are possible to define long text... if (isset($msg_long_text) && $msg_long_text && !$msg_text) { $msg_text = $msg_long_text; } if (!defined('E_DEPRECATED')) { define('E_DEPRECATED', 8192); } switch ($errno) { case E_NOTICE: case E_WARNING: // Check the error reporting level and return if the error level does not match // If DEBUG is defined the default level is E_ALL if (($errno & (defined('DEBUG') ? E_ALL : error_reporting())) == 0) { return; } if (strpos($errfile, 'cache') === false && strpos($errfile, 'template.') === false) { $errfile = stk_filter_root_path($errfile); $msg_text = stk_filter_root_path($msg_text); $error_name = $errno === E_WARNING ? 'PHP Warning' : 'PHP Notice'; echo '<b>[phpBB Debug] ' . $error_name . '</b>: in file <b>' . $errfile . '</b> on line <b>' . $errline . '</b>: <b>' . $msg_text . '</b><br />' . "\n"; // we are writing an image - the user won't see the debug, so let's place it in the log if (defined('IMAGE_OUTPUT') || defined('IN_CRON')) { add_log('critical', 'LOG_IMAGE_GENERATION_ERROR', $errfile, $errline, $msg_text); } echo '<br /><br />BACKTRACE<br />' . get_backtrace() . '<br />' . "\n"; } return; break; case E_USER_ERROR: if (!empty($user) && !empty($user->lang)) { $msg_text = !empty($user->lang[$msg_text]) ? $user->lang[$msg_text] : $msg_text; $msg_title = !isset($msg_title) ? $user->lang['GENERAL_ERROR'] : (!empty($user->lang[$msg_title]) ? $user->lang[$msg_title] : $msg_title); $l_return_index = sprintf($user->lang['RETURN_INDEX'], '<a href="' . $phpbb_root_path . '">', '</a>'); $l_notify = ''; if (!empty($config['board_contact'])) { $l_notify = '<p>' . sprintf($user->lang['NOTIFY_ADMIN_EMAIL'], $config['board_contact']) . '</p>'; } } else { $msg_title = 'General Error'; $l_return_index = '<a href="' . $phpbb_root_path . '">Return to index page</a>'; $l_notify = ''; if (!empty($config['board_contact'])) { $l_notify = '<p>Please notify the board administrator or webmaster: <a href="mailto:' . $config['board_contact'] . '">' . $config['board_contact'] . '</a></p>'; } } $log_text = $msg_text; $backtrace = get_backtrace(); if ($backtrace) { $log_text .= '<br /><br />BACKTRACE<br />' . $backtrace; } if (defined('IN_INSTALL') || defined('DEBUG_EXTRA') || isset($auth) && $auth->acl_get('a_')) { $msg_text = $log_text; } if ((defined('DEBUG') || defined('IN_CRON') || defined('IMAGE_OUTPUT')) && isset($db)) { // let's avoid loops $db->sql_return_on_error(true); add_log('critical', 'LOG_GENERAL_ERROR', $msg_title, $log_text); $db->sql_return_on_error(false); } // Do not send 200 OK, but service unavailable on errors stk_send_status_line(503, 'Service Unavailable'); garbage_collection(); // Try to not call the adm page data... echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">'; echo '<html xmlns="http://www.w3.org/1999/xhtml" dir="' . $user->lang['DIRECTION'] . '" lang="' . $user->lang['USER_LANG'] . '" xml:lang="' . $user->lang['USER_LANG'] . '">'; echo '<head>'; echo '<meta http-equiv="content-type" content="text/html; charset=utf-8" />'; echo '<title>' . $msg_title . '</title>'; echo '<style type="text/css">' . "\n" . '/* <![CDATA[ */' . "\n"; echo '* { margin: 0; padding: 0; } html { font-size: 100%; height: 100%; margin-bottom: 1px; background-color: #E4EDF0; } body { font-family: "Lucida Grande", Verdana, Helvetica, Arial, sans-serif; color: #536482; background: #E4EDF0; font-size: 62.5%; margin: 0; } '; echo 'a:link, a:active, a:visited { color: #006699; text-decoration: none; } a:hover { color: #DD6900; text-decoration: underline; } '; echo '#wrap { padding: 0 20px 15px 20px; min-width: 615px; } #page-header { text-align: right; height: 40px; } #page-footer { clear: both; font-size: 1em; text-align: center; } '; echo '.panel { margin: 4px 0; background-color: #FFFFFF; border: solid 1px #A9B8C2; } '; echo '#errorpage #page-header a { font-weight: bold; line-height: 6em; } #errorpage #content { padding: 10px; } #errorpage #content h1 { line-height: 1.2em; margin-bottom: 0; color: #DF075C; } '; echo '#errorpage #content div { margin-top: 20px; margin-bottom: 5px; border-bottom: 1px solid #CCCCCC; padding-bottom: 5px; color: #333333; font: bold 1.2em "Lucida Grande", Arial, Helvetica, sans-serif; text-decoration: none; line-height: 120%; text-align: left; } '; echo "\n" . '/* ]]> */' . "\n"; echo '</style>'; echo '</head>'; echo '<body id="errorpage">'; echo '<div id="wrap">'; echo ' <div id="page-header">'; echo ' ' . $l_return_index; echo ' </div>'; echo ' <div id="acp">'; echo ' <div class="panel">'; echo ' <div id="content">'; echo ' <h1>' . $msg_title . '</h1>'; echo ' <div>' . $msg_text . '</div>'; echo $l_notify; echo ' </div>'; echo ' </div>'; echo ' </div>'; echo ' <div id="page-footer">'; echo ' Powered by <a href="http://www.phpbb.com/">phpBB</a>® Forum Software © phpBB Group'; echo ' </div>'; echo '</div>'; echo '</body>'; echo '</html>'; exit_handler(); // On a fatal error (and E_USER_ERROR *is* fatal) we never want other scripts to continue and force an exit here. exit; break; case E_USER_WARNING: case E_USER_NOTICE: define('IN_ERROR_HANDLER', true); if (empty($user->data)) { $user->session_begin(); } // We re-init the auth array to get correct results on login/logout $auth->acl($user->data); if (empty($user->lang)) { $user->setup(); } if ($msg_text == 'ERROR_NO_ATTACHMENT' || $msg_text == 'NO_FORUM' || $msg_text == 'NO_TOPIC' || $msg_text == 'NO_USER') { stk_send_status_line(404, 'Not Found'); } $msg_text = !empty($user->lang[$msg_text]) ? $user->lang[$msg_text] : $msg_text; $msg_title = !isset($msg_title) ? $user->lang['INFORMATION'] : (!empty($user->lang[$msg_title]) ? $user->lang[$msg_title] : $msg_title); if (!defined('HEADER_INC')) { if (defined('IN_ADMIN') && isset($user->data['session_admin']) && $user->data['session_admin']) { adm_page_header($msg_title); } else { page_header($msg_title, false); } } $template->set_filenames(array('body' => 'message_body.html')); $template->assign_vars(array('MESSAGE_TITLE' => $msg_title, 'MESSAGE_TEXT' => $msg_text, 'S_USER_WARNING' => $errno == E_USER_WARNING ? true : false, 'S_USER_NOTICE' => $errno == E_USER_NOTICE ? true : false)); // We do not want the cron script to be called on error messages define('IN_CRON', true); if (defined('IN_ADMIN') && isset($user->data['session_admin']) && $user->data['session_admin']) { adm_page_footer(); } else { page_footer(); } exit_handler(); break; // PHP4 compatibility // PHP4 compatibility case E_DEPRECATED: return true; break; } // If we notice an error not handled here we pass this back to PHP by returning false // This may not work for all php versions return false; }
/** * Load the requested tool * * @param String $tool_cat The category of this tool. * @param String $tool_name The name of this tool * @param Boolean $return Specify whether an object of this tool will be returned * @return The object of the requested tool if $return is set to true else this method will return true */ function load_tool($tool_cat, $tool_name, $return = true) { global $user; static $tools_loaded = array(); if (isset($tools_loaded[$tool_name])) { return ($return) ? $tools_loaded[$tool_name] : true; } $tool_path = $this->tool_box_path . $tool_cat . '/' . $tool_name . '.' . PHP_EXT; if (false === (@include $tool_path)) { trigger_error(sprintf($user->lang['TOOL_INCLUTION_NOT_FOUND'], $tool_path), E_USER_ERROR); } if (!class_exists($tool_name)) { trigger_error(sprintf($user->lang['INCORRECT_CLASS'], $tool_name, PHP_EXT), E_USER_ERROR); } // Construct the class $tools_loaded[$tool_name] = new $tool_name(); // Add the language file stk_add_lang('tools/' . $tool_name); // Return return ($return) ? $tools_loaded[$tool_name] : true; }