29 private $interwikiMap;
33 ?array $interwikiMap =
null
35 $this->siteLookup = $siteLookup;
36 $this->interwikiMap = $interwikiMap;
47 return array_key_exists( $prefix, $this->getInterwikiMap() );
57 public function fetch( $prefix ) {
58 if ( $prefix ==
'' ) {
67 return $this->interwikiMap[$prefix];
78 foreach ( $this->getInterwikiMap() as $interwikiId => $interwiki ) {
79 if ( $local ===
null || $interwiki->isLocal() === $local ) {
81 'iw_prefix' => $interwikiId,
82 'iw_url' => $interwiki->getURL(),
83 'iw_api' => $interwiki->getAPI(),
84 'iw_wikiid' => $interwiki->getWikiID(),
85 'iw_local' => $interwiki->isLocal(),
86 'iw_trans' => $interwiki->isTranscludable(),
99 if ( !isset( $this->interwikiMap[$prefix] ) ) {
102 $globalId = $this->interwikiMap[$prefix]->getWikiID();
103 unset( $this->interwikiMap[$prefix] );
106 $site = $this->siteLookup->getSites()->getSite( $globalId );
107 $interwikis = $this->getSiteInterwikis( $site );
108 $this->interwikiMap[$prefix] = $interwikis[$prefix];
114 private function loadInterwikiMap() {
116 $siteList = $this->siteLookup->getSites();
117 foreach ( $siteList as $site ) {
118 $interwikis = $this->getSiteInterwikis( $site );
119 $interwikiMap = array_merge( $interwikiMap, $interwikis );
121 $this->interwikiMap = $interwikiMap;
129 private function getInterwikiMap(): array {
130 if ( $this->interwikiMap === null ) {
131 $this->loadInterwikiMap();
133 return $this->interwikiMap;
142 private function getSiteInterwikis( Site $site ): array {
143 $url = $site->getPageUrl();
144 if ( $site instanceof MediaWikiSite ) {
145 $path = $site->getFileUrl(
'api.php' );
149 $local = $site->getSource() ===
'local';
152 foreach ( $site->getInterwikiIds() as $interwiki ) {
154 $interwikis[$interwiki] =
new Interwiki(
158 $site->getGlobalId(),