Version 1
[yaffs-website] / web / core / lib / Drupal / Core / KeyValueStore / KeyValueDatabaseExpirableFactory.php
diff --git a/web/core/lib/Drupal/Core/KeyValueStore/KeyValueDatabaseExpirableFactory.php b/web/core/lib/Drupal/Core/KeyValueStore/KeyValueDatabaseExpirableFactory.php
new file mode 100644 (file)
index 0000000..f9c9b4c
--- /dev/null
@@ -0,0 +1,66 @@
+<?php
+
+namespace Drupal\Core\KeyValueStore;
+
+use Drupal\Component\Serialization\SerializationInterface;
+use Drupal\Core\Database\Connection;
+
+/**
+ * Defines the key/value store factory for the database backend.
+ */
+class KeyValueDatabaseExpirableFactory implements KeyValueExpirableFactoryInterface {
+
+  /**
+   * Holds references to each instantiation so they can be terminated.
+   *
+   * @var \Drupal\Core\KeyValueStore\DatabaseStorageExpirable[]
+   */
+  protected $storages = [];
+
+  /**
+   * The serialization class to use.
+   *
+   * @var \Drupal\Component\Serialization\SerializationInterface
+   */
+  protected $serializer;
+
+  /**
+   * The database connection.
+   *
+   * @var \Drupal\Core\Database\Connection
+   */
+  protected $connection;
+
+  /**
+   * Constructs this factory object.
+   *
+   * @param \Drupal\Component\Serialization\SerializationInterface $serializer
+   *   The serialization class to use.
+   * @param \Drupal\Core\Database\Connection $connection
+   *   The Connection object containing the key-value tables.
+   */
+  public function __construct(SerializationInterface $serializer, Connection $connection) {
+    $this->serializer = $serializer;
+    $this->connection = $connection;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function get($collection) {
+    if (!isset($this->storages[$collection])) {
+      $this->storages[$collection] = new DatabaseStorageExpirable($collection, $this->serializer, $this->connection);
+    }
+    return $this->storages[$collection];
+  }
+
+  /**
+   * Deletes expired items.
+   */
+  public function garbageCollection() {
+    $this->connection->delete('key_value_expire')
+      ->condition('expire', REQUEST_TIME, '<')
+      ->execute();
+  }
+
+}