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
;
11 * Option type implementation for birthday input fields.
14 * @copyright 2001-2014 WoltLab GmbH
15 * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
16 * @package com.woltlab.wcf
17 * @subpackage system.option
18 * @category Community Framework
20 class BirthdayOptionType
extends DateOptionType
{
25 protected $inputClass = 'birthday';
28 * @see \wcf\system\option\IOptionType::getFormElement()
30 public function validate(Option
$option, $newValue) {
31 parent
::validate($option, $newValue);
33 if (empty($newValue)) return;
35 $timestamp = @strtotime
($newValue);
36 if ($timestamp > TIME_NOW
) {
37 throw new UserInputException($option->optionName
, 'validationFailed');
42 * @see \wcf\system\option\IOptionType::getFormElement()
44 public function getFormElement(Option
$option, $value) {
45 if ($value == '0000-00-00') $value = '';
47 return parent
::getFormElement($option, $value);
51 * @see \wcf\system\option\ISearchableUserOption::getSearchFormElement()
53 public function getSearchFormElement(Option
$option, $value) {
54 $ageFrom = $ageTo = '';
55 if (!empty($value['ageFrom'])) $ageFrom = intval($value['ageFrom']);
56 if (!empty($value['ageTo'])) $ageTo = intval($value['ageTo']);
58 WCF
::getTPL()->assign(array(
60 'valueAgeFrom' => $ageFrom,
61 'valueAgeTo' => $ageTo
63 return WCF
::getTPL()->fetch('birthdaySearchableOptionType');
67 * @see \wcf\system\option\ISearchableUserOption::getCondition()
69 public function getCondition(PreparedStatementConditionBuilder
&$conditions, Option
$option, $value) {
70 if (empty($value['ageFrom']) ||
empty($value['ageTo'])) return false;
72 $ageFrom = intval($value['ageFrom']);
73 $ageTo = intval($value['ageTo']);
74 if ($ageFrom < 0 ||
$ageFrom > 120) return false;
75 if ($ageTo < 0 ||
$ageTo > 120) return false;
76 if (!$ageFrom ||
!$ageTo) return false;
78 $dateFrom = DateUtil
::getDateTimeByTimestamp(TIME_NOW
)->sub(new \
DateInterval('P'.($ageTo +
1).'Y'))->add(new \
DateInterval('P1D'));
79 $dateTo = DateUtil
::getDateTimeByTimestamp(TIME_NOW
)->sub(new \
DateInterval('P'.$ageFrom.'Y'));
81 $conditions->add("option_value.userOption".User
::getUserOptionID('birthdayShowYear')." = ? AND option_value.userOption".$option->optionID
." BETWEEN DATE(?) AND DATE(?)", array(1, $dateFrom->format('Y-m-d'), $dateTo->format('Y-m-d')));