121 lines
3.9 KiB
PHP
121 lines
3.9 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 = Application_Common_OsPath::getBaseDir() . '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()
|
|
{
|
|
$CC_CONFIG = Config::getConfig();
|
|
$staticBaseDir = Application_Common_OsPath::formatDirectoryWithDirectorySeparators($CC_CONFIG['staticBaseDir']);
|
|
$this->view->headLink()->appendStylesheet($staticBaseDir . 'css/styles.css?' . $CC_CONFIG['airtime_version']);
|
|
}
|
|
|
|
public function getLog() {
|
|
$bootstrap = $this->getInvokeArg('bootstrap');
|
|
if (!$bootstrap->hasPluginResource('Log')) {
|
|
return false;
|
|
}
|
|
$log = $bootstrap->getResource('Log');
|
|
|
|
return $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.');
|
|
}
|
|
}
|