patch #2706761 [lang] Polish update
[phpmyadmin/crack.git] / libraries / Error_Handler.class.php
blobd311fdd76a67776f695dd6d470b2696d14aa14db
1 <?php
2 /* vim: set expandtab sw=4 ts=4 sts=4: */
3 /**
4 * Holds class PMA_Error_Handler
6 * @version $Id$
7 * @package phpMyAdmin
8 */
10 /**
13 require_once './libraries/Error.class.php';
15 /**
16 * handling errors
18 * @package phpMyAdmin
20 class PMA_Error_Handler
22 /**
23 * holds errors to be displayed or reported later ...
25 * @var array of PMA_Error
27 protected $_errors = array();
29 /**
30 * Constructor - set PHP error handler
32 * @uses set_error_handler()
34 public function __construct()
36 set_error_handler(array($this, 'handleError'));
39 /**
40 * Destructor
42 * stores errors in session
44 * @uses $_SESSION['errors']
45 * @uses array_merge()
46 * @uses PMA_Error_Handler::$_errors
47 * @uses PMA_Error::isDisplayed()
49 public function __destruct()
51 if (isset($_SESSION)) {
52 if (! isset($_SESSION['errors'])) {
53 $_SESSION['errors'] = array();
56 if ($GLOBALS['cfg']['Error_Handler']['gather']) {
57 // remember all errors
58 $_SESSION['errors'] = array_merge($_SESSION['errors'], $this->_errors);
59 } else {
60 // remember only not displayed errors
61 foreach ($this->_errors as $key => $error) {
62 if (($error instanceof PMA_Error) && ! $error->isDisplayed()) {
63 $_SESSION['errors'][$key] = $error;
70 /**
71 * returns array with all errors
73 * @uses PMA_Error_Handler::$_errors as return value
74 * @uses PMA_Error_Handler::_checkSavedErrors()
75 * @return array PMA_Error_Handler::$_errors
77 protected function getErrors()
79 $this->_checkSavedErrors();
80 return $this->_errors;
83 /**
84 * Error handler - called when errors are triggered/occured
86 * The following error types cannot be handled with a user defined function:
87 * E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR,
88 * E_COMPILE_WARNING,
89 * and most of E_STRICT raised in the file where set_error_handler() is called.
91 * @uses E_USER_NOTICE
92 * @uses E_USER_WARNING
93 * @uses E_STRICT
94 * @uses E_NOTICE
95 * @uses E_WARNING
96 * @uses E_CORE_WARNING
97 * @uses E_COMPILE_WARNING
98 * @uses E_USER_ERROR
99 * @uses E_ERROR
100 * @uses E_PARSE
101 * @uses E_CORE_ERROR
102 * @uses E_COMPILE_ERROR
103 * @uses E_RECOVERABLE_ERROR
104 * @uses PMA_Error
105 * @uses PMA_Error_Handler::$_errors
106 * @uses PMA_Error_Handler::_dispFatalError()
107 * @uses PMA_Error::getHash()
108 * @uses PMA_Error::getNumber()
109 * @param integer $errno
110 * @param string $errstr
111 * @param string $errfile
112 * @param integer $errline
113 * @param array $errcontext
115 public function handleError($errno, $errstr, $errfile, $errline, $errcontext)
117 // create error object
118 $error = new PMA_Error($errno, $errstr, $errfile, $errline, $errcontext);
120 // do not repeat errors
121 $this->_errors[$error->getHash()] = $error;
123 switch ($error->getNumber()) {
124 case E_USER_NOTICE:
125 case E_USER_WARNING:
126 case E_STRICT:
127 case E_DEPRECATED:
128 case E_NOTICE:
129 case E_WARNING:
130 case E_CORE_WARNING:
131 case E_COMPILE_WARNING:
132 case E_USER_ERROR:
133 case E_RECOVERABLE_ERROR:
134 // just collect the error
135 // display is called from outside
136 break;
137 case E_ERROR:
138 case E_PARSE:
139 case E_CORE_ERROR:
140 case E_COMPILE_ERROR:
141 default:
142 // FATAL error, dislay it and exit
143 $this->_dispFatalError($error);
144 exit;
145 break;
150 * log error to configured log facility
152 * @todo finish!
153 * @uses PMA_Error::getMessage()
154 * @uses error_log()
155 * @param PMA_Error $error
157 protected function _logError($error)
159 return error_log($error->getMessage());
163 * trigger a custom error
165 * @uses trigger_error()
166 * @param string $errorInfo
167 * @param integer $errorNumber
168 * @param string $file
169 * @param integer $line
171 public function triggerError($errorInfo, $errorNumber = null, $file = null, $line = null)
173 // we could also extract file and line from backtrace and call handleError() directly
174 trigger_error($errorInfo, $errorNumber);
178 * display fatal error and exit
180 * @uses headers_sent()
181 * @uses PMA_Error::display()
182 * @uses PMA_Error_Handler::_dispPageStart()
183 * @uses PMA_Error_Handler::_dispPageEnd()
184 * @param PMA_Error $error
186 protected function _dispFatalError($error)
188 if (! headers_sent()) {
189 $this->_dispPageStart($error);
191 $error->display();
192 $this->_dispPageEnd();
193 exit;
197 * display the whole error page with all errors
199 * @uses headers_sent()
200 * @uses PMA_Error_Handler::dispAllErrors()
201 * @uses PMA_Error_Handler::_dispPageStart()
202 * @uses PMA_Error_Handler::_dispPageEnd()
204 public function dispErrorPage()
206 if (! headers_sent()) {
207 $this->_dispPageStart();
209 $this->dispAllErrors();
210 $this->_dispPageEnd();
214 * display user errors not displayed
216 * @uses PMA_Error_Handler::getErrors()
217 * @uses PMA_Error::isDisplayed()
218 * @uses PMA_Error::isUserError()
219 * @uses PMA_Error::display()
221 public function dispUserErrors()
223 foreach ($this->getErrors() as $error) {
224 if ($error->isUserError() && ! $error->isDisplayed()) {
225 $error->display();
231 * display HTML header
233 * @uses PMA_Error::getTitle()
234 * @param PMA_error $error
236 protected function _dispPageStart($error = null)
238 echo '<html><head><title>';
239 if ($error) {
240 echo $error->getTitle();
241 } else {
242 echo 'phpMyAdmin error reporting page';
244 echo '</title></head>';
248 * display HTML footer
251 protected function _dispPageEnd()
253 echo '</body></html>';
257 * display all errors regardless already displayed or user errors
259 * @uses PMA_Error_Handler::getErrors()
260 * @uses PMA_Error::display()
262 public function dispAllErrors()
264 foreach ($this->getErrors() as $error) {
265 $error->display();
270 * display errors not displayed
272 * @uses $cfg['Error_Handler']['display']
273 * @uses PMA_Error_Handler::getErrors()
274 * @uses PMA_Error_Handler::dispUserErrors()
275 * @uses PMA_Error::isDisplayed()
276 * @uses PMA_Error::display()
278 public function dispErrors()
280 if ($GLOBALS['cfg']['Error_Handler']['display']) {
281 foreach ($this->getErrors() as $error) {
282 if ($error instanceof PMA_Error) {
283 if (! $error->isDisplayed()) {
284 $error->display();
286 } else {
287 var_dump($error);
290 } else {
291 $this->dispUserErrors();
296 * look in session for saved errors
298 * @uses $_SESSION['errors']
299 * @uses PMA_Error_Handler::$_errors
300 * @uses array_merge()
302 protected function _checkSavedErrors()
304 if (isset($_SESSION['errors'])) {
306 // restore saved errors
307 foreach ($_SESSION['errors'] as $hash => $error) {
308 if ($error instanceof PMA_Error && ! isset($this->_errors[$hash])) {
309 $this->_errors[$hash] = $error;
312 //$this->_errors = array_merge($_SESSION['errors'], $this->_errors);
314 // delet stored errors
315 $_SESSION['errors'] = array();
316 unset($_SESSION['errors']);
321 * return count of errors
323 * @uses PMA_Error_Handler::getErrors()
324 * @uses count()
325 * @return integer number of errors occoured
327 public function countErrors()
329 return count($this->getErrors());
333 * return count of user errors
335 * @uses PMA_Error_Handler::countErrors()
336 * @uses PMA_Error_Handler::getErrors()
337 * @uses PMA_Error::isUserError()
338 * @return integer number of user errors occoured
340 public function countUserErrors()
342 $count = 0;
343 if ($this->countErrors()) {
344 foreach ($this->getErrors() as $error) {
345 if ($error->isUserError()) {
346 $count++;
351 return $count;
355 * whether use errors occured or not
357 * @uses PMA_Error_Handler::countUserErrors()
358 * @return boolean
360 public function hasUserErrors()
362 return (bool) $this->countUserErrors();
366 * whether errors occured or not
368 * @uses PMA_Error_Handler::countErrors()
369 * @return boolean
371 public function hasErrors()
373 return (bool) $this->countErrors();
377 * number of errors to be displayed
379 * @uses $cfg['Error_Handler']['display']
380 * @uses PMA_Error_Handler::countErrors()
381 * @uses PMA_Error_Handler::countUserErrors()
382 * @return integer number of errors to be displayed
384 public function countDisplayErrors()
386 if ($GLOBALS['cfg']['Error_Handler']['display']) {
387 return $this->countErrors();
388 } else {
389 return $this->countUserErrors();
394 * whether there are errors to display or not
396 * @uses PMA_Error_Handler::countDisplayErrors()
397 * @return boolean
399 public function hasDisplayErrors()
401 return (bool) $this->countDisplayErrors();