$_val) { if (isset(${$_key})) { unset(${$_key}); } } } } } /** * Yes, required */ define('REQ_YES', 1); /** * No, not required */ define('REQ_NO', 0); /** * Blue Static ISSO Framework (ISSO) * * This framework allows a common backend to be used amongst all Blue * Static applications and is built to be abstract and flexible. * The base framework handles all loading and module management. * * Constants: * ISSO_MT_START - Define the microtime() value at the top of your * script and this will calculate the total execution * time * SVN - Place SVN keywords (like $Id) to display the information on output * * @author Blue Static * @copyright Copyright ©2002 - [#]year[#], Blue Static * @version $Revision$ * @package ISSO * */ class ISSO { /** * ISSO version * @var string */ private $version = '[#]issoversion[#]'; /** * List of loaded modules * @var array */ private $modules = array(); // ################################################################### /** * Constructor */ public function __construct() { $GLOBALS['isso:callback'] = null; // error reporting set_error_handler(array(&$this, '_error_handler')); } // ################################################################### /** * Prints a list of all currently loaded framework modules * * @param bool Return the data as an array? * * @return mixed HTML output or an array of loaded modules */ public function show_modules($return = false) { $modules = array(); foreach ($this->modules AS $object) { $module = get_class($object); if (method_exists($object, 'init_as_package') AND in_array($module, $modules)) { $module = $object->init_as_package() . " - ($module)"; } $modules[] = $module; } if ($return) { return $modules; } else { $output = "\n\n\n\n"; $this->message('Loaded Modules', $output, 1); } } // ################################################################### /** * Prints an ISSO message * * @param string The title of the message * @param string The content of the message * @param integer Type of message to be printed * @param bool Return the output? * @param bool Show the debug stack? * @param integer Message width * * @return mixed Output or null */ public function message($title, $message, $type, $return = false, $stack = true, $width = 500) { switch ($type) { // Message case 1: $prefix = 'Message'; $color = '#669900'; $font = '#000000'; break; // Warning case 2: $prefix = 'Warning'; $color = '#003399'; $font = '#FFFFFF'; break; case 3: $prefix = 'Error'; $color = '#990000'; $font = '#EFEFEF'; break; } $backtrace = debug_backtrace(); array_shift($backtrace); if (isset($backtrace[0]) AND $backtrace[0]['function'] == '_error_handler') { array_shift($backtrace); } $trace = $this->format_debug_trace($backtrace); $output = "\n
\n"; $output .= "\n\n\t\n"; $output .= "\n\n\t\n"; $output .= (($stack AND $GLOBALS['isso:callback']->debug) ? "\n\n\t\n" : ''); $output .= "\n
$prefix: $title
$message
Debug Stack:
" . implode("\n", $trace) . "
\n
\n"; if ($return) { return $output; } else { print($output); } } // ################################################################### /** * Prepares a debug_backtrace() array for output to the browser by * compressing the array into visible text * * @param array debug_backtrace() array * * @return array Formatted trace output */ public function format_debug_trace($backtrace) { $trace = array(); foreach ($backtrace AS $i => $step) { $args = ''; $file = $step['file'] . ':' . $step['line']; $funct = (isset($step['class']) ? $step['class'] . '::' . $step['function'] : $step['function']); if (isset($step['args']) AND is_array($step['args'])) { // we need to do this so we don't get "Array to string conversion" notices foreach ($step['args'] AS $id => $arg) { if (is_array($arg)) { $step['args']["$id"] = 'Array'; } } $args = implode(', ', $step['args']); } $trace[] = "#$i $funct($args) called at [$file]"; } return $trace; } // ################################################################### /** * Custom error handler for ISSO; only handle E_WARNING, E_NOTICE, * E_USER_ERROR, E_USER_WARNING, E_USER_NOTICE * * @param integer Error number * @param string Error message string * @param string File that contains the error * @param string The line number of the error * @param string The active symbol table at which point the error occurred */ public function _error_handler($errno, $errstr, $errfile, $errline, $errcontext) { $level = ini_get('error_reporting'); switch ($errno) { // Fatal case E_USER_ERROR: $title = 'Fatal'; $mode = 3; if (!($level & E_USER_ERROR)) { return; } break; // Error case E_USER_WARNING: case E_WARNING: $title = 'Warning'; $mode = 2; if (! (($level & E_USER_WARNING) AND ($level & E_WARNING)) ) { return; } break; // Warning case E_USER_NOTICE: case E_NOTICE: default: $title = 'Notice'; $mode = 1; if (! (($level & E_USER_NOTICE) AND ($level & E_NOTICE)) ) { return; } break; } $errstr .= " in $errfile on line $errline"; $errstr = str_replace(array(getcwd(), dirname(getcwd())), '', $errstr); $this->message($title, $errstr, $mode); if ($errno == E_USER_ERROR) { exit; } } // ################################################################### /** * Creates a table that explains the error reporting levels and their * state */ public function explain_error_reporting() { $levels = array( 'E_ERROR' => E_ERROR, 'E_WARNING' => E_WARNING, 'E_PARSE' => E_PARSE, 'E_NOTICE' => E_NOTICE, 'E_CORE_ERROR' => E_CORE_ERROR, 'E_CORE_WARNING' => E_CORE_WARNING, 'E_COMPILE_ERROR' => E_COMPILE_ERROR, 'E_COMPILE_WARNING' => E_COMPILE_WARNING, 'E_USER_ERROR' => E_USER_ERROR, 'E_USER_WARNING' => E_USER_WARNING, 'E_USER_NOTICE' => E_USER_NOTICE, 'E_ALL' => E_ALL, 'E_STRICT' => E_STRICT ); $table = ''; foreach ($levels AS $name => $value) { $table .= ' '; } $table .= '
' . $name . ' ' . (ini_get('error_reporting') & $value) . '
'; $this->message('Error Reporting', $table, 1); } // ################################################################### /** * Constructs a debug information box that contains various debugging * information points * * @param bool Show template information? * * @return string Debugging block */ public function construct_debug_block($dotemplates) { $debug = ''; if ($this->debug) { $debug = "\n"; $debug = "\n\n\n
\n\n
\n" . $this->message('Debug Information', $debug, 1, true, false) . "\n
\n\n\n"; } return $debug; } } /*=====================================================================*\ || ################################################################### || # $HeadURL$ || # $Id$ || ################################################################### \*=====================================================================*/ ?>