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

137 lines
4 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
use Icinga\Module\Businessprocess\MonitoredNode;
2015-03-16 04:08:00 -04:00
use Icinga\Module\Businessprocess\Simulation;
use Icinga\Module\Businessprocess\Web\Form\QuickForm;
2014-11-30 06:22:11 -05:00
class SimulationForm extends QuickForm
2014-11-30 06:22:11 -05:00
{
/** @var MonitoredNode */
2014-11-30 06:22:11 -05:00
protected $node;
/** @var MonitoredNode */
protected $simulatedNode;
2014-11-30 06:22:11 -05:00
/** @var Simulation */
protected $simulation;
2014-11-30 06:22:11 -05:00
public function setup()
{
2016-11-30 08:35:58 -05:00
$states = $this->enumStateNames();
// TODO: Fetch state from object
if ($this->simulatedNode) {
$simulatedState = $this->simulatedNode->getState();
$states[$simulatedState] = sprintf(
'%s (%s)',
2016-11-30 08:35:58 -05:00
$this->node->getStateName($simulatedState),
$this->translate('Current simulation')
);
$node = $this->simulatedNode;
2016-11-30 08:35:58 -05:00
$hasSimulation = true;
} else {
2016-11-30 08:35:58 -05:00
$hasSimulation = false;
$node = $this->node;
}
2016-11-30 08:35:58 -05:00
$view = $this->getView();
if ($hasSimulation) {
$title = $this->translate('Modify simulation for %s');
} else {
$title = $this->translate('Add simulation for %s');
}
$this->addHtml(
'<h2>'
. $view->escape(sprintf($title, $node->getAlias()))
. '</h2>'
);
2014-11-30 06:22:11 -05:00
$this->addElement('select', 'state', array(
'label' => $this->translate('State'),
'multiOptions' => $states,
'class' => 'autosubmit',
'value' => $this->simulatedNode ? $node->getState() : null,
2014-11-30 06:22:11 -05:00
));
$sentState = $this->getSentValue('state');
if (in_array($sentState, array('0', '99'))) {
2016-11-30 08:35:58 -05:00
return;
}
if ($hasSimulation || ($sentState !== null && ctype_digit($sentState))) {
$this->addElement('checkbox', 'acknowledged', array(
'label' => $this->translate('Acknowledged'),
'value' => $node->isAcknowledged(),
));
2014-11-30 06:22:11 -05:00
$this->addElement('checkbox', 'in_downtime', array(
'label' => $this->translate('In downtime'),
'value' => $node->isInDowntime(),
));
}
2014-11-30 06:22:11 -05:00
$this->setSubmitLabel($this->translate('Apply'));
2014-11-30 06:22:11 -05:00
}
public function setNode($node)
{
$this->node = $node;
return $this;
2014-11-30 06:22:11 -05:00
}
public function setSimulation(Simulation $simulation)
2014-11-30 06:22:11 -05:00
{
2015-03-16 04:08:00 -04:00
$this->simulation = $simulation;
2014-11-30 06:22:11 -05:00
2016-11-30 08:35:58 -05:00
$name = $this->node->getName();
if ($simulation->hasNode($name)) {
$this->simulatedNode = clone($this->node);
2016-11-30 08:35:58 -05:00
$s = $simulation->getNode($name);
$this->simulatedNode->setState($s->state)
->setAck($s->acknowledged)
->setDowntime($s->in_downtime)
->setMissing(false);
2014-11-30 06:22:11 -05:00
}
2014-11-30 06:22:11 -05:00
return $this;
}
public function onSuccess()
{
2016-11-30 08:35:58 -05:00
$nodeName = $this->node->getName();
$state = $this->getValue('state');
2014-11-30 06:22:11 -05:00
if ($state !== null && ctype_digit($state)) {
$this->notifySuccess($this->translate('Simulation has been set'));
$this->simulation->set($nodeName, (object) array(
2014-11-30 06:22:11 -05:00
'state' => $this->getValue('state'),
'acknowledged' => $this->getValue('acknowledged'),
2015-03-16 04:08:00 -04:00
'in_downtime' => $this->getValue('in_downtime'),
));
} else {
if ($this->simulation->remove($nodeName)) {
$this->notifySuccess($this->translate('Simulation has been removed'));
}
2014-11-30 06:22:11 -05:00
}
parent::onSuccess();
2014-11-30 06:22:11 -05:00
}
2016-11-30 08:35:58 -05:00
/**
* @return array
*/
protected function enumStateNames()
{
$states = array(
null => sprintf(
$this->translate('Use current state (%s)'),
$this->translate($this->node->getStateName())
)
) + $this->node->enumStateNames();
return $states;
}
2014-11-30 06:22:11 -05:00
}