summaryrefslogtreecommitdiffstats
path: root/application/forms/BasketForm.php
diff options
context:
space:
mode:
Diffstat (limited to 'application/forms/BasketForm.php')
-rw-r--r--application/forms/BasketForm.php147
1 files changed, 147 insertions, 0 deletions
diff --git a/application/forms/BasketForm.php b/application/forms/BasketForm.php
new file mode 100644
index 0000000..8ff6cca
--- /dev/null
+++ b/application/forms/BasketForm.php
@@ -0,0 +1,147 @@
+<?php
+
+namespace Icinga\Module\Director\Forms;
+
+use Icinga\Module\Director\Data\Db\DbObject;
+use Icinga\Module\Director\DirectorObject\Automation\Basket;
+use Icinga\Module\Director\Web\Form\DirectorObjectForm;
+use Zend_Form_SubForm as ZfSubForm;
+
+class BasketForm extends DirectorObjectForm
+{
+ protected $listUrl = 'director/baskets';
+
+ protected function getAvailableTypes()
+ {
+ return [
+ 'Command' => $this->translate('Command Definitions'),
+ 'ExternalCommand' => $this->translate('External Command Definitions'),
+ 'CommandTemplate' => $this->translate('Command Template'),
+ 'HostGroup' => $this->translate('Host Group'),
+ 'IcingaTemplateChoiceHost' => $this->translate('Host Template Choice'),
+ 'HostTemplate' => $this->translate('Host Templates'),
+ 'ServiceGroup' => $this->translate('Service Groups'),
+ 'IcingaTemplateChoiceService' => $this->translate('Service Template Choice'),
+ 'ServiceTemplate' => $this->translate('Service Templates'),
+ 'ServiceSet' => $this->translate('Service Sets'),
+ 'UserGroup' => $this->translate('User Groups'),
+ 'UserTemplate' => $this->translate('User Templates'),
+ 'User' => $this->translate('Users'),
+ 'NotificationTemplate' => $this->translate('Notification Templates'),
+ 'Notification' => $this->translate('Notifications'),
+ 'TimePeriod' => $this->translate('Time Periods'),
+ 'Dependency' => $this->translate('Dependencies'),
+ 'DataList' => $this->translate('Data Lists'),
+ 'ImportSource' => $this->translate('Import Sources'),
+ 'SyncRule' => $this->translate('Sync Rules'),
+ 'DirectorJob' => $this->translate('Job Definitions'),
+ 'Basket' => $this->translate('Basket Definitions'),
+ ];
+ }
+
+ /**
+ * @throws \Zend_Form_Exception
+ */
+ public function setup()
+ {
+ $this->addElement('text', 'basket_name', [
+ 'label' => $this->translate('Basket Name'),
+ 'required' => true,
+ ]);
+
+ $types = $this->getAvailableTypes();
+
+ $options = [
+ 'IGNORE' => $this->translate('Ignore'),
+ 'ALL' => $this->translate('All of them'),
+ '[]' => $this->translate('Custom Selection'),
+ ];
+
+ $this->addHtmlHint($this->translate(
+ 'What should we place into this Basket every time we create'
+ . ' new snapshot?'
+ ));
+
+ $sub = new ZfSubForm();
+ $sub->setDecorators([
+ ['HtmlTag', ['tag' => 'dl']],
+ 'FormElements'
+ ]);
+
+ foreach ($types as $name => $label) {
+ $sub->addElement('select', $name, [
+ 'label' => $label,
+ 'multiOptions' => $options,
+ ]);
+ }
+
+ $this->addSubForm($sub, 'objects');
+ $this->addDeleteButton();
+
+ $this->addHtmlHint($this->translate(
+ 'Choose "All" to always add all of them,'
+ . ' "Ignore" to not care about a specific Type at all and'
+ . ' opt for "Custom Selection" in case you want to choose'
+ . ' just some specific Objects.'
+ ));
+ }
+
+ protected function setDefaultsFromObject(DbObject $object)
+ {
+ parent::setDefaultsFromObject($object);
+ /** @var Basket $object */
+ $values = [];
+ foreach ($this->getAvailableTypes() as $type => $label) {
+ $values[$type] = 'IGNORE';
+ }
+ foreach ($object->getChosenObjects() as $type => $selection) {
+ if ($selection === true) {
+ $values[$type] = 'ALL';
+ } elseif (is_array($selection)) {
+ $values[$type] = '[]';
+ }
+ }
+
+ $this->populate([
+ 'objects' => $values
+ ]);
+ }
+
+ protected function onRequest()
+ {
+ parent::onRequest(); // TODO: Change the autogenerated stub
+ }
+
+ protected function getObjectClassname()
+ {
+ return Basket::class;
+ }
+
+ public function onSuccess()
+ {
+ /** @var Basket $basket */
+ $basket = $this->object();
+
+ if ($basket->isEmpty()) {
+ $this->addError($this->translate("It's not allowed to store an empty basket"));
+
+ return;
+ }
+ if (! $basket->hasBeenLoadedFromDb()) {
+ $basket->set('owner_type', 'user');
+ $basket->set('owner_value', $this->getAuth()->getUser()->getUsername());
+ }
+
+ parent::onSuccess();
+ }
+
+ protected function setObjectSuccessUrl()
+ {
+ /** @var Basket $basket */
+ $basket = $this->object();
+ $this->setSuccessUrl(
+ 'director/basket',
+ ['name' => $basket->get('basket_name')]
+ );
+ }
+}