Yurik has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/332040 )

Change subject: Add custom InterwikiLookup to MediaWikiTitleCodec
......................................................................

Add custom InterwikiLookup to MediaWikiTitleCodec

This patch allows for a custom InterwikiLookup service
when constructing MediaWikiTitleCodec instances.
If not specified, it continues to get the service from
MediaWikiServices::getInstance()->getInterwikiLookup().

This patch will allow a fully customized instance
creation, without any global state.

Change-Id: Ica87aff5df4534aae0a32e307b27d88b3df023b4
---
M includes/title/MediaWikiTitleCodec.php
1 file changed, 12 insertions(+), 4 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/core 
refs/changes/40/332040/1

diff --git a/includes/title/MediaWikiTitleCodec.php 
b/includes/title/MediaWikiTitleCodec.php
index 1bf05d9..b7fa36d 100644
--- a/includes/title/MediaWikiTitleCodec.php
+++ b/includes/title/MediaWikiTitleCodec.php
@@ -21,6 +21,7 @@
  * @license GPL 2+
  * @author Daniel Kinzler
  */
+use MediaWiki\Interwiki\InterwikiLookup;
 use MediaWiki\MediaWikiServices;
 use MediaWiki\Linker\LinkTarget;
 
@@ -52,16 +53,24 @@
        protected $localInterwikis;
 
        /**
+        * @var InterwikiLookup
+        */
+       protected $interwikiLookup;
+
+       /**
         * @param Language $language The language object to use for localizing 
namespace names.
         * @param GenderCache $genderCache The gender cache for generating 
gendered namespace names
         * @param string[]|string $localInterwikis
+        * @param InterwikiLookup|null $interwikiLookup
         */
        public function __construct( Language $language, GenderCache 
$genderCache,
-               $localInterwikis = []
+               $localInterwikis = [], $interwikiLookup = null
        ) {
                $this->language = $language;
                $this->genderCache = $genderCache;
                $this->localInterwikis = (array)$localInterwikis;
+               $this->interwikiLookup = $interwikiLookup ? :
+                       MediaWikiServices::getInstance()->getInterwikiLookup();
        }
 
        /**
@@ -310,7 +319,6 @@
                        if ( preg_match( $prefixRegexp, $dbkey, $m ) ) {
                                $p = $m[1];
                                $ns = $this->language->getNsIndex( $p );
-                               $interwikiLookup = 
MediaWikiServices::getInstance()->getInterwikiLookup();
                                if ( $ns !== false ) {
                                        # Ordinary namespace
                                        $dbkey = $m[2];
@@ -320,13 +328,13 @@
                                                if ( 
$this->language->getNsIndex( $x[1] ) ) {
                                                        # Disallow Talk:File:x 
type titles...
                                                        throw new 
MalformedTitleException( 'title-invalid-talk-namespace', $text );
-                                               } elseif ( 
$interwikiLookup->isValidInterwiki( $x[1] ) ) {
+                                               } elseif ( 
$this->interwikiLookup->isValidInterwiki( $x[1] ) ) {
                                                        // TODO: get rid of 
global state!
                                                        # Disallow 
Talk:Interwiki:x type titles...
                                                        throw new 
MalformedTitleException( 'title-invalid-talk-namespace', $text );
                                                }
                                        }
-                               } elseif ( $interwikiLookup->isValidInterwiki( 
$p ) ) {
+                               } elseif ( 
$this->interwikiLookup->isValidInterwiki( $p ) ) {
                                        # Interwiki link
                                        $dbkey = $m[2];
                                        $parts['interwiki'] = 
$this->language->lc( $p );

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ica87aff5df4534aae0a32e307b27d88b3df023b4
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/core
Gerrit-Branch: master
Gerrit-Owner: Yurik <yu...@wikimedia.org>

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

Reply via email to