Fix user option condition forms ignoring set default values
authorMatthias Schmidt <gravatronics@live.com>
Sat, 11 Aug 2018 13:52:33 +0000 (15:52 +0200)
committerMatthias Schmidt <gravatronics@live.com>
Sat, 11 Aug 2018 13:52:33 +0000 (15:52 +0200)
wcfsetup/install/files/lib/system/option/MultiSelectOptionType.class.php
wcfsetup/install/files/lib/system/option/RadioButtonOptionType.class.php
wcfsetup/install/files/lib/system/option/SelectOptionType.class.php
wcfsetup/install/files/lib/system/option/TextOptionType.class.php
wcfsetup/install/files/lib/system/option/TextareaOptionType.class.php
wcfsetup/install/files/lib/system/option/user/UserOptionHandler.class.php

index 45fc76b3773d9ce2b0c07c9119eede5f6c09a59f..25701066e4c1606df2fab8735ece648da9965f11 100644 (file)
@@ -47,7 +47,7 @@ class MultiSelectOptionType extends SelectOptionType {
        public function getSearchFormElement(Option $option, $value) {
                WCF::getTPL()->assign([
                        'option' => $option,
-                       'searchOption' => $value !== null && ($value !== $option->defaultValue || isset($_POST['searchOptions'][$option->optionName])),
+                       'searchOption' => $this->forceSearchOption || ($value !== null && $value !== $option->defaultValue) || isset($_POST['searchOptions'][$option->optionName]),
                        'selectOptions' => $this->getSelectOptions($option),
                        'value' => !is_array($value) ? explode("\n", $value) : $value
                ]);
index 60ccbed72a698a8cb00a65e606463f046f7d2385..841ded2b0c12f79df46496458e715e75513c857d 100644 (file)
@@ -23,6 +23,12 @@ class RadioButtonOptionType extends AbstractOptionType implements ISearchableCon
         */
        public $templateName = 'radioButtonOptionType';
        
+       /**
+        * if `true`, the option is considered as being searched when generating the form element
+        * @var bool
+        */
+       public $forceSearchOption = false;
+       
        /**
         * @inheritDoc
         */
@@ -67,7 +73,10 @@ class RadioButtonOptionType extends AbstractOptionType implements ISearchableCon
         */
        public function getSearchFormElement(Option $option, $value) {
                $this->templateName = 'radioButtonSearchableOptionType';
-               WCF::getTPL()->assign('searchOption', $value !== null && ($value !== $option->defaultValue || isset($_POST['searchOptions'][$option->optionName])));
+               WCF::getTPL()->assign(
+                       'searchOption',
+                       $this->forceSearchOption || ($value !== null && $value !== $option->defaultValue) || isset($_POST['searchOptions'][$option->optionName])
+               );
                
                return $this->getFormElement($option, $value);
        }
index 5c05a99cc6a209e5f21f0fa073b5b83433fcb5bf..206e9b501b644644d14b7b9f39e67c68918fb9c9 100644 (file)
@@ -42,7 +42,7 @@ class SelectOptionType extends RadioButtonOptionType {
                        'disableOptions' => $options['disableOptions'],
                        'enableOptions' => $options['enableOptions'],
                        'option' => $option,
-                       'searchOption' => ($value !== null && $value !== $option->defaultValue) || isset($_POST['searchOptions'][$option->optionName]),
+                       'searchOption' => $this->forceSearchOption || ($value !== null && $value !== $option->defaultValue) || isset($_POST['searchOptions'][$option->optionName]),
                        'selectOptions' => $this->getSelectOptions($option),
                        'value' => $value
                ]);
index b18a448e474aa4a04ea3d315311eed59a53932b8..5a7f86bb2a8f9ea9517f1284dcdf41ad31d79ca1 100644 (file)
@@ -29,6 +29,12 @@ class TextOptionType extends AbstractOptionType implements ISearchableConditionU
         */
        protected $inputClass = 'long';
        
+       /**
+        * if `true`, the option is considered as being searched when generating the form element
+        * @var bool
+        */
+       public $forceSearchOption = false;
+       
        /**
         * @inheritDoc
         */
@@ -50,7 +56,7 @@ class TextOptionType extends AbstractOptionType implements ISearchableConditionU
                        'option' => $option,
                        'inputType' => $this->inputType,
                        'inputClass' => $this->inputClass,
-                       'searchOption' => $value !== null && ($value !== $option->defaultValue || isset($_POST['searchOptions'][$option->optionName])),
+                       'searchOption' => $this->forceSearchOption || ($value !== null && $value !== $option->defaultValue) || isset($_POST['searchOptions'][$option->optionName]),
                        'value' => $value
                ]);
                return WCF::getTPL()->fetch('textSearchableOptionType');
index 4d39541c5c4ea992b27ec9852c9c6fc721a1a9ca..9ca87c3399bc5b3ee4ae023eff1063870b6784ec 100644 (file)
@@ -30,7 +30,7 @@ class TextareaOptionType extends TextOptionType {
        public function getSearchFormElement(Option $option, $value) {
                WCF::getTPL()->assign([
                        'option' => $option,
-                       'searchOption' => $value !== null && ($value !== $option->defaultValue || isset($_POST['searchOptions'][$option->optionName])),
+                       'searchOption' => $this->forceSearchOption || ($value !== null && $value !== $option->defaultValue) || isset($_POST['searchOptions'][$option->optionName]),
                        'value' => $value
                ]);
                return WCF::getTPL()->fetch('textareaSearchableOptionType');
index fe96fce25c86f33a579349bdc7872301dc735c91..8aa6003ec1f00f91fa3e91099a7f6cc46063c2bf 100644 (file)
@@ -192,6 +192,24 @@ class UserOptionHandler extends OptionHandler {
         */
        protected function getFormElement($type, Option $option) {
                if ($this->searchMode) {
+                       $optionType = $this->getTypeObject($type);
+                       
+                       if ($this->conditionMode) {
+                               $hasProperty = property_exists($optionType, 'forceSearchOption');
+                               
+                               if ($hasProperty && isset($this->optionValues[$option->optionName])) {
+                                       $optionType->forceSearchOption = $this->optionValues[$option->optionName] == $option->defaultValue;
+                               }
+                               
+                               $element = $this->getTypeObject($type)->getSearchFormElement($option, (isset($this->optionValues[$option->optionName]) ? $this->optionValues[$option->optionName] : null));
+                               
+                               if ($hasProperty && isset($this->optionValues[$option->optionName])) {
+                                       $optionType->forceSearchOption = false;
+                               }
+                               
+                               return $element;
+                       }
+                       
                        /** @noinspection PhpUndefinedMethodInspection */
                        return $this->getTypeObject($type)->getSearchFormElement($option, (isset($this->optionValues[$option->optionName]) ? $this->optionValues[$option->optionName] : null));
                }