X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2FWikiMap.php;h=6c7f23b52fd535749870f619f0a2020aa87c566a;hb=d29ef47c766bb958268f7fce37e52cef869f8377;hp=b7c96d6aa815ea1fde27425f347715bd9562b9db;hpb=75c6696aa84712669d2cf82856e2af838ed877e0;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/WikiMap.php b/includes/WikiMap.php index b7c96d6aa8..6c7f23b52f 100644 --- a/includes/WikiMap.php +++ b/includes/WikiMap.php @@ -17,17 +17,18 @@ class WikiMap { $wgConf->loadFullData(); list( $major, $minor ) = $wgConf->siteFromDB( $wikiID ); - if( isset( $major ) ) { - $server = $wgConf->get( 'wgServer', $wikiID, $major, - array( 'lang' => $minor, 'site' => $major ) ); - $path = $wgConf->get( 'wgArticlePath', $wikiID, $major, - array( 'lang' => $minor, 'site' => $major ) ); - return new WikiReference( $major, $minor, $server, $path ); - } else { + if( $major === null ) { return null; } + $canonicalServer = $wgConf->get( 'wgCanonicalServer', $wikiID, $major, + array( 'lang' => $minor, 'site' => $major ) ); + $server = $wgConf->get( 'wgServer', $wikiID, $major, + array( 'lang' => $minor, 'site' => $major ) ); + $path = $wgConf->get( 'wgArticlePath', $wikiID, $major, + array( 'lang' => $minor, 'site' => $major ) ); + return new WikiReference( $major, $minor, $canonicalServer, $path, $server ); } - + /** * Convenience to get the wiki's display name * @@ -65,9 +66,6 @@ class WikiMap { * @return String: HTML link or false if the wiki was not found */ public static function makeForeignLink( $wikiID, $page, $text=null ) { - global $wgUser; - $sk = $wgUser->getSkin(); - if ( !$text ) { $text = $page; } @@ -77,7 +75,7 @@ class WikiMap { return false; } - return $sk->makeExternalLink( $url, $text ); + return Linker::makeExternalLink( $url, $text ); } /** @@ -89,11 +87,11 @@ class WikiMap { */ public static function getForeignURL( $wikiID, $page ) { $wiki = WikiMap::getWiki( $wikiID ); - + if ( $wiki ) { return $wiki->getUrl( $page ); } - + return false; } } @@ -104,21 +102,27 @@ class WikiMap { class WikiReference { private $mMinor; ///< 'en', 'meta', 'mediawiki', etc private $mMajor; ///< 'wiki', 'wiktionary', etc - private $mServer; ///< server override, 'www.mediawiki.org' - private $mPath; ///< path override, '/wiki/$1' + private $mCanonicalServer; ///< canonical server URL, e.g. 'http://www.mediawiki.org' + private $mServer; ///< server URL, may be protocol-relative, e.g. '//www.mediawiki.org' + private $mPath; ///< path, '/wiki/$1' - public function __construct( $major, $minor, $server, $path ) { + public function __construct( $major, $minor, $canonicalServer, $path, $server = null ) { $this->mMajor = $major; $this->mMinor = $minor; - $this->mServer = $server; + $this->mCanonicalServer = $canonicalServer; $this->mPath = $path; + $this->mServer = $server === null ? $canonicalServer : $server; } + /** + * @return string + * @throws MWException + */ public function getHostname() { $prefixes = array( 'http://', 'https://' ); foreach ( $prefixes as $prefix ) { - if ( substr( $this->mServer, 0, strlen( $prefix ) ) ) { - return substr( $this->mServer, strlen( $prefix ) ); + if ( substr( $this->mCanonicalServer, 0, strlen( $prefix ) ) ) { + return substr( $this->mCanonicalServer, strlen( $prefix ) ); } } throw new MWException( "Invalid hostname for wiki {$this->mMinor}.{$this->mMajor}" ); @@ -132,11 +136,13 @@ class WikiReference { */ public function getDisplayName() { $url = $this->getUrl( '' ); - $url = preg_replace( '!^https?://!', '', $url ); - $url = preg_replace( '!/index\.php(\?title=|/)$!', '/', $url ); - $url = preg_replace( '!/wiki/$!', '/', $url ); - $url = preg_replace( '!/$!', '', $url ); - return $url; + $parsed = wfParseUrl( $url ); + if ( $parsed ) { + return $parsed['host']; + } else { + // Invalid URL. There's no sane thing to do here, so just return it + return $url; + } } /** @@ -151,12 +157,31 @@ class WikiReference { } /** - * Get a URL to a page on this foreign wiki + * Get a canonical (i.e. based on $wgCanonicalServer) URL to a page on this foreign wiki * * @param $page String: page name (must be normalised before calling this function!) * @return String: Url */ + public function getCanonicalUrl( $page ) { + return $this->mCanonicalServer . $this->getLocalUrl( $page ); + } + + /** + * Alias for getCanonicalUrl(), for backwards compatibility. + * @return String + */ public function getUrl( $page ) { + return $this->getCanonicalUrl( $page ); + } + + /** + * Get a URL based on $wgServer, like Title::getFullUrl() would produce + * when called locally on the wiki. + * + * @param $page String: page name (must be normalized before calling this function!) + * @return String: URL + */ + public function getFullUrl( $page ) { return $this->mServer . $this->getLocalUrl( $page );