1210 lines
36 KiB
PHP
1210 lines
36 KiB
PHP
<?php
|
|
|
|
/**
|
|
* Class of the HTML_Div renderer
|
|
*
|
|
* Idea from the debug system of the symfony PHP framework
|
|
* @see http://www.symfony-project.org
|
|
* @author Fabien Potencier
|
|
* @author François Zaninotto
|
|
*
|
|
* @author Vernet Loïc
|
|
*
|
|
* @version CVS: $Id: Div.php,v 1.3 2008/10/05 14:41:37 c0il Exp $
|
|
*/
|
|
|
|
require_once 'PHP/Debug/Renderer/HTML/DivConfig.php';
|
|
|
|
|
|
/**
|
|
* A floating div renderer for PHP_Debug
|
|
*
|
|
* Returns a floating based representation of the debug infos in XHTML sctrict
|
|
* format
|
|
*
|
|
* @package PHP_Debug
|
|
* @category PHP
|
|
* @author Loïc Vernet <qrf_coil at yahoo dot fr>
|
|
* @since V2.1.0 - 30 march 2007
|
|
*
|
|
* @package PHP_Debug
|
|
* @filesource
|
|
*/
|
|
|
|
class PHP_Debug_Renderer_HTML_Div extends PHP_Debug_Renderer_Common
|
|
{
|
|
// debug types for Vars & Config
|
|
protected static $settingsType = array(
|
|
PHP_DebugLine::TYPE_ENV,
|
|
);
|
|
|
|
// debug types for Log & Message tab
|
|
protected static $msgTypes = array(
|
|
PHP_DebugLine::TYPE_STD,
|
|
PHP_DebugLine::TYPE_PAGEACTION,
|
|
PHP_DebugLine::TYPE_APPERROR,
|
|
PHP_DebugLine::TYPE_CREDITS,
|
|
PHP_DebugLine::TYPE_DUMP,
|
|
PHP_DebugLine::TYPE_WATCH,
|
|
PHP_DebugLine::TYPE_PHPERROR
|
|
);
|
|
|
|
// debug types for Database tab
|
|
protected static $databaseTypes = array(
|
|
PHP_DebugLine::TYPE_QUERY,
|
|
PHP_DebugLine::TYPE_QUERYREL,
|
|
PHP_DebugLine::TYPE_SQLPARSE,
|
|
);
|
|
|
|
/**
|
|
* Debug_Renderer_HTML_Div class constructor
|
|
*
|
|
* @since V2.1.0 - 3 apr 2007
|
|
*/
|
|
function __construct($DebugObject, $options)
|
|
{
|
|
$this->DebugObject = $DebugObject;
|
|
$this->defaultOptions = PHP_Debug_Renderer_HTML_DivConfig::singleton()->getConfig();
|
|
$this->setOptions($options);
|
|
|
|
if ($this->options['HTML_DIV_disable_credits'] == false) {
|
|
$this->DebugObject->addDebugFirst($this->options['HTML_DIV_credits'],
|
|
PHP_DebugLine::TYPE_CREDITS);
|
|
}
|
|
|
|
// Add execution time
|
|
$this->DebugObject->addProcessPerf();
|
|
}
|
|
|
|
/**
|
|
* This is the function to display the debug informations
|
|
*
|
|
* @since V2.0.0 - 07 Apr 2006
|
|
* @see PHP_Debug::Render()
|
|
*/
|
|
public function display()
|
|
{
|
|
$buffer = '';
|
|
|
|
// Header
|
|
$buffer .= $this->displayHeader();
|
|
|
|
// Infos
|
|
$debugInfos = $this->DebugObject->getDebugBuffer();
|
|
|
|
// Vars & config
|
|
$buffer .= $this->showVarsAndConfig($debugInfos);
|
|
|
|
// Logs & msg
|
|
$buffer .= $this->showLogsAndMsg($debugInfos);
|
|
|
|
// Database
|
|
$buffer .= $this->showDatabaseInfos($debugInfos);
|
|
|
|
// W3C Validation
|
|
$buffer .= $this->showW3cValidation($debugInfos);
|
|
|
|
// Process time
|
|
$buffer .= $this->showProcessTime($debugInfos);
|
|
|
|
// Footer
|
|
$buffer .= $this->displayFooter();
|
|
|
|
return $buffer;
|
|
}
|
|
|
|
/**
|
|
* Show W3C validator tab
|
|
*
|
|
* @author COil
|
|
* @since V2.1.1 - 23 apr 2007
|
|
*/
|
|
protected function showW3cValidation()
|
|
{
|
|
return str_replace(
|
|
array(
|
|
'{$imagesPath}',
|
|
),
|
|
array(
|
|
$this->options['HTML_DIV_images_path']
|
|
),
|
|
$this->options['HTML_DIV_sfWebDebugW3CDetails']
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Add the debug informations of the W3C validation process
|
|
*
|
|
* @author Vernet Loïc
|
|
* @since 2.1.0 - 23 avr. 2007
|
|
*/
|
|
protected function addW3CErrorInfos($res, $key)
|
|
{
|
|
$title = ucwords($key);
|
|
$type = 'sfW3C'. $title;
|
|
$errorCpt = 1;
|
|
$results = str_replace(
|
|
'{$title}',
|
|
$title,
|
|
$this->options['HTML_DIV_sfWebDebugW3CTableHeader']
|
|
);
|
|
|
|
foreach ($res->$key as $error) {
|
|
$id = $errorCpt. ($error->messageid ? ' ('. $error->messageid. ')' : '');
|
|
$results .= str_replace(
|
|
array(
|
|
'{$type}',
|
|
'{$cpt}',
|
|
'{$line}',
|
|
'{$col}',
|
|
'{$message}',
|
|
'{$source}',
|
|
),
|
|
array(
|
|
$type,
|
|
$id,
|
|
$error->line,
|
|
$error->col,
|
|
$error->message,
|
|
' ',
|
|
),
|
|
$this->options['HTML_DIV_sfWebDebugW3CErrorRow']
|
|
);
|
|
$errorCpt++;
|
|
}
|
|
$results .= '</table>';
|
|
|
|
return $results;
|
|
}
|
|
|
|
/**
|
|
* Shows vars & config
|
|
*
|
|
* @param array debug row
|
|
*
|
|
* @author COil
|
|
* @since V2.1.0 - 30 march 2007
|
|
*/
|
|
protected function showDatabaseInfos($debugInfos)
|
|
{
|
|
$idx = 1;
|
|
$buffer = '';
|
|
|
|
foreach ($debugInfos as $debugInfo) {
|
|
$properties = $debugInfo->getProperties();
|
|
if (in_array($properties['type'], self::$databaseTypes)) {
|
|
$buffer.= '<li>['. $this->processExecTime($properties). '] '.
|
|
$this->processDebugInfo($properties) .'</li>'. CR;
|
|
}
|
|
}
|
|
|
|
return str_replace(
|
|
array('{$buffer}'),
|
|
array($buffer ? $buffer : '<li>No database debug available</li>'),
|
|
$this->options['HTML_DIV_sfWebDebugDatabaseDetails']
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Shows vars & config
|
|
*
|
|
* @author COil
|
|
* @since V2.1.0 - 30 march 2007
|
|
*/
|
|
protected function showLogsAndMsg($debugInfos)
|
|
{
|
|
$idx = 1;
|
|
$buffer = '';
|
|
|
|
foreach($debugInfos as $debugInfo) {
|
|
$properties = $debugInfo->getProperties();
|
|
if (in_array($properties['type'], self::$msgTypes)) {
|
|
|
|
// Error level of debug information
|
|
$level = $this->getLogInfoLevel($properties);
|
|
$infoImg = $this->getImageInfo($level);
|
|
|
|
$buffer .= '<tr class=\'sfWebDebugLogLine '. $this->getDebugLevelClass($level). '\'>
|
|
<td class="sfWebDebugLogNumber"># '. $idx. '</td>
|
|
<td class="sfWebDebugLogType">
|
|
<img src="'. $this->options['HTML_DIV_images_path']. '/'. $infoImg .'" alt="" /> '. $this->processType($properties).
|
|
'</td>
|
|
<td class="sfWebDebugLogFile">'. $this->processFile($properties). '</td>
|
|
<td class="sfWebDebugLogLine">'. $this->processLine($properties). '</td>
|
|
<td class="sfWebDebugLogClass">'. $this->processClass($properties). '</td>
|
|
<td class="sfWebDebugLogFunction">'. $this->processFunction($properties). '</td>
|
|
<td class="sfWebDebugLogTime">'. $this->processExecTime($properties). '</td>
|
|
<td class="sfWebDebugLogMessage">'. $this->processDebugInfo($properties). '</td>
|
|
</tr>'. CR;
|
|
$idx++;
|
|
}
|
|
}
|
|
|
|
return str_replace(
|
|
array(
|
|
'{$buffer}',
|
|
'{$imagesPath}',
|
|
),
|
|
array(
|
|
$buffer,
|
|
$this->options['HTML_DIV_images_path']
|
|
),
|
|
$this->options['HTML_DIV_sfWebDebugLog']
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Get the log level of the debug info
|
|
*
|
|
* @author COil
|
|
* @since V2.1.0 - 2 avr. 2007
|
|
*
|
|
* @param array debug row
|
|
*/
|
|
protected function getLogInfoLevel($properties)
|
|
{
|
|
$level = PHP_DebugLine::INFO_LEVEL;
|
|
|
|
switch ($properties['type']) {
|
|
case PHP_DebugLine::TYPE_PAGEACTION:
|
|
case PHP_DebugLine::TYPE_CREDITS:
|
|
case PHP_DebugLine::TYPE_DUMP:
|
|
case PHP_DebugLine::TYPE_WATCH:
|
|
break;
|
|
|
|
case PHP_DebugLine::TYPE_APPERROR:
|
|
$level = PHP_DebugLine::ERROR_LEVEL;
|
|
break;
|
|
|
|
case PHP_DebugLine::TYPE_PHPERROR:
|
|
$level = $this->getPhpErrorLevel($properties);
|
|
break;
|
|
}
|
|
|
|
return $level;
|
|
}
|
|
|
|
/**
|
|
* Return the global error level corresponding to the related php error
|
|
* level
|
|
*
|
|
* @param array debug row
|
|
*
|
|
* @author COil
|
|
* @since 2.1.0 - 3 apr 2007
|
|
*/
|
|
protected function getPhpErrorLevel($properties)
|
|
{
|
|
$infos = $properties['info'];
|
|
|
|
switch ($infos[0]) {
|
|
case E_ERROR:
|
|
case E_PARSE:
|
|
case E_CORE_ERROR:
|
|
case E_COMPILE_ERROR:
|
|
case E_USER_ERROR:
|
|
return PHP_DebugLine::ERROR_LEVEL;
|
|
break;
|
|
|
|
case E_WARNING:
|
|
case E_CORE_WARNING:
|
|
case E_NOTICE:
|
|
case E_COMPILE_WARNING:
|
|
case E_USER_WARNING:
|
|
case E_USER_NOTICE:
|
|
case E_ALL:
|
|
case E_STRICT:
|
|
case E_RECOVERABLE_ERROR:
|
|
return PHP_DebugLine::WARNING_LEVEL;
|
|
break;
|
|
|
|
default:
|
|
return PHP_DebugLine::ERROR_LEVEL;
|
|
break;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Get the image info for the current debug type
|
|
*
|
|
* @author COil
|
|
* @since V2.1.0 - 2 avp 2007
|
|
*/
|
|
protected function getDebugLevelClass($debug_level)
|
|
{
|
|
return $this->options['HTML_DIV_debug_level_classes'][$debug_level];
|
|
}
|
|
|
|
/**
|
|
* Get the image info for the current debug type
|
|
*
|
|
* @author COil
|
|
* @since V2.1.0 - 2 avp 2007
|
|
*/
|
|
protected function getImageInfo($debug_level)
|
|
{
|
|
$info = $this->options['HTML_DIV_image_info'];
|
|
$warning = $this->options['HTML_DIV_image_warning'];
|
|
$error = $this->options['HTML_DIV_image_error'];
|
|
|
|
switch ($debug_level) {
|
|
case PHP_DebugLine::INFO_LEVEL:
|
|
$level = $info;
|
|
break;
|
|
|
|
case PHP_DebugLine::WARNING_LEVEL:
|
|
$level = $warning;
|
|
break;
|
|
|
|
case PHP_DebugLine::ERROR_LEVEL:
|
|
$level = $error;
|
|
break;
|
|
}
|
|
|
|
return $level;
|
|
}
|
|
|
|
/**
|
|
* Shows vars & config
|
|
*
|
|
* @author COil
|
|
* @since V2.1.0 - 30 march 2007
|
|
*/
|
|
protected function showVarsAndConfig($debugInfos)
|
|
{
|
|
return str_replace(
|
|
array(
|
|
'{$sfWebDebugRequest}',
|
|
'{$sfWebDebugResponse}',
|
|
'{$sfWebDebugSettings}',
|
|
'{$sfWebDebugConstants}',
|
|
'{$sfWebDebugGlobals}',
|
|
'{$sfWebDebugPhp}',
|
|
'{$sfWebDebugFiles}',
|
|
'{$imagesPath}',
|
|
),
|
|
array(
|
|
$this->showSuperArray(PHP_Debug::GLOBAL_REQUEST),
|
|
$this->showSuperArray(PHP_Debug::GLOBAL_COOKIE),
|
|
$this->showArray($this->settingsAsArray($debugInfos), 'Settings'),
|
|
$this->showArray(get_defined_constants(true)),
|
|
$this->showArray($this->globalsAsArray(), 'Globals'),
|
|
$this->showArray($this->phpInfoAsArray(), 'PHP Infos'),
|
|
$this->showTemplates(),
|
|
$this->options['HTML_DIV_images_path'],
|
|
),
|
|
$this->options['HTML_DIV_sfWebDebugConfig']
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Return all settings of application
|
|
*
|
|
* @author COil
|
|
* @since V2.1.0 - 2 apr 2007
|
|
*/
|
|
public function settingsAsArray($debugInfos)
|
|
{
|
|
$settings = array();
|
|
foreach($debugInfos as $debugInfo) {
|
|
$infos = $debugInfo->getProperties();
|
|
if (in_array($infos['type'], self::$settingsType)) {
|
|
$settings[] = $infos['info'];
|
|
}
|
|
}
|
|
|
|
return $settings;
|
|
}
|
|
|
|
/**
|
|
* Returns PHP globals variables as a sorted array.
|
|
*
|
|
* @return array PHP globals
|
|
* @since V2.1.0 - 2 apr 2007
|
|
*/
|
|
public static function globalsAsArray()
|
|
{
|
|
$values = array();
|
|
foreach (array('cookie', 'server', 'get', 'post', 'files', 'env', 'session') as $name) {
|
|
|
|
if (!isset($GLOBALS['_'.strtoupper($name)])) {
|
|
continue;
|
|
}
|
|
|
|
$values[$name] = array();
|
|
foreach ($GLOBALS['_'. strtoupper($name)] as $key => $value) {
|
|
$values[$name][$key] = $value;
|
|
}
|
|
ksort($values[$name]);
|
|
}
|
|
|
|
ksort($values);
|
|
|
|
return $values;
|
|
}
|
|
|
|
/**
|
|
* Returns PHP information as an array.
|
|
*
|
|
* @return array An array of php information
|
|
* @since V2.1.0 - 2 apr 2007
|
|
*/
|
|
public static function phpInfoAsArray()
|
|
{
|
|
$values = array(
|
|
'php' => phpversion(),
|
|
'os' => php_uname(),
|
|
'extensions' => get_loaded_extensions(),
|
|
);
|
|
|
|
// assign extension version if available
|
|
if ($values['extensions']) {
|
|
foreach ($values['extensions'] as $lkey => $extension) {
|
|
$values['extensions'][$lkey] = phpversion($extension) ? $extension.
|
|
' ('. phpversion($extension). ')' : $extension;
|
|
}
|
|
}
|
|
|
|
return $values;
|
|
}
|
|
|
|
/**
|
|
* Add the process time information to the debug information
|
|
*
|
|
* @since V2.0.0 - 18 Apr 2006
|
|
*/
|
|
protected function showProcessTime($debugInfos)
|
|
{
|
|
// Lang
|
|
$txtExecutionTime = 'Global execution time ';
|
|
$txtPHP = 'PHP';
|
|
$txtSQL = 'SQL';
|
|
$txtSECOND = 's';
|
|
$txtOneQry = ' query';
|
|
$txtMultQry = ' queries';
|
|
$queryCount = $this->DebugObject->getQueryCount();
|
|
$txtQuery = $queryCount > 1 ? $txtMultQry : $txtOneQry;
|
|
$buffer = '';
|
|
|
|
// Performance Debug
|
|
$processTime = $this->DebugObject->getProcessTime();
|
|
$sqlTime = $this->DebugObject->getQueryTime();
|
|
$phpTime = $processTime - $sqlTime;
|
|
|
|
$sqlPercent = round(($sqlTime / $processTime) * 100, 2);
|
|
$phpPercent = round(($phpTime / $processTime) * 100, 2);
|
|
|
|
$processTime = $processTime*1000;
|
|
$sqlTime = $sqlTime*1000;
|
|
$phpTime = $phpTime*1000;
|
|
|
|
if ($debugInfos) {
|
|
$buffer .= '
|
|
<tr>
|
|
<th>message</th>
|
|
<th>time (ms)</th>
|
|
<th>percent</th>
|
|
</tr>'. CR;
|
|
|
|
foreach($debugInfos as $debugInfo) {
|
|
$properties = $debugInfo->getProperties();
|
|
if ($properties['startTime'] && $properties['endTime']) {
|
|
|
|
$localPercent = round((($properties['endTime'] -
|
|
$properties['startTime'])*1000 / $processTime) * 100, 2);
|
|
$buffer .= '
|
|
<tr>
|
|
<td class="sfWebDebugLogMessagePerf">'. $this->ProcessDebugInfo($properties). '</td>
|
|
<td style="text-align: right">'. $this->ProcessExecTime($properties). '</td>
|
|
<td style="text-align: right">'. $localPercent. '%</td>
|
|
</tr>'. CR;
|
|
}
|
|
}
|
|
}
|
|
|
|
return str_replace(
|
|
array(
|
|
'{$txtExecutionTime}',
|
|
'{$processTime}',
|
|
'{$txtPHP}',
|
|
'{$phpTime}',
|
|
'{$phpPercent}',
|
|
'{$txtSQL}',
|
|
'{$sqlTime}',
|
|
'{$sqlPercent}',
|
|
'{$queryCount}',
|
|
'{$txtQuery}',
|
|
'{$buffer}'
|
|
|
|
),
|
|
array(
|
|
$txtExecutionTime,
|
|
$processTime,
|
|
$txtPHP,
|
|
$phpTime,
|
|
$phpPercent,
|
|
$txtSQL,
|
|
$sqlTime,
|
|
$sqlPercent,
|
|
$queryCount,
|
|
$txtQuery,
|
|
$buffer
|
|
),
|
|
$this->options['HTML_DIV_sfWebDebugTimeDetails']
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Default render function for HTML_Div renderer
|
|
*
|
|
* @since V2.0.0 - 11 Apr 2006
|
|
* @see Renderer
|
|
*/
|
|
public function render()
|
|
{
|
|
return $this->display();
|
|
}
|
|
|
|
/**
|
|
* Displays the header of the PHP_Debug object
|
|
*
|
|
* @since V2.0.0 - 08 Apr 2006
|
|
* @see PHP_Debug
|
|
*/
|
|
protected function displayHeader()
|
|
{
|
|
return str_replace(
|
|
array(
|
|
'{$nb_queries}',
|
|
'{$exec_time}',
|
|
'{$imagesPath}',
|
|
'{$phpDebugVersion}'
|
|
),
|
|
array(
|
|
$this->DebugObject->getQueryCount(),
|
|
$this->DebugObject->getProcessTime() * 1000,
|
|
$this->options['HTML_DIV_images_path'],
|
|
PHP_Debug::PEAR_RELEASE
|
|
),
|
|
$this->options['HTML_DIV_header']);
|
|
}
|
|
|
|
/**
|
|
* Diplays the footer of the PHP_Debug object
|
|
*
|
|
* @since V2.0.0 - 08 Apr 2006
|
|
* @see PHP_Debug
|
|
*/
|
|
protected function displayFooter()
|
|
{
|
|
return $this->options['HTML_DIV_footer'];
|
|
}
|
|
|
|
/**
|
|
* process display of the execution time of debug information
|
|
*
|
|
* @param array $properties Properties of the debug line
|
|
* @return string Formatted string containing the main debug info
|
|
* @since V2.0.0 - 28 Apr 2006
|
|
*/
|
|
protected function processExecTime($properties)
|
|
{
|
|
// Lang
|
|
$txtPHP = 'PHP';
|
|
$txtSQL = 'SQL';
|
|
$txtSECOND = 's';
|
|
|
|
if (!empty($properties['endTime'])) {
|
|
|
|
$time = round(PHP_Debug::getElapsedTime(
|
|
$properties['startTime'],
|
|
$properties['endTime']
|
|
) * 1000);
|
|
|
|
$buffer = $this->span($time > 1 ? $time. ' ms' : '< 1 ms', 'time');
|
|
|
|
} else {
|
|
$buffer = ' ';
|
|
}
|
|
|
|
return $buffer;
|
|
}
|
|
|
|
/**
|
|
* process display of the main information of debug
|
|
*
|
|
* @param array $properties Properties of the debug line
|
|
* @return string Formatted string containing the main debug info
|
|
* @since V2.0.0 - 28 Apr 2006
|
|
*/
|
|
protected function processDebugInfo($properties)
|
|
{
|
|
$buffer = '';
|
|
|
|
switch($properties['type']) {
|
|
|
|
// Case for each of the debug lines types
|
|
// 1 : Standard
|
|
case PHP_DebugLine::TYPE_STD:
|
|
$buffer .= $this->span($properties['info'], 'std');
|
|
break;
|
|
|
|
// 2 : Query
|
|
case PHP_DebugLine::TYPE_QUERY:
|
|
$buffer .= preg_replace('/\b(SELECT|FROM|AS|LIMIT|ASC|COUNT|DESC|WHERE|LEFT JOIN|INNER JOIN|RIGHT JOIN|ORDER BY|GROUP BY|IN|LIKE|DISTINCT|DELETE|INSERT|INTO|VALUES)\b/',
|
|
'<span class="sfWebDebugLogInfo">\\1</span>',
|
|
$properties['info']);
|
|
break;
|
|
|
|
// 3 : Query related
|
|
case PHP_DebugLine::TYPE_QUERYREL:
|
|
$buffer .= $this->span($properties['info'], 'query');
|
|
break;
|
|
|
|
// 4 : Environment
|
|
case PHP_DebugLine::TYPE_ENV:
|
|
$buffer .= $this->showSuperArray($properties['info']);
|
|
break;
|
|
|
|
// 6 : User app error
|
|
case PHP_DebugLine::TYPE_APPERROR:
|
|
$buffer .= $this->span('/!\\ User error : '.
|
|
$properties['info']. ' /!\\', 'app-error');
|
|
break;
|
|
|
|
// 7
|
|
case PHP_DebugLine::TYPE_CREDITS:
|
|
$buffer .= $this->span($properties['info'], 'credits');
|
|
break;
|
|
|
|
// 9
|
|
case PHP_DebugLine::TYPE_DUMP:
|
|
$buffer .= $this->showDump($properties);
|
|
break;
|
|
|
|
// 10
|
|
case PHP_DebugLine::TYPE_PROCESSPERF:
|
|
$buffer .= $this->showProcessTime();
|
|
break;
|
|
|
|
// 12 : Main Page Action
|
|
case PHP_DebugLine::TYPE_PAGEACTION;
|
|
$buffer .= $this->span('[Action : '.
|
|
$properties['info']. ']', 'pageaction');
|
|
break;
|
|
|
|
// 14 : SQL parse
|
|
case PHP_DebugLine::TYPE_SQLPARSE:
|
|
$buffer .= $properties['info'];
|
|
break;
|
|
|
|
// 15 : Watches
|
|
case PHP_DebugLine::TYPE_WATCH:
|
|
$infos = $properties['info'];
|
|
$buffer .= 'Variable '. $this->span($infos[0], 'watch').
|
|
' changed from value '.
|
|
$this->span($infos[1], 'watch-val'). ' ('. gettype($infos[1]).
|
|
') to value '. $this->span($infos[2], 'watch-val').
|
|
' ('. gettype($infos[2]). ')';
|
|
break;
|
|
|
|
// 16 : PHP errors
|
|
case PHP_DebugLine::TYPE_PHPERROR:
|
|
$buffer .= $this->showError($properties['info']);
|
|
break;
|
|
|
|
default:
|
|
$buffer .= '<b>Default('. $properties['type'].
|
|
')</b>: TO IMPLEMENT OR TO CORRECT : >'.
|
|
$properties['info']. '<';
|
|
break;
|
|
}
|
|
|
|
return $buffer;
|
|
}
|
|
|
|
/**
|
|
* Return a string with applying a span style on it
|
|
*
|
|
* @param string $info String to apply the style
|
|
* @param string $class CSS style to apply to the string
|
|
* @return string Formatted string with style applied
|
|
* @since V2.0.0 - 05 May 2006
|
|
*/
|
|
protected function span($info, $class)
|
|
{
|
|
return '<span class="'. $class .'">'. $info .'</span>';
|
|
}
|
|
|
|
/**
|
|
* process display of the type of the debug information
|
|
*
|
|
* @param array $properties Properties of the debug line
|
|
* @return string Formatted string containing the debug type
|
|
* @since V2.0.0 - 26 Apr 2006
|
|
*/
|
|
protected function processType($properties)
|
|
{
|
|
$buffer = PHP_DebugLine::$debugLineLabels[$properties['type']];
|
|
return $buffer;
|
|
}
|
|
|
|
/**
|
|
* process display of Class
|
|
*
|
|
* @param array $properties Properties of the debug line
|
|
* @return string Formatted string containing the class
|
|
* @since V2.0.0 - 26 Apr 2006
|
|
*/
|
|
protected function processClass($properties)
|
|
{
|
|
$buffer = '';
|
|
|
|
switch ($properties['type'])
|
|
{
|
|
case PHP_DebugLine::TYPE_STD:
|
|
case PHP_DebugLine::TYPE_QUERY:
|
|
case PHP_DebugLine::TYPE_QUERYREL:
|
|
case PHP_DebugLine::TYPE_APPERROR:
|
|
case PHP_DebugLine::TYPE_PAGEACTION:
|
|
case PHP_DebugLine::TYPE_PHPERROR:
|
|
case PHP_DebugLine::TYPE_SQLPARSE:
|
|
case PHP_DebugLine::TYPE_WATCH:
|
|
case PHP_DebugLine::TYPE_DUMP:
|
|
|
|
if (!empty($properties['class'])) {
|
|
$buffer .= $properties['class'];
|
|
} else {
|
|
$buffer .= ' ';
|
|
}
|
|
|
|
break;
|
|
|
|
case PHP_DebugLine::TYPE_CREDITS:
|
|
case PHP_DebugLine::TYPE_SEARCH:
|
|
case PHP_DebugLine::TYPE_PROCESSPERF:
|
|
case PHP_DebugLine::TYPE_TEMPLATES:
|
|
case PHP_DebugLine::TYPE_ENV:
|
|
|
|
$buffer .= ' ';
|
|
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
|
|
return $buffer;
|
|
}
|
|
|
|
/**
|
|
* process display of function
|
|
*
|
|
* @param array $properties Properties of the debug line
|
|
* @return string Formatted string containing the function
|
|
* @since V2.0.0 - 26 Apr 2006
|
|
*/
|
|
protected function processFunction($properties)
|
|
{
|
|
$buffer = '';
|
|
|
|
switch ($properties['type'])
|
|
{
|
|
case PHP_DebugLine::TYPE_STD:
|
|
case PHP_DebugLine::TYPE_QUERY:
|
|
case PHP_DebugLine::TYPE_QUERYREL:
|
|
case PHP_DebugLine::TYPE_APPERROR:
|
|
case PHP_DebugLine::TYPE_PAGEACTION:
|
|
case PHP_DebugLine::TYPE_PHPERROR:
|
|
case PHP_DebugLine::TYPE_SQLPARSE:
|
|
case PHP_DebugLine::TYPE_WATCH:
|
|
case PHP_DebugLine::TYPE_DUMP:
|
|
|
|
if (!empty($properties['function'])) {
|
|
if ($properties['function'] != 'unknown') {
|
|
$buffer .= $properties['function']. '()';
|
|
} else {
|
|
$buffer .= ' ';
|
|
}
|
|
} else {
|
|
$buffer .= ' ';
|
|
}
|
|
|
|
break;
|
|
|
|
case PHP_DebugLine::TYPE_CREDITS:
|
|
case PHP_DebugLine::TYPE_SEARCH:
|
|
case PHP_DebugLine::TYPE_PROCESSPERF:
|
|
case PHP_DebugLine::TYPE_TEMPLATES:
|
|
case PHP_DebugLine::TYPE_ENV:
|
|
|
|
$buffer .= ' ';
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
|
|
return $buffer;
|
|
}
|
|
|
|
|
|
/**
|
|
* process display of line number
|
|
*
|
|
* @param array $properties Properties of the debug line
|
|
* @return string Formatted string containing the line number
|
|
* @since V2.0.0 - 26 Apr 2006
|
|
*/
|
|
protected function processLine($properties)
|
|
{
|
|
$buffer = '';
|
|
|
|
switch ($properties['type'])
|
|
{
|
|
case PHP_DebugLine::TYPE_STD:
|
|
case PHP_DebugLine::TYPE_QUERY:
|
|
case PHP_DebugLine::TYPE_QUERYREL:
|
|
case PHP_DebugLine::TYPE_APPERROR:
|
|
case PHP_DebugLine::TYPE_PAGEACTION:
|
|
case PHP_DebugLine::TYPE_PHPERROR:
|
|
case PHP_DebugLine::TYPE_SQLPARSE:
|
|
case PHP_DebugLine::TYPE_WATCH:
|
|
case PHP_DebugLine::TYPE_DUMP:
|
|
|
|
if (!empty($properties['line'])) {
|
|
$buffer.= '<span class="line">'.
|
|
$properties['line']. '</span>';
|
|
} else {
|
|
$buffer.= ' ';
|
|
}
|
|
|
|
break;
|
|
|
|
case PHP_DebugLine::TYPE_CREDITS:
|
|
case PHP_DebugLine::TYPE_SEARCH:
|
|
case PHP_DebugLine::TYPE_PROCESSPERF:
|
|
case PHP_DebugLine::TYPE_TEMPLATES:
|
|
case PHP_DebugLine::TYPE_ENV:
|
|
|
|
$buffer.= ' ';
|
|
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
|
|
return $buffer;
|
|
}
|
|
|
|
/**
|
|
* process display of file name
|
|
*
|
|
* @param array $properties Properties of the debug line
|
|
* @return string Formatted string containing the file
|
|
* @since V2.0.0 - 26 Apr 2006
|
|
*/
|
|
protected function processFile($properties)
|
|
{
|
|
$buffer = '';
|
|
|
|
switch ($properties['type'])
|
|
{
|
|
case PHP_DebugLine::TYPE_STD:
|
|
case PHP_DebugLine::TYPE_QUERY:
|
|
case PHP_DebugLine::TYPE_QUERYREL:
|
|
case PHP_DebugLine::TYPE_APPERROR:
|
|
case PHP_DebugLine::TYPE_PAGEACTION:
|
|
case PHP_DebugLine::TYPE_PHPERROR:
|
|
case PHP_DebugLine::TYPE_SQLPARSE:
|
|
case PHP_DebugLine::TYPE_WATCH:
|
|
case PHP_DebugLine::TYPE_DUMP:
|
|
|
|
if (!empty($properties['file'])) {
|
|
if (!empty($this->options['HTML_DIV_view_source_script_path']) &&
|
|
!empty($this->options['HTML_DIV_view_source_script_name'])) {
|
|
$buffer .= '<a href="'.
|
|
$this->options['HTML_DIV_view_source_script_path'].
|
|
'/'.
|
|
$this->options['HTML_DIV_view_source_script_name'].
|
|
'?file='. urlencode($properties['file']);
|
|
|
|
$buffer .= '">'. basename($properties['file']). '</a>';
|
|
|
|
} else {
|
|
$buffer .= basename($properties['file']);
|
|
}
|
|
} else {
|
|
$buffer .= ' ';
|
|
}
|
|
|
|
break;
|
|
|
|
case PHP_DebugLine::TYPE_CREDITS:
|
|
case PHP_DebugLine::TYPE_SEARCH:
|
|
case PHP_DebugLine::TYPE_PROCESSPERF:
|
|
case PHP_DebugLine::TYPE_TEMPLATES:
|
|
case PHP_DebugLine::TYPE_ENV:
|
|
|
|
$buffer .= ' ';
|
|
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
|
|
return $buffer;
|
|
}
|
|
|
|
/**
|
|
* Dump of a variable
|
|
*
|
|
* @since V2.0.0 - 26 Apr 2006
|
|
*/
|
|
protected function showDump($properties)
|
|
{
|
|
$buffer = '';
|
|
|
|
// Check display with a <pre> design
|
|
if (is_array($properties['info'][1])) {
|
|
$preDisplay = true;
|
|
} elseif (is_object($properties['info'][1])) {
|
|
$preDisplay = true;
|
|
} else {
|
|
$preDisplay = false;
|
|
}
|
|
|
|
// Check var name
|
|
if (empty($properties['info'][0])) {
|
|
if (is_array($properties['info'][1])) {
|
|
$varName = 'Array';
|
|
} elseif (is_object($properties['info'][1])) {
|
|
$varName = get_class($properties['info'][1]);
|
|
} else {
|
|
$varName = 'Variable';
|
|
}
|
|
} else {
|
|
$varName = $properties['info'][0];
|
|
}
|
|
|
|
// Output
|
|
if ($properties['type'] != PHP_DebugLine::TYPE_ENV) {
|
|
$title = 'dump of \'';
|
|
}
|
|
|
|
$title .= $varName. '\' ('. gettype($properties['info'][1]) .') : ';
|
|
|
|
$buffer .= $this->span($title , 'dump-title');
|
|
|
|
if ($preDisplay == true){
|
|
$buffer .= '<pre>';
|
|
$buffer .= PHP_Debug::dumpVar(
|
|
$properties['info'][1],
|
|
'',
|
|
false,
|
|
PHP_Debug::DUMP_STR);
|
|
} else {
|
|
$buffer .= $this->span(
|
|
PHP_Debug::dumpVar(
|
|
$properties['info'][1],
|
|
'',
|
|
false,
|
|
PHP_Debug::DUMP_STR
|
|
), 'dump-val');
|
|
}
|
|
|
|
if ($preDisplay == true) {
|
|
$buffer .= '</pre>';
|
|
}
|
|
|
|
return $buffer;
|
|
}
|
|
|
|
/**
|
|
* Get the templates info
|
|
*
|
|
* @since V2.0.0 - 26 Apr 2006
|
|
*/
|
|
protected function showTemplates()
|
|
{
|
|
$txtMainFile = 'MAIN File';
|
|
$idx = 1;
|
|
$buffer = '<br />';
|
|
|
|
foreach($this->DebugObject->getRequiredFiles() as $lvalue) {
|
|
|
|
$isToDisplay = true;
|
|
|
|
if ($this->options['HTML_DIV_view_source_excluded_template']) {
|
|
foreach ($this->options['HTML_DIV_view_source_excluded_template'] as $template) {
|
|
if (stristr($lvalue, $template)) {
|
|
$isToDisplay = false;
|
|
}
|
|
}
|
|
}
|
|
|
|
if ($isToDisplay == true) {
|
|
|
|
$buffer .= '<div class="source">';
|
|
$buffer .= $this->span($this->truncate($lvalue), 'files');
|
|
$buffer .= ' <a href="'.
|
|
$this->options['HTML_DIV_view_source_script_path'].
|
|
'/'. $this->options['HTML_DIV_view_source_script_name'].
|
|
'?file='. urlencode($lvalue). '">View source</a> ';
|
|
|
|
// main file
|
|
if ($idx == 1) {
|
|
$buffer .= $this->span('« '. $txtMainFile, 'main-file');
|
|
}
|
|
$idx++;
|
|
$buffer .= '</div><br />'. CR;
|
|
}
|
|
}
|
|
|
|
$buffer .= '<br />'. CR;
|
|
return $buffer;
|
|
}
|
|
|
|
|
|
/**
|
|
* Truncate/replace a pattern from the file path
|
|
*
|
|
* @param string full file path
|
|
*
|
|
* @author COil
|
|
* @since V2.1.0 - 3 apr 2007
|
|
*
|
|
* @see
|
|
* - HTML_DIV_remove_templates_pattern
|
|
* - HTML_DIV_templates_pattern
|
|
*/
|
|
protected function truncate($file)
|
|
{
|
|
if ($this->options['HTML_DIV_remove_templates_pattern'] &&
|
|
$this->options['HTML_DIV_templates_pattern']) {
|
|
return strtr($file, $this->options['HTML_DIV_templates_pattern']);
|
|
}
|
|
|
|
return $file;
|
|
}
|
|
|
|
/**
|
|
* Process an error info
|
|
*
|
|
* @param array $info Array containing information about the error
|
|
*
|
|
* @since V2.0.0 - 25 Apr 2006
|
|
* @see PHP_DebugLine::TYPE_PHPERROR
|
|
*/
|
|
protected function showError($infos)
|
|
{
|
|
$buffer = '';
|
|
$infos[1] = str_replace("'", '"', $infos[1]);
|
|
$infos[1] = str_replace(
|
|
'href="function.',
|
|
' href="http://www.php.net/'.
|
|
$this->options['lang']. '/', $infos[1]);
|
|
|
|
switch ($infos[0])
|
|
{
|
|
case E_WARNING:
|
|
$errorlevel = 'PHP WARNING : ';
|
|
$buffer .= '<span class="pd-php-warning"> /!\\ '.
|
|
$errorlevel. $infos[1] . ' /!\\ </span>';
|
|
break;
|
|
|
|
case E_NOTICE:
|
|
$errorlevel = 'PHP notice : ';
|
|
$buffer .= '<span class="pd-php-notice">'.
|
|
$errorlevel. $infos[1] . '</span>';
|
|
break;
|
|
|
|
case E_USER_ERROR:
|
|
$errorlevel = 'PHP User error : ';
|
|
$buffer .= '<span class="pd-php-user-error"> /!\\ '.
|
|
$errorlevel. $infos[1] . ' /!\\ </span>';
|
|
break;
|
|
|
|
case E_STRICT:
|
|
|
|
$errorlevel = 'PHP STRICT error : ';
|
|
$buffer .= '<span class="pd-php-user-error"> /!\\ '.
|
|
$errorlevel. $infos[1] . ' /!\\ </span>';
|
|
break;
|
|
|
|
default:
|
|
$errorlevel = 'PHP errorlevel = '. $infos[0]. ' : ';
|
|
$buffer .= $errorlevel.
|
|
' is not implemented in PHP_Debug ('. __FILE__. ','. __LINE__. ')';
|
|
break;
|
|
}
|
|
|
|
return $buffer;
|
|
}
|
|
|
|
/**
|
|
* Show a super array
|
|
*
|
|
* @param string $SuperArrayType Type of super en array to add
|
|
* @since V2.0.0 - 07 Apr 2006
|
|
*/
|
|
protected function showSuperArray($SuperArrayType)
|
|
{
|
|
// Lang
|
|
$txtVariable = 'Var';
|
|
$txtNoVariable = 'NO VARIABLE';
|
|
$NoVariable = ' -- '. $txtNoVariable. ' -- ';
|
|
$SuperArray = null;
|
|
$buffer = '';
|
|
|
|
$ArrayTitle = PHP_Debug::$globalEnvConstantsCorresp[$SuperArrayType];
|
|
$SuperArray = $GLOBALS[$ArrayTitle];
|
|
$Title = $ArrayTitle. ' '. $txtVariable;
|
|
$SectionBasetitle = '<b>'. $Title. '('. count($SuperArray). ') :';
|
|
|
|
if (count($SuperArray)) {
|
|
$buffer .= $SectionBasetitle. '</b>';
|
|
$buffer .= '<pre>'.
|
|
PHP_Debug::dumpVar(
|
|
$SuperArray,
|
|
$ArrayTitle,
|
|
false,
|
|
PHP_Debug::DUMP_STR
|
|
). '</pre>';
|
|
} else {
|
|
$buffer .= $SectionBasetitle. $NoVariable. '</b>';
|
|
}
|
|
|
|
return $buffer;
|
|
}
|
|
|
|
/**
|
|
* Displays an array.
|
|
*
|
|
* @param string $SuperArrayType Type of super en array to add
|
|
* @since V2.0.0 - 07 Apr 2006
|
|
*/
|
|
protected function showArray($array, $name)
|
|
{
|
|
// Lang
|
|
$txtNoVariable = 'NO VARIABLE';
|
|
$NoVariable = ' -- '. $txtNoVariable. ' -- ';
|
|
$buffer = '';
|
|
$SectionBasetitle = '<b>'. $name. '('. count($array). ') :';
|
|
|
|
if (count($array)) {
|
|
$buffer .= $SectionBasetitle. '</b>';
|
|
$buffer .= '<pre>'. PHP_Debug::dumpVar(
|
|
$array,
|
|
$name,
|
|
false,
|
|
PHP_Debug::DUMP_STR). '</pre>';
|
|
} else {
|
|
$buffer .= $SectionBasetitle. $NoVariable. '</b>';
|
|
}
|
|
|
|
return $buffer;
|
|
}
|
|
} |