Mercurial > hg > isophonics-drupal-site
diff core/lib/Drupal/Component/FileCache/FileCacheFactory.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/lib/Drupal/Component/FileCache/FileCacheFactory.php Wed Nov 29 16:09:58 2017 +0000 @@ -0,0 +1,119 @@ +<?php + +namespace Drupal\Component\FileCache; + +/** + * Creates a FileCache object. + */ +class FileCacheFactory { + + /** + * The configuration key to disable FileCache completely. + */ + const DISABLE_CACHE = 'file_cache_disable'; + + /** + * The configuration used to create FileCache objects. + * + * @var array + */ + protected static $configuration; + + /** + * The cache prefix. + * + * @var string + */ + protected static $prefix; + + /** + * Instantiates a FileCache object for a given collection identifier. + * + * @param string $collection + * The collection identifier for this FileCache. + * @param array $default_configuration + * (optional) The default configuration for this FileCache collection. This + * can be used to e.g. specify default usage of a FileCache class. + * + * @return \Drupal\Component\FileCache\FileCacheInterface + * The initialized FileCache object. + */ + public static function get($collection, $default_configuration = []) { + // If there is a special key in the configuration, disable FileCache completely. + if (!empty(static::$configuration[static::DISABLE_CACHE])) { + return new NullFileCache('', ''); + } + + $configuration = []; + + // Check for a collection specific setting first. + if (isset(static::$configuration[$collection])) { + $configuration += static::$configuration[$collection]; + } + // Then check if a default configuration has been provided. + if (!empty($default_configuration)) { + $configuration += $default_configuration; + } + // Last check if a default setting has been provided. + if (isset(static::$configuration['default'])) { + $configuration += static::$configuration['default']; + } + + // Ensure that all properties are set. + $fallback_configuration = [ + 'class' => '\Drupal\Component\FileCache\FileCache', + 'collection' => $collection, + 'cache_backend_class' => NULL, + 'cache_backend_configuration' => [], + ]; + + $configuration = $configuration + $fallback_configuration; + + $class = $configuration['class']; + return new $class(static::getPrefix(), $configuration['collection'], $configuration['cache_backend_class'], $configuration['cache_backend_configuration']); + } + + /** + * Gets the configuration used for constructing future file cache objects. + * + * @return array + * The configuration that is used. + */ + public static function getConfiguration() { + return static::$configuration; + } + + /** + * Sets the configuration to use for constructing future file cache objects. + * + * @param array $configuration + * The configuration to use. + */ + public static function setConfiguration($configuration) { + static::$configuration = $configuration; + } + + /** + * Returns the cache prefix. + * + * @return string + * The cache prefix. + */ + public static function getPrefix() { + return static::$prefix; + } + + /** + * Sets the cache prefix that should be used. + * + * Should be set to a secure, unique key to prevent cache pollution by a + * third party. + * + * @param string $prefix + * The cache prefix. + */ + public static function setPrefix($prefix) { + static::$prefix = $prefix; + } + +}