2 namespace wcf\system\condition
;
3 use wcf\data\condition\Condition
;
4 use wcf\data\user\User
;
5 use wcf\data\user\UserList
;
6 use wcf\data\DatabaseObjectList
;
7 use wcf\system\exception\UserInputException
;
11 * Condition implementation for the registration date of a user.
13 * @author Matthias Schmidt
14 * @copyright 2001-2015 WoltLab GmbH
15 * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
16 * @package com.woltlab.wcf
17 * @subpackage system.condition
18 * @category Community Framework
20 class UserRegistrationDateCondition
extends AbstractSingleFieldCondition
implements IContentCondition
, IObjectListCondition
, IUserCondition
{
21 use TObjectListUserCondition
;
24 * @see \wcf\system\condition\AbstractSingleFieldCondition::$label
26 protected $label = 'wcf.user.condition.registrationDate';
29 * registration start date
32 protected $registrationDateEnd = '';
35 * registration start date
38 protected $registrationDateStart = '';
41 * @see \wcf\system\condition\IObjectListCondition::addObjectListCondition()
43 public function addObjectListCondition(DatabaseObjectList
$objectList, array $conditionData) {
44 if (!($objectList instanceof UserList
)) return;
46 if (isset($conditionData['registrationDateEnd'])) {
47 $objectList->getConditionBuilder()->add('user_table.registrationDate < ?', array(strtotime($conditionData['registrationDateEnd']) +
86400));
49 if (isset($conditionData['registrationDateStart'])) {
50 $objectList->getConditionBuilder()->add('user_table.registrationDate >= ?', array(strtotime($conditionData['registrationDateStart'])));
55 * @see \wcf\system\condition\IUserCondition::checkUser()
57 public function checkUser(Condition
$condition, User
$user) {
58 if ($condition->registrationDateStart
!== null && $user->registrationDate
< strtotime($condition->registrationDateStart
)) {
61 if ($condition->registrationDateEnd
!== null && $user->registrationDate
>= strtotime($condition->registrationDateEnd
) +
86400) {
69 * @see \wcf\system\condition\ICondition::getData()
71 public function getData() {
74 if (strlen($this->registrationDateStart
)) {
75 $data['registrationDateStart'] = $this->registrationDateStart
;
77 if (strlen($this->registrationDateEnd
)) {
78 $data['registrationDateEnd'] = $this->registrationDateEnd
;
89 * @see \wcf\system\condition\AbstractSingleFieldCondition::getFieldElement()
91 protected function getFieldElement() {
92 $start = WCF
::getLanguage()->get('wcf.date.period.start');
93 $end = WCF
::getLanguage()->get('wcf.date.period.end');
96 <input type="date" id="registrationDateStart" name="registrationDateStart" value="{$this->registrationDateStart}" placeholder="{$start}" />
97 <input type="date" id="registrationDateEnd" name="registrationDateEnd" value="{$this->registrationDateEnd}" placeholder="{$end}" />
102 * @see \wcf\system\condition\ICondition::readFormParameters()
104 public function readFormParameters() {
105 if (isset($_POST['registrationDateEnd'])) $this->registrationDateEnd
= $_POST['registrationDateEnd'];
106 if (isset($_POST['registrationDateStart'])) $this->registrationDateStart
= $_POST['registrationDateStart'];
110 * @see \wcf\system\condition\ICondition::reset()
112 public function reset() {
113 $this->registrationDateEnd
= '';
114 $this->registrationDateStart
= '';
118 * @see \wcf\system\condition\ICondition::setData()
120 public function setData(Condition
$condition) {
121 if ($condition->registrationDateEnd
) {
122 $this->registrationDateEnd
= $condition->registrationDateEnd
;
124 if ($condition->registrationDateStart
) {
125 $this->registrationDateStart
= $condition->registrationDateStart
;
130 * @see \wcf\system\condition\ICondition::validate()
132 public function validate() {
133 $registrationDateEnd = $registrationDateStart = null;
134 if (strlen($this->registrationDateStart
)) {
135 $registrationDateStart = @strtotime
($this->registrationDateStart
);
136 if ($registrationDateStart === false) {
137 $this->errorMessage
= 'wcf.condition.timestamp.error.startNotValid';
139 throw new UserInputException('registrationDate', 'startNotValid');
142 if (strlen($this->registrationDateEnd
)) {
143 $registrationDateEnd = @strtotime
($this->registrationDateEnd
);
144 if ($registrationDateEnd === false) {
145 $this->errorMessage
= 'wcf.condition.timestamp.error.endNotValid';
147 throw new UserInputException('registrationDate', 'endNotValid');
151 if ($registrationDateEnd !== null && $registrationDateStart !== null && $registrationDateEnd < $registrationDateStart) {
152 $this->errorMessage
= 'wcf.condition.timestamp.error.endBeforeStart';
154 throw new UserInputException('registrationDate', 'endBeforeStart');
159 * @see \wcf\system\condition\IContentCondition::showContent()
161 public function showContent(Condition
$condition) {
162 if (!WCF
::getUser()->userID
) return false;
164 return $this->checkUser($condition, WCF
::getUser());