MediaWiki  1.34.0
InterwikiLookupAdapter.php
Go to the documentation of this file.
1 <?php
2 
3 namespace MediaWiki\Interwiki;
4 
31 use Interwiki;
32 use Site;
33 use SiteLookup;
34 use MediaWikiSite;
35 
37 
41  private $siteLookup;
42 
46  private $interwikiMap;
47 
48  function __construct(
50  array $interwikiMap = null
51  ) {
52  $this->siteLookup = $siteLookup;
53  $this->interwikiMap = $interwikiMap;
54  }
55 
63  public function isValidInterwiki( $prefix ) {
64  return array_key_exists( $prefix, $this->getInterwikiMap() );
65  }
66 
74  public function fetch( $prefix ) {
75  if ( $prefix == '' ) {
76  return null;
77  }
78 
79  if ( !$this->isValidInterwiki( $prefix ) ) {
80  return false;
81  }
82 
83  return $this->interwikiMap[$prefix];
84  }
85 
92  public function getAllPrefixes( $local = null ) {
93  $res = [];
94  foreach ( $this->getInterwikiMap() as $interwikiId => $interwiki ) {
95  if ( $local === null || $interwiki->isLocal() === $local ) {
96  $res[] = [
97  'iw_prefix' => $interwikiId,
98  'iw_url' => $interwiki->getURL(),
99  'iw_api' => $interwiki->getAPI(),
100  'iw_wikiid' => $interwiki->getWikiID(),
101  'iw_local' => $interwiki->isLocal(),
102  'iw_trans' => $interwiki->isTranscludable(),
103  ];
104  }
105  }
106  return $res;
107  }
108 
114  public function invalidateCache( $prefix ) {
115  if ( !isset( $this->interwikiMap[$prefix] ) ) {
116  return;
117  }
118  $globalId = $this->interwikiMap[$prefix]->getWikiID();
119  unset( $this->interwikiMap[$prefix] );
120 
121  // Reload the interwiki
122  $site = $this->siteLookup->getSites()->getSite( $globalId );
123  $interwikis = $this->getSiteInterwikis( $site );
124  $this->interwikiMap = array_merge( $this->interwikiMap, [ $interwikis[$prefix] ] );
125  }
126 
130  private function loadInterwikiMap() {
131  $interwikiMap = [];
132  $siteList = $this->siteLookup->getSites();
133  foreach ( $siteList as $site ) {
134  $interwikis = $this->getSiteInterwikis( $site );
135  $interwikiMap = array_merge( $interwikiMap, $interwikis );
136  }
137  $this->interwikiMap = $interwikiMap;
138  }
139 
145  private function getInterwikiMap() {
146  if ( $this->interwikiMap === null ) {
147  $this->loadInterwikiMap();
148  }
149  return $this->interwikiMap;
150  }
151 
158  private function getSiteInterwikis( Site $site ) {
159  $interwikis = [];
160  foreach ( $site->getInterwikiIds() as $interwiki ) {
161  $url = $site->getPageUrl();
162  if ( $site instanceof MediaWikiSite ) {
163  $path = $site->getFileUrl( 'api.php' );
164  } else {
165  $path = '';
166  }
167  $local = $site->getSource() === 'local';
168  // TODO: How to adapt trans?
169  $interwikis[$interwiki] = new Interwiki(
170  $interwiki,
171  $url,
172  $path,
173  $site->getGlobalId(),
174  $local
175  );
176  }
177  return $interwikis;
178  }
179 }
Site\getInterwikiIds
getInterwikiIds()
Returns the interwiki link identifiers that can be used for this site.
Definition: Site.php:546
Site\getPageUrl
getPageUrl( $pageName=false)
Returns the full URL for the given page on the site.
Definition: Site.php:370
MediaWiki\Interwiki\InterwikiLookupAdapter
Definition: InterwikiLookupAdapter.php:36
$res
$res
Definition: testCompression.php:52
SiteLookup
Definition: SiteLookup.php:28
MediaWiki\Interwiki\InterwikiLookupAdapter\invalidateCache
invalidateCache( $prefix)
See InterwikiLookup::invalidateCache.
Definition: InterwikiLookupAdapter.php:114
Site\getGlobalId
getGlobalId()
Returns the global site identifier (ie enwiktionary).
Definition: Site.php:140
Site\getSource
getSource()
Returns the source of the site data (ie 'local', 'wikidata', 'my-magical-repo').
Definition: Site.php:207
MediaWiki\Interwiki\InterwikiLookup
Service interface for looking up Interwiki records.
Definition: InterwikiLookup.php:32
MediaWiki\Interwiki\InterwikiLookupAdapter\getAllPrefixes
getAllPrefixes( $local=null)
See InterwikiLookup::getAllPrefixes.
Definition: InterwikiLookupAdapter.php:92
MediaWiki\Interwiki\InterwikiLookupAdapter\$siteLookup
SiteLookup $siteLookup
Definition: InterwikiLookupAdapter.php:41
Site
Definition: Site.php:29
MediaWiki\Interwiki\InterwikiLookupAdapter\fetch
fetch( $prefix)
See InterwikiLookup::fetch It loads the whole interwiki map.
Definition: InterwikiLookupAdapter.php:74
MediaWiki\Interwiki\InterwikiLookupAdapter\__construct
__construct(SiteLookup $siteLookup, array $interwikiMap=null)
Definition: InterwikiLookupAdapter.php:48
MediaWiki\Interwiki\InterwikiLookupAdapter\getSiteInterwikis
getSiteInterwikis(Site $site)
Load interwikis for the given site.
Definition: InterwikiLookupAdapter.php:158
MediaWiki\Interwiki\InterwikiLookupAdapter\$interwikiMap
Interwiki[] null $interwikiMap
associative array mapping interwiki prefixes to Interwiki objects
Definition: InterwikiLookupAdapter.php:46
MediaWiki\Interwiki\InterwikiLookupAdapter\getInterwikiMap
getInterwikiMap()
Get interwikiMap attribute, load if needed.
Definition: InterwikiLookupAdapter.php:145
MediaWiki\Interwiki\InterwikiLookupAdapter\loadInterwikiMap
loadInterwikiMap()
Load interwiki map to use as cache.
Definition: InterwikiLookupAdapter.php:130
MediaWiki\Interwiki\InterwikiLookupAdapter\isValidInterwiki
isValidInterwiki( $prefix)
See InterwikiLookup::isValidInterwiki It loads the whole interwiki map.
Definition: InterwikiLookupAdapter.php:63
$path
$path
Definition: NoLocalSettings.php:25
Interwiki
Value object for representing interwiki records.
Definition: Interwiki.php:27
MediaWiki\Interwiki
Copyright (C) 2018 Kunal Mehta legoktm@member.fsf.org
Definition: ClassicInterwikiLookup.php:23
MediaWikiSite
Class representing a MediaWiki site.
Definition: MediaWikiSite.php:38