/** * Returns a list of outstanding queues. * * @return array<string> */ public function getOutstandingQueues() { $objectTypeIDs = ModerationQueueManager::getInstance()->getObjectTypeIDs(array_keys(ModerationQueueManager::getInstance()->getDefinitions())); $conditions = new PreparedStatementConditionBuilder(); $conditions->add("moderation_queue_to_user.userID = ?", array(WCF::getUser()->userID)); $conditions->add("moderation_queue_to_user.isAffected = ?", array(1)); $conditions->add("moderation_queue.status IN (?)", array(array(ModerationQueue::STATUS_OUTSTANDING, ModerationQueue::STATUS_PROCESSING))); $conditions->add("moderation_queue.time > ?", array(VisitTracker::getInstance()->getVisitTime('com.woltlab.wcf.moderation.queue'))); $conditions->add("(moderation_queue.time > tracked_visit.visitTime OR tracked_visit.visitTime IS NULL)"); $sql = "SELECT\t\tmoderation_queue.queueID\n\t\t\tFROM\t\twcf" . WCF_N . "_moderation_queue_to_user moderation_queue_to_user\n\t\t\tLEFT JOIN\twcf" . WCF_N . "_moderation_queue moderation_queue\n\t\t\tON\t\t(moderation_queue.queueID = moderation_queue_to_user.queueID)\n\t\t\tLEFT JOIN\twcf" . WCF_N . "_tracked_visit tracked_visit\n\t\t\tON\t\t(tracked_visit.objectTypeID = " . VisitTracker::getInstance()->getObjectTypeID('com.woltlab.wcf.moderation.queue') . " AND tracked_visit.objectID = moderation_queue.queueID AND tracked_visit.userID = " . WCF::getUser()->userID . ")\n\t\t\t" . $conditions . "\n\t\t\tORDER BY\tmoderation_queue.lastChangeTime DESC"; $statement = WCF::getDB()->prepareStatement($sql, 5); $statement->execute($conditions->getParameters()); $queueIDs = array(); while ($row = $statement->fetchArray()) { $queueIDs[] = $row['queueID']; } $queues = array(); if (!empty($queueIDs)) { $queueList = new ViewableModerationQueueList(); $queueList->getConditionBuilder()->add("moderation_queue.queueID IN (?)", array($queueIDs)); $queueList->sqlOrderBy = "moderation_queue.lastChangeTime DESC"; $queueList->loadUserProfiles = true; $queueList->readObjects(); foreach ($queueList as $queue) { $queues[] = $queue; } } // check if user storage is outdated $totalCount = ModerationQueueManager::getInstance()->getUnreadModerationCount(); $count = count($queues); if ($count < 5) { // load more entries to fill up list $queueList = new ViewableModerationQueueList(); $queueList->getConditionBuilder()->add("moderation_queue.status IN (?)", array(array(ModerationQueue::STATUS_OUTSTANDING, ModerationQueue::STATUS_PROCESSING))); if (!empty($queueIDs)) { $queueList->getConditionBuilder()->add("moderation_queue.queueID NOT IN (?)", array($queueIDs)); } $queueList->sqlOrderBy = "moderation_queue.lastChangeTime DESC"; $queueList->sqlLimit = 5 - $count; $queueList->loadUserProfiles = true; $queueList->readObjects(); foreach ($queueList as $queue) { $queues[] = $queue; } // check if stored count is out of sync if ($count < $totalCount) { UserStorageHandler::getInstance()->reset(array(WCF::getUser()->userID), 'outstandingModerationCount'); // check for orphaned queues $queueCount = ModerationQueueManager::getInstance()->getUnreadModerationCount(); if (count($queues) < $queueCount) { ModerationQueueManager::getInstance()->identifyOrphans(); } } } WCF::getTPL()->assign(array('queues' => $queues)); return array('template' => WCF::getTPL()->fetch('moderationQueueList'), 'totalCount' => $totalCount); }
/** * Returns a viewable moderation queue entry. * * @param integer $queueID * @return \wcf\data\moderation\queue\ViewableModerationQueue */ public static function getViewableModerationQueue($queueID) { $queueList = new ViewableModerationQueueList(); $queueList->getConditionBuilder()->add("moderation_queue.queueID = ?", array($queueID)); $queueList->sqlLimit = 1; $queueList->readObjects(); $queues = $queueList->getObjects(); return isset($queues[$queueID]) ? $queues[$queueID] : null; }