From: Matthias Schmidt Date: Sat, 11 Aug 2018 13:52:33 +0000 (+0200) Subject: Fix user option condition forms ignoring set default values X-Git-Tag: 3.0.17~4 X-Git-Url: https://git.stricted.de/?a=commitdiff_plain;h=9136409a56142b6d5990ea139c20174272929a11;p=GitHub%2FWoltLab%2FWCF.git Fix user option condition forms ignoring set default values --- diff --git a/wcfsetup/install/files/lib/system/option/MultiSelectOptionType.class.php b/wcfsetup/install/files/lib/system/option/MultiSelectOptionType.class.php index 45fc76b377..25701066e4 100644 --- a/wcfsetup/install/files/lib/system/option/MultiSelectOptionType.class.php +++ b/wcfsetup/install/files/lib/system/option/MultiSelectOptionType.class.php @@ -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 ]); diff --git a/wcfsetup/install/files/lib/system/option/RadioButtonOptionType.class.php b/wcfsetup/install/files/lib/system/option/RadioButtonOptionType.class.php index 60ccbed72a..841ded2b0c 100644 --- a/wcfsetup/install/files/lib/system/option/RadioButtonOptionType.class.php +++ b/wcfsetup/install/files/lib/system/option/RadioButtonOptionType.class.php @@ -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); } diff --git a/wcfsetup/install/files/lib/system/option/SelectOptionType.class.php b/wcfsetup/install/files/lib/system/option/SelectOptionType.class.php index 5c05a99cc6..206e9b501b 100644 --- a/wcfsetup/install/files/lib/system/option/SelectOptionType.class.php +++ b/wcfsetup/install/files/lib/system/option/SelectOptionType.class.php @@ -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 ]); diff --git a/wcfsetup/install/files/lib/system/option/TextOptionType.class.php b/wcfsetup/install/files/lib/system/option/TextOptionType.class.php index b18a448e47..5a7f86bb2a 100644 --- a/wcfsetup/install/files/lib/system/option/TextOptionType.class.php +++ b/wcfsetup/install/files/lib/system/option/TextOptionType.class.php @@ -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'); diff --git a/wcfsetup/install/files/lib/system/option/TextareaOptionType.class.php b/wcfsetup/install/files/lib/system/option/TextareaOptionType.class.php index 4d39541c5c..9ca87c3399 100644 --- a/wcfsetup/install/files/lib/system/option/TextareaOptionType.class.php +++ b/wcfsetup/install/files/lib/system/option/TextareaOptionType.class.php @@ -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'); diff --git a/wcfsetup/install/files/lib/system/option/user/UserOptionHandler.class.php b/wcfsetup/install/files/lib/system/option/user/UserOptionHandler.class.php index fe96fce25c..8aa6003ec1 100644 --- a/wcfsetup/install/files/lib/system/option/user/UserOptionHandler.class.php +++ b/wcfsetup/install/files/lib/system/option/user/UserOptionHandler.class.php @@ -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)); }