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(); } catch (UserFacingException $e) { $debug_info = ErrorHandler::getDebugInfo($e->getTrace()); ErrorHandler::display($e->getMessage(), $debug_info, false); } 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()); } } 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. */ public static function kickGuest($title = null, $message = null) { $form = new LogInForm('Log in'); $form->adopt(new Alert($title ?? '', $message ?? 'You need to be logged in to view this page.', 'danger')); $form->setRedirectUrl($_SERVER['REQUEST_URI']); $page = new MainTemplate('Login required'); $page->appendStylesheet(BASEURL . '/css/admin.css'); $page->adopt($form); $page->html_main(); exit; } private static function trigger400() { http_response_code(400); self::errorPage('Bad request', 'The server does not understand your request.'); exit; } private static function trigger403() { http_response_code(403); self::errorPage('Forbidden', 'You do not have access to this page.'); exit; } private static function trigger404() { http_response_code(404); $page = new ViewErrorPage('Page not found!'); $page->showContent(); } }