X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2FWikiMap.php;h=b731d7bd957d2b63e11ff59a63100a885adbec23;hb=a479750da672066b4189b115d1141a23d8c5cae3;hp=8bb37b5c882a7a599d63ab658cdaa4a5bfc80a88;hpb=d84c3dde5af90c5c3497d18e427a5c2a38ac6ca8;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/WikiMap.php b/includes/WikiMap.php index 8bb37b5c88..b731d7bd95 100644 --- a/includes/WikiMap.php +++ b/includes/WikiMap.php @@ -104,7 +104,7 @@ class WikiMap { $path .= '?' . $urlParts['query']; } - $canonicalServer = isset( $urlParts['scheme'] ) ? $urlParts['scheme'] : 'http'; + $canonicalServer = $urlParts['scheme'] ?? 'http'; $canonicalServer .= '://' . $urlParts['host']; return new WikiReference( $canonicalServer, $path ); @@ -131,7 +131,7 @@ class WikiMap { * * @param string $wikiID Wiki'd id (generally database name) * @param string $user User name (must be normalised before calling this function!) - * @param string $text Link's text; optional, default to "User:$user" + * @param string|null $text Link's text; optional, default to "User:$user" * @return string HTML link or false if the wiki was not found */ public static function foreignUserLink( $wikiID, $user, $text = null ) { @@ -143,7 +143,7 @@ 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 $text Link's text; optional, default to $page + * @param string|null $text Link's text; optional, default to $page * @return string|false HTML link or false if the wiki was not found */ public static function makeForeignLink( $wikiID, $page, $text = null ) { @@ -196,7 +196,8 @@ class WikiMap { $infoMap = []; // Make sure at least the current wiki is set, for simple configurations. // This also makes it the first in the map, which is useful for common cases. - $infoMap[wfWikiID()] = [ + $wikiId = self::getWikiIdFromDomain( self::getCurrentWikiDomain() ); + $infoMap[$wikiId] = [ 'url' => $wgCanonicalServer, 'parts' => wfParseUrl( $wgCanonicalServer ) ]; @@ -250,12 +251,45 @@ class WikiMap { * @return string */ public static function getWikiIdFromDomain( $domain ) { - if ( !( $domain instanceof DatabaseDomain ) ) { - $domain = DatabaseDomain::newFromId( $domain ); - } + $domain = DatabaseDomain::newFromId( $domain ); return strlen( $domain->getTablePrefix() ) ? "{$domain->getDatabase()}-{$domain->getTablePrefix()}" : $domain->getDatabase(); } + + /** + * @return DatabaseDomain Database domain of the current wiki + * @since 1.33 + */ + public static function getCurrentWikiDomain() { + global $wgDBname, $wgDBmwschema, $wgDBprefix; + // Avoid invoking LBFactory to avoid any chance of recursion + return new DatabaseDomain( $wgDBname, $wgDBmwschema, (string)$wgDBprefix ); + } + + /** + * @param DatabaseDomain|string $domain + * @return bool Whether $domain has the same DB/prefix as the current wiki + * @since 1.33 + */ + public static function isCurrentWikiDomain( $domain ) { + $domain = DatabaseDomain::newFromId( $domain ); + $curDomain = self::getCurrentWikiDomain(); + + return ( + $curDomain->getDatabase() === $domain->getDatabase() && + // @TODO: check schema instead of assuming it's ""/"mediawiki" and never collides + $curDomain->getTablePrefix() === $domain->getTablePrefix() + ); + } + + /** + * @param string $wikiId + * @return bool Whether $wikiId has the same DB/prefix as the current wiki + * @since 1.33 + */ + public static function isCurrentWikiId( $wikiId ) { + return ( self::getWikiIdFromDomain( self::getCurrentWikiDomain() ) === $wikiId ); + } }