X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2Fexternalstore%2FExternalStoreMedium.php;h=dd3d6bac12c79fa71c930840e9a7f860747b8036;hb=7af7bbe7476996bf60d8d8e48a84687ccd7505df;hp=6cfa08389e7499d9d4a3b97dcf5415c0af44dbc5;hpb=6f7e982df6479e27c3b17f2deda8404ef55f50e6;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/externalstore/ExternalStoreMedium.php b/includes/externalstore/ExternalStoreMedium.php index 6cfa08389e..dd3d6bac12 100644 --- a/includes/externalstore/ExternalStoreMedium.php +++ b/includes/externalstore/ExternalStoreMedium.php @@ -21,21 +21,51 @@ * @ingroup ExternalStorage */ +use Psr\Log\LoggerAwareInterface; +use Psr\Log\LoggerInterface; +use Psr\Log\NullLogger; + /** - * Accessable external objects in a particular storage medium + * Key/value blob storage for a particular storage medium type (e.g. RDBMs, files) + * + * There can be multiple "locations" for a storage medium type (e.g. DB clusters, filesystems). + * Blobs are stored under URLs of the form ":///". Each type of storage + * medium has an associated protocol. * * @ingroup ExternalStorage * @since 1.21 */ -abstract class ExternalStoreMedium { - /** @var array */ +abstract class ExternalStoreMedium implements LoggerAwareInterface { + /** @var array Usage context options for this instance */ protected $params = []; + /** @var string Default database domain to store content under */ + protected $dbDomain; + /** @var bool Whether this was factoried with an explicit DB domain */ + protected $isDbDomainExplicit; + + /** @var LoggerInterface */ + protected $logger; /** - * @param array $params Options + * @param array $params Usage context options for this instance: + * - domain: the DB domain ID of the wiki the content is for [required] + * - logger: LoggerInterface instance [optional] + * - isDomainImplicit: whether this was factoried without an explicit DB domain [optional] */ - public function __construct( array $params = [] ) { + public function __construct( array $params ) { $this->params = $params; + if ( isset( $params['domain'] ) ) { + $this->dbDomain = $params['domain']; + $this->isDbDomainExplicit = empty( $params['isDomainImplicit'] ); + } else { + throw new InvalidArgumentException( 'Missing DB "domain" parameter.' ); + } + + $this->logger = $params['logger'] ?? new NullLogger(); + } + + public function setLogger( LoggerInterface $logger ) { + $this->logger = $logger; } /** @@ -51,14 +81,13 @@ abstract class ExternalStoreMedium { * Fetch data from given external store URLs. * * @param array $urls A list of external store URLs - * @return array Map from the url to the text stored. Unfound data is not represented + * @return string[] Map of (url => text) for the URLs where data was actually found */ public function batchFetchFromURLs( array $urls ) { $retval = []; foreach ( $urls as $url ) { $data = $this->fetchFromURL( $url ); - // Dont return when false to allow for simpler implementations. - // errored urls are handled in ExternalStore::batchFetchFromURLs + // Dont return when false to allow for simpler implementations if ( $data !== false ) { $retval[$url] = $data; } @@ -76,4 +105,15 @@ abstract class ExternalStoreMedium { * @throws MWException */ abstract public function store( $location, $data ); + + /** + * Check if a given location is read-only + * + * @param string $location The location name + * @return bool Whether this location is read-only + * @since 1.31 + */ + public function isReadOnly( $location ) { + return false; + } }