/** * Get the queue history between two timestamps * * @param \DateTime $start Lower time limit of the queue activity calendar * @param \DateTime $end Upper time limit of the queue activity calendar * * @return Retuns an array in the form of Array([year] => Array([month] => Array([day] => Array('new' => int, 'approved' => int, 'denied' => int)))) */ public function get_queue_history(\DateTime $start, \DateTime $end) { $start_time = (int) $start->setTimezone($this->utc)->getTimestamp(); $end_time = (int) $end->setTimezone($this->utc)->getTimestamp(); $day_tpl = array('new' => 0, 'approved' => 0, 'denied' => 0); $history = date::get_calendar_ary($this->user, $start, $end, $day_tpl); $sql = 'SELECT queue_status AS status, queue_submit_time AS submit_time, queue_close_time AS close_time FROM ' . TITANIA_QUEUE_TABLE . ' WHERE queue_type = ' . $this->queue_type . ' AND ' . $this->db->sql_in_set('queue_status', array(TITANIA_QUEUE_CLOSED, TITANIA_QUEUE_HIDE), true) . ' AND ((queue_submit_time > ' . $start_time . ' AND queue_submit_time < ' . $end_time . ') OR (queue_close_time > ' . $start_time . ' AND queue_close_time < ' . $end_time . '))'; $result = $this->db->sql_query($sql); while ($row = $this->db->sql_fetchrow($result)) { $this->fill_history_actions($history, $start_time, $end_time, $row); } $this->db->sql_freeresult($result); return $history; }
/** * Generate queue stats * * @return bool Returns true if there have been any revisions validated. False otherwise. */ protected function generate_stats() { $total_revs_denied = $this->stats->get_queue_item_count(TITANIA_QUEUE_DENIED); $total_revs_approved = $this->stats->get_queue_item_count(TITANIA_QUEUE_APPROVED); $total_revs_validated = $total_revs_denied + $total_revs_approved; if (!$total_revs_validated) { return false; } $current_time = time(); $year_ago = new \DateTime('midnight tomorrow', $this->user->timezone); $year_ago->modify('-1 year')->setTimezone(new \DateTimezone('UTC')); $validated_cache_ttl = round($total_revs_validated / 1000) * 86400; $validated_statuses = array(TITANIA_QUEUE_DENIED, TITANIA_QUEUE_APPROVED); $closed_statuses = array(TITANIA_QUEUE_CLOSED, TITANIA_QUEUE_DENIED, TITANIA_QUEUE_APPROVED, TITANIA_QUEUE_HIDE); $oldest_unvalidated_rev = $this->stats->get_oldest_revision_time(false, $closed_statuses); $oldest_validated_rev = $this->stats->get_oldest_revision_time($validated_statuses); $unvalidated_avg_wait = $this->stats->get_average_wait(0, 0, true, false, $closed_statuses); $validated_avg_wait = $this->stats->get_average_wait($year_ago->getTimestamp(), 0, false, $validated_statuses, false, $validated_cache_ttl); $revisions_in_queue = $this->stats->get_queue_item_count(false, $closed_statuses); $this->template->assign_vars(array('DENIED_RATIO' => round($total_revs_denied / $total_revs_validated * 100), 'APPROVED_RATIO' => round($total_revs_approved / $total_revs_validated * 100), 'AVG_PAST_VALIDATION_TIME' => $this->user->lang('AVG_PAST_VALIDATION_TIME', $validated_avg_wait), 'AVG_CURRENT_QUEUE_WAIT' => $this->user->lang('AVG_CURRENT_QUEUE_WAIT', $unvalidated_avg_wait), 'OLDEST_UNVALIDATED_REV' => $this->user->lang('OLDEST_UNVALIDATED_REV', date::format_time_delta($this->user, $oldest_unvalidated_rev, $current_time)), 'NUM_REVISIONS_IN_QUEUE' => $this->user->lang('NUM_REVISIONS_IN_QUEUE', $revisions_in_queue), 'SINCE_X_VALIDATED_REVS' => $this->user->lang('SINCE_X_VALIDATED_REVS', $this->user->format_date($oldest_validated_rev, 'd M Y'), $total_revs_validated, $total_revs_denied, $total_revs_approved), 'S_QUEUE_ACTIVE' => $revisions_in_queue)); return true; }