3 namespace wcf\system\option
;
5 use wcf\data\option\Option
;
6 use wcf\data\user\User
;
7 use wcf\data\user\UserList
;
8 use wcf\system\database\util\PreparedStatementConditionBuilder
;
9 use wcf\system\exception\UserInputException
;
11 use wcf\util\StringUtil
;
14 * Option type implementation for textual input fields.
17 * @copyright 2001-2019 WoltLab GmbH
18 * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
20 class TextOptionType
extends AbstractOptionType
implements ISearchableConditionUserOption
26 protected $inputType = 'text';
32 protected $inputClass = 'long';
35 * if `true`, the option is considered as being searched when generating the form element
38 public $forceSearchOption = false;
43 public function getFormElement(Option
$option, $value)
45 WCF
::getTPL()->assign([
47 'inputType' => $this->inputType
,
48 'inputClass' => $this->inputClass
,
52 return WCF
::getTPL()->fetch('textOptionType');
58 public function getSearchFormElement(Option
$option, $value)
60 WCF
::getTPL()->assign([
62 'inputType' => $this->inputType
,
63 'inputClass' => $this->inputClass
,
64 'searchOption' => $this->forceSearchOption ||
($value !== null && $value !== $option->defaultValue
) ||
isset($_POST['searchOptions'][$option->optionName
]),
68 return WCF
::getTPL()->fetch('textSearchableOptionType');
74 public function getCondition(PreparedStatementConditionBuilder
&$conditions, Option
$option, $value)
76 if (!isset($_POST['searchOptions'][$option->optionName
])) {
80 $value = StringUtil
::trim($value ?
: '');
82 $conditions->add("option_value.userOption" . $option->optionID
. " = ?", ['']);
85 "option_value.userOption" . $option->optionID
. " LIKE ?",
86 ['%' . \addcslashes
($value, '_%') . '%']
96 public function validate(Option
$option, $newValue)
98 $newValue = $this->getContent($option, $newValue);
100 if ($option->minlength
!== null && $option->minlength
> \
mb_strlen($newValue)) {
101 throw new UserInputException($option->optionName
, 'tooShort');
103 if ($option->maxlength
!== null && $option->maxlength
< \
mb_strlen($newValue)) {
104 throw new UserInputException($option->optionName
, 'tooLong');
111 public function getData(Option
$option, $newValue)
113 return $this->getContent($option, $newValue);
117 * Tries to extract content from value.
119 * @param Option $option
120 * @param string $newValue
123 protected function getContent(Option
$option, $newValue)
125 if ($option->contentpattern
) {
126 if (\
preg_match('~' . $option->contentpattern
. '~', $newValue, $matches)) {
128 $newValue = \
implode('', $matches);
138 public function addCondition(UserList
$userList, Option
$option, $value)
140 $value = StringUtil
::trim($value);
142 $userList->getConditionBuilder()->add('user_option_value.userOption' . $option->optionID
. ' = ?', ['']);
144 $userList->getConditionBuilder()->add(
145 'user_option_value.userOption' . $option->optionID
. ' LIKE ?',
146 ['%' . \addcslashes
($value, '_%') . '%']
154 public function checkUser(User
$user, Option
$option, $value)
156 $value = StringUtil
::trim($value);
158 return $user->getUserOption($option->optionName
) == '';
160 return \
mb_stripos($user->getUserOption($option->optionName
), $value) !== false;
167 public function getConditionData(Option
$option, $newValue)
175 public function hideLabelInSearch()