icingaweb2-module-businessp.../library/Businessprocess/Web/Controller.php

273 lines
6.8 KiB
PHP
Raw Normal View History

<?php
namespace Icinga\Module\Businessprocess\Web;
use Icinga\Application\Icinga;
2017-01-11 08:04:45 -05:00
use Icinga\Module\Businessprocess\BpConfig;
use Icinga\Module\Businessprocess\Modification\ProcessChanges;
2015-03-16 04:08:00 -04:00
use Icinga\Module\Businessprocess\Storage\LegacyStorage;
use Icinga\Module\Businessprocess\Storage\Storage;
2016-11-22 09:28:37 -05:00
use Icinga\Module\Businessprocess\Web\Component\ActionBar;
use Icinga\Module\Businessprocess\Web\Component\Controls;
use Icinga\Module\Businessprocess\Web\Component\Content;
use Icinga\Module\Businessprocess\Web\Component\Tabs;
use Icinga\Module\Businessprocess\Web\Form\FormLoader;
2015-03-16 04:08:00 -04:00
use Icinga\Web\Controller as ModuleController;
use Icinga\Web\Notification;
use Icinga\Web\View;
use ipl\Html\Html;
2015-03-16 04:08:00 -04:00
class Controller extends ModuleController
{
2016-12-09 03:53:36 -05:00
/** @var View */
public $view;
2017-01-11 08:04:45 -05:00
/** @var BpConfig */
2015-11-17 09:47:29 -05:00
protected $bp;
2016-12-09 03:53:36 -05:00
/** @var Tabs */
protected $mytabs;
/** @var Storage */
2015-03-16 04:08:00 -04:00
private $storage;
/** @var bool */
protected $showFullscreen;
/** @var Url */
2015-03-16 04:08:00 -04:00
private $url;
public function init()
{
$m = Icinga::app()->getModuleManager();
if (! $m->hasLoaded('monitoring') && $m->hasInstalled('monitoring')) {
$m->loadModule('monitoring');
}
$this->controls();
$this->content();
$this->url();
$this->view->showFullscreen
= $this->showFullscreen
= (bool) $this->_helper->layout()->showFullscreen;
2015-03-16 04:08:00 -04:00
$this->view->compact = $this->params->get('view') === 'compact';
2017-01-08 17:09:01 -05:00
$this->setViewScript('default');
}
/**
* @return Url
*/
2015-03-16 04:08:00 -04:00
protected function url()
{
2015-03-16 04:08:00 -04:00
if ($this->url === null) {
$this->url = Url::fromPath(
$this->getRequest()->getUrl()->getPath()
)->setParams($this->params);
}
2015-03-16 04:08:00 -04:00
return $this->url;
}
/**
* @return ActionBar
*/
2016-11-22 09:28:37 -05:00
protected function actions()
{
if ($this->view->actions === null) {
$this->view->actions = new ActionBar();
2016-11-22 09:28:37 -05:00
}
return $this->view->actions;
}
2016-12-07 17:15:12 -05:00
/**
* @return Controls
*/
protected function controls()
{
if ($this->view->controls === null) {
$controls = $this->view->controls = new Controls();
2017-01-27 05:22:36 -05:00
if ($this->view->compact) {
$controls->getAttributes()->add('class', 'compact');
2017-01-27 05:22:36 -05:00
}
}
return $this->view->controls;
}
2016-11-29 09:32:56 -05:00
/**
* @return Content
*/
protected function content()
{
if ($this->view->content === null) {
$content = $this->view->content = new Content();
2017-01-27 05:22:36 -05:00
if ($this->view->compact) {
$content->getAttributes()->add('class', 'compact');
2017-01-27 05:22:36 -05:00
}
}
return $this->view->content;
}
2016-12-07 17:15:12 -05:00
/**
* @param $label
* @return Tabs
*/
protected function singleTab($label)
{
2016-12-09 03:53:36 -05:00
return $this->tabs()->add(
'tab',
array(
'label' => $label,
'url' => $this->getRequest()->getUrl()
)
)->activate('tab');
}
2016-12-07 17:15:12 -05:00
/**
* @return Tabs
*/
protected function defaultTab()
{
return $this->singleTab($this->translate('Business Process'));
}
2016-12-09 03:53:36 -05:00
/**
* @return Tabs
*/
protected function overviewTab()
{
return $this->tabs()->add(
'overview',
array(
'label' => $this->translate('Business Process'),
'url' => 'businessprocess'
)
)->activate('overview');
}
/**
* @return Tabs
*/
2015-03-16 04:08:00 -04:00
protected function tabs()
{
2016-12-09 03:53:36 -05:00
// Todo: do not add to view once all of them render controls()
if ($this->mytabs === null) {
$tabs = new Tabs();
//$this->controls()->add($tabs);
$this->mytabs = $tabs;
2015-03-16 04:08:00 -04:00
}
2016-12-09 03:53:36 -05:00
return $this->mytabs;
}
protected function session()
{
2014-11-30 09:56:58 -05:00
return $this->Window()->getSessionNamespace('businessprocess');
}
protected function setViewScript($name)
{
$this->_helper->viewRenderer->setNoController(true);
$this->_helper->viewRenderer->setScriptAction($name);
return $this;
}
2015-03-16 04:08:00 -04:00
protected function setTitle($title)
{
2015-03-16 04:08:00 -04:00
$args = func_get_args();
array_shift($args);
$this->view->title = vsprintf($title, $args);
return $this;
2015-03-16 04:08:00 -04:00
}
protected function addTitle($title)
{
$args = func_get_args();
array_shift($args);
$this->view->title = vsprintf($title, $args);
$this->controls()->add(Html::tag('h1', null, $this->view->title));
return $this;
}
2015-03-16 04:08:00 -04:00
protected function loadModifiedBpConfig()
{
$bp = $this->loadBpConfig();
$changes = ProcessChanges::construct($bp, $this->session());
if ($this->params->get('dismissChanges')) {
Notification::success(
sprintf(
$this->translate('%d pending change(s) have been dropped'),
$changes->count()
)
);
$changes->clear();
$this->redirectNow($this->url()->without('dismissChanges')->without('unlocked'));
}
$bp->applyChanges($changes);
return $bp;
}
protected function doNotRender()
{
$this->_helper->layout()->disableLayout();
$this->_helper->viewRenderer->setNoRender(true);
return $this;
}
2015-03-16 04:08:00 -04:00
protected function loadBpConfig()
{
$name = $this->params->get('config');
2015-03-16 04:08:00 -04:00
$storage = $this->storage();
2015-11-17 08:46:50 -05:00
if (! $storage->hasProcess($name)) {
$this->httpNotFound(
$this->translate('No such process config: "%s"'),
$name
);
}
2015-03-16 04:08:00 -04:00
$modifications = $this->session()->get('modifications', array());
if (array_key_exists($name, $modifications)) {
$bp = $storage->loadFromString($name, $modifications[$name]);
} else {
$bp = $storage->loadProcess($name);
}
// allow URL parameter to override configured state type
if (null !== ($stateType = $this->params->get('state_type'))) {
if ($stateType === 'soft') {
$bp->useSoftStates();
}
if ($stateType === 'hard') {
$bp->useHardStates();
}
}
2015-11-17 09:47:29 -05:00
$this->view->bpconfig = $this->bp = $bp;
2015-03-16 04:08:00 -04:00
$this->view->configName = $bp->getName();
return $bp;
}
2015-10-06 16:35:44 -04:00
public function loadForm($name)
{
return FormLoader::load($name, $this->Module());
}
/**
* @return LegacyStorage|Storage
*/
2015-03-16 04:08:00 -04:00
protected function storage()
{
if ($this->storage === null) {
$this->storage = new LegacyStorage(
$this->Config()->getSection('global')
);
}
return $this->storage;
}
}