/**
  * Updates the flaggedpage_pending table
  * @param int $pageId Page ID
  * @abstract int $latest Latest revision
  * @return void
  */
 protected static function updatePendingList($pageId, $latest)
 {
     $data = array();
     # Get the highest tier used on this wiki
     $level = FlaggedRevs::highestReviewTier();
     $dbw = wfGetDB(DB_MASTER);
     # Update pending times for each level, going from highest to lowest
     $higherLevelId = 0;
     $higherLevelTS = '';
     while ($level >= 0) {
         # Get the latest revision of this level...
         # Any revision of one tier is also a revision of lower tiers.
         # Instead of doing fr_quality > X queries we do exact comparisons
         # for better INDEX usage. However, in order to treat a rev as the
         # latest tier X rev, we make sure it is newer than all tier (X+1) revs.
         $row = $dbw->selectRow(array('flaggedrevs', 'revision'), array('fr_rev_id', 'rev_timestamp'), array('fr_page_id' => $pageId, 'fr_quality' => $level, 'fr_rev_timestamp > ' . $dbw->addQuotes($higherLevelTS), 'rev_id = fr_rev_id', 'rev_page = fr_page_id', 'rev_deleted & ' . Revision::DELETED_TEXT => 0), __METHOD__, array('ORDER BY' => 'fr_rev_timestamp DESC', 'LIMIT' => 1));
         # If there is a revision of this level, track it...
         # Revisions accepted to one tier count as accepted
         # at the lower tiers (i.e. quality -> checked).
         if ($row) {
             $id = $row->fr_rev_id;
             $ts = $row->rev_timestamp;
         } else {
             // use previous rev of higher tier (if any)
             $id = $higherLevelId;
             $ts = $higherLevelTS;
         }
         # Get edits that actually are pending...
         if ($id && $latest > $id) {
             # Get the timestamp of the edit after this version (if any)
             $nextTimestamp = $dbw->selectField('revision', 'rev_timestamp', array('rev_page' => $pageId, "rev_timestamp > " . $dbw->addQuotes($ts)), __METHOD__, array('ORDER BY' => 'rev_timestamp ASC', 'LIMIT' => 1));
             $data[] = array('fpp_page_id' => $pageId, 'fpp_quality' => $level, 'fpp_rev_id' => $id, 'fpp_pending_since' => $nextTimestamp);
             $higherLevelId = $id;
             $higherLevelTS = $ts;
         }
         $level--;
     }
     # Clear any old junk, and insert new rows
     $dbw->delete('flaggedpage_pending', array('fpp_page_id' => $pageId), __METHOD__);
     $dbw->insert('flaggedpage_pending', $data, __METHOD__);
 }