From 8a6326c21114290042bc72bdbf32230632829020 Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Wed, 22 Jun 2016 23:30:30 +0200 Subject: [PATCH] Add SpecialPage::getLinkRenderer() And SpecialPage::setLinkRenderer(), so the Parser can pass on its LinkRenderer instance for when special pages are being included in a page. Change-Id: If9a9c648ab670b824ce534e7cf0d20d41e1bfd12 --- includes/parser/Parser.php | 2 +- includes/specialpage/SpecialPage.php | 29 +++++++++++++++++++-- includes/specialpage/SpecialPageFactory.php | 16 +++++++++--- 3 files changed, 41 insertions(+), 6 deletions(-) diff --git a/includes/parser/Parser.php b/includes/parser/Parser.php index aca32ed569..65dde2148b 100644 --- a/includes/parser/Parser.php +++ b/includes/parser/Parser.php @@ -3147,7 +3147,7 @@ class Parser { $context->setUser( User::newFromName( '127.0.0.1', false ) ); } $context->setLanguage( $this->mOptions->getUserLangObj() ); - $ret = SpecialPageFactory::capturePath( $title, $context ); + $ret = SpecialPageFactory::capturePath( $title, $context, $this->getLinkRenderer() ); if ( $ret ) { $text = $context->getOutput()->getHTML(); $this->mOutput->addOutputPageMetadata( $context->getOutput() ); diff --git a/includes/specialpage/SpecialPage.php b/includes/specialpage/SpecialPage.php index f478203019..35ecc6e4b6 100644 --- a/includes/specialpage/SpecialPage.php +++ b/includes/specialpage/SpecialPage.php @@ -1,6 +1,4 @@ linkRenderer ) { + return $this->linkRenderer; + } else { + return MediaWikiServices::getInstance()->getLinkRenderer(); + } + } + + /** + * @since 1.28 + * @param LinkRenderer $linkRenderer + */ + public function setLinkRenderer( LinkRenderer $linkRenderer ) { + $this->linkRenderer = $linkRenderer; + } } diff --git a/includes/specialpage/SpecialPageFactory.php b/includes/specialpage/SpecialPageFactory.php index 73efa4e894..b69b28afb4 100644 --- a/includes/specialpage/SpecialPageFactory.php +++ b/includes/specialpage/SpecialPageFactory.php @@ -21,6 +21,7 @@ * @ingroup SpecialPage * @defgroup SpecialPage SpecialPage */ +use MediaWiki\Linker\LinkRenderer; /** * Factory for handling the special page list and generating SpecialPage objects. @@ -523,10 +524,13 @@ class SpecialPageFactory { * @param Title $title * @param IContextSource $context * @param bool $including Bool output is being captured for use in {{special:whatever}} + * @param LinkRenderer|null $linkRenderer (since 1.28) * * @return bool */ - public static function executePath( Title &$title, IContextSource &$context, $including = false ) { + public static function executePath( Title &$title, IContextSource &$context, $including = false, + LinkRenderer $linkRenderer = null + ) { // @todo FIXME: Redirects broken due to this call $bits = explode( '/', $title->getDBkey(), 2 ); $name = $bits[0]; @@ -586,6 +590,9 @@ class SpecialPageFactory { } $page->including( $including ); + if ( $linkRenderer ) { + $page->setLinkRenderer( $linkRenderer ); + } // Execute special page $page->run( $par ); @@ -605,9 +612,12 @@ class SpecialPageFactory { * * @param Title $title * @param IContextSource $context + * @param LinkRenderer|null $linkRenderer (since 1.28) * @return string HTML fragment */ - public static function capturePath( Title $title, IContextSource $context ) { + public static function capturePath( + Title $title, IContextSource $context, LinkRenderer $linkRenderer = null + ) { global $wgTitle, $wgOut, $wgRequest, $wgUser, $wgLang; $main = RequestContext::getMain(); @@ -640,7 +650,7 @@ class SpecialPageFactory { $main->setLanguage( $context->getLanguage() ); // The useful part - $ret = self::executePath( $title, $context, true ); + $ret = self::executePath( $title, $context, true, $linkRenderer ); // Restore old globals and context $wgTitle = $glob['title']; -- 2.20.1