From d348d95e5e423b785a20df1af6de304674e32234 Mon Sep 17 00:00:00 2001 From: Johannes Meyer Date: Mon, 23 Oct 2017 13:58:04 +0200 Subject: [PATCH 1/2] Revert "Form: Don't prevent disabled elements from getting overwritten.." This reverts commit eb343009bb696e155897dda4decef532242cf9fa. refs #2998 --- library/Icinga/Web/Form.php | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/library/Icinga/Web/Form.php b/library/Icinga/Web/Form.php index 27450b344..df98e6a92 100644 --- a/library/Icinga/Web/Form.php +++ b/library/Icinga/Web/Form.php @@ -1102,22 +1102,21 @@ class Form extends Zend_Form * * @param Zend_Form $form * @param array $defaults - * @param bool $ignoreDisabled */ - protected function preserveDefaults(Zend_Form $form, array & $defaults, $ignoreDisabled = true) + protected function preserveDefaults(Zend_Form $form, array & $defaults) { foreach ($form->getElements() as $name => $element) { if ((array_key_exists($name, $defaults) && array_key_exists($name . static::DEFAULT_SUFFIX, $defaults) && $defaults[$name] === $defaults[$name . static::DEFAULT_SUFFIX]) - || (! $ignoreDisabled && $element->getAttrib('disabled')) + || $element->getAttrib('disabled') ) { unset($defaults[$name]); } } foreach ($form->getSubForms() as $_ => $subForm) { - $this->preserveDefaults($subForm, $defaults, $ignoreDisabled); + $this->preserveDefaults($subForm, $defaults); } } @@ -1144,11 +1143,6 @@ class Form extends Zend_Form if (($frameUpload = (bool) $request->getUrl()->shift('_frameUpload', false))) { $this->getView()->layout()->setLayout('wrapped'); } - - // To prevent a BC, this is here. The proper fix is to extend populate() - // and pass $ignoreDisabled through to preserveDefaults() - $this->create($formData)->preserveDefaults($this, $formData, false); - $this->populate($formData); // Necessary to get isSubmitted() to work if (! $this->getSubmitLabel() || $this->isSubmitted()) { if ($this->isValid($formData) From 2e1bac81fff8c6ef6192ad546916314570477c38 Mon Sep 17 00:00:00 2001 From: Johannes Meyer Date: Mon, 23 Oct 2017 14:51:09 +0200 Subject: [PATCH 2/2] Form: Create the form as part of method `setDefaults' We don't care anymore about the BC in Zend version 1.12.7. Hence we'll happily override setDefaults now. Yay! refs #2998 --- library/Icinga/Web/Form.php | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/library/Icinga/Web/Form.php b/library/Icinga/Web/Form.php index df98e6a92..08b66f933 100644 --- a/library/Icinga/Web/Form.php +++ b/library/Icinga/Web/Form.php @@ -19,18 +19,6 @@ use Icinga\Web\Form\Element\CsrfCounterMeasure; /** * Base class for forms providing CSRF protection, confirmation logic and auto submission * - * @method $this setDefaults(array $defaults) { - * Use `Form::populate()' for setting default values for elements instead because `Form::setDefaults()' does not - * create the form via `Form::create()'. - * - * Due to a BC introduced with https://github.com/mhujer/zf1/commit/244e3d3f88a363ee0ca49cf63eee31f925f515cd - * we cannot override this function without running into a strict standards violation on Zend version 1.12.7. - * - * @param array $defaults - * - * @return $this - * } - * * @method \Zend_Form_Element[] getElements() { * {@inheritdoc} * @return \Zend_Form_Element[] @@ -1083,6 +1071,21 @@ class Form extends Zend_Form return $this; } + /** + * {@inheritdoc} + * + * Creates the form if not created yet. + * + * @param array $values + * + * @return $this + */ + public function setDefaults(array $values) + { + $this->create($values); + return parent::setDefaults($values); + } + /** * Populate the elements with the given values *