From: Marius Hoch Date: Fri, 2 Jan 2015 18:33:04 +0000 (+0100) Subject: Make Linker::formatLinksInComment format links to other wikis X-Git-Tag: 1.31.0-rc.0~12733^2 X-Git-Url: http://git.heureux-cyclage.org/?a=commitdiff_plain;h=d14f6c0de3b17ea40a702d24be0b100c7af473c9;p=lhc%2Fweb%2Fwiklou.git Make Linker::formatLinksInComment format links to other wikis Needed for CentralAuth. Change-Id: Ibdedf087f85046646450367cbf1811db578d8f4b --- diff --git a/includes/Linker.php b/includes/Linker.php index 10c6804b18..78408680b6 100644 --- a/includes/Linker.php +++ b/includes/Linker.php @@ -1385,9 +1385,11 @@ class Linker { * @param string $comment Text to format links in * @param Title|null $title An optional title object used to links to sections * @param bool $local Whether section links should refer to local page + * @param string|null $wikiId Id of the wiki to link to (if not the local wiki), as used by WikiMap + * * @return string */ - public static function formatLinksInComment( $comment, $title = null, $local = false ) { + public static function formatLinksInComment( $comment, $title = null, $local = false, $wikiId = null ) { return preg_replace_callback( '/ \[\[ @@ -1401,7 +1403,7 @@ class Linker { \]\] ([^[]*) # 3. link trail (the text up until the next link) /x', - function ( $match ) use ( $title, $local ) { + function ( $match ) use ( $title, $local, $wikiId ) { global $wgContLang; $medians = '(?:' . preg_quote( MWNamespace::getCanonicalName( NS_MEDIA ), '/' ) . '|'; @@ -1457,11 +1459,22 @@ class Linker { $newTarget = clone ( $title ); $newTarget->setFragment( '#' . $target->getFragment() ); $target = $newTarget; + + } + + if ( $wikiId !== null ) { + $thelink = Linker::makeExternalLink( + WikiMap::getForeignURL( $wikiId, $target->getPrefixedURL() ), + $linkText . $inside, + true + ) . $trail; + } else { + $thelink = Linker::link( + $target, + $linkText . $inside + ) . $trail; } - $thelink = Linker::link( - $target, - $linkText . $inside - ) . $trail; + } } if ( $thelink ) { diff --git a/tests/phpunit/includes/LinkerTest.php b/tests/phpunit/includes/LinkerTest.php index fc88a550cd..6341bf0896 100644 --- a/tests/phpunit/includes/LinkerTest.php +++ b/tests/phpunit/includes/LinkerTest.php @@ -193,4 +193,49 @@ class LinkerTest extends MediaWikiLangTestCase { ), ); } + + /** + * @covers Linker::formatLinksInComment + * @dataProvider provideCasesForFormatLinksInComment + */ + public function testFormatLinksInComment( $expected, $input, $wiki ) { + + $conf = new SiteConfiguration(); + $conf->settings = array( + 'wgServer' => array( + 'enwiki' => '//en.example.org' + ), + 'wgArticlePath' => array( + 'enwiki' => '/w/$1', + ), + ); + $conf->suffixes = array( 'wiki' ); + $this->setMwGlobals( array( + 'wgScript' => '/wiki/index.php', + 'wgArticlePath' => '/wiki/$1', + 'wgWellFormedXml' => true, + 'wgCapitalLinks' => true, + 'wgConf' => $conf, + ) ); + + $this->assertEquals( + $expected, + Linker::formatLinksInComment( $input, Title::newFromText( 'Special:BlankPage' ), false, $wiki ) + ); + } + + public static function provideCasesForFormatLinksInComment() { + return array( + array( + 'foo bar Special:BlankPage', + 'foo bar [[Special:BlankPage]]', + null, + ), + array( + 'foo bar Special:BlankPage', + 'foo bar [[Special:BlankPage]]', + 'enwiki', + ), + ); + } }