X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2FWikiMap.php;h=8b000f2063b283aef4b28664211f498c9b922ff1;hb=79502d48e636a31c05ef5f52753a634767cbc4cb;hp=3305f9f7d3ad9bf095ff97686ae14aeffd5fda56;hpb=9ef78ab4c18ccb352043b87f371cc0a642f0166c;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/WikiMap.php b/includes/WikiMap.php index 3305f9f7d3..8b000f2063 100644 --- a/includes/WikiMap.php +++ b/includes/WikiMap.php @@ -196,7 +196,7 @@ 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. - $wikiId = self::getWikiIdFromDomain( self::getCurrentWikiDomain() ); + $wikiId = self::getWikiIdFromDbDomain( self::getCurrentWikiDbDomain() ); $infoMap[$wikiId] = [ 'url' => $wgCanonicalServer, 'parts' => wfParseUrl( $wgCanonicalServer ) @@ -245,23 +245,30 @@ class WikiMap { /** * Get the wiki ID of a database domain * - * This is like DatabaseDomain::getId() without encoding (for legacy reasons) - * and without the schema if it merely set to the generic value "mediawiki" + * This is like DatabaseDomain::getId() without encoding (for legacy reasons) and + * without the schema if it is the generic installer default of "mediawiki"/"dbo" + * + * @see $wgDBmwschema + * @see PostgresInstaller + * @see MssqlInstaller * * @param string|DatabaseDomain $domain * @return string + * @since 1.31 */ - public static function getWikiIdFromDomain( $domain ) { + public static function getWikiIdFromDbDomain( $domain ) { $domain = DatabaseDomain::newFromId( $domain ); - - if ( !in_array( $domain->getSchema(), [ null, 'mediawiki' ], true ) ) { - // Include the schema if it is set and is not the default placeholder. + // Since the schema was not always part of the wiki ID, try to maintain backwards + // compatibility with some common cases. Assume that if the DB domain schema is just + // the installer default then it is probably the case that the schema is the same for + // all wikis in the farm. Historically, any wiki farm had to make the database/prefix + // combination unique per wiki. Ommit the schema if it does not seem wiki specific. + if ( !in_array( $domain->getSchema(), [ null, 'mediawiki', 'dbo' ], true ) ) { // This means a site admin may have specifically taylored the schemas. - // Domain IDs might use the form --, meaning that - // the schema portion must be accounted for to disambiguate wikis. + // Domain IDs might use the form -- or --_, + // meaning that the schema portion must be accounted for to disambiguate wikis. return "{$domain->getDatabase()}-{$domain->getSchema()}-{$domain->getTablePrefix()}"; } - // Note that if this wiki ID is passed a a domain ID to LoadBalancer, then it can // handle the schema by assuming the generic "mediawiki" schema if needed. return strlen( $domain->getTablePrefix() ) @@ -269,11 +276,20 @@ class WikiMap { : (string)$domain->getDatabase(); } + /** + * @param string $domain + * @return string + * @deprecated Since 1.33; use getWikiIdFromDbDomain() + */ + public static function getWikiIdFromDomain( $domain ) { + return self::getWikiIdFromDbDomain( $domain ); + } + /** * @return DatabaseDomain Database domain of the current wiki * @since 1.33 */ - public static function getCurrentWikiDomain() { + public static function getCurrentWikiDbDomain() { global $wgDBname, $wgDBmwschema, $wgDBprefix; // Avoid invoking LBFactory to avoid any chance of recursion return new DatabaseDomain( $wgDBname, $wgDBmwschema, (string)$wgDBprefix ); @@ -281,33 +297,19 @@ class WikiMap { /** * @param DatabaseDomain|string $domain - * @return bool Whether $domain has the same DB/prefix as the current wiki + * @return bool Whether $domain matches the DB domain of the current wiki * @since 1.33 */ - public static function isCurrentWikiDomain( $domain ) { - $domain = DatabaseDomain::newFromId( $domain ); - $curDomain = self::getCurrentWikiDomain(); - - if ( !in_array( $curDomain->getSchema(), [ null, 'mediawiki' ], true ) ) { - // Include the schema if it is set and is not the default placeholder. - // This means a site admin may have specifically taylored the schemas. - // Domain IDs might use the form --, meaning that - // the schema portion must be accounted for to disambiguate wikis. - return $curDomain->equals( $domain ); - } - - return ( - $curDomain->getDatabase() === $domain->getDatabase() && - $curDomain->getTablePrefix() === $domain->getTablePrefix() - ); + public static function isCurrentWikiDbDomain( $domain ) { + return self::getCurrentWikiDbDomain()->equals( DatabaseDomain::newFromId( $domain ) ); } /** * @param string $wikiId - * @return bool Whether $wikiId has the same DB/prefix as the current wiki + * @return bool Whether $wikiId matches the wiki ID of the current wiki * @since 1.33 */ public static function isCurrentWikiId( $wikiId ) { - return ( self::getWikiIdFromDomain( self::getCurrentWikiDomain() ) === $wikiId ); + return ( self::getWikiIdFromDbDomain( self::getCurrentWikiDbDomain() ) === $wikiId ); } }