/**
  * XMP Var Dump
  * var_dump with <xmp>
  * @author albertdiones@gmail.com
  * @since ADD MVC 0.0
  */
 static function var_dump()
 {
     $args = func_get_args();
     if (!$args) {
         $args[0] = static::get_declared_globals();
     }
     $var = call_user_func_array('self::return_var_dump', $args);
     if (add::content_type() == 'text/plain') {
         $output = "\r\nFile Line:" . self::caller_file_line() . "\r\n" . $var . "\r\n";
     } else {
         $output = "<div style='clear:both'><b>" . self::caller_file_line() . "</b><xmp>" . $var . "</xmp></div>";
     }
     self::restricted_echo($output);
     return $args[0];
 }
<?php

require '../config.php';
require_once "{$C->add_dir}/init.php";
$exceptions = array('e_developer', 'e_syntax', 'e_hack', 'e_spam', 'e_system');
$exception = (string) $_GET['exception'];
$email = (string) $_GET['email'];
if ($exception) {
    if ($_REQUEST['is_live']) {
        add::environment_status('live');
    }
    add::content_type($_REQUEST['content_type']);
    e_add::$email_addresses = $email;
    $e = new $exception("Test Error Message");
    #debug::var_dump($e->mail_body());
    throw $e;
}
?>
<form method="GET">
   <select name="exception">
      <option><?php 
echo implode("</option><option>", $exceptions);
?>
</option>
   </select>
   <label>Email<input type="text" name="email" /></label>
   <label><input name="is_live" type="checkbox" />Live</label>
   <label>
      Content Type<select name="content_type">
         <option>text/html</option>
         <option>text/plain</option>
 /**
  * handle_exception()
  * The error handler for exceptions
  * @param Exception $e the exception to handle
  * @since ADD MVC 0.0
  */
 static function handle_exception(Exception $e)
 {
     try {
         while (ob_get_level()) {
             # Do not echo this, it is a big security risk
             ob_get_clean();
         }
         try {
             if (method_exists($e, 'handle_exception')) {
                 return $e->handle_exception();
             } else {
                 throw new Exception("Non e_add exception sub class or no handle_exception() function found for exception");
             }
         } catch (Exception $e2) {
             if ($e instanceof SmartyException) {
                 static::handle_exception(new e_smarty($e->getMessage(), array('message' => $e->getMessage(), 'code' => $e->getCode(), 'trace' => str_replace(array(add::config()->root_dir, add::config()->add_dir), array('*root_dir*', '*add_dir*'), $e->getTraceAsString()))));
             }
             if (add::content_type() == 'text/plain') {
                 die(get_class($e) . "(#" . $e->getCode() . ")\r\n\r\n" . $e->getMessage() . "\r\n\r\n" . $e->getFile() . ":" . $e->getLine() . "\r\n\r\n\r\n\r\n");
             } else {
                 if (add::is_developer()) {
                     DEFINE('add\\terminal_error\\error_message', $e->getMessage());
                     DEFINE('add\\terminal_error\\error_trace', $e->getTraceAsString());
                     DEFINE('add\\terminal_error\\error_header', get_class($e));
                     DEFINE('add\\terminal_error\\error_footer', $e->getFile() . ":" . $e->getLine());
                 } else {
                     $debug_mail_to = add::config()->developer_emails;
                     if (is_array($debug_mail_to) || is_object($debug_mail_to)) {
                         $debug_mail_to = implode(",", (array) $debug_mail_to);
                     }
                     mail($debug_mail_to, "Terminal Error: " . $e->getMessage(), $e->getTraceAsString());
                     DEFINE('add\\terminal_error\\error_message', 'An error occured<br />please contact the system administrators or go back to <a href="' . add::config()->path . '">Home</a>');
                     DEFINE('add\\terminal_error\\error_header', 'Warning!');
                     DEFINE('add\\terminal_error\\error_footer', 'Please contact the system administrators');
                     DEFINE('add\\terminal_error\\error_trace', '');
                 }
                 if (!headers_sent() && !add::include_include_file('terminal_error.php')) {
                     throw new Exception("Failed to display terminal error");
                 }
                 add::shutdown(false);
             }
         }
     } catch (Exception $e3) {
         $e1_string = "<div style='color:red'>" . get_class($e) . "(#" . $e->getCode() . ")" . $e->getMessage() . "\r\n" . $e->getFile() . ":" . $e->getLine() . "</div>";
         echo $e1_string;
         $e3_string = "<div style='color:red'>" . get_class($e3) . "(#" . $e3->getCode() . ")" . $e3->getMessage() . "\r\n" . $e3->getFile() . ":" . $e3->getLine() . "</div>";
         if ($e3_string != $e1_string) {
             echo $e3_string;
         }
         debug::var_dump($e3->getTraceAsString());
         die;
     }
 }
 /**
  * sets the content_type or get the current one
  *
  * @param string $new_content_type
  *
  * @deprecated see add::content_type();
  *
  * @since ADD MVC 0.8
  */
 public function content_type($new_content_type = null)
 {
     return add::content_type($new_content_type);
 }
 */
