X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2FWikiMap.php;h=6c7f23b52fd535749870f619f0a2020aa87c566a;hb=d29ef47c766bb958268f7fce37e52cef869f8377;hp=545e6a35eb31ea5a1bbeaef60bf48eb9bc4ad82b;hpb=d0d89f42974030ec986b53ac38fe3aadefebf3df;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/WikiMap.php b/includes/WikiMap.php index 545e6a35eb..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 * @@ -86,11 +87,11 @@ class WikiMap { */ public static function getForeignURL( $wikiID, $page ) { $wiki = WikiMap::getWiki( $wikiID ); - + if ( $wiki ) { return $wiki->getUrl( $page ); } - + return false; } } @@ -101,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}" ); @@ -150,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 );