/** * Print the stack trace for this exception. * * @param string The format you wish to use for printing. Options * include: * - html * - plain * * @author Sean Kerr (skerr@mojavi.org) * @since 3.0.0 */ public function printStackTrace($format = 'html') { // exception related properties $class = $this->getFile() != null ? Toolkit::extractClassName($this->getFile()) : 'N/A'; $class = $class != '' ? $class : 'N/A'; $code = $this->getCode() > 0 ? $this->getCode() : 'N/A'; $file = $this->getFile() != null ? $this->getFile() : 'N/A'; $line = $this->getLine() != null ? $this->getLine() : 'N/A'; $message = $this->getMessage() != null ? $this->getMessage() : 'N/A'; $name = $this->getName(); $traceData = $this->getTrace(); $trace = array(); // lower-case the format to avoid sensitivity issues $format = strtolower($format); if ($trace !== null && count($traceData) > 0) { // format the stack trace for ($i = 0, $z = count($traceData); $i < $z; $i++) { if (!isset($traceData[$i]['file'])) { // no file key exists, skip this index continue; } // grab the class name from the file // (this only works with properly named classes) $tClass = Toolkit::extractClassName($traceData[$i]['file']); $tFile = $traceData[$i]['file']; $tFunction = $traceData[$i]['function']; $tLine = $traceData[$i]['line']; if ($tClass != null) { $tFunction = $tClass . '::' . $tFunction . '()'; } else { $tFunction = $tFunction . '()'; } if ($format == 'html') { $tFunction = '<strong>' . $tFunction . '</strong>'; } $data = 'at %s in [%s:%s]'; $data = sprintf($data, $tFunction, $tFile, $tLine); $trace[] = $data; } } switch ($format) { case 'html': // print the exception info echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/> <title>Mojavi Exception</title> <style type="text/css"> #exception { background-color: #EEEEEE; border: solid 1px #750000; font-family: verdana, helvetica, sans-serif; font-size: 76%; font-style: normal; font-weight: normal; margin: 10px; } #help { color: #750000; font-size: 0.9em; } .message { color: #FF0000; font-weight: bold; } .title { font-size: 1.1em; font-weight: bold; } td { background-color: #EEEEEE; padding: 5px; } th { background-color: #750000; color: #FFFFFF; font-size: 1.2em; font-weight: bold; padding: 5px; text-align: left; } </style> </head> <body> <table id="exception" cellpadding="0" cellspacing="0"> <tr> <th colspan="2">' . $name . '</th> </tr> <tr> <td class="title">Message:</td> <td class="message">' . $message . '</td> </tr> <tr> <td class="title">Code:</td> <td>' . $code . '</td> </tr> <tr> <td class="title">Class:</td> <td>' . $class . '</td> </tr> <tr> <td class="title">File:</td> <td>' . $file . '</td> </tr> <tr> <td class="title">Line:</td> <td>' . $line . '</td> </tr>'; if (count($trace) > 0) { echo '<tr> <th colspan="2">Stack Trace</th> </tr>'; foreach ($trace as $line) { echo '<tr> <td colspan="2">' . $line . '</td> </tr>'; } } echo '<tr> <th colspan="2">Info</th> </tr> <tr> <td class="title">Mojavi Version:</td> <td>' . MO_APP_VERSION . '</td> </tr> <tr> <td class="title">PHP Version:</td> <td>' . PHP_VERSION . '</td> </tr> <tr id="help"> <td colspan="2"> For help resolving this issue, please visit <a href="http://www.mojavi.org">www.mojavi.org</a>. </td> </tr> </table> </body> </html>'; break; case 'plain': default: } exit; }