public function testDiffIsUnderReview()
 {
     $oldid = 10910;
     $newid = 11910;
     FRUserActivity::clearAllReviewingDiff($oldid, $newid);
     // clear
     $this->assertEquals(false, FRUserActivity::diffIsUnderReview($oldid, $newid), "Not reviewing diff");
     FRUserActivity::setUserReviewingDiff($this->user, $oldid, $newid);
     $this->assertEquals(true, FRUserActivity::diffIsUnderReview($oldid, $newid), "Now reviewing diff");
 }
 private function run($resultPageSet = null)
 {
     global $wgUser, $wgMemc;
     $params = $this->extractRequestParams();
     // Construct SQL Query
     $this->addTables(array('page', 'flaggedpages', 'revision'));
     $this->addWhereFld('page_namespace', $params['namespace']);
     $useIndex = array('flaggedpages' => 'fp_pending_since');
     if ($params['filterredir'] == 'redirects') {
         $this->addWhereFld('page_is_redirect', 1);
     }
     if ($params['filterredir'] == 'nonredirects') {
         $this->addWhereFld('page_is_redirect', 0);
     }
     if ($params['maxsize'] !== null) {
         # Get absolute difference for comparison. ABS(x-y)
         # is broken due to mysql unsigned int design.
         $this->addWhere('GREATEST(page_len,rev_len)-LEAST(page_len,rev_len) <= ' . intval($params['maxsize']));
     }
     if ($params['filterwatched'] == 'watched') {
         if (!($uid = $wgUser->getId())) {
             $this->dieUsage('You must be logged-in to have a watchlist', 'notloggedin');
         }
         $this->addTables('watchlist');
         $this->addWhereFld('wl_user', $uid);
         $this->addWhere('page_namespace = wl_namespace');
         $this->addWhere('page_title = wl_title');
     }
     if ($params['category'] != '') {
         $this->addTables('categorylinks');
         $this->addWhere('cl_from = fp_page_id');
         $this->addWhereFld('cl_to', $params['category']);
         $useIndex['categorylinks'] = 'cl_from';
     }
     $this->addWhereRange('fp_pending_since', $params['dir'], $params['start'], $params['end']);
     $this->addWhere('page_id=fp_page_id');
     $this->addWhere('rev_id=fp_stable');
     if (!isset($params['start']) && !isset($params['end'])) {
         $this->addWhere('fp_pending_since IS NOT NULL');
     }
     $this->addOption('USE INDEX', $useIndex);
     if (is_null($resultPageSet)) {
         $this->addFields(array('page_id', 'page_namespace', 'page_title', 'page_latest', 'page_len', 'rev_len', 'fp_stable', 'fp_pending_since', 'fp_quality'));
     } else {
         $this->addFields($resultPageSet->getPageTableFields());
         $this->addFields('fp_pending_since');
     }
     $limit = $params['limit'];
     $this->addOption('LIMIT', $limit + 1);
     $res = $this->select(__METHOD__);
     $data = array();
     $count = 0;
     foreach ($res as $row) {
         if (++$count > $limit) {
             // We've reached the one extra which shows that there are
             // additional pages to be had. Stop here...
             $this->setContinueEnumParameter('start', wfTimestamp(TS_ISO_8601, $row->fp_pending_since));
             break;
         }
         if (is_null($resultPageSet)) {
             $title = Title::newFromRow($row);
             $underReview = FRUserActivity::diffIsUnderReview($row->fp_stable, $row->page_latest);
             $data[] = array('pageid' => intval($row->page_id), 'ns' => intval($row->page_namespace), 'title' => $title->getPrefixedText(), 'revid' => intval($row->page_latest), 'stable_revid' => intval($row->fp_stable), 'pending_since' => wfTimestamp(TS_ISO_8601, $row->fp_pending_since), 'flagged_level' => intval($row->fp_quality), 'flagged_level_text' => FlaggedRevs::getQualityLevelText($row->fp_quality), 'diff_size' => (int) $row->page_len - (int) $row->rev_len, 'under_review' => $underReview);
         } else {
             $resultPageSet->processDbRow($row);
         }
     }
     if (is_null($resultPageSet)) {
         $result = $this->getResult();
         $result->setIndexedTagName($data, 'p');
         $result->addValue('query', $this->getModuleName(), $data);
     }
 }