summaryrefslogtreecommitdiffstats
path: root/application/forms/IcingaAddServiceSetForm.php
diff options
context:
space:
mode:
Diffstat (limited to 'application/forms/IcingaAddServiceSetForm.php')
-rw-r--r--application/forms/IcingaAddServiceSetForm.php123
1 files changed, 123 insertions, 0 deletions
diff --git a/application/forms/IcingaAddServiceSetForm.php b/application/forms/IcingaAddServiceSetForm.php
new file mode 100644
index 0000000..b889110
--- /dev/null
+++ b/application/forms/IcingaAddServiceSetForm.php
@@ -0,0 +1,123 @@
+<?php
+
+namespace Icinga\Module\Director\Forms;
+
+use Icinga\Module\Director\Objects\IcingaHost;
+use Icinga\Module\Director\Objects\IcingaServiceSet;
+use Icinga\Module\Director\Web\Form\DirectorObjectForm;
+
+class IcingaAddServiceSetForm extends DirectorObjectForm
+{
+ /** @var IcingaHost[] */
+ private $hosts;
+
+ /** @var IcingaHost */
+ private $host;
+
+ /** @var IcingaServiceSet */
+ protected $object;
+
+ protected $objectName = 'service_set';
+
+ protected $listUrl = 'director/services/sets';
+
+ public function setup()
+ {
+ if ($this->object === null) {
+ $this->object = IcingaServiceSet::create(
+ ['object_type' => 'object'],
+ $this->db
+ );
+ }
+
+ $object = $this->object();
+ if ($this->hasBeenSent()) {
+ $object->set('object_name', $this->getSentValue('imports'));
+ $object->set('imports', $object->getObjectName());
+ }
+
+ 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->setButtons();
+ }
+
+ protected function setObjectSuccessUrl()
+ {
+ if ($this->host) {
+ $this->setSuccessUrl(
+ 'director/host/services',
+ array('name' => $this->host->getObjectName())
+ );
+ } else {
+ parent::setObjectSuccessUrl();
+ }
+ }
+
+ public function setHost(IcingaHost $host)
+ {
+ $this->host = $host;
+ return $this;
+ }
+ /**
+ * @param IcingaHost[] $hosts
+ * @return $this
+ */
+ public function setHosts(array $hosts)
+ {
+ $this->hosts = $hosts;
+ 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'
+ ),
+ 'required' => true,
+ 'multiOptions' => $this->optionallyAddFromEnum($enum),
+ 'class' => 'autosubmit'
+ ));
+
+ return $this;
+ }
+
+ public function onSuccess()
+ {
+ if ($this->host !== null) {
+ $this->object->set('host_id', $this->host->get('id'));
+ parent::onSuccess();
+ return;
+ }
+
+ $plain = $this->object->toPlainObject();
+ $db = $this->object->getConnection();
+
+ foreach ($this->hosts as $host) {
+ IcingaServiceSet::fromPlainObject($plain, $db)
+ ->set('host_id', $host->get('id'))
+ ->store();
+ }
+
+ $msg = sprintf(
+ $this->translate('The Service Set "%s" has been added to %d hosts'),
+ $this->object->getObjectName(),
+ count($this->hosts)
+ );
+
+ $this->redirectOnSuccess($msg);
+ }
+}