Merge branch '2.0'
[GitHub/WoltLab/WCF.git] / wcfsetup / install / files / lib / system / option / MultiSelectOptionType.class.php
CommitLineData
158bd3ca
TD
1<?php
2namespace wcf\system\option;
3use wcf\data\option\Option;
4use wcf\system\database\util\PreparedStatementConditionBuilder;
158bd3ca 5use wcf\system\exception\UserInputException;
245b5797 6use wcf\system\WCF;
158bd3ca 7use 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 19class 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}