Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

176 lines (164 sloc) 5.134 kb
<?php
/**
* @package sapphire
* @subpackage dev
*/
/**
* A basic HTML wrapper for stylish rendering of a developement info view.
* Used to output error messages, and test results.
*
* @package sapphire
* @subpackage dev
*/
class DebugView extends Object {
protected static $error_types = array(
E_USER_ERROR => array(
'title' => 'User Error',
'class' => 'error'
),
E_CORE_ERROR => array(
'title' => 'Core Error',
'class' => 'error'
),
E_NOTICE => array(
'title' => 'Notice',
'class' => 'notice'
),
E_USER_NOTICE => array(
'title' => 'User Notice',
'class' => 'notice'
),
E_USER_DEPRECATED => array(
'title' => 'Deprecation',
'class' => 'notice'
),
E_CORE_ERROR => array(
'title' => 'Core Error',
'class' => 'error'
),
E_WARNING => array(
'title' => 'Warning',
'class' => 'warning'
),
E_CORE_WARNING => array(
'title' => 'Core Warning',
'class' => 'warning'
),
E_USER_WARNING => array(
'title' => 'User Warning',
'class' => 'warning'
)
);
/**
* Generate breadcrumb links to the URL path being displayed
*
* @return string
*/
public function Breadcrumbs() {
$basePath = str_replace(Director::protocolAndHost(), '', Director::absoluteBaseURL());
$relPath = parse_url(substr($_SERVER['REQUEST_URI'], strlen($basePath), strlen($_SERVER['REQUEST_URI'])), PHP_URL_PATH);
$parts = explode('/', $relPath);
$base = Director::absoluteBaseURL();
$pathPart = "";
$pathLinks = array();
foreach($parts as $part) {
if ($part != '') {
$pathPart .= "$part/";
$pathLinks[] = "<a href=\"$base$pathPart\">$part</a>";
}
}
return implode('&rarr;&nbsp;', $pathLinks);
}
/**
* Render HTML header for development views
*/
public function writeHeader() {
$url = htmlentities(
$_SERVER['REQUEST_METHOD'] . ' ' . $_SERVER['REQUEST_URI'],
ENT_COMPAT,
'UTF-8'
);
echo '<!DOCTYPE html><html><head><title>' . $url . '</title>';
echo '<style type="text/css">';
echo 'body { background-color:#eee; margin:0; padding:0; font-family:Helvetica,Arial,sans-serif; }';
echo '.info { margin:15px 0 0 0; padding:6px 12px; }';
echo '.info h1 { margin:0; padding:0; color:#333; letter-spacing:-2px; }';
echo '.header { margin:0; border-bottom:6px solid #ccdef3; height:23px; background-color:#666673; padding:4px 0 2px 6px; background-image:url('.Director::absoluteBaseURL().'cms/images/mainmenu/top-bg.gif); }';
echo '.trace { padding:6px 12px; }';
echo '.trace li { font-size:14px; margin:6px 0; }';
echo 'pre { margin-left:18px; }';
echo 'pre span { color:#999;}';
echo 'pre .error { color:#f00; }';
echo '.pass { margin-top:18px; padding:2px 20px 2px 40px; color:#006600; background:#E2F9E3 url('.Director::absoluteBaseURL() .'cms/images/alert-good.gif) no-repeat scroll 7px 50%; border:1px solid #8DD38D; border-radius:4px; }';
echo '.fail { margin-top:18px; padding:2px 20px 2px 40px; color:#C80700; background:#FFE9E9 url('.Director::absoluteBaseURL() .'cms/images/alert-bad.gif) no-repeat scroll 7px 50%; border:1px solid #C80700; border-radius:4px; }';
echo '.failure span { color:#C80700; font-weight:bold; }';
echo '</style></head>';
echo '<body>';
}
/**
* Render the information header for the view
*
* @param string $title
* @param string $title
*/
public function writeInfo($title, $subtitle, $description=false) {
echo '<div class="info">';
echo "<h1>" . Convert::raw2xml($title) . "</h1>";
if($subtitle) echo "<h3>" . Convert::raw2xml($subtitle) . "</h3>";
if ($description) {
echo "<p>$description</p>";
} else {
echo $this->Breadcrumbs();
}
echo '</div>';
}
/**
* Render HTML footer for development views
*/
public function writeFooter() {
echo "</body></html>";
}
/**
* Write information about the error to the screen
*/
public function writeError($httpRequest, $errno, $errstr, $errfile, $errline, $errcontext) {
$errorType = self::$error_types[$errno];
$httpRequestEnt = htmlentities($httpRequest, ENT_COMPAT, 'UTF-8');
echo '<div class="info ' . $errorType['class'] . '">';
echo "<h1>[" . $errorType['title'] . '] ' . strip_tags($errstr) . "</h1>";
echo "<h3>$httpRequestEnt</h3>";
echo "<p>Line <strong>$errline</strong> in <strong>$errfile</strong></p>";
echo '</div>';
}
/**
* Write a fragment of the a source file
* @param $lines An array of file lines; the keys should be the original line numbers
*/
function writeSourceFragment($lines, $errline) {
echo '<div class="trace"><h3>Source</h3>';
echo '<pre>';
foreach($lines as $offset => $line) {
$line = htmlentities($line, ENT_COMPAT, 'UTF-8');
if ($offset == $errline) {
echo "<span>$offset</span> <span class=\"error\">$line</span>";
} else {
echo "<span>$offset</span> $line";
}
}
echo '</pre>';
}
/**
* Write a backtrace
*/
function writeTrace($trace) {
echo '<h3>Trace</h3>';
echo SS_Backtrace::get_rendered_backtrace($trace);
echo '</div>';
}
/**
* @param string $text
*/
function writeParagraph($text) {
echo '<p class="info">' . $text . '</p>';
}
}
Jump to Line
Something went wrong with that request. Please try again.