protected function autoreview_current(User $user)
 {
     $this->output("Auto-reviewing all current page versions...\n");
     if (!$user->getID()) {
         $this->output("Invalid user specified.\n");
         return;
     } elseif (!$user->isAllowed('review')) {
         $this->output("User specified (id: {$user->getID()}) does not have \"review\" rights.\n");
         return;
     }
     $db = wfGetDB(DB_MASTER);
     $this->output("Reviewer username: "******"\n");
     $start = $db->selectField('page', 'MIN(page_id)', false, __METHOD__);
     $end = $db->selectField('page', 'MAX(page_id)', false, __METHOD__);
     if (is_null($start) || is_null($end)) {
         $this->output("...page table seems to be empty.\n");
         return;
     }
     # Do remaining chunk
     $end += $this->mBatchSize - 1;
     $blockStart = $start;
     $blockEnd = $start + $this->mBatchSize - 1;
     $count = 0;
     $changed = 0;
     $flags = FlaggedRevs::quickTags(FR_CHECKED);
     // Assume basic level
     while ($blockEnd <= $end) {
         $this->output("...doing page_id from {$blockStart} to {$blockEnd}\n");
         $res = $db->select(array('page', 'revision'), '*', array("page_id BETWEEN {$blockStart} AND {$blockEnd}", 'page_namespace' => FlaggedRevs::getReviewNamespaces(), 'rev_id = page_latest'), __METHOD__);
         # Go through and autoreview the current version of every page...
         foreach ($res as $row) {
             $title = Title::newFromRow($row);
             $rev = Revision::newFromRow($row);
             # Is it already reviewed?
             $frev = FlaggedRevision::newFromTitle($title, $row->page_latest, FR_MASTER);
             # Rev should exist, but to be safe...
             if (!$frev && $rev) {
                 $article = new Article($title);
                 $db->begin();
                 FlaggedRevs::autoReviewEdit($article, $user, $rev, $flags, true);
                 FlaggedRevs::HTMLCacheUpdates($article->getTitle());
                 $db->commit();
                 $changed++;
             }
             $count++;
         }
         $db->freeResult($res);
         $blockStart += $this->mBatchSize - 1;
         $blockEnd += $this->mBatchSize - 1;
         // XXX: Don't let deferred jobs array get absurdly large (bug 24375)
         DeferredUpdates::doUpdates('commit');
         wfWaitForSlaves(5);
     }
     $this->output("Auto-reviewing of all pages complete ..." . "{$count} rows [{$changed} changed]\n");
 }
 /**
  * @param FlaggedRevision $frev
  * Removes flagged revision data for this page/id set
  * @return bool
  */
 private function unapproveRevision(FlaggedRevision $frev)
 {
     wfProfileIn(__METHOD__);
     # Get current stable version ID (for logging)
     $oldSv = FlaggedRevision::newFromStable($this->page, FR_MASTER);
     # Delete from flaggedrevs table
     $frev->delete();
     # Update the article review log
     $oldSvId = $oldSv ? $oldSv->getRevId() : 0;
     FlaggedRevsLog::updateReviewLog($this->page, $this->dims, $this->oldFlags, $this->comment, $this->oldid, $oldSvId, false);
     # Get the new stable version as of now
     $sv = FlaggedRevision::determineStable($this->page, FR_MASTER);
     # Update recent changes
     self::updateRecentChanges($frev->getRevision(), 'unpatrol', $sv);
     # Update page and tracking tables and clear cache
     $changed = FlaggedRevs::stableVersionUpdates($this->page, $sv, $oldSv);
     if ($changed) {
         FlaggedRevs::HTMLCacheUpdates($this->page);
         // purge pages that use this page
     }
     # Caller may want to get the change time
     $this->newLastChangeTime = '';
     wfProfileOut(__METHOD__);
     return true;
 }
Exemplo n.º 3
0
 /**
  * Purge expired restrictions from the flaggedpage_config table.
  * The stable version of pages may change and invalidation may be required.
  */
 public static function purgeExpiredConfigurations()
 {
     if (wfReadOnly()) {
         return;
     }
     $dbw = wfGetDB(DB_MASTER);
     # Find pages with expired configs...
     $config = self::getDefaultVisibilitySettings();
     // config is to be reset
     $encCutoff = $dbw->addQuotes($dbw->timestamp());
     $ret = $dbw->select(array('flaggedpage_config', 'page'), array('fpc_page_id', 'page_namespace', 'page_title'), array('page_id = fpc_page_id', 'fpc_expiry < ' . $encCutoff), __METHOD__);
     # Figured out to do with each page...
     $pagesClearConfig = array();
     $pagesClearTracking = $titlesClearTracking = array();
     foreach ($ret as $row) {
         # If FlaggedRevs got "turned off" (in protection config)
         # for this page, then clear it from the tracking tables...
         if (FlaggedRevs::useOnlyIfProtected() && !$config['override']) {
             $pagesClearTracking[] = $row->fpc_page_id;
             // no stable version
             $titlesClearTracking[] = Title::newFromRow($row);
             // no stable version
         }
         $pagesClearConfig[] = $row->fpc_page_id;
         // page with expired config
     }
     # Clear the expired config for these pages...
     if (count($pagesClearConfig)) {
         $dbw->delete('flaggedpage_config', array('fpc_page_id' => $pagesClearConfig, 'fpc_expiry < ' . $encCutoff), __METHOD__);
     }
     # Clear the tracking rows and update page_touched for the
     # pages in $pagesClearConfig that do now have a stable version...
     if (count($pagesClearTracking)) {
         FlaggedRevs::clearTrackingRows($pagesClearTracking);
         $dbw->update('page', array('page_touched' => $dbw->timestamp()), array('page_id' => $pagesClearTracking), __METHOD__);
     }
     # Also, clear their squid caches and purge other pages that use this page.
     # NOTE: all of these updates are deferred via $wgDeferredUpdateList.
     foreach ($titlesClearTracking as $title) {
         FlaggedRevs::purgeSquid($title);
         if (FlaggedRevs::inclusionSetting() == FR_INCLUDES_STABLE) {
             FlaggedRevs::HTMLCacheUpdates($title);
             // purge pages that use this page
         }
     }
 }
 /**
  * Update flaggedrevs page/tracking tables
  */
 public static function onRevisionDelete(Title $title)
 {
     $changed = FlaggedRevs::stableVersionUpdates($title);
     if ($changed) {
         FlaggedRevs::HTMLCacheUpdates($title);
     }
     return true;
 }