From 791a0286b844281a146cd1945ca6d40c193c6758 Mon Sep 17 00:00:00 2001 From: Thomas Gelf Date: Fri, 9 Dec 2016 14:05:58 +0100 Subject: [PATCH] BpConfigForm: deal with new Metadata object --- application/forms/BpConfigForm.php | 112 ++++++++++++++--------------- 1 file changed, 54 insertions(+), 58 deletions(-) diff --git a/application/forms/BpConfigForm.php b/application/forms/BpConfigForm.php index 5382673..8fed728 100644 --- a/application/forms/BpConfigForm.php +++ b/application/forms/BpConfigForm.php @@ -3,18 +3,19 @@ namespace Icinga\Module\Businessprocess\Forms; use Icinga\Application\Config; +use Icinga\Authentication\Auth; use Icinga\Module\Businessprocess\BusinessProcess; +use Icinga\Module\Businessprocess\Storage\Storage; use Icinga\Module\Businessprocess\Web\Form\QuickForm; -use Icinga\Web\Notification; -use Icinga\Web\Request; -use Icinga\Web\Url; class BpConfigForm extends QuickForm { + /** @var Storage */ protected $storage; protected $backend; + /** @var BusinessProcess */ protected $config; protected $node; @@ -27,16 +28,15 @@ class BpConfigForm extends QuickForm public function setup() { - $this->addElement('text', 'name', array( - 'label' => $this->translate('Name'), + 'label' => $this->translate('Name'), 'required' => true, 'description' => $this->translate( 'This is the unique identifier of this process' ), )); - $this->addElement('text', 'title', array( + $this->addElement('text', 'Title', array( 'label' => $this->translate('Title'), 'description' => $this->translate( 'Usually this title will be shown for this process. Equals name' @@ -44,7 +44,15 @@ class BpConfigForm extends QuickForm ), )); - $this->addElement('select', 'backend_name', array( + $this->addElement('textarea', 'Description', array( + 'label' => $this->translate('Description'), + 'description' => $this->translate( + 'A slightly more detailed description for this process, about 100-150 characters long ' + ), + 'rows' => 4, + )); + + $this->addElement('select', 'Backend', array( 'label' => $this->translate('Backend'), 'description' => $this->translate( 'Icinga Web Monitoring Backend where current object states for' @@ -55,15 +63,27 @@ class BpConfigForm extends QuickForm ) + $this->listAvailableBackends() )); - $this->addElement('select', 'state_type', array( + $this->addElement('select', 'Statetype', array( 'label' => $this->translate('State Type'), 'required' => true, 'description' => $this->translate( 'Whether this process should be based on Icinga hard or soft states' ), 'multiOptions' => array( - 'hard' => $this->translate('Use HARD states'), 'soft' => $this->translate('Use SOFT states'), + 'hard' => $this->translate('Use HARD states'), + ) + )); + + $this->addElement('select', 'AddToMenu', array( + 'label' => $this->translate('Add to menu'), + 'required' => true, + 'description' => $this->translate( + 'Whether this process should be linked in the main Icinga Web 2 menu' + ), + 'multiOptions' => array( + 'yes' => $this->translate('Yes'), + 'no' => $this->translate('No'), ) )); @@ -74,28 +94,20 @@ class BpConfigForm extends QuickForm } else { $config = $this->config; + $meta = $config->getMetadata(); + foreach ($meta->getProperties() as $k => $v) { + if ($el = $this->getElement($k)) { + $el->setValue($v); + } + } $this->getElement('name') ->setValue($config->getName()) ->setAttrib('readonly', true); - if ($config->hasTitle()) { - $this->getElement('title')->setValue($config->getTitle()); - } - - if ($config->hasBackend()) { - $this->getElement('backend_name')->setValue( - $config->getBackend()->getName() - ); - } - if ($config->usesSoftStates()) { - $this->getElement('state_type')->setValue('soft'); - } else { - $this->getElement('state_type')->setValue('hard'); - } - $this->setSubmitLabel( $this->translate('Store') ); + $label = $this->translate('Delete'); $el = $this->createElement('submit', $label) ->setLabel($label) @@ -121,7 +133,6 @@ class BpConfigForm extends QuickForm { $this->config = $config; return $this; - return $this; } protected function onRequest() @@ -138,53 +149,38 @@ class BpConfigForm extends QuickForm public function onSuccess() { - $name = $this->getValue('name'); - $title = $this->getValue('title'); - $backend = $this->getValue('backend'); + $name = $this->getValue('name'); if ($this->config === null) { // New config $config = new BusinessProcess(); $config->setName($name); - if ($title) { - $config->setTitle($title); - } - if ($backend) { - $config->setBackendName($backend); - } - if ($this->getValue('state_type') === 'soft') { - $config->useSoftStates(); - } else { - $config->useHardStates(); - } - $this->storage->storeProcess($config); - $config->clearAppliedChanges(); + $config->getMetadata()->set('Owner', Auth::getInstance()->getUser()->getUsername()); $this->setSuccessUrl( $this->getSuccessUrl()->setParams( array('config' => $name, 'unlocked' => true) ) ); + $this->setSuccessMessage(sprintf('Process %s has been created', $name)); - $this->redirectOnSuccess(sprintf('Process %s has been created', $name)); } else { $config = $this->config; - if ($title) { - $config->setTitle($title); - } - if ($backend) { - $config->setBackendName($backend); - } - if ($this->getValue('state_type') === 'soft') { - $config->useSoftStates(); - } else { - $config->useHardStates(); - } - - $this->storage->storeProcess($config); - $config->clearAppliedChanges(); - $this->getSuccessUrl()->setParam('config', $name); - Notification::success(sprintf('Process %s has been stored', $name)); + $this->setSuccessMessage(sprintf('Process %s has been stored', $name)); } + $meta = $config->getMetadata(); + foreach ($this->getValues() as $key => $value) { + if ($value === null || $value === '') { + continue; + } + if ($meta->hasKey($key)) { + $meta->set($key, $value); + } + } + + $this->storage->storeProcess($config); + $config->clearAppliedChanges(); + $this->setSuccessUrl('businessprocess/process/show', array('config' => $name)); + parent::onSuccess(); } public function hasDeleteButton()