OwlCyberSecurity - MANAGER
Edit File: ChainCache.php
<?php /* * This file is part of Twig. * * (c) Fabien Potencier * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace ElementorDeps\Twig\Cache; /** * Chains several caches together. * * Cached items are fetched from the first cache having them in its data store. * They are saved and deleted in all adapters at once. * * @author Quentin Devos <quentin@devos.pm> */ final class ChainCache implements CacheInterface { private $caches; /** * @param iterable<CacheInterface> $caches The ordered list of caches used to store and fetch cached items */ public function __construct(iterable $caches) { $this->caches = $caches; } public function generateKey(string $name, string $className) : string { return $className . '#' . $name; } public function write(string $key, string $content) : void { $splitKey = $this->splitKey($key); foreach ($this->caches as $cache) { $cache->write($cache->generateKey(...$splitKey), $content); } } public function load(string $key) : void { [$name, $className] = $this->splitKey($key); foreach ($this->caches as $cache) { $cache->load($cache->generateKey($name, $className)); if (\class_exists($className, \false)) { break; } } } public function getTimestamp(string $key) : int { $splitKey = $this->splitKey($key); foreach ($this->caches as $cache) { if (0 < ($timestamp = $cache->getTimestamp($cache->generateKey(...$splitKey)))) { return $timestamp; } } return 0; } /** * @return string[] */ private function splitKey(string $key) : array { return \array_reverse(\explode('#', $key, 2)); } }