43 private $interwikiMap;
47 ?array $interwikiMap =
null
49 $this->siteLookup = $siteLookup;
50 $this->interwikiMap = $interwikiMap;
61 return array_key_exists( $prefix, $this->getInterwikiMap() );
71 public function fetch( $prefix ) {
72 if ( $prefix ==
'' ) {
81 return $this->interwikiMap[$prefix];
92 foreach ( $this->getInterwikiMap() as $interwikiId => $interwiki ) {
93 if ( $local ===
null || $interwiki->isLocal() === $local ) {
95 'iw_prefix' => $interwikiId,
96 'iw_url' => $interwiki->getURL(),
97 'iw_api' => $interwiki->getAPI(),
98 'iw_wikiid' => $interwiki->getWikiID(),
99 'iw_local' => $interwiki->isLocal(),
100 'iw_trans' => $interwiki->isTranscludable(),
113 if ( !isset( $this->interwikiMap[$prefix] ) ) {
116 $globalId = $this->interwikiMap[$prefix]->getWikiID();
117 unset( $this->interwikiMap[$prefix] );
120 $site = $this->siteLookup->getSites()->getSite( $globalId );
121 $interwikis = $this->getSiteInterwikis( $site );
122 $this->interwikiMap = array_merge( $this->interwikiMap, [ $interwikis[$prefix] ] );
128 private function loadInterwikiMap() {
130 $siteList = $this->siteLookup->getSites();
131 foreach ( $siteList as $site ) {
132 $interwikis = $this->getSiteInterwikis( $site );
133 $interwikiMap = array_merge( $interwikiMap, $interwikis );
135 $this->interwikiMap = $interwikiMap;
143 private function getInterwikiMap() {
144 if ( $this->interwikiMap ===
null ) {
145 $this->loadInterwikiMap();
147 return $this->interwikiMap;
156 private function getSiteInterwikis( Site $site ) {
157 $url = $site->getPageUrl();
158 if ( $site instanceof MediaWikiSite ) {
159 $path = $site->getFileUrl(
'api.php' );
163 $local = $site->getSource() ===
'local';
166 foreach ( $site->getInterwikiIds() as $interwiki ) {
168 $interwikis[$interwiki] =
new Interwiki(
172 $site->getGlobalId(),