Mercurial > hg > isophonics-drupal-site
view core/modules/locale/src/LocaleProjectStorage.php @ 19:fa3358dc1485 tip
Add ndrum files
author | Chris Cannam |
---|---|
date | Wed, 28 Aug 2019 13:14:47 +0100 |
parents | 4c8ae668cc8c |
children |
line wrap: on
line source
<?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; } }