diff --git a/application/controllers/ServicesController.php b/application/controllers/ServicesController.php index 035cb18f..4dc54da0 100644 --- a/application/controllers/ServicesController.php +++ b/application/controllers/ServicesController.php @@ -6,6 +6,10 @@ use Icinga\Module\Director\Web\Controller\ObjectsController; class ServicesController extends ObjectsController { + protected $multiEdit = array( + 'disabled' + ); + public function init() { parent::init(); diff --git a/library/Director/Web/Controller/ObjectsController.php b/library/Director/Web/Controller/ObjectsController.php index 9082e7c5..78bdb47d 100644 --- a/library/Director/Web/Controller/ObjectsController.php +++ b/library/Director/Web/Controller/ObjectsController.php @@ -164,7 +164,29 @@ abstract class ObjectsController extends ActionController } $formName = 'icinga' . $type; + $objects = $this->loadMultiObjectsFromParams(); $this->singleTab($this->translate('Multiple objects')); + + $this->view->title = sprintf( + $this->translate('Modify %d objects'), + count($objects) + ); + + $this->view->form = $form = $this->loadForm('IcingaMultiEdit') + ->setObjects($objects) + ->pickElementsFrom($this->loadForm($formName), $this->multiEdit); + if ($type === 'Service') { + $form->setListUrl('director/servicetemplate/hosts'); + } + + $form->handleRequest(); + $this->view->totalUndeployedChanges = $this->db() + ->countActivitiesSinceLastDeployedConfig(); + $this->setViewScript('objects/form'); + } + + protected function loadMultiObjectsFromParams() + { $filter = Filter::fromQueryString($this->params->toString()); $dummy = $this->dummyObject(); $objects = array(); @@ -174,24 +196,20 @@ abstract class ObjectsController extends ActionController /** @var $sub FilterChain */ foreach ($sub->filters() as $ex) { /** @var $ex FilterChain|FilterExpression */ - if ($ex->isExpression() && $ex->getColumn() === 'name') { - $name = $ex->getExpression(); - $objects[$name] = $dummy::load($name, $db); + $col = $ex->getColumn(); + if ($ex->isExpression()) { + if ($col === 'name') { + $name = $ex->getExpression(); + $objects[$name] = $dummy::load($name, $db); + } elseif ($col === 'id') { + $name = $ex->getExpression(); + $objects[$name] = $dummy::load(['id' => $name], $db); + } } } } - $this->view->title = sprintf( - $this->translate('Modify %d objects'), - count($objects) - ); - $this->view->form = $this->loadForm('IcingaMultiEdit') - ->setObjects($objects) - ->pickElementsFrom($this->loadForm($formName), $this->multiEdit) - ->handleRequest(); - $this->view->totalUndeployedChanges = $this->db() - ->countActivitiesSinceLastDeployedConfig(); - $this->setViewScript('objects/form'); + return $objects; } public function templatesAction()