/**
  * 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 {
         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;
     }
 }
 /**
  * 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>");
     }
 }