forked from Wavyzz/dolibarr
112 lines
2.7 KiB
PHP
112 lines
2.7 KiB
PHP
<?php
|
|
/*
|
|
* This file is part of the DebugBar package.
|
|
*
|
|
* (c) 2013 Maxime Bouroumeau-Fuseau
|
|
*
|
|
* For the full copyright and license information, please view the LICENSE
|
|
* file that was distributed with this source code.
|
|
*/
|
|
|
|
namespace DebugBar\DataCollector;
|
|
|
|
use Exception;
|
|
|
|
/**
|
|
* Collects info about exceptions
|
|
*/
|
|
class ExceptionsCollector extends DataCollector implements Renderable
|
|
{
|
|
protected $exceptions = array();
|
|
protected $chainExceptions = false;
|
|
|
|
/**
|
|
* Adds an exception to be profiled in the debug bar
|
|
*
|
|
* @param Exception $e
|
|
*/
|
|
public function addException(Exception $e)
|
|
{
|
|
$this->exceptions[] = $e;
|
|
if ($this->chainExceptions && $previous = $e->getPrevious()) {
|
|
$this->addException($previous);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Configure whether or not all chained exceptions should be shown.
|
|
*
|
|
* @param bool $chainExceptions
|
|
*/
|
|
public function setChainExceptions($chainExceptions = true)
|
|
{
|
|
$this->chainExceptions = $chainExceptions;
|
|
}
|
|
|
|
/**
|
|
* Returns the list of exceptions being profiled
|
|
*
|
|
* @return array[Exception]
|
|
*/
|
|
public function getExceptions()
|
|
{
|
|
return $this->exceptions;
|
|
}
|
|
|
|
public function collect()
|
|
{
|
|
return array(
|
|
'count' => count($this->exceptions),
|
|
'exceptions' => array_map(array($this, 'formatExceptionData'), $this->exceptions)
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Returns exception data as an array
|
|
*
|
|
* @param Exception $e
|
|
* @return array
|
|
*/
|
|
public function formatExceptionData(Exception $e)
|
|
{
|
|
$filePath = $e->getFile();
|
|
if ($filePath && file_exists($filePath)) {
|
|
$lines = file($filePath);
|
|
$start = $e->getLine() - 4;
|
|
$lines = array_slice($lines, $start < 0 ? 0 : $start, 7);
|
|
} else {
|
|
$lines = array("Cannot open the file ($filePath) in which the exception occurred ");
|
|
}
|
|
|
|
return array(
|
|
'type' => get_class($e),
|
|
'message' => $e->getMessage(),
|
|
'code' => $e->getCode(),
|
|
'file' => $filePath,
|
|
'line' => $e->getLine(),
|
|
'surrounding_lines' => $lines
|
|
);
|
|
}
|
|
|
|
public function getName()
|
|
{
|
|
return 'exceptions';
|
|
}
|
|
|
|
public function getWidgets()
|
|
{
|
|
return array(
|
|
'exceptions' => array(
|
|
'icon' => 'bug',
|
|
'widget' => 'PhpDebugBar.Widgets.ExceptionsWidget',
|
|
'map' => 'exceptions.exceptions',
|
|
'default' => '[]'
|
|
),
|
|
'exceptions:badge' => array(
|
|
'map' => 'exceptions.count',
|
|
'default' => 'null'
|
|
)
|
|
);
|
|
}
|
|
}
|