2016-09-01 23:13:23 +02:00
< ? php
/*****************************************************************************
* Dispatcher . php
* Contains key class Dispatcher .
*
* Kabuki CMS ( C ) 2013 - 2015 , Aaron van Geffen
*****************************************************************************/
class Dispatcher
{
public static function dispatch ()
{
// Let's try to find our bearings!
try
{
2023-01-01 19:48:12 +01:00
$page = Router :: route ();
2016-09-01 23:13:23 +02:00
$page -> showContent ();
}
// Something wasn't found?
catch ( NotFoundException $e )
{
self :: trigger404 ();
}
// Or are they just sneaking into areas they don't belong?
catch ( NotAllowedException $e )
{
if ( Registry :: get ( 'user' ) -> isGuest ())
self :: kickGuest ();
else
self :: trigger403 ();
}
2016-09-02 11:17:10 +02:00
catch ( UserFacingException $e )
{
$debug_info = ErrorHandler :: getDebugInfo ( $e -> getTrace ());
ErrorHandler :: display ( $e -> getMessage (), $debug_info , false );
}
2016-09-01 23:13:23 +02:00
catch ( Exception $e )
{
ErrorHandler :: handleError ( E_USER_ERROR , 'Unspecified exception: ' . $e -> getMessage (), $e -> getFile (), $e -> getLine ());
}
catch ( Error $e )
{
ErrorHandler :: handleError ( E_USER_ERROR , 'Fatal error: ' . $e -> getMessage (), $e -> getFile (), $e -> getLine ());
}
}
/**
* Kicks a guest to a login form , redirecting them back to this page upon login .
*/
2020-03-11 22:23:43 +01:00
public static function kickGuest ( $title = null , $message = null )
2016-09-01 23:13:23 +02:00
{
$form = new LogInForm ( 'Log in' );
2023-03-11 13:30:02 +01:00
$form -> adopt ( new Alert ( $title ? ? '' , $message ? ? 'You need to be logged in to view this page.' , 'danger' ));
2016-09-01 23:13:23 +02:00
$form -> setRedirectUrl ( $_SERVER [ 'REQUEST_URI' ]);
$page = new MainTemplate ( 'Login required' );
$page -> appendStylesheet ( BASEURL . '/css/admin.css' );
$page -> adopt ( $form );
$page -> html_main ();
exit ;
}
public static function trigger400 ()
{
header ( 'HTTP/1.1 400 Bad Request' );
$page = new MainTemplate ( 'Bad request' );
$page -> adopt ( new DummyBox ( 'Bad request' , '<p>The server does not understand your request.</p>' ));
$page -> html_main ();
exit ;
}
public static function trigger403 ()
{
header ( 'HTTP/1.1 403 Forbidden' );
$page = new MainTemplate ( 'Access denied' );
$page -> adopt ( new DummyBox ( 'Forbidden' , '<p>You do not have access to the page you requested.</p>' ));
$page -> html_main ();
exit ;
}
public static function trigger404 ()
{
header ( 'HTTP/1.1 404 Not Found' );
$page = new MainTemplate ( 'Page not found' );
if ( Registry :: has ( 'user' ) && Registry :: get ( 'user' ) -> isAdmin ())
{
$page -> appendStylesheet ( BASEURL . '/css/admin.css' );
$page -> adopt ( new AdminBar ());
}
$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 ;
}
}