MediaWiki  master
FileBasedSiteLookup.php
Go to the documentation of this file.
1 <?php
29 class FileBasedSiteLookup implements SiteLookup {
30 
34  private $sites = null;
35 
39  private $cacheFile;
40 
44  public function __construct( $cacheFile ) {
45  wfDeprecated( __CLASS__, '1.33' );
46  $this->cacheFile = $cacheFile;
47  }
48 
54  public function getSites() {
55  if ( $this->sites === null ) {
56  $this->sites = $this->loadSitesFromCache();
57  }
58 
59  return $this->sites;
60  }
61 
69  public function getSite( $globalId ) {
70  $sites = $this->getSites();
71 
72  return $sites->hasSite( $globalId ) ? $sites->getSite( $globalId ) : null;
73  }
74 
78  private function loadSitesFromCache() {
79  $data = $this->loadJsonFile();
80 
81  $sites = new SiteList();
82 
83  // @todo lazy initialize the site objects in the site list (e.g. only when needed to access)
84  foreach ( $data['sites'] as $siteArray ) {
85  $sites[] = $this->newSiteFromArray( $siteArray );
86  }
87 
88  return $sites;
89  }
90 
95  private function loadJsonFile() {
96  if ( !is_readable( $this->cacheFile ) ) {
97  throw new MWException( 'SiteList cache file not found.' );
98  }
99 
100  $contents = file_get_contents( $this->cacheFile );
101  $data = json_decode( $contents, true );
102 
103  if ( !is_array( $data ) || !is_array( $data['sites'] )
104  || !array_key_exists( 'sites', $data )
105  ) {
106  throw new MWException( 'SiteStore json cache data is invalid.' );
107  }
108 
109  return $data;
110  }
111 
117  private function newSiteFromArray( array $data ) {
118  $siteType = array_key_exists( 'type', $data ) ? $data['type'] : Site::TYPE_UNKNOWN;
119  $site = Site::newForType( $siteType );
120 
121  $site->setGlobalId( $data['globalid'] );
122  $site->setForward( $data['forward'] );
123  $site->setGroup( $data['group'] );
124  $site->setLanguageCode( $data['language'] );
125  $site->setSource( $data['source'] );
126  $site->setExtraData( $data['data'] );
127  $site->setExtraConfig( $data['config'] );
128 
129  foreach ( $data['identifiers'] as $identifier ) {
130  $site->addLocalId( $identifier['type'], $identifier['key'] );
131  }
132 
133  return $site;
134  }
135 
136 }
hasSite( $globalSiteId)
Returns if the list contains the site with the provided global site identifier.
Definition: SiteList.php:140
static newForType( $siteType)
Definition: Site.php:646
const TYPE_UNKNOWN
Definition: Site.php:30
Provides a file-based cache of a SiteStore, using a json file.
wfDeprecated( $function, $version=false, $component=false, $callerOffset=2)
Throws a warning that $function is deprecated.
getSite( $globalSiteId)
Returns the Site with the provided global site identifier.
Definition: SiteList.php:154