mirror of
https://github.com/e107inc/e107.git
synced 2025-01-16 20:28:28 +01:00
259 lines
5.0 KiB
PHP
259 lines
5.0 KiB
PHP
<?php
|
|
/**
|
|
* e107 website system
|
|
*
|
|
* Copyright (C) 2008-2016 e107 Inc (e107.org)
|
|
* Released under the terms and conditions of the
|
|
* GNU General Public License (http://www.gnu.org/licenses/gpl.txt)
|
|
*
|
|
* @file
|
|
* Class for system error pages.
|
|
*/
|
|
|
|
|
|
// [e_LANGUAGEDIR]/[e_LANGUAGE]/lan_error.php
|
|
e107::lan('core', 'error');
|
|
|
|
|
|
/**
|
|
* Class error_page.
|
|
*/
|
|
class error_page
|
|
{
|
|
|
|
/**
|
|
* @var
|
|
*/
|
|
private $template = 'DEFAULT';
|
|
|
|
/**
|
|
* @var
|
|
*/
|
|
private $title;
|
|
|
|
/**
|
|
* @var
|
|
*/
|
|
private $caption;
|
|
|
|
/**
|
|
* @var
|
|
*/
|
|
private $content;
|
|
|
|
/**
|
|
* Constructor.
|
|
*
|
|
* Use {@link getInstance()}, direct instantiating is not possible for
|
|
* signleton objects.
|
|
*/
|
|
public function __construct()
|
|
{
|
|
}
|
|
|
|
/**
|
|
* Singleton is not required, we go for factory instead.
|
|
*
|
|
* @return error_page
|
|
*/
|
|
public static function getInstance()
|
|
{
|
|
return e107::getError();
|
|
}
|
|
|
|
/**
|
|
* Change title on the error page.
|
|
*
|
|
* @param $title
|
|
*/
|
|
public function setTitle($title)
|
|
{
|
|
$this->title = $title;
|
|
}
|
|
|
|
/**
|
|
* Change panel caption on the error page.
|
|
*
|
|
* @param $caption
|
|
*/
|
|
public function setCaption($caption)
|
|
{
|
|
$this->caption = $caption;
|
|
}
|
|
|
|
/**
|
|
* Change panel content on the error page.
|
|
*
|
|
* @param $content
|
|
*/
|
|
public function setContent($content)
|
|
{
|
|
$this->content = $content;
|
|
}
|
|
|
|
/**
|
|
* Set a "Bad Request" error page.
|
|
*/
|
|
private function setPageBadRequest()
|
|
{
|
|
header('HTTP/1.1 400 Bad Request', true, 400);
|
|
|
|
$this->template = 400;
|
|
$this->title = LAN_ERROR_35;
|
|
$this->caption = LAN_ERROR_45;
|
|
$this->content = LAN_ERROR_36;
|
|
}
|
|
|
|
/**
|
|
* Set a "Authentication Failed" error page.
|
|
*/
|
|
private function setPageUnauthorized()
|
|
{
|
|
header('HTTP/1.1 401 Unauthorized', true, 401);
|
|
|
|
$this->template = 401;
|
|
$this->title = LAN_ERROR_1;
|
|
$this->caption = LAN_ERROR_45;
|
|
$this->content = LAN_ERROR_2 . '<br/>' . LAN_ERROR_3;
|
|
}
|
|
|
|
/**
|
|
* Set a "Access forbidden" error page.
|
|
*/
|
|
private function setPageForbidden()
|
|
{
|
|
header('HTTP/1.1 403 Forbidden', true, 403);
|
|
|
|
$this->template = 403;
|
|
$this->title = LAN_ERROR_4;
|
|
$this->caption = LAN_ERROR_45;
|
|
$this->content = LAN_ERROR_5 . '<br/>' . LAN_ERROR_3 . '<br/><br/>' . LAN_ERROR_2;
|
|
}
|
|
|
|
/**
|
|
* Set a "Not Found" error page.
|
|
*/
|
|
private function setPageNotFound()
|
|
{
|
|
header('HTTP/1.1 404 Not Found', true, 404);
|
|
|
|
$this->template = 404;
|
|
$this->title = LAN_ERROR_7;
|
|
$this->caption = LAN_ERROR_45;
|
|
$this->content = LAN_ERROR_21 . '<br/>' . LAN_ERROR_3;
|
|
}
|
|
|
|
/**
|
|
* Set a "Internal server error" error page.
|
|
*/
|
|
private function setPageInternalServerError()
|
|
{
|
|
header('HTTP/1.1 500 Internal Server Error', true, 500);
|
|
|
|
$this->template = 500;
|
|
$this->title = LAN_ERROR_10;
|
|
$this->caption = LAN_ERROR_14;
|
|
$this->content = LAN_ERROR_11 . '<br/>' . LAN_ERROR_3;
|
|
}
|
|
|
|
/**
|
|
* Set a "Unknown" error page.
|
|
*/
|
|
private function setPageUnknown()
|
|
{
|
|
header('HTTP/1.1 501 Not Implemented', true, 501);
|
|
|
|
$errorQuery = htmlentities($_SERVER['QUERY_STRING']);
|
|
|
|
$this->template = 'DEFAULT';
|
|
$this->title = LAN_ERROR_13 . ' (' . $errorQuery . ')';
|
|
$this->caption = LAN_ERROR_14;
|
|
$this->content = LAN_ERROR_3;
|
|
}
|
|
|
|
/**
|
|
* Set error page.
|
|
*
|
|
* @param int $status_code
|
|
* The HTTP status code to use for the error page, defaults to 404.
|
|
* Status codes are defined in RFC 2616.
|
|
* @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
|
|
*/
|
|
public function set($status_code = 404)
|
|
{
|
|
switch($status_code)
|
|
{
|
|
case 400:
|
|
$this->setPageBadRequest();
|
|
break;
|
|
|
|
case 401:
|
|
$this->setPageUnauthorized();
|
|
break;
|
|
|
|
case 403:
|
|
$this->setPageForbidden();
|
|
break;
|
|
|
|
case 404:
|
|
$this->setPageNotFound();
|
|
break;
|
|
|
|
case 500:
|
|
$this->setPageInternalServerError();
|
|
break;
|
|
|
|
default:
|
|
$this->setPageUnknown();
|
|
break;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Renders and delivers an error page to the browser.
|
|
*
|
|
* @param int $status_code
|
|
* The HTTP status code to use for the error page, defaults to 404.
|
|
* Status codes are defined in RFC 2616.
|
|
* @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
|
|
*/
|
|
public function render($status_code = null)
|
|
{
|
|
if(!defined('ERR_PAGE_ACTIVE'))
|
|
{
|
|
define("ERR_PAGE_ACTIVE", true);
|
|
}
|
|
|
|
if($status_code)
|
|
{
|
|
$this->set($status_code);
|
|
}
|
|
|
|
$tp = e107::getParser();
|
|
$tpl = e107::getCoreTemplate('error', $this->template);
|
|
$sc = e107::getScBatch('error');
|
|
|
|
$sc->setVars(array(
|
|
'title' => LAN_ERROR_TITLE, // Oops!
|
|
'subtitle' => $this->title,
|
|
'caption' => $this->caption,
|
|
'content' => $this->content,
|
|
));
|
|
|
|
$body = $tp->parseTemplate($tpl, true, $sc);
|
|
|
|
// set title, mode and body for when SEF (index.php) is handling it.
|
|
$front = eFront::instance();
|
|
$front->getResponse()->setTitle(LAN_ERROR);
|
|
$front->getResponse()->setRenderMod('error_page_'.$status_code);
|
|
$front->getResponse()->setBody($body);
|
|
|
|
|
|
|
|
// return $body for when error.php is handling it.
|
|
return $body;
|
|
// e107::getRender()->tablerender('', $body, 'error_page_'.$status_code); // caused double-render.test with e107v4a theme
|
|
}
|
|
|
|
}
|