/** * Update the page tables with a new stable version. * @param WikiPage|Title $page * @param FlaggedRevision|null $sv, the new stable version (optional) * @param FlaggedRevision|null $oldSv, the old stable version (optional) * @param Object editInfo Article edit info about the current revision (optional) * @return bool stable version text/file changed and FR_INCLUDES_STABLE */ public static function stableVersionUpdates($page, $sv = null, $oldSv = null, $editInfo = null) { if ($page instanceof FlaggableWikiPage) { $article = $page; } elseif ($page instanceof WikiPage) { $article = FlaggableWikiPage::getTitleInstance($page->getTitle()); } elseif ($page instanceof Title) { $article = FlaggableWikiPage::getTitleInstance($page); } else { throw new MWException("First argument must be a Title or WikiPage."); } $title = $article->getTitle(); $changed = false; if ($oldSv === null) { // optional $oldSv = FlaggedRevision::newFromStable($title, FR_MASTER); } if ($sv === null) { // optional $sv = FlaggedRevision::determineStable($title, FR_MASTER); } if (!$sv) { # Empty flaggedrevs data for this page if there is no stable version $article->clearStableVersion(); # Check if pages using this need to be refreshed... if (FlaggedRevs::inclusionSetting() == FR_INCLUDES_STABLE) { $changed = (bool) $oldSv; } } else { # Update flagged page related fields $article->updateStableVersion($sv, $editInfo ? $editInfo->revid : null); # Check if pages using this need to be invalidated/purged... if (FlaggedRevs::inclusionSetting() == FR_INCLUDES_STABLE) { $changed = !$oldSv || $sv->getRevId() != $oldSv->getRevId() || $sv->getFileTimestamp() != $oldSv->getFileTimestamp() || $sv->getFileSha1() != $oldSv->getFileSha1(); } # Update template/file version cache... if ($editInfo && $sv->getRevId() != $editInfo->revid) { FRInclusionCache::setRevIncludes($title, $editInfo->revid, $editInfo->output); } } # Lazily rebuild dependancies on next parse (we invalidate below) FlaggedRevs::clearStableOnlyDeps($title->getArticleID()); # Clear page cache $title->invalidateCache(); self::purgeSquid($title); return $changed; }