44 private $interwikiMap;
48 array $interwikiMap =
null
50 $this->siteLookup = $siteLookup;
51 $this->interwikiMap = $interwikiMap;
62 return array_key_exists( $prefix, $this->getInterwikiMap() );
72 public function fetch( $prefix ) {
73 if ( $prefix ==
'' ) {
82 return $this->interwikiMap[$prefix];
93 foreach ( $this->getInterwikiMap() as $interwikiId => $interwiki ) {
94 if ( $local ===
null || $interwiki->isLocal() === $local ) {
96 'iw_prefix' => $interwikiId,
97 'iw_url' => $interwiki->getURL(),
98 'iw_api' => $interwiki->getAPI(),
99 'iw_wikiid' => $interwiki->getWikiID(),
100 'iw_local' => $interwiki->isLocal(),
101 'iw_trans' => $interwiki->isTranscludable(),
114 if ( !isset( $this->interwikiMap[$prefix] ) ) {
117 $globalId = $this->interwikiMap[$prefix]->getWikiID();
118 unset( $this->interwikiMap[$prefix] );
121 $site = $this->siteLookup->getSites()->getSite( $globalId );
122 $interwikis = $this->getSiteInterwikis( $site );
123 $this->interwikiMap = array_merge( $this->interwikiMap, [ $interwikis[$prefix] ] );
129 private function loadInterwikiMap() {
131 $siteList = $this->siteLookup->getSites();
132 foreach ( $siteList as $site ) {
133 $interwikis = $this->getSiteInterwikis( $site );
134 $interwikiMap = array_merge( $interwikiMap, $interwikis );
136 $this->interwikiMap = $interwikiMap;
144 private function getInterwikiMap() {
145 if ( $this->interwikiMap ===
null ) {
146 $this->loadInterwikiMap();
148 return $this->interwikiMap;
157 private function getSiteInterwikis( Site $site ) {
158 $url = $site->getPageUrl();
159 if ( $site instanceof MediaWikiSite ) {
160 $path = $site->getFileUrl(
'api.php' );
164 $local = $site->getSource() ===
'local';
167 foreach ( $site->getInterwikiIds() as $interwiki ) {
173 $site->getGlobalId(),
An interwiki record value object.