<?php require_once 'Zend/Log/Formatter/Interface.php'; /** * Formats SS error emails with a basic layout. * * @package framework * @subpackage dev */ class SS_LogErrorEmailFormatter implements Zend_Log_Formatter_Interface { public function format($event) { switch($event['priorityName']) { case 'ERR': $errorType = 'Error'; $colour = 'red'; break; case 'WARN': $errorType = 'Warning'; $colour = 'orange'; break; case 'NOTICE': $errorType = 'Notice'; $colour = 'grey'; break; default: $errorType = $event['priorityName']; $colour = 'grey'; } if(!is_array($event['message'])) { return false; } $errno = $event['message']['errno']; $errstr = $event['message']['errstr']; $errfile = $event['message']['errfile']; $errline = $event['message']['errline']; $errcontext = $event['message']['errcontext']; $data = ''; $data .= '<style type="text/css">html, body, table {font-family: sans-serif; font-size: 12px;}</style>'; $data .= "<div style=\"border: 5px $colour solid;\">\n"; $data .= "<p style=\"color: white; background-color: $colour; margin: 0\">[$errorType] "; $data .= nl2br(htmlspecialchars($errstr))."<br />$errfile:$errline\n<br />\n<br />\n</p>\n"; // Render the provided backtrace $data .= SS_Backtrace::get_rendered_backtrace($errcontext); // Compile extra data $blacklist = array('message', 'timestamp', 'priority', 'priorityName'); $extras = array_diff_key($event, array_combine($blacklist, $blacklist)); if($extras) { $data .= "<h3>Details</h3>\n"; $data .= "<table class=\"extras\">\n"; foreach($extras as $k => $v) { if(is_array($v)) $v = var_export($v, true); $data .= sprintf( "<tr><td><strong>%s</strong></td><td><pre>%s</pre></td></tr>\n", $k, $v); } $data .= "</table>\n"; } $data .= "</div>\n"; $relfile = Director::makeRelative($errfile); if($relfile && $relfile[0] == '/') $relfile = substr($relfile, 1); $host = isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : null; $uri = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : null; $subject = "[$errorType] in $relfile:{$errline} (http://{$host}{$uri})"; return array( 'subject' => $subject, 'data' => $data ); } }