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; }
/** * 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; }