DEFINE('ADD_MIN_PHP_VERSION', '5.3.8');
if (version_compare(phpversion(), ADD_MIN_PHP_VERSION) === -1) {
    die("ADD MVC Error: PHP version must be at least " . ADD_MIN_PHP_VERSION . " or higher!");
}
if (!isset($C)) {
    $C = new STDClass();
}
# Sets the add_dir if not set. And it may be smart not to let the user(developer) set this on the first place
if (empty($C->add_dir)) {
    $C->add_dir = realpath(dirname(__FILE__));
}
require $C->add_dir . '/classes/add.class.php';
$GLOBALS[add::CONFIG_VARNAME] = add::config($C);
if (php_sapi_name() == "cli") {
    add::content_type('text/plain');
}
# Set the handlers
spl_autoload_register('add::load_class');
set_exception_handler('add::handle_exception');
set_error_handler('add::handle_error');
register_shutdown_function('add::handle_shutdown');
# Set the includes dir
if (!isset($C->incs_dir)) {
    $C->incs_dir = $C->root_dir . '/includes';
}
# Merge config declared class directories
$C->classes_dirs = array_merge(array($C->incs_dir . '/classes'), isset($C->classes_dirs) ? is_array($C->classes_dirs) ? $C->classes_dirs : (array) $C->classes_dirs : array(), array($C->add_dir . '/classes'));
# Set these rarely used directory variables
if (!isset($C->configs_dir)) {
    $C->configs_dir = $C->incs_dir . '/configs';
 /**
  * Microseconds diff html style
  *
  * @since ADD MVC 0.4
  */
 public static function us_diff_html($string, $second_difference)
 {
     if (add::content_type() == 'text/plain') {
         return "{$string}";
     }
     $styles_array = array();
     if ($second_difference > 1) {
         $styles_array[] = 'color:red';
         if ($second_difference > 10) {
             $styles_array[] = 'font-weight:bold';
         }
     } else {
         if ($second_difference < 1) {
             $styles_array[] = 'color:green';
         }
     }
     $styles = implode(';', $styles_array);
     return "<span style='{$styles}'>{$string}</span>";
 }
 /**
  * handle_exception()
  * The error handler for exceptions
  * @param Exception $e the exception to handle
  * @since ADD MVC 0.0
  */
 static function handle_exception(Exception $e)
 {
     try {
         try {
             if (method_exists($e, 'handle_exception')) {
                 return $e->handle_exception();
             } else {
                 throw new Exception("Non e_add exception sub class or no handle_exception() function found for exception");
             }
         } catch (Exception $e2) {
             while (ob_get_level()) {
                 ob_end_clean();
             }
             if ($e instanceof SmartyException) {
                 static::handle_exception(new e_smarty($e->getMessage(), $e));
             }
             if (add::content_type() == 'text/plain') {
                 die(get_class($e) . "(#" . $e->getCode() . ")\r\n\r\n" . $e->getMessage() . "\r\n\r\n" . $e->getFile() . ":" . $e->getLine() . "\r\n\r\n\r\n\r\n");
             } else {
                 DEFINE('add\\terminal_error\\error_message', $e->getMessage());
                 DEFINE('add\\terminal_error\\error_header', get_class($e));
                 DEFINE('add\\terminal_error\\error_footer', $e->getFile() . ":" . $e->getLine());
                 if (!headers_sent() && !add::include_include_file('terminal_error.php')) {
                     throw new Exception("Failed to display terminal error");
                 }
                 add::shutdown(false);
             }
         }
     } catch (Exception $e3) {
         $e1_string = "<div style='color:red'>" . get_class($e) . "(#" . $e->getCode() . ")" . $e->getMessage() . "\r\n" . $e->getFile() . ":" . $e->getLine() . "</div>";
         echo $e1_string;
         $e3_string = "<div style='color:red'>" . get_class($e3) . "(#" . $e3->getCode() . ")" . $e3->getMessage() . "\r\n" . $e3->getFile() . ":" . $e3->getLine() . "</div>";
         if ($e3_string != $e1_string) {
             echo $e3_string;
         }
         debug::var_dump($e3->getTraceAsString());
         die;
     }
 }
 /**
  * handle_exception()
  * The error handler for exceptions
  * @param Exception $e the exception to handle
  * @since ADD MVC 0.0
  */
 static function handle_exception(Exception $e)
 {
     try {
         if (method_exists($e, 'handle_exception')) {
             return $e->handle_exception();
         } else {
             while (ob_get_level()) {
                 ob_end_clean();
             }
             if ($e instanceof SmartyException) {
                 static::handle_exception(new e_smarty($e->getMessage(), $e));
             }
             if (add::content_type() == 'text/plain') {
                 die(get_class($e) . "(#" . $e->getCode() . ")\r\n\r\n" . $e->getMessage() . "\r\n\r\n" . $e->getFile() . ":" . $e->getLine() . "\r\n\r\n\r\n\r\n");
             } else {
                 DEFINE('add\\terminal_error\\error_message', $e->getMessage());
                 DEFINE('add\\terminal_error\\error_header', get_class($e));
                 DEFINE('add\\terminal_error\\error_footer', $e->getFile() . ":" . $e->getLine());
                 if (!headers_sent() && !add::include_include_file('terminal_error.php')) {
                     throw new $e();
                 }
                 add::shutdown(false);
             }
         }
     } catch (Exception $e) {
         die("<div style='color:red'>" . $e->getMessage() . "\r\n" . $e->getFile() . ":" . $e->getLine() . "</div>");
     }
 }