From a1789ddde42033f1b05cc4929491214ee6e79383 Mon Sep 17 00:00:00 2001 From: Pierre Schmitz Date: Thu, 17 Dec 2015 09:15:42 +0100 Subject: Update to MediaWiki 1.26.0 --- includes/WikiMap.php | 62 +++++++++++++++++++++++++++------------------------- 1 file changed, 32 insertions(+), 30 deletions(-) (limited to 'includes/WikiMap.php') diff --git a/includes/WikiMap.php b/includes/WikiMap.php index f16f5aa7..027ff72f 100644 --- a/includes/WikiMap.php +++ b/includes/WikiMap.php @@ -108,13 +108,15 @@ class WikiMap { * * @param string $wikiID Wiki'd id (generally database name) * @param string $page Page name (must be normalised before calling this function!) + * @param string|null $fragmentId + * * @return string|bool URL or false if the wiki was not found */ - public static function getForeignURL( $wikiID, $page ) { + public static function getForeignURL( $wikiID, $page, $fragmentId = null ) { $wiki = WikiMap::getWiki( $wikiID ); if ( $wiki ) { - return $wiki->getFullUrl( $page ); + return $wiki->getFullUrl( $page, $fragmentId ); } return false; @@ -146,20 +148,6 @@ class WikiReference { $this->mServer = $server === null ? $canonicalServer : $server; } - /** - * @return string - * @throws MWException - */ - public function getHostname() { - $prefixes = array( 'http://', 'https://' ); - foreach ( $prefixes as $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}" ); - } - /** * Get the URL in a way to be displayed to the user * More or less Wikimedia specific @@ -167,13 +155,12 @@ class WikiReference { * @return string */ public function getDisplayName() { - $url = $this->getUrl( '' ); - $parsed = wfParseUrl( $url ); + $parsed = wfParseUrl( $this->mCanonicalServer ); if ( $parsed ) { return $parsed['host']; } else { - // Invalid URL. There's no sane thing to do here, so just return it - return $url; + // Invalid server spec. There's no sane thing to do here, so just return the canonical server name in full + return $this->mCanonicalServer; } } @@ -181,21 +168,32 @@ class WikiReference { * Helper function for getUrl() * * @todo FIXME: This may be generalized... - * @param string $page Page name (must be normalised before calling this function!) - * @return string Url fragment + * + * @param string $page Page name (must be normalised before calling this function! May contain a section part.) + * @param string|null $fragmentId + * + * @return string relative URL, without the server part. */ - private function getLocalUrl( $page ) { - return str_replace( '$1', wfUrlEncode( str_replace( ' ', '_', $page ) ), $this->mPath ); + private function getLocalUrl( $page, $fragmentId = null ) { + $page = wfUrlEncode( str_replace( ' ', '_', $page ) ); + + if ( is_string( $fragmentId ) && $fragmentId !== '' ) { + $page .= '#' . wfUrlEncode( $fragmentId ); + } + + return str_replace( '$1', $page, $this->mPath ); } /** * Get a canonical (i.e. based on $wgCanonicalServer) URL to a page on this foreign wiki * * @param string $page Page name (must be normalised before calling this function!) + * @param string|null $fragmentId + * * @return string Url */ - public function getCanonicalUrl( $page ) { - return $this->mCanonicalServer . $this->getLocalUrl( $page ); + public function getCanonicalUrl( $page, $fragmentId = null ) { + return $this->mCanonicalServer . $this->getLocalUrl( $page, $fragmentId ); } /** @@ -209,10 +207,12 @@ class WikiReference { /** * Alias for getCanonicalUrl(), for backwards compatibility. * @param string $page + * @param string|null $fragmentId + * * @return string */ - public function getUrl( $page ) { - return $this->getCanonicalUrl( $page ); + public function getUrl( $page, $fragmentId = null ) { + return $this->getCanonicalUrl( $page, $fragmentId ); } /** @@ -220,10 +220,12 @@ class WikiReference { * when called locally on the wiki. * * @param string $page Page name (must be normalized before calling this function!) + * @param string|null $fragmentId + * * @return string URL */ - public function getFullUrl( $page ) { + public function getFullUrl( $page, $fragmentId = null ) { return $this->mServer . - $this->getLocalUrl( $page ); + $this->getLocalUrl( $page, $fragmentId ); } } -- cgit v1.2.3-54-g00ecf