diff options
author | Jesse Morgan <jesse@jesterpm.net> | 2011-10-06 14:55:18 -0700 |
---|---|---|
committer | Jesse Morgan <jesse@jesterpm.net> | 2017-09-04 11:16:53 -0700 |
commit | fa9a4f7eb160fc435dc34c493e6822d2fbb7e484 (patch) | |
tree | 3f0abf30ba7ba35089f44fc4acf29437095b65b7 /htdocs/src | |
parent | b025f5ea3b560b9c66625a9f3112b26d48611b94 (diff) |
Completed schedule iterator and almost completed exception iterator. Still need to add the 'Add Exception' page and make use of the schedule in the moderator email code.
Diffstat (limited to 'htdocs/src')
-rw-r--r-- | htdocs/src/ModerationSchedule.inc.php | 94 |
1 files changed, 66 insertions, 28 deletions
diff --git a/htdocs/src/ModerationSchedule.inc.php b/htdocs/src/ModerationSchedule.inc.php index 4f5c6db..4c094e4 100644 --- a/htdocs/src/ModerationSchedule.inc.php +++ b/htdocs/src/ModerationSchedule.inc.php @@ -18,6 +18,9 @@ class ModerationSchedule implements Iterator { private $week; private $expos; + private $moderator; + private $exceptionfor; + public function __construct() { $this->moderators = array(); $this->exceptions = array(); @@ -31,22 +34,59 @@ class ModerationSchedule implements Iterator { // Iterator methods public function rewind() { - $this->year = date('o'); + $this->year = date('o') + 0; $this->week = date('W') + 0; $this->expos = 0; + $this->nextModerator(); } public function current() { + return $this->moderator; + } + + public function key() { + return strtotime($this->year . 'W' . + ($this->week < 10 ? '0' : '') . $this->week); + } + + public function next() { + if ($this->week == 53) { + // Check for leap year + if (date('N', mktime(0, 0, 0, 1, 1, $this->year)) == 4 + or date('N', mktime(0, 0, 0, 12, 31, $this->year)) == 4) { + + $this->week++; + + } else { + $this->week = 1; + $this->year++; + } + + } else if ($this->week > 53) { + $this->week = 1; + $this->year++; + + } else { + $this->week++; + } + + $this->nextModerator(); + } + + private function nextModerator() { + // Clear out the exception flag. + $this->exceptionfor = null; + // Get the scheduled mod. $modpos = $this->week % $this->getNumberOfModerators(); - $moderator = $this->moderators[$modpos]['user_id']; + $this->moderator = User::getById($this->moderators[$modpos]['user_id']); // Check for exceptions if (count($this->exceptions) > 0) { // Skip exceptions prior to the current() date. while ( // We have exceptions to search - $this->expos < count($this->exceptions) and + $this->expos < (count($this->exceptions) - 1) and // and the year is less than the current() year ($this->exceptions[$this->expos]['year'] < $this->year or // or if it is the current() year, but less than the week. @@ -57,30 +97,19 @@ class ModerationSchedule implements Iterator { $this->expos++; } - // Check if the top exception is for today. - if ($this->exceptions[$this->expos]['year'] == $this->year - and $this->exceptions[$this->expos]['week'] == $this->week - ) { - // Yes, return the replacement - $moderator = $this->exceptions[$this->expos]['user_id']; - } - } - - return User::getById($moderator); - } + // Check if any of the top exception apply today. + while($this->exceptions[$this->expos]['year'] == $this->year + and $this->exceptions[$this->expos]['week'] == $this->week) { - public function key() { - return strtotime($this->year . 'W' . - ($this->week < 10 ? '0' : '') . $this->week); - } + if ($this->exceptions[$i]['user_id'] == $this->moderator->getId()) { + // Yes, return the replacement + $this->exceptionfor = $this->moderator; + $this->moderator = User::getById($this->exceptions[$this->expos]['user_id']); + break; + } - public function next() { - if ($this->week == 53) { - $this->week = 1; - $this->year++; - - } else { - $this->week++; + $this->expos++; + } } } @@ -89,12 +118,19 @@ class ModerationSchedule implements Iterator { return true; } - private function query() { + public function isException() { + return $this->exceptionfor !== null; + } + + public function getExceptionFor() { + return $this->exceptionfor; + } + + public function query() { $db = getDatabase(); - $this->rewind(); // Get the moderators - $query = "SELECT * FROM moderation_schedule ORDER BY position"; + $query = "SELECT * FROM moderator_schedule ORDER BY position"; $this->moderators = $db->fetchAssocRows($query); // Get the exceptions @@ -105,6 +141,8 @@ class ModerationSchedule implements Iterator { . " WHERE year >= $year AND week >= $week" . " ORDER BY year, week"; $this->exceptions = $db->fetchAssocRows($query); + + $this->rewind(); } } |