27 public static function getWiki( $wikiID ) {
28 if ( $wikiID === self::getCurrentWikiId() ) {
33 $wikiReference = self::getWikiReferenceFromWgConf( $wikiID );
34 if ( $wikiReference ) {
35 return $wikiReference;
39 return self::getWikiWikiReferenceFromSites( $wikiID );
46 private static function getWikiReferenceFromWgConf( $wikiID ) {
48 '@phan-var \MediaWiki\Config\SiteConfiguration $wgConf';
53 [ $major, $minor ] =
$wgConf->siteFromDB( $wikiID );
54 if ( $major ===
null ) {
57 $server =
$wgConf->get(
'wgServer', $wikiID, $major,
58 [
'lang' => $minor,
'site' => $major ] );
60 $canonicalServer =
$wgConf->get(
'wgCanonicalServer', $wikiID, $major,
61 [
'lang' => $minor,
'site' => $major ] );
62 if ( $canonicalServer ===
false || $canonicalServer ===
null ) {
63 $canonicalServer = $server;
67 [
'lang' => $minor,
'site' => $major ] );
72 if ( !is_string( $canonicalServer ) || !is_string(
$path ) || !str_contains(
$path,
'$1' ) ) {
76 return new WikiReference( $canonicalServer,
$path, $server );
83 private static function getWikiWikiReferenceFromSites( $wikiID ) {
86 $site = $siteLookup->getSite( $wikiID );
88 if ( !$site instanceof MediaWikiSite ) {
93 $urlParts = $urlUtils->parse( $site->getPageUrl() );
94 if ( $urlParts ===
null || !isset( $urlParts[
'path'] ) || !isset( $urlParts[
'host'] ) ) {
100 $path = $urlParts[
'path'];
101 if ( isset( $urlParts[
'query'] ) ) {
102 $path .=
'?' . $urlParts[
'query'];
105 $canonicalServer = $urlParts[
'scheme'] ??
'http';
106 $canonicalServer .=
'://' . $urlParts[
'host'];
107 if ( isset( $urlParts[
'port'] ) ) {
108 $canonicalServer .=
':' . $urlParts[
'port'];
111 return new WikiReference( $canonicalServer,
$path );
123 return $wiki ? $wiki->getDisplayName() : $wikiID;
154 if (
$url ===
false ) {
159 return $linkRenderer->makeExternalLink(
175 public static function getForeignURL( $wikiID, $page, $fragmentId =
null ) {
179 return $wiki->getFullUrl( $page, $fragmentId );
195 return $cache->getWithSetCallback(
196 $cache->makeGlobalKey(
'wikimap-canonical-urls' ),
207 $infoMap[$wikiId] = [
214 if ( $wikiReference ) {
215 $url = $wikiReference->getCanonicalServer();
216 $infoMap[$wikiId] = [
'url' =>
$url,
'parts' => $urlUtils->parse(
$url ) ];
233 if ( str_starts_with(
$url,
"$wgCanonicalServer/" ) ) {
240 $urlPartsCheck = $urlUtils->parse(
$url );
241 if ( $urlPartsCheck ===
null
242 || !in_array( $urlPartsCheck[
'scheme'], [
'',
'http',
'https' ],
true )
247 static $relevantKeys = [
'host' => 1,
'port' => 1 ];
248 $urlPartsCheck = array_intersect_key( $urlPartsCheck, $relevantKeys );
250 foreach ( self::getCanonicalServerInfoForAllWikis() as $wikiId => $info ) {
251 $urlParts = $info[
'parts'];
252 if ( $urlParts ===
false ) {
256 $urlParts = array_intersect_key( $urlParts, $relevantKeys );
257 if ( $urlParts == $urlPartsCheck ) {
279 $domain = DatabaseDomain::newFromId( $domain );
285 if ( !in_array( $domain->getSchema(), [
null,
'mediawiki' ],
true ) ) {
289 return "{$domain->getDatabase()}-{$domain->getSchema()}-{$domain->getTablePrefix()}";
293 return strlen( $domain->getTablePrefix() )
294 ?
"{$domain->getDatabase()}-{$domain->getTablePrefix()}"
295 : (string)$domain->getDatabase();
331 return ( self::getCurrentWikiId() === $wikiId );
$wgConf
$wgConf hold the site configuration.
if(MW_ENTRY_POINT==='index') if(!defined( 'MW_NO_SESSION') &&MW_ENTRY_POINT !=='cli') global $wgTitle
Parent class for all special pages.
static getTitleFor( $name, $subpage=false, $fragment='')
Get a localised Title object for a specified special page name If you don't need a full Title object,...
Class to handle database/schema/prefix specifications for IDatabase.
$wgDBprefix
Config variable stub for the DBprefix setting, for use by phpdoc and IDEs.
$wgLocalDatabases
Config variable stub for the LocalDatabases setting, for use by phpdoc and IDEs.
$wgDBmwschema
Config variable stub for the DBmwschema setting, for use by phpdoc and IDEs.
$wgDBname
Config variable stub for the DBname setting, for use by phpdoc and IDEs.
$wgArticlePath
Config variable stub for the ArticlePath setting, for use by phpdoc and IDEs.
$wgCanonicalServer
Config variable stub for the CanonicalServer setting, for use by phpdoc and IDEs.
$wgServer
Config variable stub for the Server setting, for use by phpdoc and IDEs.