MediaWiki  master
ExternalStoreMedium.php
Go to the documentation of this file.
1 <?php
21 use Psr\Log\LoggerAwareInterface;
22 use Psr\Log\LoggerInterface;
23 use Psr\Log\NullLogger;
24 
36 abstract class ExternalStoreMedium implements LoggerAwareInterface {
38  protected $params = [];
40  protected $dbDomain;
43 
45  protected $logger;
46 
53  public function __construct( array $params ) {
54  $this->params = $params;
55  if ( isset( $params['domain'] ) ) {
56  $this->dbDomain = $params['domain'];
57  $this->isDbDomainExplicit = empty( $params['isDomainImplicit'] );
58  } else {
59  throw new InvalidArgumentException( 'Missing DB "domain" parameter.' );
60  }
61 
62  $this->logger = $params['logger'] ?? new NullLogger();
63  }
64 
65  public function setLogger( LoggerInterface $logger ) {
66  $this->logger = $logger;
67  }
68 
76  abstract public function fetchFromURL( $url );
77 
84  public function batchFetchFromURLs( array $urls ) {
85  $retval = [];
86  foreach ( $urls as $url ) {
87  $data = $this->fetchFromURL( $url );
88  // Dont return when false to allow for simpler implementations
89  if ( $data !== false ) {
90  $retval[$url] = $data;
91  }
92  }
93 
94  return $retval;
95  }
96 
105  abstract public function store( $location, $data );
106 
114  public function isReadOnly( $location ) {
115  return false;
116  }
117 }
Base class for external storage.
array $params
Usage context options for this instance.
setLogger(LoggerInterface $logger)
fetchFromURL( $url)
Fetch data from given external store URL.
bool $isDbDomainExplicit
Whether this was factoried with an explicit DB domain.
store( $location, $data)
Insert a data item into a given location.
batchFetchFromURLs(array $urls)
Fetch data from given external store URLs.
isReadOnly( $location)
Check if a given location is read-only.
string $dbDomain
Default database domain to store content under.
__construct(array $params)