class LocaleProjectStorage

Same name and namespace in other branches
  1. 9 core/modules/locale/src/LocaleProjectStorage.php \Drupal\locale\LocaleProjectStorage
  2. 10 core/modules/locale/src/LocaleProjectStorage.php \Drupal\locale\LocaleProjectStorage
  3. 11.x core/modules/locale/src/LocaleProjectStorage.php \Drupal\locale\LocaleProjectStorage

Provides the locale project storage system using a key value store.

Hierarchy

Expanded class hierarchy of LocaleProjectStorage

1 string reference to 'LocaleProjectStorage'
locale.services.yml in core/modules/locale/locale.services.yml
core/modules/locale/locale.services.yml
1 service uses LocaleProjectStorage
locale.project in core/modules/locale/locale.services.yml
Drupal\locale\LocaleProjectStorage

File

core/modules/locale/src/LocaleProjectStorage.php, line 10

Namespace

Drupal\locale
View source
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];
            }
            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;
    }

}

Members

Title Sort descending Modifiers Object type Summary Overriden Title
LocaleProjectStorage::$all protected static property Cache status flag.
LocaleProjectStorage::$cache protected property Static state cache.
LocaleProjectStorage::$keyValueStore protected property The key value store to use.
LocaleProjectStorage::countProjects public function Returns the count of project records. Overrides LocaleProjectStorageInterface::countProjects
LocaleProjectStorage::delete public function Deletes project records for a given key. Overrides LocaleProjectStorageInterface::delete
LocaleProjectStorage::deleteAll public function Deletes all projects records. Overrides LocaleProjectStorageInterface::deleteAll
LocaleProjectStorage::deleteMultiple public function Deletes multiple project records. Overrides LocaleProjectStorageInterface::deleteMultiple
LocaleProjectStorage::disableAll public function Mark all projects as disabled. Overrides LocaleProjectStorageInterface::disableAll
LocaleProjectStorage::get public function Returns the stored value for a given key. Overrides LocaleProjectStorageInterface::get
LocaleProjectStorage::getAll public function Returns all the project records. Overrides LocaleProjectStorageInterface::getAll
LocaleProjectStorage::getMultiple public function Returns a list of project records. Overrides LocaleProjectStorageInterface::getMultiple
LocaleProjectStorage::resetCache public function Resets the project storage cache. Overrides LocaleProjectStorageInterface::resetCache
LocaleProjectStorage::set public function Creates or updates the project record. Overrides LocaleProjectStorageInterface::set
LocaleProjectStorage::setMultiple public function Creates or updates multiple project records. Overrides LocaleProjectStorageInterface::setMultiple
LocaleProjectStorage::__construct public function Constructs a State object.

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.