icingaweb2-module-businessp.../application/forms/ProcessForm.php

205 lines
6 KiB
PHP
Raw Normal View History

2014-11-30 06:22:11 -05:00
<?php
2014-11-30 09:56:58 -05:00
namespace Icinga\Module\Businessprocess\Forms;
2014-11-30 06:22:11 -05:00
2014-11-30 09:56:58 -05:00
use Icinga\Module\Businessprocess\BpNode;
2017-01-11 08:04:45 -05:00
use Icinga\Module\Businessprocess\BpConfig;
use Icinga\Module\Businessprocess\Modification\ProcessChanges;
use Icinga\Module\Businessprocess\Web\Form\QuickForm;
use Icinga\Module\Monitoring\Backend\MonitoringBackend;
use Icinga\Web\Notification;
use Icinga\Web\Session\SessionNamespace;
2014-11-30 06:22:11 -05:00
class ProcessForm extends QuickForm
2014-11-30 06:22:11 -05:00
{
/** @var MonitoringBackend */
2014-11-30 06:22:11 -05:00
protected $backend;
2017-01-11 08:04:45 -05:00
/** @var BpConfig */
protected $bp;
2014-11-30 06:22:11 -05:00
/** @var BpNode */
2014-11-30 06:22:11 -05:00
protected $node;
protected $objectList = array();
protected $processList = array();
/** @var SessionNamespace */
2015-03-03 04:50:19 -05:00
protected $session;
2014-11-30 06:22:11 -05:00
public function setup()
{
2017-01-03 05:35:43 -05:00
if ($this->node === null) {
$this->addElement('text', 'name', array(
'label' => $this->translate('Name'),
'required' => true,
'description' => $this->translate(
'This is the unique identifier of this process'
),
));
} else {
$this->addHtml(
'<h2>' . $this->getView()->escape(
sprintf($this->translate('Modify "%s"'), $this->node->getAlias())
) . '</h2>'
);
}
2015-03-16 04:08:00 -04:00
$this->addElement('text', 'alias', array(
'label' => $this->translate('Title'),
'description' => $this->translate(
'Usually this title will be shown for this node. Equals name'
. ' if not given'
2015-03-16 04:08:00 -04:00
),
2014-11-30 06:22:11 -05:00
));
$this->addElement('select', 'operator', array(
'label' => $this->translate('Operator'),
'required' => true,
'multiOptions' => array(
2015-03-03 04:50:19 -05:00
'&' => $this->translate('AND'),
'|' => $this->translate('OR'),
'!' => $this->translate('NOT'),
2015-03-16 04:08:00 -04:00
'1' => $this->translate('MIN 1'),
'2' => $this->translate('MIN 2'),
'3' => $this->translate('MIN 3'),
'4' => $this->translate('MIN 4'),
'5' => $this->translate('MIN 5'),
'6' => $this->translate('MIN 6'),
'7' => $this->translate('MIN 7'),
'8' => $this->translate('MIN 8'),
'9' => $this->translate('MIN 9'),
)
));
$this->addElement('select', 'display', array(
'label' => $this->translate('Visualization'),
'required' => true,
'description' => $this->translate(
'Where to show this process'
),
'multiOptions' => array(
'1' => $this->translate('Toplevel Process'),
'0' => $this->translate('Subprocess only'),
2014-11-30 06:22:11 -05:00
)
));
2015-03-16 04:08:00 -04:00
$this->addElement('text', 'url', array(
'label' => $this->translate('Info URL'),
'description' => $this->translate(
'URL pointing to more information about this node'
)
2014-11-30 06:22:11 -05:00
));
2015-03-16 04:08:00 -04:00
2017-01-03 05:35:43 -05:00
if ($node = $this->node) {
if ($node->hasAlias()) {
$this->getElement('alias')->setValue($node->getAlias());
}
$this->getElement('operator')->setValue($node->getOperator());
$this->getElement('display')->setValue($node->getDisplay());
if ($node->hasInfoUrl()) {
$this->getElement('url')->setValue($node->getInfoUrl());
}
2016-12-09 08:49:39 -05:00
}
2014-11-30 06:22:11 -05:00
}
2016-12-09 08:49:39 -05:00
/**
* @param MonitoringBackend $backend
* @return $this
*/
public function setBackend(MonitoringBackend $backend)
{
$this->backend = $backend;
return $this;
2014-11-30 06:22:11 -05:00
}
2016-12-09 08:49:39 -05:00
/**
2017-01-11 08:04:45 -05:00
* @param BpConfig $process
2016-12-09 08:49:39 -05:00
* @return $this
*/
2017-01-11 08:04:45 -05:00
public function setProcess(BpConfig $process)
2014-11-30 06:22:11 -05:00
{
2016-12-09 08:49:39 -05:00
$this->bp = $process;
2015-02-06 19:25:37 -05:00
$this->setBackend($process->getBackend());
2014-11-30 06:22:11 -05:00
return $this;
}
2016-12-09 08:49:39 -05:00
/**
* @param BpNode $node
* @return $this
*/
public function setNode(BpNode $node)
2014-11-30 06:22:11 -05:00
{
$this->node = $node;
2016-12-09 08:49:39 -05:00
return $this;
}
2014-11-30 06:22:11 -05:00
2016-12-09 08:49:39 -05:00
/**
* @param SessionNamespace $session
* @return $this
*/
public function setSession(SessionNamespace $session)
{
$this->session = $session;
2014-11-30 06:22:11 -05:00
return $this;
}
public function onSuccess()
{
2016-12-09 08:49:39 -05:00
$changes = ProcessChanges::construct($this->bp, $this->session);
2015-03-16 04:08:00 -04:00
$modifications = array();
$alias = $this->getValue('alias');
$operator = $this->getValue('operator');
$display = $this->getValue('display');
$url = $this->getValue('url');
if (empty($url)) {
$url = null;
}
if (empty($alias)) {
$alias = null;
}
// TODO: rename
if ($node = $this->node) {
if ($display !== $node->getDisplay()) {
$modifications['display'] = $display;
}
if ($operator !== $node->getOperator()) {
$modifications['operator'] = $operator;
}
if ($url !== $node->getInfoUrl()) {
$modifications['infoUrl'] = $url;
}
if ($alias !== $node->getAlias()) {
$modifications['alias'] = $alias;
}
} else {
$modifications = array(
'display' => $display,
'operator' => $operator,
'infoUrl' => $url,
'alias' => $alias,
);
}
if (! empty($modifications)) {
2015-03-16 04:08:00 -04:00
if ($this->node === null) {
$changes->createNode($this->getValue('name'), $modifications);
} else {
$changes->modifyNode($this->node, $modifications);
}
Notification::success(
sprintf(
'Process %s has been modified',
2016-12-09 08:49:39 -05:00
$this->bp->getName()
2015-03-16 04:08:00 -04:00
)
);
}
parent::onSuccess();
2014-11-30 06:22:11 -05:00
}
}