diff --git a/application/forms/Command/Object/AcknowledgeProblemForm.php b/application/forms/Command/Object/AcknowledgeProblemForm.php index 23098fbb..608b26b8 100644 --- a/application/forms/Command/Object/AcknowledgeProblemForm.php +++ b/application/forms/Command/Object/AcknowledgeProblemForm.php @@ -186,13 +186,11 @@ class AcknowledgeProblemForm extends CommandForm protected function getCommands(Traversable $objects): Traversable { - foreach ($objects as $object) { - if (! $this->isGrantedOn('icingadb/command/acknowledge-problem', $object)) { - continue; - } + $granted = $this->filterGrantedOn('icingadb/command/acknowledge-problem', $objects); + if ($granted->valid()) { $command = new AcknowledgeProblemCommand(); - $command->setObjects([$object]); + $command->setObjects($granted); $command->setComment($this->getValue('comment')); $command->setAuthor($this->getAuth()->getUser()->getUsername()); $command->setNotify($this->getElement('notify')->isChecked()); diff --git a/application/forms/Command/Object/AddCommentForm.php b/application/forms/Command/Object/AddCommentForm.php index 2cba0415..56dfbe53 100644 --- a/application/forms/Command/Object/AddCommentForm.php +++ b/application/forms/Command/Object/AddCommentForm.php @@ -141,13 +141,11 @@ class AddCommentForm extends CommandForm protected function getCommands(Traversable $objects): Traversable { - foreach ($objects as $object) { - if (! $this->isGrantedOn('icingadb/command/comment/add', $object)) { - continue; - } + $granted = $this->filterGrantedOn('icingadb/command/comment/add', $objects); + if ($granted->valid()) { $command = new AddCommentCommand(); - $command->setObjects([$object]); + $command->setObjects($granted); $command->setComment($this->getValue('comment')); $command->setAuthor($this->getAuth()->getUser()->getUsername()); diff --git a/application/forms/Command/Object/CheckNowForm.php b/application/forms/Command/Object/CheckNowForm.php index 288b164b..b7a506ce 100644 --- a/application/forms/Command/Object/CheckNowForm.php +++ b/application/forms/Command/Object/CheckNowForm.php @@ -4,6 +4,7 @@ namespace Icinga\Module\Icingadb\Forms\Command\Object; +use Generator; use Icinga\Module\Icingadb\Command\Object\ScheduleCheckCommand; use Icinga\Module\Icingadb\Forms\Command\CommandForm; use Icinga\Web\Notification; @@ -45,19 +46,23 @@ class CheckNowForm extends CommandForm protected function getCommands(Traversable $objects): Traversable { - foreach ($objects as $object) { - if ( - ! $this->isGrantedOn('icingadb/command/schedule-check', $object) - && ( - ! $object->active_checks_enabled - || ! $this->isGrantedOn('icingadb/command/schedule-check/active-only', $object) - ) - ) { - continue; + $granted = (function () use ($objects): Generator { + foreach ($objects as $object) { + if ( + $this->isGrantedOn('icingadb/command/schedule-check', $object) + || ( + $object->active_checks_enabled + && $this->isGrantedOn('icingadb/command/schedule-check/active-only', $object) + ) + ) { + yield $object; + } } + })(); + if ($granted->valid()) { $command = new ScheduleCheckCommand(); - $command->setObjects([$object]); + $command->setObjects($granted); $command->setCheckTime(time()); $command->setForced(); diff --git a/application/forms/Command/Object/ProcessCheckResultForm.php b/application/forms/Command/Object/ProcessCheckResultForm.php index e3fd1ab6..aee7c342 100644 --- a/application/forms/Command/Object/ProcessCheckResultForm.php +++ b/application/forms/Command/Object/ProcessCheckResultForm.php @@ -4,6 +4,7 @@ namespace Icinga\Module\Icingadb\Forms\Command\Object; +use Generator; use Icinga\Module\Icingadb\Command\Object\ProcessCheckResultCommand; use Icinga\Module\Icingadb\Forms\Command\CommandForm; use Icinga\Module\Icingadb\Model\Host; @@ -136,16 +137,17 @@ class ProcessCheckResultForm extends CommandForm protected function getCommands(Traversable $objects): Traversable { - foreach ($objects as $object) { - if ( - ! $object->passive_checks_enabled - || ! $this->isGrantedOn('icingadb/command/process-check-result', $object) - ) { - continue; + $granted = (function () use ($objects): Generator { + foreach ($this->filterGrantedOn('icingadb/command/process-check-result', $objects) as $object) { + if ($object->passive_checks_enabled) { + yield $object; + } } + })(); + if ($granted->valid()) { $command = new ProcessCheckResultCommand(); - $command->setObjects([$object]); + $command->setObjects($granted); $command->setStatus($this->getValue('status')); $command->setOutput($this->getValue('output')); $command->setPerformanceData($this->getValue('perfdata')); diff --git a/application/forms/Command/Object/RemoveAcknowledgementForm.php b/application/forms/Command/Object/RemoveAcknowledgementForm.php index 692f753e..29e9bd61 100644 --- a/application/forms/Command/Object/RemoveAcknowledgementForm.php +++ b/application/forms/Command/Object/RemoveAcknowledgementForm.php @@ -62,13 +62,11 @@ class RemoveAcknowledgementForm extends CommandForm protected function getCommands(Traversable $objects): Traversable { - foreach ($objects as $object) { - if (! $this->isGrantedOn('icingadb/command/remove-acknowledgement', $object)) { - continue; - } + $granted = $this->filterGrantedOn('icingadb/command/remove-acknowledgement', $objects); + if ($granted->valid()) { $command = new RemoveAcknowledgementCommand(); - $command->setObjects([$object]); + $command->setObjects($granted); $command->setAuthor($this->getAuth()->getUser()->getUsername()); yield $command; diff --git a/application/forms/Command/Object/ScheduleCheckForm.php b/application/forms/Command/Object/ScheduleCheckForm.php index b4b6e404..433b38a5 100644 --- a/application/forms/Command/Object/ScheduleCheckForm.php +++ b/application/forms/Command/Object/ScheduleCheckForm.php @@ -6,6 +6,7 @@ namespace Icinga\Module\Icingadb\Forms\Command\Object; use DateInterval; use DateTime; +use Generator; use Icinga\Module\Icingadb\Command\Object\ScheduleCheckCommand; use Icinga\Module\Icingadb\Forms\Command\CommandForm; use Icinga\Module\Icingadb\Model\Host; @@ -108,19 +109,23 @@ class ScheduleCheckForm extends CommandForm protected function getCommands(Traversable $objects): Traversable { - foreach ($objects as $object) { - if ( - ! $this->isGrantedOn('icingadb/command/schedule-check', $object) - && ( - ! $object->active_checks_enabled - || ! $this->isGrantedOn('icingadb/command/schedule-check/active-only', $object) - ) - ) { - continue; + $granted = (function () use ($objects): Generator { + foreach ($objects as $object) { + if ( + $this->isGrantedOn('icingadb/command/schedule-check', $object) + || ( + $object->active_checks_enabled + && $this->isGrantedOn('icingadb/command/schedule-check/active-only', $object) + ) + ) { + yield $object; + } } + })(); + if ($granted->valid()) { $command = new ScheduleCheckCommand(); - $command->setObjects([$object]); + $command->setObjects($granted); $command->setForced($this->getElement('force_check')->isChecked()); $command->setCheckTime($this->getValue('check_time')->getTimestamp()); diff --git a/application/forms/Command/Object/ScheduleHostDowntimeForm.php b/application/forms/Command/Object/ScheduleHostDowntimeForm.php index cbade08e..bc211143 100644 --- a/application/forms/Command/Object/ScheduleHostDowntimeForm.php +++ b/application/forms/Command/Object/ScheduleHostDowntimeForm.php @@ -89,11 +89,9 @@ class ScheduleHostDowntimeForm extends ScheduleServiceDowntimeForm protected function getCommands(Traversable $objects): Traversable { - foreach ($objects as $object) { - if (! $this->isGrantedOn('icingadb/command/downtime/schedule', $object)) { - continue; - } + $granted = $this->filterGrantedOn('icingadb/command/downtime/schedule', $objects); + if ($granted->valid()) { if (($childOptions = (int) $this->getValue('child_options'))) { $command = new PropagateHostDowntimeCommand(); $command->setTriggered($childOptions === 1); @@ -101,7 +99,7 @@ class ScheduleHostDowntimeForm extends ScheduleServiceDowntimeForm $command = new ScheduleHostDowntimeCommand(); } - $command->setObjects([$object]); + $command->setObjects($granted); $command->setComment($this->getValue('comment')); $command->setAuthor($this->getAuth()->getUser()->getUsername()); $command->setStart($this->getValue('start')->getTimestamp()); diff --git a/application/forms/Command/Object/ScheduleServiceDowntimeForm.php b/application/forms/Command/Object/ScheduleServiceDowntimeForm.php index 07eb793d..184a4e8b 100644 --- a/application/forms/Command/Object/ScheduleServiceDowntimeForm.php +++ b/application/forms/Command/Object/ScheduleServiceDowntimeForm.php @@ -244,13 +244,11 @@ class ScheduleServiceDowntimeForm extends CommandForm protected function getCommands(Traversable $objects): Traversable { - foreach ($objects as $object) { - if (! $this->isGrantedOn('icingadb/command/downtime/schedule', $object)) { - continue; - } + $granted = $this->filterGrantedOn('icingadb/command/downtime/schedule', $objects); + if ($granted->valid()) { $command = new ScheduleServiceDowntimeCommand(); - $command->setObjects([$object]); + $command->setObjects($granted); $command->setComment($this->getValue('comment')); $command->setAuthor($this->getAuth()->getUser()->getUsername()); $command->setStart($this->getValue('start')->getTimestamp()); diff --git a/application/forms/Command/Object/SendCustomNotificationForm.php b/application/forms/Command/Object/SendCustomNotificationForm.php index 483d49ce..d1d98179 100644 --- a/application/forms/Command/Object/SendCustomNotificationForm.php +++ b/application/forms/Command/Object/SendCustomNotificationForm.php @@ -108,13 +108,11 @@ class SendCustomNotificationForm extends CommandForm protected function getCommands(Traversable $objects): Traversable { - foreach ($objects as $object) { - if (! $this->isGrantedOn('icingadb/command/send-custom-notification', $object)) { - continue; - } + $granted = $this->filterGrantedOn('icingadb/command/send-custom-notification', $objects); + if ($granted->valid()) { $command = new SendCustomNotificationCommand(); - $command->setObjects([$object]); + $command->setObjects($granted); $command->setComment($this->getValue('comment')); $command->setForced($this->getElement('forced')->isChecked()); $command->setAuthor($this->getAuth()->getUser()->getUsername()); diff --git a/application/forms/Command/Object/ToggleObjectFeaturesForm.php b/application/forms/Command/Object/ToggleObjectFeaturesForm.php index 15bc6c11..50767da7 100644 --- a/application/forms/Command/Object/ToggleObjectFeaturesForm.php +++ b/application/forms/Command/Object/ToggleObjectFeaturesForm.php @@ -158,26 +158,24 @@ class ToggleObjectFeaturesForm extends CommandForm protected function getCommands(Traversable $objects): Traversable { - foreach ($objects as $object) { - foreach ($this->features as $feature => $spec) { - if ($this->getElement($feature) instanceof CheckboxElement) { - $featureState = $this->getElement($feature)->isChecked(); - } else { - $featureState = $this->getElement($feature)->getValue(); - } + foreach ($this->features as $feature => $spec) { + if ($this->getElement($feature) instanceof CheckboxElement) { + $state = $this->getElement($feature)->isChecked(); + } else { + $state = $this->getElement($feature)->getValue(); + } - if ( - ! $this->isGrantedOn($spec['permission'], $object) - || $featureState === self::LEAVE_UNCHANGED - || (int) $featureState === (int) $this->featureStatus[$feature] - ) { - continue; - } + if ($state === self::LEAVE_UNCHANGED || (int) $state === (int) $this->featureStatus[$feature]) { + continue; + } + $granted = $this->filterGrantedOn($spec['permission'], $objects); + + if ($granted->valid()) { $command = new ToggleObjectFeatureCommand(); - $command->setObjects([$object]); + $command->setObjects($granted); $command->setFeature($feature); - $command->setEnabled((int) $featureState); + $command->setEnabled((int) $state); $this->submittedFeatures[] = $command;