Commit | Line | Data |
---|---|---|
320f4a6d MW |
1 | <?php |
2 | namespace wcf\system\option; | |
3 | use wcf\data\option\Option; | |
4 | use wcf\data\user\User; | |
5 | use wcf\system\database\util\PreparedStatementConditionBuilder; | |
6 | use wcf\system\exception\UserInputException; | |
7 | use wcf\system\WCF; | |
8 | use wcf\util\DateUtil; | |
9 | ||
10 | /** | |
11 | * Option type implementation for birthday input fields. | |
12 | * | |
13 | * @author Marcel Werk | |
ca4ba303 | 14 | * @copyright 2001-2014 WoltLab GmbH |
320f4a6d | 15 | * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php> |
f4f05aa5 | 16 | * @package com.woltlab.wcf |
320f4a6d MW |
17 | * @subpackage system.option |
18 | * @category Community Framework | |
19 | */ | |
20 | class BirthdayOptionType extends DateOptionType { | |
21 | /** | |
567b90a3 | 22 | * @see \wcf\system\option\TextOptionType::$inputClass |
320f4a6d MW |
23 | */ |
24 | protected $inputClass = 'birthday'; | |
25 | ||
26 | /** | |
0ad90fc3 | 27 | * @see \wcf\system\option\IOptionType::getFormElement() |
320f4a6d MW |
28 | */ |
29 | public function validate(Option $option, $newValue) { | |
30 | parent::validate($option, $newValue); | |
31 | ||
32 | if (empty($newValue)) return; | |
33 | ||
34 | $timestamp = @strtotime($newValue); | |
35 | if ($timestamp > TIME_NOW) { | |
36 | throw new UserInputException($option->optionName, 'validationFailed'); | |
37 | } | |
38 | } | |
39 | ||
40 | /** | |
0ad90fc3 | 41 | * @see \wcf\system\option\IOptionType::getFormElement() |
320f4a6d MW |
42 | */ |
43 | public function getFormElement(Option $option, $value) { | |
44 | if ($value == '0000-00-00') $value = ''; | |
45 | ||
46 | return parent::getFormElement($option, $value); | |
47 | } | |
48 | ||
49 | /** | |
0ad90fc3 | 50 | * @see \wcf\system\option\ISearchableUserOption::getSearchFormElement() |
320f4a6d MW |
51 | */ |
52 | public function getSearchFormElement(Option $option, $value) { | |
53 | $ageFrom = $ageTo = ''; | |
54 | if (!empty($value['ageFrom'])) $ageFrom = intval($value['ageFrom']); | |
55 | if (!empty($value['ageTo'])) $ageTo = intval($value['ageTo']); | |
56 | ||
57 | WCF::getTPL()->assign(array( | |
58 | 'option' => $option, | |
59 | 'valueAgeFrom' => $ageFrom, | |
60 | 'valueAgeTo' => $ageTo | |
61 | )); | |
62 | return WCF::getTPL()->fetch('birthdaySearchableOptionType'); | |
63 | } | |
64 | ||
65 | /** | |
0ad90fc3 | 66 | * @see \wcf\system\option\ISearchableUserOption::getCondition() |
320f4a6d MW |
67 | */ |
68 | public function getCondition(PreparedStatementConditionBuilder &$conditions, Option $option, $value) { | |
567b90a3 | 69 | if (empty($value['ageFrom']) && empty($value['ageTo'])) return false; |
320f4a6d MW |
70 | |
71 | $ageFrom = intval($value['ageFrom']); | |
72 | $ageTo = intval($value['ageTo']); | |
92afde98 MW |
73 | if ($ageFrom < 0 || $ageFrom > 120) return false; |
74 | if ($ageTo < 0 || $ageTo > 120) return false; | |
320f4a6d MW |
75 | |
76 | $dateFrom = DateUtil::getDateTimeByTimestamp(TIME_NOW)->sub(new \DateInterval('P'.($ageTo + 1).'Y'))->add(new \DateInterval('P1D')); | |
77 | $dateTo = DateUtil::getDateTimeByTimestamp(TIME_NOW)->sub(new \DateInterval('P'.$ageFrom.'Y')); | |
78 | ||
567b90a3 MS |
79 | $conditions->add('option_value.userOption'.User::getUserOptionID('birthdayShowYear').' = ?', array(1)); |
80 | ||
81 | if ($ageFrom && $ageTo) { | |
82 | $conditions->add('option_value.userOption'.$option->optionID.' BETWEEN DATE(?) AND DATE(?)', array($dateFrom->format('Y-m-d'), $dateTo->format('Y-m-d'))); | |
83 | } | |
84 | else if ($ageFrom) { | |
85 | $conditions->add('option_value.userOption'.$option->optionID.' BETWEEN DATE(?) AND DATE(?)', array('1893-01-01', $dateTo->format('Y-m-d'))); | |
86 | } | |
87 | else { | |
88 | $conditions->add('option_value.userOption'.$option->optionID.' BETWEEN DATE(?) AND DATE(?)', array($dateFrom->format('Y-m-d'), DateUtil::getDateTimeByTimestamp(TIME_NOW)->add(new \DateInterval('P1D'))->format('Y-m-d'))); | |
89 | } | |
90 | ||
320f4a6d MW |
91 | return true; |
92 | } | |
93 | } |