X-Git-Url: https://git.mxchange.org/?p=mailer.git;a=blobdiff_plain;f=inc%2Fclasses%2Fexceptions%2Fclass_FrameworkException.php;fp=inc%2Fclasses%2Fexceptions%2Fclass_FrameworkException.php;h=3ba2fbec919d38e660886c3750cb5d3a21bef662;hp=2c403966037f736c9be75a5e2a37870ee8a6f04f;hb=2230a2e7e09b6b47fe3d68181a28a4435c1732e6;hpb=4365745a3952764d684556852c31d0e8cba5e58e diff --git a/inc/classes/exceptions/class_FrameworkException.php b/inc/classes/exceptions/class_FrameworkException.php index 2c40396603..3ba2fbec91 100644 --- a/inc/classes/exceptions/class_FrameworkException.php +++ b/inc/classes/exceptions/class_FrameworkException.php @@ -6,7 +6,7 @@ * * @author Roland Haeder * @version 0.0.0 - * @copyright Copyright(c) 2007, 2008 Roland Haeder, this is free software + * @copyright Copyright (c) 2007, 2008 Roland Haeder, this is free software * @license GNU GPL 3.0 or any newer version * @link http://www.ship-simu.org * @@ -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,6 +49,19 @@ abstract class FrameworkException extends ReflectionException { $message = (string) $message; $code = (int) $code; + // 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 * @@ -91,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]