diff options
Diffstat (limited to 'htdocs/src/ModerationSchedule.inc.php')
-rw-r--r-- | htdocs/src/ModerationSchedule.inc.php | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/htdocs/src/ModerationSchedule.inc.php b/htdocs/src/ModerationSchedule.inc.php new file mode 100644 index 0000000..cca6697 --- /dev/null +++ b/htdocs/src/ModerationSchedule.inc.php @@ -0,0 +1,105 @@ +<?php + +/* Foursquare Community Site + * + * Copyright (C) 2011 Foursquare Church. + * + * Developers: Jesse Morgan <jmorgan@foursquarestaff.com> + * + */ + +require_once "base.inc.php"; + +class ModerationSchedule implements Iterator { + private $moderators; + private $exceptions; + + private $year; + private $week; + private $expos; + + public function __construct() { + $this->moderators = array(); + $this->exceptions = array(); + } + + public function getNumberOfModerators() { + return count($this->moderators); + } + + + // Iterator methods + + public function rewind() { + $this->year = date('o'); + $this->week = date('W') + 0; + $this->expos = 0; + } + + public function current() { + // Get the scheduled mod. + $modpos = $this->week % $this->getNumberOfModerators(); + $moderator = $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 + // 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. + ($this->exceptions[$this->expos]['year'] == $this->year + and $this->exceptions[$this->expos]['week'] < $this->week)) + ) { + + $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); + } + + public function key() { + // TODO: Return "key" for "current" moderator (date) + } + + public function next() { + // TODO: Impl. next + } + + public function valid() { + // The schedule continues forever. + return true; + } + + private function query() { + $db = getDatabase(); + $this->rewind(); + + // Get the moderators + $query = "SELECT * FROM moderation_schedule ORDER BY position"; + $this->moderators = $db->fetchAssocRows($query); + + // Get the exceptions + $year = date('o'); + $week = date('W'); + + $query = "SELECT * FROM moderator_exceptions" + . " WHERE year >= $year AND week >= $week" + . " ORDER BY year, week"; + $this->exceptions = $db->fetchAssocRows($query); + } +} + +?> + |