diff options
Diffstat (limited to '')
-rw-r--r-- | application/forms/IcingaScheduledDowntimeForm.php | 133 |
1 files changed, 133 insertions, 0 deletions
diff --git a/application/forms/IcingaScheduledDowntimeForm.php b/application/forms/IcingaScheduledDowntimeForm.php new file mode 100644 index 0000000..b126d59 --- /dev/null +++ b/application/forms/IcingaScheduledDowntimeForm.php @@ -0,0 +1,133 @@ +<?php + +namespace Icinga\Module\Director\Forms; + +use Icinga\Module\Director\Web\Form\DirectorObjectForm; + +class IcingaScheduledDowntimeForm extends DirectorObjectForm +{ + /** + * @throws \Zend_Form_Exception + */ + public function setup() + { + if ($this->isTemplate()) { + $this->addElement('text', 'object_name', [ + 'label' => $this->translate('Template name'), + 'required' => true, + ]); + } else { + $this->addElement('text', 'object_name', [ + 'label' => $this->translate('Downtime name'), + 'required' => true, + ]); + } + + if ($this->object()->isApplyRule()) { + $this->eventuallyAddNameRestriction('director/scheduled-downtime/apply/filter-by-name'); + } + $this->addImportsElement(); + $this->addElement('text', 'author', [ + 'label' => $this->translate('Author'), + 'description' => $this->translate( + 'This name will show up as the author for ever related downtime' + . ' comment' + ), + 'required' => ! $this->isTemplate() + ]); + $this->addElement('textarea', 'comment', [ + 'label' => $this->translate('Comment'), + 'description' => $this->translate( + 'Every related downtime will show this comment' + ), + 'required' => ! $this->isTemplate(), + 'rows' => 4, + ]); + $this->addBoolean('fixed', [ + 'label' => $this->translate('Fixed'), + 'description' => $this->translate( + 'Whether this downtime is fixed or flexible. If unsure please' + . ' check the related documentation:' + . ' https://icinga.com/docs/icinga2/latest/doc/08-advanced-topics/#downtimes' + ), + 'required' => ! $this->isTemplate(), + ]); + $this->addElement('text', 'duration', [ + 'label' => $this->translate('Duration'), + 'description' => $this->translate( + 'How long the downtime lasts. Only has an effect for flexible' + . ' (non-fixed) downtimes. Time in seconds, supported suffixes' + . ' include ms (milliseconds), s (seconds), m (minutes),' + . ' h (hours) and d (days). To express "90 minutes" you might' + . ' want to write 1h 30m' + ) + ]); + $this->addDisabledElement(); + $this->addAssignmentElements(); + $this->setButtons(); + } + + + /** + * @return $this + * @throws \Zend_Form_Exception + */ + protected function addAssignmentElements() + { + if ($this->isTemplate()) { + return $this; + } + + $this->addElement('select', 'apply_to', [ + 'label' => $this->translate('Apply to'), + 'description' => $this->translate( + 'Whether this dependency should affect hosts or services' + ), + 'required' => true, + 'class' => 'autosubmit', + 'multiOptions' => $this->optionalEnum([ + 'host' => $this->translate('Hosts'), + 'service' => $this->translate('Services'), + ]) + ]); + + $applyTo = $this->getSentOrObjectValue('apply_to'); + + if (! $applyTo) { + return $this; + } + + if ($applyTo === 'host') { + $this->addBoolean('with_services', [ + 'label' => $this->translate('With Services'), + 'description' => $this->translate( + 'Whether Downtimes should also explicitly be scheduled for' + . ' all Services belonging to affected Hosts' + ) + ]); + } + + $suggestionContext = ucfirst($applyTo) . 'FilterColumns'; + $this->addAssignFilter([ + 'suggestionContext' => $suggestionContext, + 'required' => true, + 'description' => $this->translate( + 'This allows you to configure an assignment filter. Please feel' + . ' free to combine as many nested operators as you want. The' + . ' "contains" operator is valid for arrays only. Please use' + . ' wildcards and the = (equals) operator when searching for' + . ' partial string matches, like in *.example.com' + ) + ]); + + return $this; + } + + protected function setObjectSuccessUrl() + { + $this->setSuccessUrl( + 'director/scheduled-downtime', + $this->object()->getUrlParams() + ); + } +} |