255, // all basics 'basic' => 255, // all basics 'b' => 255, // all basics 'warn' => 1, // just php warnings, parse errrors, debug log, etc 'showsql' => 2, // sql basics 'counts' => 4, // traffic counters 'detail' => 16740351, // (0+0xfffff-32768-4096) all details, except notice and inline sc 'd' => 16740351, // all details, except notice and inline sc 'time' => 256, // time details and php errors 'sql' => 512, // sql details and php errors 'paths' => 1024, // dump path strings 'bbsc' => 2048, // show bb and sc details 'sc' => 4096, // Shortcode paths dumped inline 'backtrace' => 8192, // show backtrace when PHP has errors 'deprecated' => 16384, // show if code is using deprecated functions 'notice' => 32768, // detailed notice error messages? 'inc' => 65536, // include files 'everything'=> 16773119, //(0+0xffffff-4096) 24 bits set, except shortcode paths // removed: inline debug breaks pages! ); function __construct() { } /** * @return string[] */ public static function getAliases() { return array( 'off' => 'Off', 'basic' => 'Basic', 'counts' => 'Traffic Counters', 'showsql' => 'SQL Analysis', 'time' => 'Time Analysis', 'notice' => 'Notices (PHP)', 'warn' => 'Warnings (PHP)', 'backtrace' => 'Backtraces (PHP)', 'deprecated' => 'Deprecated Functions (PHP)', 'inc' => 'Included Files (PHP)', 'paths' => 'Paths + Variables', // dump path strings 'bbsc' => 'BBCodes + Shortcodes', // show bb and sc details 'sc' => 'Shortcode Placement', // Shortcode paths dumped inline 'sql' => 'SQL Analysis (Detailed)', // sql details and php errors 'everything' => 'All Details', ); } /** * Returns the currently active debug mode as an alias. eg. 'basic' * @return string|null */ public static function getShortcut() { if(deftrue('e_MENU')) { list($tmp,$alias) = explode('=', e_MENU); return str_replace(['!','+','-', '0', '1'],'',$alias); } if(empty($_COOKIE['e107_debug_level'])) { return null; } $a = self::$aDebugShortcuts; unset($a['all'], $a['b'], $a['d']); // remove duplicates. $keys = array_flip($a); list($tmp,$level) = explode('=',$_COOKIE['e107_debug_level']); $level = (int) $level; return isset($keys[$level]) ? $keys[$level] : null; } /** * @return bool */ public static function activated() { if (isset($_COOKIE['e107_debug_level']) || deftrue('e_DEBUG') || (strpos(e_MENU, "debug") === 0)) // ADMIN and getperms('0') are not available at this point. { return true; } return false; } /** * @return bool */ public static function init() { if(!self::activated()) { self::setConstants(); return false; } if (preg_match('/debug(=?)(.*?),?(!|\+|stick|-|unstick|$)/', e_MENU, $debug_param) || isset($_COOKIE['e107_debug_level'])) { $dVals = ''; if (!isset($debug_param[1]) || ($debug_param[1] == '')) $debug_param[1] = '='; if (isset($_COOKIE['e107_debug_level'])) { $dVals = substr($_COOKIE['e107_debug_level'], 6); } if (preg_match('/debug(=?)(.*?),?(!|\+|stick|-|unstick|$)/', e_MENU)) { $dVals = $debug_param[1] == '=' ? $debug_param[2] : 'everything'; } $aDVal = explode('.', $dVals); // support multiple values, OR'd together $dVal = 0; foreach ($aDVal as $curDVal) { if (isset(self::$aDebugShortcuts[$curDVal])) { $dVal |= self::$aDebugShortcuts[$curDVal]; } else { $dVal |= intval($curDVal); } } if (isset($debug_param[3])) { if ($debug_param[3] == '!' || $debug_param[3] == '+' || $debug_param[3] == 'stick') { cookie('e107_debug_level', 'level=' . $dVal, time() + 86400); } if ($debug_param[3] == '-' || $debug_param[3] == 'unstick') { cookie('e107_debug_level', '', time() - 3600); } } self::$debug_level = $dVal; } self::setConstants(); return true; } /** * Define all debug constants -- each one will be zero or a value * USING DEBUG DEFINITIONS * Since these are Bit Values, **never** test using < or > comparisons. Always * test using boolean operations, such as * @example if (E107_DBG_PATH) * @example if (E107_DBG_SQLQUERIES | E107_DBG_SQLDETAILS) * Since constants are defined for all possible bits, you should never need to use a number value like * @example if (E107_DEBUG_LEVEL & 256) * And there's never a reason to use * if (E107_DEBUG_LEVEL > 254) */ private static function setConstants() { if(!defined('E107_DEBUG_LEVEL')) { define('E107_DEBUG_LEVEL', self::getLevel()); } // Basic levels define('E107_DBG_BASIC', (E107_DEBUG_LEVEL & 1)); // basics: worst php errors, sql errors, log, etc define('E107_DBG_SQLQUERIES', (E107_DEBUG_LEVEL & 2)); // display all sql queries define('E107_DBG_TRAFFIC', (E107_DEBUG_LEVEL & 4)); // display traffic counters define('E107_DBG_FILLIN8', (E107_DEBUG_LEVEL & 8)); // fill in what it is define('E107_DBG_FILLIN16', (E107_DEBUG_LEVEL & 16)); // fill in what it is define('E107_DBG_FILLIN32', (E107_DEBUG_LEVEL & 32)); // fill in what it is define('E107_DBG_FILLIN64', (E107_DEBUG_LEVEL & 64)); // fill in what it is define('E107_DBG_FILLIN128', (E107_DEBUG_LEVEL & 128)); // fill in what it is // Gory detail levels define('E107_DBG_TIMEDETAILS',(E107_DEBUG_LEVEL & 256)); // detailed time profile define('E107_DBG_SQLDETAILS', (E107_DEBUG_LEVEL & 512)); // detailed sql analysis define('E107_DBG_PATH', (E107_DEBUG_LEVEL & 1024)); // show e107 predefined paths define('E107_DBG_BBSC', (E107_DEBUG_LEVEL & 2048)); // Show BBCode/ Shortcode usage in postings define('E107_DBG_SC', (E107_DEBUG_LEVEL & 4096)); // Dump (inline) SC filenames as used define('E107_DBG_ERRBACKTRACE', (E107_DEBUG_LEVEL & 8192)); // show backtrace for php errors define('E107_DBG_DEPRECATED', (E107_DEBUG_LEVEL & 16384)); // Show use of deprecated functions define('E107_DBG_ALLERRORS', (E107_DEBUG_LEVEL & 32768)); // show ALL php errors (including notices), not just fatal issues define('E107_DBG_INCLUDES', (E107_DEBUG_LEVEL & 65536)); // show included file list define('E107_DBG_NOTICES', (E107_DEBUG_LEVEL & 32768)); // show included file list if(!defined('e_DEBUG')) { $e_DEBUG = (E107_DEBUG_LEVEL > 0); define('e_DEBUG', $e_DEBUG); } } /** * @return int */ public static function getLevel() { return self::$debug_level; } /** * @param $level * @return void */ public static function setLevel($level = 0) { self::$debug_level = $level; } /** * @return void */ function set_error_reporting() { } } // Quick debug message logger // Example: e7debug(__FILE__.__LINE__.": myVar is ".print_r($myVar,TRUE)); /* function e7debug($message,$TraceLev=1) { if (!E107_DEBUG_LEVEL) return; global $db_debug; if (is_object($db_debug)) { $db_debug->log($message,$TraceLev); } } */