X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2Fpage%2FWikiPage.php;h=b609d7bd793e7dc9090c444b238dd64f071646e7;hb=a3357744c34d6f5b8e39114e64c6937800698069;hp=c3df0e5b47f252bdcac455ac19111a25e35255ac;hpb=bc6457b28d70641d366a554d8a82385b53a46fc9;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/page/WikiPage.php b/includes/page/WikiPage.php index c3df0e5b47..b609d7bd79 100644 --- a/includes/page/WikiPage.php +++ b/includes/page/WikiPage.php @@ -23,6 +23,7 @@ use MediaWiki\Edit\PreparedEdit; use MediaWiki\Logger\LoggerFactory; use MediaWiki\MediaWikiServices; +use MediaWiki\Revision\RevisionRenderer; use MediaWiki\Storage\DerivedPageDataUpdater; use MediaWiki\Storage\PageUpdater; use MediaWiki\Storage\RevisionRecord; @@ -223,6 +224,13 @@ class WikiPage implements Page, IDBAccessObject { return MediaWikiServices::getInstance()->getRevisionStore(); } + /** + * @return RevisionRenderer + */ + private function getRevisionRenderer() { + return MediaWikiServices::getInstance()->getRevisionRenderer(); + } + /** * @return ParserCache */ @@ -931,6 +939,7 @@ class WikiPage implements Page, IDBAccessObject { // links. $hasLinks = (bool)count( $editInfo->output->getLinks() ); } else { + // NOTE: keep in sync with revisionRenderer::getLinkCount $hasLinks = (bool)wfGetDB( DB_REPLICA )->selectField( 'pagelinks', 1, [ 'pl_from' => $this->getId() ], __METHOD__ ); } @@ -1630,6 +1639,7 @@ class WikiPage implements Page, IDBAccessObject { $derivedDataUpdater = new DerivedPageDataUpdater( $this, // NOTE: eventually, PageUpdater should not know about WikiPage $this->getRevisionStore(), + $this->getRevisionRenderer(), $this->getParserCache(), JobQueueGroup::singleton(), MessageCache::singleton(), @@ -1961,7 +1971,7 @@ class WikiPage implements Page, IDBAccessObject { * Purges pages that include this page if the text was changed here. * Every 100th edit, prune the recent changes table. * - * @deprecated since 1.32, use PageUpdater::doEditUpdates instead. + * @deprecated since 1.32, use PageUpdater::doUpdates instead. * * @param Revision $revision * @param User $user User object that did the revision @@ -2367,10 +2377,11 @@ class WikiPage implements Page, IDBAccessObject { public function protectDescriptionLog( array $limit, array $expiry ) { $protectDescriptionLog = ''; + $dirMark = MediaWikiServices::getInstance()->getContentLanguage()->getDirMark(); foreach ( array_filter( $limit ) as $action => $restrictions ) { $expiryText = $this->formatExpiry( $expiry[$action] ); $protectDescriptionLog .= - MediaWikiServices::getInstance()->getContentLanguage()->getDirMark() . + $dirMark . "[$action=$restrictions] ($expiryText)"; } @@ -3151,6 +3162,9 @@ class WikiPage implements Page, IDBAccessObject { // Image redirects RepoGroup::singleton()->getLocalRepo()->invalidateImageRedirect( $title ); + + // Purge cross-wiki cache entities referencing this page + self::purgeInterwikiCheckKey( $title ); } /** @@ -3189,14 +3203,41 @@ class WikiPage implements Page, IDBAccessObject { // Clear file cache for this page only HTMLFileCache::clearFileCache( $title ); + // Purge ?action=info cache $revid = $revision ? $revision->getId() : null; DeferredUpdates::addCallableUpdate( function () use ( $title, $revid ) { InfoAction::invalidateCache( $title, $revid ); } ); + + // Purge cross-wiki cache entities referencing this page + self::purgeInterwikiCheckKey( $title ); } /**#@-*/ + /** + * Purge the check key for cross-wiki cache entries referencing this page + * + * @param Title $title + */ + private static function purgeInterwikiCheckKey( Title $title ) { + global $wgEnableScaryTranscluding; + + if ( !$wgEnableScaryTranscluding ) { + return; // @todo: perhaps this wiki is only used as a *source* for content? + } + + DeferredUpdates::addCallableUpdate( function () use ( $title ) { + $cache = MediaWikiServices::getInstance()->getMainWANObjectCache(); + $cache->resetCheckKey( + // Do not include the namespace since there can be multiple aliases to it + // due to different namespace text definitions on different wikis. This only + // means that some cache invalidations happen that are not strictly needed. + $cache->makeGlobalKey( 'interwiki-page', wfWikiID(), $title->getDBkey() ) + ); + } ); + } + /** * Returns a list of categories this page is a member of. * Results will include hidden categories