]> git.mxchange.org Git - hub.git/blobdiff - application/hub/exceptions.php
Full backtrace now
[hub.git] / application / hub / exceptions.php
index c8fcdcb275a09cc5b435f5d832bcdd0ccea58528..dbce802e7e1e55f0257982e0b010006d50819063 100644 (file)
@@ -2,10 +2,9 @@
 /**
  * An include file for setting up the exception handler of the hub
  *
- *
  * @author             Roland Haeder <webmaster@ship-simu.org>
  * @version            0.0
- * @copyright  Copyright(c) 2007 - 2009 Roland Haeder, this is free software
+ * @copyright  Copyright (c) 2007 - 2008 Roland Haeder, 2009 - 2012 Hub Developer Team
  * @license            GNU GPL 3.0 or any newer version
  *
  * This program is free software: you can redistribute it and/or modify
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-// The hub's own exception handler
+// The node's own exception handler
 function hub_exception_handler ($exceptionInstance) {
        // Is it an object and a valid instance?
        if ((is_object($exceptionInstance)) && ($exceptionInstance instanceof FrameworkException)) {
-               // Get the regular trace
-               $trace = $exceptionInstance->getTrace();
+               // Init variable
+               $backTrace = '';
 
-               // Get 3 call levels
-               $backTrace = "";
-               for ($idx = 0; $idx < 3; $idx++) {
-                       // Copy array for argument analysis and init variable
-                       $traceArray = $trace[$idx];
-                       $argsString = "";
+               // Get all call levels from backtrace
+               foreach ($exceptionInstance->getTrace() as $idx => $traceArray) {
+                       // Init argument string
+                       $argsString = '';
 
                        // Convert arguments type into human-readable
                        foreach ($traceArray['args'] as $arg) {
-                               $argsString .= ", " . gettype($arg);
+                               $argsString .= ', ' . gettype($arg);
                        } // END - foreach
                        $argsString = substr($argsString, 2);
 
+                       // Set missing file/line
+                       if (!isset($traceArray['file']))  $traceArray['file']  = 'unknown';
+                       if (!isset($traceArray['line']))  $traceArray['line']  = '0';
+                       if (!isset($traceArray['class'])) $traceArray['class'] = 'UnknownObject';
+                       if (!isset($traceArray['type']))  $traceArray['type']  = '->';
+
                        $backTrace .= sprintf("---------- Pos %d: ----------
 Method : %s%s%s(%s)
 ----- Caller: -----
@@ -55,7 +58,7 @@ Line   : %d\n",
                                basename($traceArray['file']),
                                $traceArray['line']
                        );
-               } // END - for
+               } // END - foreach
 
                // Construct the message
                $message = sprintf("--------------------------------------------------------------------------------
@@ -88,8 +91,50 @@ Backtrace:
        }
 }
 
+// Error handler
+function __errorHandler ($errno, $errstr, $errfile, $errline, array $errcontext) {
+       // Construct the message
+       $message = sprintf("File: %s, Line: %s, Code: %s, Message: %s",
+               basename($errfile),
+               $errline,
+               $errno,
+               $errstr
+       );
+
+       // Throw an exception here
+       throw new FatalErrorException($message, BaseFrameworkSystem::EXCEPTION_FATAL_ERROR);
+} // END - function
+
+// Assertion handler
+function __assertHandler ($file, $line, $code) {
+       // Empty code?
+       if ($code === '') {
+               $code = '<em>Unknown</em>';
+       } // END - if
+
+       // Create message
+       $message = sprintf("File: %s, Line: %s, Code: %s",
+               basename($file),
+               $line,
+               $code
+       );
+
+       // Throw an exception here
+       throw new AssertionException($message, BaseFrameworkSystem::EXCEPTION_ASSERTION_FAILED);
+} // END - function
+
+// Set error handler
+//set_error_handler('__errorHandler');
+
 // Set the new handler
 set_exception_handler('hub_exception_handler');
 
+// Init assert handling
+assert_options(ASSERT_ACTIVE,     true);
+assert_options(ASSERT_WARNING,    false);
+assert_options(ASSERT_BAIL,       false);
+assert_options(ASSERT_QUIET_EVAL, false);
+assert_options(ASSERT_CALLBACK,   '__assertHandler');
+
 // [EOF]
 ?>