summaryrefslogtreecommitdiffstats
path: root/application/controllers/HostsController.php
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--application/controllers/HostsController.php138
1 files changed, 138 insertions, 0 deletions
diff --git a/application/controllers/HostsController.php b/application/controllers/HostsController.php
new file mode 100644
index 0000000..0332072
--- /dev/null
+++ b/application/controllers/HostsController.php
@@ -0,0 +1,138 @@
+<?php
+
+namespace Icinga\Module\Director\Controllers;
+
+use gipfl\IcingaWeb2\Url;
+use Icinga\Data\Filter\Filter;
+use Icinga\Data\Filter\FilterChain;
+use Icinga\Data\Filter\FilterExpression;
+use Icinga\Module\Director\DirectorObject\Automation\ExportInterface;
+use Icinga\Module\Director\Forms\IcingaAddServiceForm;
+use Icinga\Module\Director\Forms\IcingaAddServiceSetForm;
+use Icinga\Module\Director\Objects\IcingaHost;
+use Icinga\Module\Director\Web\Controller\ObjectsController;
+use gipfl\IcingaWeb2\Link;
+
+class HostsController extends ObjectsController
+{
+ protected $multiEdit = array(
+ 'imports',
+ 'groups',
+ 'disabled'
+ );
+
+ protected function checkDirectorPermissions()
+ {
+ $this->assertPermission('director/hosts');
+ }
+
+ public function editAction()
+ {
+ $url = clone($this->getRequest()->getUrl());
+ $url->setPath('director/hosts/addservice');
+
+ $urlSet = clone($url);
+ $urlSet->setPath('director/hosts/addserviceset');
+
+ parent::editAction();
+
+ $this->actions()->add(Link::create(
+ $this->translate('Add Service'),
+ $url,
+ null,
+ ['class' => 'icon-plus']
+ ))->add(Link::create(
+ $this->translate('Add Service Set'),
+ $urlSet,
+ null,
+ ['class' => 'icon-plus']
+ ));
+ }
+
+ public function edittemplatesAction()
+ {
+ parent::editAction();
+
+ $objects = $this->loadMultiObjectsFromParams();
+ $names = [];
+ /** @var ExportInterface $object */
+ foreach ($objects as $object) {
+ $names[] = $object->getUniqueIdentifier();
+ }
+
+ $url = Url::fromPath('director/basket/add', [
+ 'type' => 'HostTemplate',
+ ]);
+
+ $url->getParams()->addValues('names', $names);
+
+ $this->actions()->add(Link::create(
+ $this->translate('Add to Basket'),
+ $url,
+ null,
+ ['class' => 'icon-tag']
+ ));
+ }
+
+ public function addserviceAction()
+ {
+ $this->addSingleTab($this->translate('Add Service'));
+ $filter = Filter::fromQueryString($this->params->toString());
+
+ $objects = array();
+ $db = $this->db();
+ /** @var $filter FilterChain */
+ foreach ($filter->filters() as $sub) {
+ /** @var $sub FilterChain */
+ foreach ($sub->filters() as $ex) {
+ /** @var $ex FilterChain|FilterExpression */
+ if ($ex->isExpression() && $ex->getColumn() === 'name') {
+ $name = $ex->getExpression();
+ $objects[$name] = IcingaHost::load($name, $db);
+ }
+ }
+ }
+ $this->addTitle(
+ $this->translate('Add service to %d hosts'),
+ count($objects)
+ );
+
+ $this->content()->add(
+ IcingaAddServiceForm::load()
+ ->setHosts($objects)
+ ->setDb($this->db())
+ ->handleRequest()
+ );
+ }
+
+ public function addservicesetAction()
+ {
+ $this->addSingleTab($this->translate('Add Service Set'));
+ $filter = Filter::fromQueryString($this->params->toString());
+
+ $objects = array();
+ $db = $this->db();
+ /** @var $filter FilterChain */
+ foreach ($filter->filters() as $sub) {
+ /** @var $sub FilterChain */
+ foreach ($sub->filters() as $ex) {
+ /** @var $ex FilterChain|FilterExpression */
+ if ($ex->isExpression() && $ex->getColumn() === 'name') {
+ $name = $ex->getExpression();
+ $objects[$name] = IcingaHost::load($name, $db);
+ }
+ }
+ }
+ $this->addTitle(
+ $this->translate('Add Service Set to %d hosts'),
+ count($objects)
+ );
+
+ $this->content()->add(
+ IcingaAddServiceSetForm::load()
+ ->setHosts($objects)
+ ->setDb($this->db())
+ ->handleRequest()
+ );
+ }
+}