Commit | Line | Data |
---|---|---|
158bd3ca TD |
1 | <?php |
2 | namespace wcf\system\option; | |
3 | use wcf\data\option\Option; | |
4 | use wcf\system\database\util\PreparedStatementConditionBuilder; | |
158bd3ca | 5 | use wcf\system\exception\UserInputException; |
245b5797 | 6 | use wcf\system\WCF; |
158bd3ca | 7 | use wcf\util\ArrayUtil; |
158bd3ca TD |
8 | |
9 | /** | |
a17de04e MS |
10 | * Option type implementation for multiple select lists. |
11 | * | |
158bd3ca | 12 | * @author Marcel Werk |
ca4ba303 | 13 | * @copyright 2001-2014 WoltLab GmbH |
158bd3ca TD |
14 | * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php> |
15 | * @package com.woltlab.wcf | |
16 | * @subpackage system.option | |
9f959ced | 17 | * @category Community Framework |
158bd3ca | 18 | */ |
79d5661c | 19 | class MultiSelectOptionType extends SelectOptionType { |
158bd3ca | 20 | /** |
0ad90fc3 | 21 | * @see \wcf\system\option\IOptionType::getFormElement() |
158bd3ca | 22 | */ |
38aacf8b | 23 | public function getFormElement(Option $option, $value) { |
158bd3ca | 24 | WCF::getTPL()->assign(array( |
38aacf8b MW |
25 | 'option' => $option, |
26 | 'selectOptions' => $option->parseSelectOptions(), | |
718bafcf | 27 | 'value' => (!is_array($value) ? explode("\n", $value) : $value) |
158bd3ca | 28 | )); |
79d5661c | 29 | return WCF::getTPL()->fetch('multiSelectOptionType'); |
158bd3ca TD |
30 | } |
31 | ||
567b90a3 MS |
32 | /** |
33 | * @see \wcf\system\option\ISearchableUserOption::getSearchFormElement() | |
34 | */ | |
35 | public function getSearchFormElement(Option $option, $value) { | |
36 | WCF::getTPL()->assign(array( | |
37 | 'option' => $option, | |
38 | 'searchOption' => isset($_POST['searchOptions'][$option->optionName]), | |
39 | 'selectOptions' => $option->parseSelectOptions(), | |
40 | 'value' => (!is_array($value) ? explode("\n", $value) : $value) | |
41 | )); | |
42 | return WCF::getTPL()->fetch('multiSelectSearchableOptionType'); | |
43 | } | |
44 | ||
158bd3ca | 45 | /** |
0ad90fc3 | 46 | * @see \wcf\system\option\IOptionType::validate() |
158bd3ca | 47 | */ |
38aacf8b | 48 | public function validate(Option $option, $newValue) { |
158bd3ca | 49 | if (!is_array($newValue)) $newValue = array(); |
38aacf8b | 50 | $options = $option->parseSelectOptions(); |
158bd3ca | 51 | foreach ($newValue as $value) { |
38aacf8b MW |
52 | if (!isset($options[$value])) { |
53 | throw new UserInputException($option->optionName, 'validationFailed'); | |
54 | } | |
158bd3ca TD |
55 | } |
56 | } | |
57 | ||
58 | /** | |
0ad90fc3 | 59 | * @see \wcf\system\option\IOptionType::getData() |
158bd3ca | 60 | */ |
38aacf8b | 61 | public function getData(Option $option, $newValue) { |
158bd3ca TD |
62 | if (!is_array($newValue)) $newValue = array(); |
63 | return implode("\n", $newValue); | |
64 | } | |
65 | ||
158bd3ca | 66 | /** |
0ad90fc3 | 67 | * @see \wcf\system\option\ISearchableUserOption::getCondition() |
158bd3ca | 68 | */ |
38aacf8b | 69 | public function getCondition(PreparedStatementConditionBuilder &$conditions, Option $option, $value) { |
567b90a3 MS |
70 | if (!isset($_POST['searchOptions'][$option->optionName])) return false; |
71 | ||
15fa2802 | 72 | if (!is_array($value) || empty($value)) return false; |
158bd3ca | 73 | $value = ArrayUtil::trim($value); |
158bd3ca | 74 | |
718bafcf | 75 | $conditions->add("option_value.userOption".$option->optionID." REGEXP '".'(^|\n)'.implode('\n([^\n]*\n)*', array_map('escapeString', $value)).'($|\n)'."'"); |
158bd3ca TD |
76 | return true; |
77 | } | |
dcb3a44c | 78 | } |