libretime/legacy/application/controllers/ErrorController.php

128 lines
3.7 KiB
PHP

<?php
class ErrorController extends Zend_Controller_Action
{
public function init()
{
// The default layout includes the Dashboard header, which may contain private information.
// We cannot show that.
$this->view->layout()->disableLayout();
$this->setupCSS();
// TODO: set Help button URL based on whether or not user is logged in
try {
$service_user = new Application_Service_UserService();
$service_user->getCurrentUser();
$this->view->helpUrl = Config::getBasePath() . 'dashboard/help';
} catch (Exception $e) {
$this->view->helpUrl = HELP_URL;
}
}
public function errorAction()
{
$errors = $this->_getParam('error_handler');
if ($errors) {
// log error message and stack trace
Logging::error($errors->exception->getMessage());
Logging::error($errors->exception->getTraceAsString());
switch ($errors->type) {
case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ROUTE:
case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_CONTROLLER:
$this->error404Action();
break;
case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ACTION:
$this->error400Action();
break;
default:
$this->error500Action();
break;
}
} else {
// $exceptions = $this->_getAllParams();
// Logging::error($exceptions);
$this->error404Action();
return;
}
// Log exception, if logger available
/* No idea why this doesn't work or why it was implemented like this. Disabling it -- Albert
if (($log = $this->getLog())) {
$log->crit($this->view->message, $errors->exception);
}*/
// Logging that actually works: -- Albert
Logging::error($this->view->message . ': ' . $errors->exception);
// conditionally display exceptions
if ($this->getInvokeArg('displayExceptions') == true) {
$this->view->exception = $errors->exception;
}
$this->view->request = $errors->request;
}
private function setupCSS()
{
$this->view->headLink()->appendStylesheet(Assets::url('css/styles.css'));
}
public function getLog()
{
$bootstrap = $this->getInvokeArg('bootstrap');
if (!$bootstrap->hasPluginResource('Log')) {
return false;
}
return $bootstrap->getResource('Log');
}
/**
* 404 error - route or controller.
*/
public function error404Action()
{
$this->_helper->viewRenderer('error');
$this->getResponse()->setHttpResponseCode(404);
$this->view->message = _('Page not found.');
}
/**
* 400 error - no such action.
*/
public function error400Action()
{
$this->_helper->viewRenderer('error-400');
$this->getResponse()->setHttpResponseCode(400);
$this->view->message = _('The requested action is not supported.');
}
/**
* 403 error - permission denied.
*/
public function error403Action()
{
$this->_helper->viewRenderer('error-403');
$this->getResponse()->setHttpResponseCode(403);
$this->view->message = _('You do not have permission to access this resource.');
}
/**
* 500 error - internal server error.
*/
public function error500Action()
{
$this->_helper->viewRenderer('error-500');
$this->getResponse()->setHttpResponseCode(500);
$this->view->message = _('An internal application error has occurred.');
}
}