From: Yuri Astrakhan Date: Sat, 14 Jan 2017 11:24:50 +0000 (-0800) Subject: Add custom InterwikiLookup to MediaWikiTitleCodec X-Git-Tag: 1.31.0-rc.0~4323 X-Git-Url: http://git.cyclocoop.org/%22.%24image2.%22?a=commitdiff_plain;h=3f7615be58308071b2209879f98274e991eb5d90;p=lhc%2Fweb%2Fwiklou.git 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 --- diff --git a/includes/title/MediaWikiTitleCodec.php b/includes/title/MediaWikiTitleCodec.php index 1bf05d978c..7a71714bca 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; @@ -51,17 +52,25 @@ class MediaWikiTitleCodec implements TitleFormatter, TitleParser { */ 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 @@ class MediaWikiTitleCodec implements TitleFormatter, TitleParser { 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 @@ class MediaWikiTitleCodec implements TitleFormatter, TitleParser { 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 );