Version 1
[yaffs-website] / web / core / modules / locale / src / LocaleProjectStorage.php
diff --git a/web/core/modules/locale/src/LocaleProjectStorage.php b/web/core/modules/locale/src/LocaleProjectStorage.php
new file mode 100644 (file)
index 0000000..05faa17
--- /dev/null
@@ -0,0 +1,169 @@
+<?php
+
+namespace Drupal\locale;
+
+use Drupal\Core\KeyValueStore\KeyValueFactoryInterface;
+
+/**
+ * Provides the locale project storage system using a key value store.
+ */
+class LocaleProjectStorage implements LocaleProjectStorageInterface {
+
+  /**
+   * The key value store to use.
+   *
+   * @var \Drupal\Core\KeyValueStore\KeyValueStoreInterface
+   */
+  protected $keyValueStore;
+
+  /**
+   * Static state cache.
+   *
+   * @var array
+   */
+  protected $cache = [];
+
+  /**
+   * Cache status flag.
+   *
+   * @var bool
+   */
+  protected static $all = FALSE;
+
+  /**
+   * Constructs a State object.
+   *
+   * @param \Drupal\Core\KeyValueStore\KeyValueFactoryInterface $key_value_factory
+   *   The key value store to use.
+   */
+  public function __construct(KeyValueFactoryInterface $key_value_factory) {
+    $this->keyValueStore = $key_value_factory->get('locale.project');
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function get($key, $default = NULL) {
+    $values = $this->getMultiple([$key]);
+    return isset($values[$key]) ? $values[$key] : $default;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getMultiple(array $keys) {
+    $values = [];
+    $load = [];
+    foreach ($keys as $key) {
+      // Check if we have a value in the cache.
+      if (isset($this->cache[$key])) {
+        $values[$key] = $this->cache[$key];
+      }
+      // Load the value if we don't have an explicit NULL value.
+      elseif (!array_key_exists($key, $this->cache)) {
+        $load[] = $key;
+      }
+    }
+
+    if ($load) {
+      $loaded_values = $this->keyValueStore->getMultiple($load);
+      foreach ($load as $key) {
+        // If we find a value, even one that is NULL, add it to the cache and
+        // return it.
+        if (isset($loaded_values[$key])) {
+          $values[$key] = $loaded_values[$key];
+          $this->cache[$key] = $loaded_values[$key];
+        }
+        else {
+          $this->cache[$key] = NULL;
+        }
+      }
+    }
+
+    return $values;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function set($key, $value) {
+    $this->setMultiple([$key => $value]);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setMultiple(array $data) {
+    foreach ($data as $key => $value) {
+      $this->cache[$key] = $value;
+    }
+    $this->keyValueStore->setMultiple($data);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function delete($key) {
+    $this->deleteMultiple([$key]);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function deleteMultiple(array $keys) {
+    foreach ($keys as $key) {
+      $this->cache[$key] = NULL;
+    }
+    $this->keyValueStore->deleteMultiple($keys);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function resetCache() {
+    $this->cache = [];
+    static::$all = FALSE;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function deleteAll() {
+    $this->keyValueStore->deleteAll();
+    $this->resetCache();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function disableAll() {
+    $projects = $this->keyValueStore->getAll();
+    foreach (array_keys($projects) as $key) {
+      $projects[$key]['status'] = 0;
+      if (isset($cache[$key])) {
+        $cache[$key] = $projects[$key];
+      }
+    }
+    $this->keyValueStore->setMultiple($projects);
+
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function countProjects() {
+    return count($this->getAll());
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getAll() {
+    if (!static::$all) {
+      $this->cache = $this->keyValueStore->getAll();
+      static::$all = TRUE;
+    }
+    return $this->cache;
+  }
+
+}