Legoktm has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/295592

Change subject: Add SpecialPage::getLinkRenderer()
......................................................................

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
---
M includes/parser/Parser.php
M includes/specialpage/SpecialPage.php
M includes/specialpage/SpecialPageFactory.php
3 files changed, 41 insertions(+), 6 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/core 
refs/changes/92/295592/1

diff --git a/includes/parser/Parser.php b/includes/parser/Parser.php
index aca32ed..65dde21 100644
--- a/includes/parser/Parser.php
+++ b/includes/parser/Parser.php
@@ -3147,7 +3147,7 @@
                                                $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 f478203..35ecc6e 100644
--- a/includes/specialpage/SpecialPage.php
+++ b/includes/specialpage/SpecialPage.php
@@ -1,6 +1,4 @@
 <?php
-use MediaWiki\MediaWikiServices;
-
 /**
  * Parent class for all special pages.
  *
@@ -24,6 +22,8 @@
  */
 
 use MediaWiki\Auth\AuthManager;
+use MediaWiki\Linker\LinkRenderer;
+use MediaWiki\MediaWikiServices;
 
 /**
  * Parent class for all special pages.
@@ -59,6 +59,11 @@
         * @var IContextSource
         */
        protected $mContext;
+
+       /**
+        * @var LinkRenderer|null
+        */
+       private $linkRenderer;
 
        /**
         * Get a localised Title object for a specified special page name
@@ -826,4 +831,24 @@
                        wfTransactionalTimeLimit();
                }
        }
+
+       /**
+        * @since 1.28
+        * @return LinkRenderer
+        */
+       protected function getLinkRenderer() {
+               if ( $this->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 73efa4e..b69b28a 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 @@
         * @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 @@
                }
 
                $page->including( $including );
+               if ( $linkRenderer ) {
+                       $page->setLinkRenderer( $linkRenderer );
+               }
 
                // Execute special page
                $page->run( $par );
@@ -605,9 +612,12 @@
         *
         * @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 @@
                $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'];

-- 
To view, visit https://gerrit.wikimedia.org/r/295592
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: If9a9c648ab670b824ce534e7cf0d20d41e1bfd12
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/core
Gerrit-Branch: master
Gerrit-Owner: Legoktm <legoktm.wikipe...@gmail.com>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to