ErrorPage: display debug info in separate box
This commit is contained in:
parent
13cbe08219
commit
041b56ff8c
@ -44,6 +44,19 @@ class Dispatcher
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static function errorPage($title, $body)
|
||||||
|
{
|
||||||
|
$page = new MainTemplate($title);
|
||||||
|
$page->adopt(new ErrorPage($title, $body));
|
||||||
|
|
||||||
|
if (Registry::get('user')->isAdmin())
|
||||||
|
{
|
||||||
|
$page->appendStylesheet(BASEURL . '/css/admin.css');
|
||||||
|
}
|
||||||
|
|
||||||
|
$page->html_main();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Kicks a guest to a login form, redirecting them back to this page upon login.
|
* Kicks a guest to a login form, redirecting them back to this page upon login.
|
||||||
*/
|
*/
|
||||||
@ -60,37 +73,24 @@ class Dispatcher
|
|||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function trigger400()
|
private static function trigger400()
|
||||||
{
|
{
|
||||||
header('HTTP/1.1 400 Bad Request');
|
http_response_code(400);
|
||||||
$page = new MainTemplate('Bad request');
|
self::errorPage('Bad request', 'The server does not understand your request.');
|
||||||
$page->adopt(new DummyBox('Bad request', '<p>The server does not understand your request.</p>'));
|
|
||||||
$page->html_main();
|
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function trigger403()
|
private static function trigger403()
|
||||||
{
|
{
|
||||||
header('HTTP/1.1 403 Forbidden');
|
http_response_code(403);
|
||||||
$page = new MainTemplate('Access denied');
|
self::errorPage('Forbidden', 'You do not have access to this page.');
|
||||||
$page->adopt(new DummyBox('Forbidden', '<p>You do not have access to the page you requested.</p>'));
|
|
||||||
$page->html_main();
|
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function trigger404()
|
private static function trigger404()
|
||||||
{
|
{
|
||||||
header('HTTP/1.1 404 Not Found');
|
http_response_code(404);
|
||||||
$page = new MainTemplate('Page not found');
|
$page = new ViewErrorPage('Page not found!');
|
||||||
|
$page->showContent();
|
||||||
if (Registry::has('user') && Registry::get('user')->isAdmin())
|
|
||||||
{
|
|
||||||
$page->appendStylesheet(BASEURL . '/css/admin.css');
|
|
||||||
}
|
|
||||||
|
|
||||||
$page->adopt(new DummyBox('Well, this is a bit embarrassing!', '<p>The page you requested could not be found. Don\'t worry, it\'s probably not your fault. You\'re welcome to browse the website, though!</p>', 'errormsg'));
|
|
||||||
$page->addClass('errorpage');
|
|
||||||
$page->html_main();
|
|
||||||
exit;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
* ErrorHandler.php
|
* ErrorHandler.php
|
||||||
* Contains key class ErrorHandler.
|
* Contains key class ErrorHandler.
|
||||||
*
|
*
|
||||||
* Kabuki CMS (C) 2013-2016, Aaron van Geffen
|
* Kabuki CMS (C) 2013-2025, Aaron van Geffen
|
||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
|
|
||||||
class ErrorHandler
|
class ErrorHandler
|
||||||
@ -47,10 +47,8 @@ class ErrorHandler
|
|||||||
// Log the error in the database.
|
// Log the error in the database.
|
||||||
self::logError($error_message, $debug_info, $file, $line);
|
self::logError($error_message, $debug_info, $file, $line);
|
||||||
|
|
||||||
// Are we considering this fatal? Then display and exit.
|
// Display error and exit.
|
||||||
// !!! TODO: should we consider warnings fatal?
|
self::display($error_message, $file, $line, $debug_info);
|
||||||
if (true) // DEBUG || (!DEBUG && $error_level === E_WARNING || $error_level === E_USER_WARNING))
|
|
||||||
self::display($file . ' (' . $line . ')<br>' . $error_message, $debug_info);
|
|
||||||
|
|
||||||
// If it wasn't a fatal error, well...
|
// If it wasn't a fatal error, well...
|
||||||
self::$handling_error = false;
|
self::$handling_error = false;
|
||||||
@ -118,7 +116,7 @@ class ErrorHandler
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Logs an error into the database.
|
// Logs an error into the database.
|
||||||
private static function logError($error_message = '', $debug_info = '', $file = '', $line = 0)
|
public static function logError($error_message = '', $debug_info = '', $file = '', $line = 0)
|
||||||
{
|
{
|
||||||
if (!ErrorLog::log([
|
if (!ErrorLog::log([
|
||||||
'message' => $error_message,
|
'message' => $error_message,
|
||||||
@ -130,7 +128,7 @@ class ErrorHandler
|
|||||||
'request_uri' => isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : '',
|
'request_uri' => isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : '',
|
||||||
]))
|
]))
|
||||||
{
|
{
|
||||||
header('HTTP/1.1 503 Service Temporarily Unavailable');
|
http_response_code(503);
|
||||||
echo '<h2>An Error Occurred</h2><p>Our software could not connect to the database. We apologise for any inconvenience and ask you to check back later.</p>';
|
echo '<h2>An Error Occurred</h2><p>Our software could not connect to the database. We apologise for any inconvenience and ask you to check back later.</p>';
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
@ -138,7 +136,7 @@ class ErrorHandler
|
|||||||
return $error_message;
|
return $error_message;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function display($message, $debug_info, $is_sensitive = true)
|
public static function display($message, $file, $line, $debug_info, $is_sensitive = true)
|
||||||
{
|
{
|
||||||
$is_admin = Registry::has('user') && Registry::get('user')->isAdmin();
|
$is_admin = Registry::has('user') && Registry::get('user')->isAdmin();
|
||||||
|
|
||||||
@ -167,7 +165,8 @@ class ErrorHandler
|
|||||||
$is_admin = Registry::has('user') && Registry::get('user')->isAdmin();
|
$is_admin = Registry::has('user') && Registry::get('user')->isAdmin();
|
||||||
if (DEBUG || $is_admin)
|
if (DEBUG || $is_admin)
|
||||||
{
|
{
|
||||||
$page->adopt(new DummyBox('An error occurred!', '<p>' . $message . '</p><pre>' . $debug_info . '</pre>'));
|
$debug_info = sprintf("Trigger point:\n%s (L%d)\n\n%s", $file, $line, $debug_info);
|
||||||
|
$page->adopt(new ErrorPage('An error occurred!', $message, $debug_info));
|
||||||
|
|
||||||
// Let's provide the admin navigation despite it all!
|
// Let's provide the admin navigation despite it all!
|
||||||
if ($is_admin)
|
if ($is_admin)
|
||||||
@ -176,9 +175,9 @@ class ErrorHandler
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
elseif (!$is_sensitive)
|
elseif (!$is_sensitive)
|
||||||
$page->adopt(new DummyBox('An error occurred!', '<p>' . $message . '</p>'));
|
$page->adopt(new ErrorPage('An error occurred!', '<p>' . $message . '</p>'));
|
||||||
else
|
else
|
||||||
$page->adopt(new DummyBox('An error occurred!', '<p>Our apologies, an error occurred while we were processing your request. Please try again later, or contact us if the problem persists.</p>'));
|
$page->adopt(new ErrorPage('An error occurred!', 'Our apologies, an error occurred while we were processing your request. Please try again later, or contact us if the problem persists.'));
|
||||||
|
|
||||||
// If we got this far, make sure we're not showing stuff twice.
|
// If we got this far, make sure we're not showing stuff twice.
|
||||||
ob_end_clean();
|
ob_end_clean();
|
||||||
|
41
templates/ErrorPage.php
Normal file
41
templates/ErrorPage.php
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
<?php
|
||||||
|
/*****************************************************************************
|
||||||
|
* ErrorPage.php
|
||||||
|
* Defines the template class ErrorPage.
|
||||||
|
*
|
||||||
|
* Kabuki CMS (C) 2013-2025, Aaron van Geffen
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
class ErrorPage extends Template
|
||||||
|
{
|
||||||
|
private $debug_info;
|
||||||
|
private $message;
|
||||||
|
private $title;
|
||||||
|
|
||||||
|
public function __construct($title, $message, $debug_info = null)
|
||||||
|
{
|
||||||
|
$this->title = $title;
|
||||||
|
$this->message = $message;
|
||||||
|
$this->debug_info = $debug_info;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function html_main()
|
||||||
|
{
|
||||||
|
echo '
|
||||||
|
<div class="content-box container">
|
||||||
|
<h2>', $this->title, '</h2>
|
||||||
|
<p>', nl2br(htmlspecialchars($this->message)), '</p>';
|
||||||
|
|
||||||
|
if (isset($this->debug_info))
|
||||||
|
{
|
||||||
|
echo '
|
||||||
|
</div>
|
||||||
|
<div class="content-box container">
|
||||||
|
<h4>Debug Info</h4>
|
||||||
|
<pre>', htmlspecialchars($this->debug_info), '</pre>';
|
||||||
|
}
|
||||||
|
|
||||||
|
echo '
|
||||||
|
</div>';
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user