mirror of
				https://github.com/e107inc/e107.git
				synced 2025-10-26 19:21:54 +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
 | |
| 	}
 | |
| 
 | |
| }
 |