Blame view

framework/dev/LogErrorEmailFormatter.php 2.19 KB
0084d336   Administrator   Importers CRUD
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
  <?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] $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
  		);
  	}
  
  }