Welcome to mirror list, hosted at ThFree Co, Russian Federation.

Error.php « Log « core - github.com/matomo-org/matomo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: bd54c8e6f071a21f5e30bfe664905a5af5eb481b (plain)
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
<?php
/**
 * Piwik - Open source web analytics
 *
 * @link http://piwik.org
 * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
 *
 * @category Piwik
 * @package Piwik
 */

/**
 * Class used to log an error event.
 *
 * @package Piwik
 * @subpackage Piwik_Log
 */
class Piwik_Log_Error extends Piwik_Log
{
    const ID = 'logger_error';

    /**
     * Constructor
     */
    function __construct()
    {
        $logToFileFilename = self::ID;
        $logToDatabaseTableName = self::ID;
        $logToDatabaseColumnMapping = array(
            'timestamp' => 'timestamp',
            'message'   => 'message',
            'errno'     => 'errno',
            'errline'   => 'errline',
            'errfile'   => 'errfile',
            'backtrace' => 'backtrace'
        );
        $screenFormatter = new Piwik_Log_Error_Formatter_ScreenFormatter();
        $fileFormatter = new Piwik_Log_Formatter_FileFormatter();
        parent::__construct($logToFileFilename,
            $fileFormatter,
            $screenFormatter,
            $logToDatabaseTableName,
            $logToDatabaseColumnMapping);
    }

    /**
     * Adds the writer
     */
    function addWriteToScreen()
    {
        parent::addWriteToScreen();
        $writerScreen = new Zend_Log_Writer_Stream('php://stderr');
        $writerScreen->setFormatter($this->screenFormatter);
        $this->addWriter($writerScreen);
    }

    /**
     * Logs the given error event
     *
     * @param int $errno
     * @param string $errstr
     * @param string $errfile
     * @param int $errline
     * @param string $backtrace
     */
    public function logEvent($errno, $errstr, $errfile, $errline, $backtrace)
    {
        $event = array();
        $event['errno'] = $errno;
        $event['message'] = $errstr;
        $event['errfile'] = $errfile;
        $event['errline'] = $errline;
        $event['backtrace'] = $backtrace;

        parent::log($event, Piwik_Log::ERR, null);
    }
}

/**
 * Format an error event to be displayed on the screen.
 *
 * @package Piwik
 * @subpackage Piwik_Log
 */
class Piwik_Log_Error_Formatter_ScreenFormatter extends Piwik_Log_Formatter_ScreenFormatter
{
    /**
     * Formats data into a single line to be written by the writer.
     *
     * @param  array $event    event data
     * @return string  formatted line to write to the log
     */
    public function format($event)
    {
        $event = parent::formatEvent($event);

        $errno = $event['errno'];
        $errstr = $event['message'];
        $errfile = $event['errfile'];
        $errline = $event['errline'];
        $backtrace = $event['backtrace'];

        $strReturned = '';
        $errno = $errno & error_reporting();

        // problem when using error_reporting with the @ silent fail operator
        // it gives an errno 0, and in this case the objective is to NOT display anything on the screen!
        // is there any other case where the errno is zero at this point?
        if ($errno == 0) return '';
        $strReturned .= "\n<div style='word-wrap: break-word; border: 3px solid red; padding:4px; width:70%; background-color:#FFFF96;'>
	    <strong>There is an error. Please report the message (Piwik " . (class_exists('Piwik_Version') ? Piwik_Version::VERSION : '') . ")
	    and full backtrace in the <a href='?module=Proxy&action=redirect&url=http://forum.piwik.org' target='_blank'>Piwik forums</a> (please do a Search first as it might have been reported already!).<br /><br/>
	    ";
        switch ($errno) {
            case E_ERROR:
                $strReturned .= "Error";
                break;
            case E_WARNING:
                $strReturned .= "Warning";
                break;
            case E_PARSE:
                $strReturned .= "Parse Error";
                break;
            case E_NOTICE:
                $strReturned .= "Notice";
                break;
            case E_CORE_ERROR:
                $strReturned .= "Core Error";
                break;
            case E_CORE_WARNING:
                $strReturned .= "Core Warning";
                break;
            case E_COMPILE_ERROR:
                $strReturned .= "Compile Error";
                break;
            case E_COMPILE_WARNING:
                $strReturned .= "Compile Warning";
                break;
            case E_USER_ERROR:
                $strReturned .= "User Error";
                break;
            case E_USER_WARNING:
                $strReturned .= "User Warning";
                break;
            case E_USER_NOTICE:
                $strReturned .= "User Notice";
                break;
            case E_STRICT:
                $strReturned .= "Strict Notice";
                break;
            case E_RECOVERABLE_ERROR:
                $strReturned .= "Recoverable Error";
                break;
            case E_DEPRECATED:
                $strReturned .= "Deprecated";
                break;
            case E_USER_DEPRECATED:
                $strReturned .= "User Deprecated";
                break;
            default:
                $strReturned .= "Unknown error ($errno)";
                break;
        }
        $strReturned .= ":</strong> <i>$errstr</i> in <b>$errfile</b> on line <b>$errline</b>\n";
        $strReturned .= "<br /><br />Backtrace --&gt;<div style=\"font-family:Courier;font-size:10pt\">";
        $strReturned .= str_replace(array("\n", '#'), array("<br />\n", "<br />\n#"), $backtrace);
        $strReturned .= "</div><br />";
        $strReturned .= "\n </pre></div><br />";

        return parent::format($strReturned);
    }
}