Mercurial > hg > isophonics-drupal-site
diff core/modules/locale/src/LocaleProjectStorage.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/modules/locale/src/LocaleProjectStorage.php Wed Nov 29 16:09:58 2017 +0000 @@ -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; + } + +}