Daniel Kinzler has uploaded a new change for review.
https://gerrit.wikimedia.org/r/250153
Change subject: Inject InterwikiLookup into MediaWikiTitleCodec
......................................................................
Inject InterwikiLookup into MediaWikiTitleCodec
Change-Id: I72e4800ad58fe964d5eef5772220aa8c528d31f0
---
M includes/Title.php
M includes/specials/SpecialCategories.php
M includes/specials/SpecialLinkSearch.php
M includes/title/MediaWikiTitleCodec.php
M tests/phpunit/includes/title/MediaWikiPageLinkRendererTest.php
M tests/phpunit/includes/title/MediaWikiTitleCodecTest.php
6 files changed, 60 insertions(+), 8 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/core
refs/changes/53/250153/3
diff --git a/includes/Title.php b/includes/Title.php
index 9ada4f3..c202228 100644
--- a/includes/Title.php
+++ b/includes/Title.php
@@ -186,9 +186,11 @@
}
if ( !$titleCodec ) {
+ // @todo: move this into MediaWikiServices
$titleCodec = new MediaWikiTitleCodec(
$wgContLang,
GenderCache::singleton(),
+
MediaWikiServices::getInstance()->getInterwikiLookup(),
$wgLocalInterwikis
);
$titleCodecFingerprint = $fingerprint;
diff --git a/includes/specials/SpecialCategories.php
b/includes/specials/SpecialCategories.php
index cea6ceb..48e4214 100644
--- a/includes/specials/SpecialCategories.php
+++ b/includes/specials/SpecialCategories.php
@@ -60,7 +60,11 @@
private function initServices() {
if ( !$this->linkRenderer ) {
$lang = $this->getContext()->getLanguage();
- $titleFormatter = new MediaWikiTitleCodec( $lang,
GenderCache::singleton() );
+ $titleFormatter = new MediaWikiTitleCodec(
+ $lang,
+ GenderCache::singleton(),
+
MediaWikiServices::getInstance()->getInterwikiLookup()
+ );
$this->linkRenderer = new MediaWikiPageLinkRenderer(
$titleFormatter );
}
}
diff --git a/includes/specials/SpecialLinkSearch.php
b/includes/specials/SpecialLinkSearch.php
index f474867..c76731d 100644
--- a/includes/specials/SpecialLinkSearch.php
+++ b/includes/specials/SpecialLinkSearch.php
@@ -71,7 +71,11 @@
global $wgLanguageCode;
if ( !$this->linkRenderer ) {
$lang = Language::factory( $wgLanguageCode );
- $titleFormatter = new MediaWikiTitleCodec( $lang,
GenderCache::singleton() );
+ $titleFormatter = new MediaWikiTitleCodec(
+ $lang,
+ GenderCache::singleton(),
+
MediaWikiServices::getInstance()->getInterwikiLookup()
+ );
$this->linkRenderer = new MediaWikiPageLinkRenderer(
$titleFormatter );
}
}
diff --git a/includes/title/MediaWikiTitleCodec.php
b/includes/title/MediaWikiTitleCodec.php
index 0fb208e..a8437e9 100644
--- a/includes/title/MediaWikiTitleCodec.php
+++ b/includes/title/MediaWikiTitleCodec.php
@@ -21,6 +21,7 @@
* @license GPL 2+
* @author Daniel Kinzler
*/
+use MediaWiki\InterwikiLookup;
/**
* A codec for %MediaWiki page titles.
@@ -45,6 +46,11 @@
protected $genderCache;
/**
+ * @var InterwikiLookup
+ */
+ private $interwikiLookup;
+
+ /**
* @var string[]
*/
protected $localInterwikis;
@@ -52,13 +58,15 @@
/**
* @param Language $language The language object to use for localizing
namespace names.
* @param GenderCache $genderCache The gender cache for generating
gendered namespace names
+ * @param InterwikiLookup $interwikiLookup
* @param string[]|string $localInterwikis
*/
public function __construct( Language $language, GenderCache
$genderCache,
- $localInterwikis = array()
+ InterwikiLookup $interwikiLookup, $localInterwikis = array()
) {
$this->language = $language;
$this->genderCache = $genderCache;
+ $this->interwikiLookup = $interwikiLookup;
$this->localInterwikis = (array)$localInterwikis;
}
@@ -265,13 +273,13 @@
if (
$this->language->getNsIndex( $x[1] ) ) {
# Disallow Talk:File:x
type titles...
throw new
MalformedTitleException( 'title-invalid-talk-namespace', $text );
- } elseif (
Interwiki::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 ( Interwiki::isValidInterwiki( $p ) ) {
+ } elseif (
$this->interwikiLookup->isValidInterwiki( $p ) ) {
# Interwiki link
$dbkey = $m[2];
$parts['interwiki'] =
$this->language->lc( $p );
diff --git a/tests/phpunit/includes/title/MediaWikiPageLinkRendererTest.php
b/tests/phpunit/includes/title/MediaWikiPageLinkRendererTest.php
index 6cfddf0..86bab45 100644
--- a/tests/phpunit/includes/title/MediaWikiPageLinkRendererTest.php
+++ b/tests/phpunit/includes/title/MediaWikiPageLinkRendererTest.php
@@ -18,6 +18,7 @@
* @file
* @author Daniel Kinzler
*/
+use MediaWiki\InterwikiLookup;
/**
* @covers MediaWikiPageLinkRenderer
@@ -52,6 +53,21 @@
return $genderCache;
}
+ /**
+ * @return InterwikiLookup
+ */
+ private function getInterwikiLookup() {
+ $lookup = $this->getMock( 'MediaWiki\InterwikiLookup' );
+
+ $lookup->expects( $this->any() )
+ ->method( 'isValidInterwiki' )
+ ->will( $this->returnCallback( function ( $prefix ) {
+ return in_array( $prefix, array( 'en', 'de' ) );
+ } ) );
+
+ return $lookup;
+ }
+
public static function provideGetPageUrl() {
return array(
array(
@@ -78,7 +94,7 @@
$lang = Language::factory( 'en' );
- $formatter = new MediaWikiTitleCodec( $lang,
$this->getGenderCache() );
+ $formatter = new MediaWikiTitleCodec( $lang,
$this->getGenderCache(), $this->getInterwikiLookup() );
$renderer = new MediaWikiPageLinkRenderer( $formatter, '/' );
$actual = $renderer->getPageUrl( $title, $params );
@@ -120,7 +136,7 @@
$lang = Language::factory( 'en' );
- $formatter = new MediaWikiTitleCodec( $lang,
$this->getGenderCache() );
+ $formatter = new MediaWikiTitleCodec( $lang,
$this->getGenderCache(), $this->getInterwikiLookup() );
$renderer = new MediaWikiPageLinkRenderer( $formatter );
$actual = $renderer->renderHtmlLink( $title, $text );
diff --git a/tests/phpunit/includes/title/MediaWikiTitleCodecTest.php
b/tests/phpunit/includes/title/MediaWikiTitleCodecTest.php
index d0a9831..0f7e618 100644
--- a/tests/phpunit/includes/title/MediaWikiTitleCodecTest.php
+++ b/tests/phpunit/includes/title/MediaWikiTitleCodecTest.php
@@ -18,6 +18,7 @@
* @file
* @author Daniel Kinzler
*/
+use MediaWiki\InterwikiLookup;
/**
* @covers MediaWikiTitleCodec
@@ -79,12 +80,28 @@
return $genderCache;
}
+ /**
+ * @return InterwikiLookup
+ */
+ private function getInterwikiLookup() {
+ $lookup = $this->getMock( 'MediaWiki\InterwikiLookup' );
+
+ $lookup->expects( $this->any() )
+ ->method( 'isValidInterwiki' )
+ ->will( $this->returnCallback( function ( $prefix ) {
+ return in_array( $prefix, array( 'en', 'de' ) );
+ } ) );
+
+ return $lookup;
+ }
+
protected function makeCodec( $lang ) {
$gender = $this->getGenderCache();
+ $interwikiLookup = $this->getInterwikiLookup();
$lang = Language::factory( $lang );
// language object can came from cache, which does not respect
test settings
$lang->resetNamespaces();
- return new MediaWikiTitleCodec( $lang, $gender );
+ return new MediaWikiTitleCodec( $lang, $gender,
$interwikiLookup );
}
public static function provideFormat() {
@@ -376,4 +393,5 @@
$this->assertEquals( $expected, $name );
}
+
}
--
To view, visit https://gerrit.wikimedia.org/r/250153
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I72e4800ad58fe964d5eef5772220aa8c528d31f0
Gerrit-PatchSet: 3
Gerrit-Project: mediawiki/core
Gerrit-Branch: master
Gerrit-Owner: Daniel Kinzler <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits