Version 1
[yaffs-website] / web / core / lib / Drupal / Component / FileCache / FileCacheFactory.php
diff --git a/web/core/lib/Drupal/Component/FileCache/FileCacheFactory.php b/web/core/lib/Drupal/Component/FileCache/FileCacheFactory.php
new file mode 100644 (file)
index 0000000..15b2026
--- /dev/null
@@ -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 $configuration
+   */
+  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;
+  }
+
+}