Autorefresh, custom headers and _render in ActionController

This commit is contained in:
Thomas Gelf 2014-03-04 11:37:54 +00:00
parent a4dbe96e53
commit 22e5ca34bc
1 changed files with 39 additions and 3 deletions

View File

@ -45,6 +45,7 @@ use Icinga\Web\Request;
use Icinga\File\Pdf;
use \DOMDocument;
use Icinga\Exception\ProgrammingError;
/**
* Base class for all core action controllers
@ -64,6 +65,8 @@ class ActionController extends Zend_Controller_Action
private $configs = array();
private $autorefreshInterval;
// TODO: This would look better if we had a ModuleActionController
public function Config($file = null)
{
@ -114,7 +117,12 @@ class ActionController extends Zend_Controller_Action
$this->view->tabs = new Tabs();
$this->init();
} else {
$this->redirectToLogin($this->getRequestUrl());
$url = $this->getRequestUrl();
if ($url === 'default/index/index') {
// TODO: We need our own router :p
$url = 'dashboard';
}
$this->redirectToLogin($url);
}
}
@ -196,6 +204,16 @@ class ActionController extends Zend_Controller_Action
return Translator::translate($text, $domain);
}
public function setAutorefreshInterval($interval)
{
if (! is_int($interval) || $interval < 1) {
throw new ProgrammingError(
'Setting autorefresh interval smaller than 1 second is not allowed'
);
}
$this->autorefreshInterval = $interval;
}
/**
* Redirect to the login path
*
@ -203,9 +221,12 @@ class ActionController extends Zend_Controller_Action
*
* @throws \Exception
*/
protected function redirectToLogin($afterLogin = '/index')
protected function redirectToLogin($afterLogin = '/dashboard')
{
$url = Url::fromPath('/authentication/login');
if ($this->getRequest()->isXmlHttpRequest()) {
$url->setParam('_render', 'layout');
/*
$this->_response->setHttpResponseCode(401);
$this->_helper->json(
array(
@ -213,8 +234,8 @@ class ActionController extends Zend_Controller_Action
'redirectTo' => Url::fromPath('/authentication/login')->getAbsoluteUrl()
)
);
*/
}
$url = Url::fromPath('/authentication/login');
$url->setParam('redirect', $afterLogin);
$this->redirectNow($url);
}
@ -263,6 +284,21 @@ class ActionController extends Zend_Controller_Action
if ($this->_request->isXmlHttpRequest() || $this->getParam('view') === 'compact') {
$this->_helper->layout()->setLayout('inline');
}
if ($this->view->title) {
if (preg_match('~[\r\n]~', $this->view->title)) {
// TODO: Innocent exception and error log for hack attempts
throw new Exception('No way, guy');
}
header('X-Icinga-Title: ' . $this->view->title . ' :: Icinga Web');
}
// TODO: _render=layout?
if ($this->getParam('_render') === 'layout') {
$this->_helper->layout()->setLayout('body');
header('X-Icinga-Container: layout');
}
if ($this->autorefreshInterval !== null) {
header('X-Icinga-Refresh: ' . $this->autorefreshInterval);
}
if ($user = $this->getRequest()->getUser()) {
// Cast preference app.showBenchmark to bool because preferences loaded from a preferences storage are
// always strings