X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=inc%2Fclasses%2Fexceptions%2Fclass_FrameworkException.php;h=3ba2fbec919d38e660886c3750cb5d3a21bef662;hb=b418714cda4748de796bc673b668ea1385eb9acd;hp=aaab83a9c363be1c41b5f46af2e809cc32ff9ffb;hpb=9b5ffab48e4fb098fb6299b85bb4bbf2e95564e1;p=mailer.git diff --git a/inc/classes/exceptions/class_FrameworkException.php b/inc/classes/exceptions/class_FrameworkException.php index aaab83a9c3..3ba2fbec91 100644 --- a/inc/classes/exceptions/class_FrameworkException.php +++ b/inc/classes/exceptions/class_FrameworkException.php @@ -4,11 +4,11 @@ * remove the "abstract" key-word. Better you make your own exception and * attach a dedicated message to it. * - * @author Roland Haeder - * @version 0.3.0 - * @copyright Copyright(c) 2007, 2008 Roland Haeder, this is free software + * @author Roland Haeder + * @version 0.0.0 + * @copyright Copyright (c) 2007, 2008 Roland Haeder, this is free software * @license GNU GPL 3.0 or any newer version - * @link http://www.mxchange.org + * @link http://www.ship-simu.org * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -21,7 +21,7 @@ * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * along with this program. If not, see . */ abstract class FrameworkException extends ReflectionException { /** @@ -29,11 +29,16 @@ abstract class FrameworkException extends ReflectionException { */ private $backTrace = array(); + /** + * Extra data + */ + private $extraData = ""; + /** * The super constructor for all exceptions * - * @param $message The non-optional message for the exception - * @param $code An optional code for better debugging + * @param $message The non-optional message for the exception + * @param $code An optional code for better debugging * @return void */ public function __construct($message, $code = 0) { @@ -44,7 +49,20 @@ abstract class FrameworkException extends ReflectionException { $message = (string) $message; $code = (int) $code; - // make sure everything is assigned properly + // In emergency exit? + if (defined('EMERGENCY_EXIT_CALLED')) { + // Output message + printf("[%s:] Message: %s, Backtrace:
%s
", + $this->__toString(), + $message, + $this->getPrintableBackTrace() + ); + + // End here + exit; + } // END - if + + // Make sure everything is assigned properly parent::__construct($message, $code); } @@ -54,7 +72,14 @@ abstract class FrameworkException extends ReflectionException { * @return void */ private final function saveBackTrace () { + // Get full backtrace $this->backTrace = debug_backtrace(); + + // Remove this call + $dummy = array_shift($this->backTrace); + + // resort the array + ksort($this->backTrace); } /** @@ -66,6 +91,58 @@ abstract class FrameworkException extends ReflectionException { return $this->backTrace; } + /** + * Getter for printable backtrace + * + * @return $backTrace Backtrace for web pages + */ + public final function getPrintableBackTrace () { + // Get the backtrace + $dbgTrace = $this->getBackTrace(); + + // Taken from de.php.net user comments + $dbgMsg = "
\nDebug backtrace begin:
\n"; + foreach ($dbgTrace as $dbgIndex => $dbgInfo) { + // No info by default + $info = "NULL"; + + // Are there arguments? + if ((isset($dbgInfo['args'])) && (is_array($dbgInfo['args'])) && (isset($dbgInfo['args'][0]))) { + //* DEBUG: */ echo $dbgIndex.":
".htmlentities(print_r($dbgInfo['args'], true))."
"; + $info = ""; + foreach ($dbgInfo['args'] as $debug) { + // Add only non-array elements + if (!is_array($debug)) { + $info .= $debug.", "; + } // END - if + } // END - if + + $info = substr($info, 0, -2); + } // END - if + + // Prepare argument infos + $info = "{$info}"; + + // File detection + $file = "Unknown file"; + if (isset($dbgInfo['file'])) { + $file = basename($dbgInfo['file']); + } // END - if + + // Line detection + $line = "Unknown line"; + if (isset($dbgInfo['line'])) { + $line = "line {$dbgInfo['line']}"; + } // END - if + + // The message + $dbgMsg .= "\t at ".$dbgIndex." ".$file." (".$line.") -> ".$dbgInfo['function']."(".$info.")
\n"; + } // END - if + $dbgMsg .= "Debug backtrace end
\n"; + + return $dbgMsg; + } + /** * Returns the name of the thrown exception * @@ -78,11 +155,12 @@ abstract class FrameworkException extends ReflectionException { /** * Getter for hex-decimal code * + * @param $code Integer code to encode in hex * @return $hexCode The exception code in hex-decimal format */ - public final function getHexCode () { + public final function getHexCode ($code = null) { // Get the decimal code - $code = $this->getCode(); + if (is_null($code)) $code = $this->getCode(); // Format it to hex-decimal, 0x as prefix and 3 chars $hexCode = sprintf("0x%03s", dechex($code)); @@ -90,6 +168,25 @@ abstract class FrameworkException extends ReflectionException { // Return it return $hexCode; } + + /** + * Setter for extra data + * + * @param $extraData Extra data to store + * @return void + */ + protected final function setExtraData ($extraData) { + $this->extraData = $extraData; + } + + /** + * Getter for extra data + * + * @return $extraData Extra data to store + */ + public final function getExtraData () { + return $this->extraData; + } } // [EOF]