featureStatus = $featureStatus; $this->features = [ ToggleObjectFeatureCommand::FEATURE_ACTIVE_CHECKS => [ 'label' => t('Active Checks'), 'permission' => 'icingadb/command/feature/object/active-checks' ], ToggleObjectFeatureCommand::FEATURE_PASSIVE_CHECKS => [ 'label' => t('Passive Checks'), 'permission' => 'icingadb/command/feature/object/passive-checks' ], ToggleObjectFeatureCommand::FEATURE_NOTIFICATIONS => [ 'label' => t('Notifications'), 'permission' => 'icingadb/command/feature/object/notifications' ], ToggleObjectFeatureCommand::FEATURE_EVENT_HANDLER => [ 'label' => t('Event Handler'), 'permission' => 'icingadb/command/feature/object/event-handler' ], ToggleObjectFeatureCommand::FEATURE_FLAP_DETECTION => [ 'label' => t('Flap Detection'), 'permission' => 'icingadb/command/feature/object/flap-detection' ] ]; $this->getAttributes()->add('class', 'object-features'); $this->on(self::ON_SUCCESS, function () { if ($this->errorOccurred) { return; } foreach ($this->submittedFeatures as $feature) { $enabled = $feature->getEnabled(); switch ($feature->getFeature()) { case ToggleObjectFeatureCommand::FEATURE_ACTIVE_CHECKS: if ($enabled) { $message = t('Enabled active checks successfully'); } else { $message = t('Disabled active checks successfully'); } break; case ToggleObjectFeatureCommand::FEATURE_PASSIVE_CHECKS: if ($enabled) { $message = t('Enabled passive checks successfully'); } else { $message = t('Disabled passive checks successfully'); } break; case ToggleObjectFeatureCommand::FEATURE_EVENT_HANDLER: if ($enabled) { $message = t('Enabled event handler successfully'); } else { $message = t('Disabled event handler checks successfully'); } break; case ToggleObjectFeatureCommand::FEATURE_FLAP_DETECTION: if ($enabled) { $message = t('Enabled flap detection successfully'); } else { $message = t('Disabled flap detection successfully'); } break; case ToggleObjectFeatureCommand::FEATURE_NOTIFICATIONS: if ($enabled) { $message = t('Enabled notifications successfully'); } else { $message = t('Disabled notifications successfully'); } break; default: $message = t('Invalid feature option'); break; } Notification::success($message); } }); } protected function assembleElements() { $decorator = new IcingaFormDecorator(); foreach ($this->features as $feature => $spec) { $options = [ 'class' => 'autosubmit', 'disabled' => $this->featureStatus instanceof Model ? ! $this->isGrantedOn($spec['permission'], $this->featureStatus) : false, 'label' => $spec['label'] ]; if ($this->featureStatus[$feature] === 2) { $this->addElement( 'select', $feature, $options + [ 'description' => t('Multiple Values'), 'options' => [ self::LEAVE_UNCHANGED => t('Leave Unchanged'), t('Disable All'), t('Enable All') ], 'value' => self::LEAVE_UNCHANGED ] ); $decorator->decorate($this->getElement($feature)); $this->getElement($feature) ->getWrapper() ->getAttributes() ->add('class', 'indeterminate'); } else { $options['value'] = (bool) $this->featureStatus[$feature]; $this->addElement('checkbox', $feature, $options); $decorator->decorate($this->getElement($feature)); } } } protected function assembleSubmitButton() { } protected function getCommand(Model $object): \Generator { foreach ($this->features as $feature => $spec) { if ($this->getElement($feature) instanceof CheckboxElement) { $featureState = $this->getElement($feature)->isChecked(); } else { $featureState = $this->getElement($feature)->getValue(); } if ( ! $this->isGrantedOn($spec['permission'], $object) || $featureState === self::LEAVE_UNCHANGED || (int) $featureState === (int) $this->featureStatus[$feature] ) { continue; } $command = new ToggleObjectFeatureCommand(); $command->setObject($object); $command->setFeature($feature); $command->setEnabled((int) $featureState); $this->submittedFeatures[] = $command; yield $command; } } }