diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-14 13:17:31 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-14 13:17:31 +0000 |
commit | f66ab8dae2f3d0418759f81a3a64dc9517a62449 (patch) | |
tree | fbff2135e7013f196b891bbde54618eb050e4aaf /application/forms/IcingaServiceSetForm.php | |
parent | Initial commit. (diff) | |
download | icingaweb2-module-director-f66ab8dae2f3d0418759f81a3a64dc9517a62449.tar.xz icingaweb2-module-director-f66ab8dae2f3d0418759f81a3a64dc9517a62449.zip |
Adding upstream version 1.10.2.upstream/1.10.2
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'application/forms/IcingaServiceSetForm.php')
-rw-r--r-- | application/forms/IcingaServiceSetForm.php | 135 |
1 files changed, 135 insertions, 0 deletions
diff --git a/application/forms/IcingaServiceSetForm.php b/application/forms/IcingaServiceSetForm.php new file mode 100644 index 0000000..21508d5 --- /dev/null +++ b/application/forms/IcingaServiceSetForm.php @@ -0,0 +1,135 @@ +<?php + +namespace Icinga\Module\Director\Forms; + +use Icinga\Module\Director\Objects\IcingaHost; +use Icinga\Module\Director\Web\Form\DirectorObjectForm; + +class IcingaServiceSetForm extends DirectorObjectForm +{ + protected $host; + + protected $listUrl = 'director/services/sets'; + + public function setup() + { + if ($this->host === null) { + $this->setupTemplate(); + } else { + $this->setupHost(); + } + + $this->setButtons(); + } + + protected function setupTemplate() + { + $this->addElement('text', 'object_name', [ + 'label' => $this->translate('Service set name'), + 'description' => $this->translate( + 'A short name identifying this set of services' + ), + 'required' => true, + ]) + ->eventuallyAddNameRestriction('director/service_set/filter-by-name') + ->addHidden('object_type', 'template') + ->addDescriptionElement() + ->addAssignmentElements(); + } + + protected function setObjectSuccessUrl() + { + if ($this->host) { + $this->setSuccessUrl( + 'director/host/services', + array('name' => $this->host->getObjectName()) + ); + } else { + parent::setObjectSuccessUrl(); + } + } + + protected function setupHost() + { + $object = $this->object(); + if ($this->hasBeenSent()) { + $object->set('object_name', $this->getSentValue('imports')); + $object->set('imports', $object->object_name); + } + + if (! $object->hasBeenLoadedFromDb()) { + $this->addSingleImportsElement(); + } + + if (count($object->get('imports'))) { + $description = $object->getResolvedProperty('description'); + if ($description) { + $this->addHtmlHint($description); + } + } + + $this->addHidden('object_type', 'object'); + $this->addHidden('host', $this->host->getObjectName()); + $this->groupMainProperties(); + } + + public function setHost(IcingaHost $host) + { + $this->host = $host; + return $this; + } + + protected function addSingleImportsElement() + { + $enum = $this->enumAllowedTemplates(); + + $this->addElement('select', 'imports', array( + 'label' => $this->translate('Service set'), + 'description' => $this->translate( + 'The service set that should be assigned to this host' + ), + 'required' => true, + 'multiOptions' => $this->optionallyAddFromEnum($enum), + 'class' => 'autosubmit' + )); + + return $this; + } + + protected function addDescriptionElement() + { + $this->addElement('textarea', 'description', array( + 'label' => $this->translate('Description'), + 'description' => $this->translate( + 'A meaningful description explaining your users what to expect' + . ' when assigning this set of services' + ), + 'rows' => '3', + 'required' => ! $this->isTemplate(), + )); + + return $this; + } + + protected function addAssignmentElements() + { + if (! $this->hasPermission('director/service_set/apply')) { + return $this; + } + + $this->addAssignFilter([ + 'suggestionContext' => 'HostFilterColumns', + 'description' => $this->translate( + 'This allows you to configure an assignment filter. Please feel' + . ' free to combine as many nested operators as you want. You' + . ' might also want to skip this, define it later and/or just' + . ' add this set of services to single hosts. 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; + } +} |