PluginProbe ʕ •ᴥ•ʔ
MailPoet – Newsletters, Email Marketing, and Automation / 5.36.0
MailPoet – Newsletters, Email Marketing, and Automation v5.36.0
5.36.1 5.36.0 5.35.1 5.35.0 5.34.3 5.34.2 5.34.1 5.34.0 5.33.1 5.33.0 5.32.0 5.31.0 5.30.0 5.29.0 5.28.1 5.28.0 5.27.0 5.26.0 5.26.1 5.25.0 5.24.0 4.43.0 4.43.1 4.44.0 4.44.1 4.45.0 4.46.0 4.47.0 4.48.0 4.48.1 4.48.2 4.49.0 4.49.1 4.5.0 4.5.1 4.5.2 4.50.0 4.50.1 4.51.0 4.51.1 4.51.2 4.52.0 4.53.0 4.54.0 4.55.0 4.56.0 4.57.0 4.58.0 4.58.1 4.58.2 4.6.0 4.6.1 4.6.2 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 5.0.0 5.0.1 5.0.2 5.1.0 5.1.1 5.10.0 5.10.1 5.11.0 5.12.0 5.12.1 5.12.10 5.12.11 5.12.12 5.12.13 5.12.2 5.12.3 5.12.4 5.12.5 5.12.6 5.12.7 5.12.8 5.12.9 5.13.0 5.13.1 5.13.2 5.14.0 5.14.1 5.14.2 5.14.3 5.15.0 5.15.1 5.16.0 5.16.1 5.16.2 5.16.3 5.16.4 5.17.0 5.17.1 5.17.2 5.17.3 5.17.4 5.17.5 5.17.6 5.18.0 5.19.0 5.2.0 5.2.1 5.2.2 5.2.3 5.20.0 5.21.0 5.21.1 5.21.2 5.21.3 5.22.0 5.22.1 5.22.2 5.22.3 5.22.4 5.23.0 5.23.1 5.23.2 5.3.0 5.3.1 5.3.2 5.3.3 5.3.4 5.3.5 5.3.6 5.3.7 5.4.0 5.4.1 5.4.2 5.5.0 5.5.1 5.5.2 5.6.0 5.6.1 5.6.2 5.6.3 5.6.4 5.7.0 5.7.1 5.8.0 5.8.1 5.9.0 3.0.0-beta.15 3.7.1 3.0.0-beta.16 3.7.2 3.0.0-beta.17 3.7.3 3.0.0-beta.18 3.7.4 3.0.0-beta.19 3.7.5 3.0.0-beta.2 3.7.6 3.0.0-beta.20 3.7.8 3.0.0-beta.21 3.70.0 3.0.0-beta.22 3.71.0 3.0.0-beta.23 3.71.1 3.0.0-beta.23.1 3.71.2 3.0.0-beta.23.2 3.71.3 3.0.0-beta.24 3.72.0 3.0.0-beta.25 3.73.0 3.0.0-beta.26 3.73.1 3.0.0-beta.27 3.73.2 3.0.0-beta.28 3.74.0 3.0.0-beta.29 3.74.1 3.0.0-beta.3 3.74.2 3.0.0-beta.30 3.74.3 3.0.0-beta.31 3.75.0 3.0.0-beta.32 3.75.1 3.0.0-beta.33 3.76.0 3.0.0-beta.33.1 3.77.0 3.0.0-beta.34.0.0 3.77.1 3.0.0-beta.36.0.0 3.78.0 3.0.0-beta.36.0.1 3.79.0 3.0.0-beta.36.2.0 3.8 3.0.0-beta.36.3.0 3.8.1 3.0.0-beta.36.3.1 3.8.2 3.0.0-beta.37.0.0 3.8.3 3.0.0-beta.4 3.8.4 3.0.0-beta.5 3.8.5 3.0.0-beta.6 3.8.6 3.0.0-beta.7 3.80.0 3.0.0-beta.7.1 3.81.0 3.0.0-beta.8 3.82.0 3.0.0-beta.9 3.83.0 3.0.0-rc.1.0.0 3.84.0 3.0.0-rc.1.0.1 3.84.1 3.0.0-rc.1.0.2 3.85.0 3.0.0-rc.1.0.3 3.85.1 3.0.0-rc.1.0.4 3.86.0 3.0.0-rc.2.0.0 3.87.0 3.0.0-rc.2.0.1 3.87.1 3.0.0-rc.2.0.2 3.87.2 3.0.0-rc.2.0.3 3.88.0 3.0.1 3.88.1 3.0.2 3.88.2 3.0.3 3.89.0 3.0.4 3.89.1 3.0.5 3.89.2 3.0.6 3.89.3 3.0.7 3.89.4 3.0.8 3.9.0 3.0.9 3.9.1 3.1.0 3.90.0 3.10 3.90.1 3.10.1 3.90.2 3.100.0 3.91.0 3.100.1 3.91.1 3.100.2 3.92.0 3.101.0 3.92.1 3.101.1 3.93.0 3.102.0 3.93.1 3.102.1 3.94.0 3.103.0 3.95.0 3.103.1 3.95.1 3.11.0 3.96.0 3.11.1 3.96.1 3.11.2 3.97.0 3.11.3 3.98.0 3.11.4 3.98.1 3.11.5 3.99.0 3.12.0 3.99.1 3.12.1 4.0.0 3.13.0 4.0.1 3.14.0 4.1.0 3.14.1 4.1.1 3.15.0 4.10.0 3.16.0 4.11.0 3.16.1 4.11.1 3.16.2 4.12.0 3.16.3 4.12.1 3.17.0 4.12.2 3.17.1 4.13.0 3.17.2 4.14.0 3.18.0 4.15.0 3.18.1 4.16.0 3.18.2 4.17.0 3.19.0 4.17.1 3.19.1 4.18.0 3.19.2 4.18.1 3.19.3 4.19.0 3.2.0 4.2.0 3.2.1 4.20.0 3.2.2 4.20.1 3.2.3 4.20.2 3.2.4 4.21.0 3.2.5 4.22.0 3.20.0 4.22.1 3.21.0 4.22.2 3.21.1 4.23.0 3.22.0 4.24.0 3.23.0 4.25.0 3.23.1 4.26.0 3.23.2 4.26.1 3.24.0 4.27.0 3.25.0 4.28.0 3.25.1 4.29.0 3.26.0 4.3.0 3.26.1 4.3.1 3.27.0 4.30.0 3.28.0 4.31.0 3.29.0 4.31.1 3.3.0 4.32.0 3.3.1 4.33.0 3.3.2 4.34.0 3.3.3 4.35.0 3.3.4 4.35.1 3.3.5 4.36.0 3.3.6 4.37.0 3.30.0 4.38.0 3.31.0 4.39.0 3.31.1 4.4.0 3.32.0 4.40.0 3.32.1 4.41.0 3.32.2 4.41.1 3.33.0 4.41.2 3.34.0 4.41.3 3.34.1 4.42.0 3.34.2 4.42.1 3.34.3 3.34.4 3.35.0 3.35.1 3.35.3 3.35.4 3.36.0 3.37.0 3.37.1 3.37.2 3.37.3 3.38.0 3.38.1 3.39.0 3.39.1 3.39.2 3.4.0 3.4.1 3.4.2 3.4.3 3.4.4 3.40.0 3.40.1 3.41.0 3.41.1 3.41.2 3.42.0 3.42.1 3.42.2 3.42.3 3.43.0 3.43.1 3.44.0 3.45.0 3.45.1 3.46.0 3.46.1 3.46.10 3.46.11 3.46.12 3.46.13 3.46.14 3.46.2 3.46.3 3.46.4 3.46.5 3.46.6 3.46.7 3.46.8 3.46.9 3.47.0 3.47.1 3.47.10 3.47.11 3.47.2 3.47.3 3.47.5 3.47.6 3.47.7 3.47.9 3.48.0 3.48.1 3.49.0 3.49.1 3.5.0 3.5.1 3.50.0 3.51.0 3.51.1 3.51.2 3.52.0 3.53.0 3.54.0 3.54.1 3.54.2 3.54.3 3.55.0 3.55.1 3.56.0 3.56.1 3.56.2 3.57.0 3.57.1 3.58.0 3.59.0 3.59.1 3.59.2 3.6.0 3.6.1 3.6.2 3.6.3 3.6.4 3.6.5 3.6.6 3.6.7 3.60.0 3.60.1 3.60.10 3.60.11 3.60.12 3.60.2 3.60.3 3.60.4 3.60.6 3.60.7 3.60.8 3.60.9 3.61.0 3.62.0 3.62.1 3.63.0 3.64.0 3.64.1 3.64.2 3.64.3 3.65.0 trunk 3.65.1 3.0.0 3.66.0 3.0.0-beta.1 3.67.0 3.0.0-beta.10 3.67.1 3.0.0-beta.11 3.68.0 3.0.0-beta.12 3.69.0 3.0.0-beta.13 3.69.1 3.0.0-beta.14 3.7.0
mailpoet / vendor-prefixed / doctrine / cache / lib / Doctrine / Common / Cache / Psr6 / CacheAdapter.php
mailpoet / vendor-prefixed / doctrine / cache / lib / Doctrine / Common / Cache / Psr6 Last commit date
CacheAdapter.php 4 years ago CacheItem.php 4 years ago DoctrineProvider.php 2 years ago InvalidArgument.php 4 years ago TypedCacheItem.php 2 years ago index.php 3 years ago
CacheAdapter.php
238 lines
1 <?php
2 namespace MailPoetVendor\Doctrine\Common\Cache\Psr6;
3 if (!defined('ABSPATH')) exit;
4 use MailPoetVendor\Doctrine\Common\Cache\Cache;
5 use MailPoetVendor\Doctrine\Common\Cache\ClearableCache;
6 use MailPoetVendor\Doctrine\Common\Cache\MultiDeleteCache;
7 use MailPoetVendor\Doctrine\Common\Cache\MultiGetCache;
8 use MailPoetVendor\Doctrine\Common\Cache\MultiPutCache;
9 use MailPoetVendor\Psr\Cache\CacheItemInterface;
10 use MailPoetVendor\Psr\Cache\CacheItemPoolInterface;
11 use MailPoetVendor\Symfony\Component\Cache\DoctrineProvider as SymfonyDoctrineProvider;
12 use function array_key_exists;
13 use function assert;
14 use function count;
15 use function current;
16 use function get_class;
17 use function gettype;
18 use function is_object;
19 use function is_string;
20 use function microtime;
21 use function sprintf;
22 use function strpbrk;
23 use const PHP_VERSION_ID;
24 final class CacheAdapter implements CacheItemPoolInterface
25 {
26 private const RESERVED_CHARACTERS = '{}()/\\@:';
27 private $cache;
28 private $deferredItems = [];
29 public static function wrap(Cache $cache) : CacheItemPoolInterface
30 {
31 if ($cache instanceof DoctrineProvider && !$cache->getNamespace()) {
32 return $cache->getPool();
33 }
34 if ($cache instanceof SymfonyDoctrineProvider && !$cache->getNamespace()) {
35 $getPool = function () {
36 // phpcs:ignore Squiz.Scope.StaticThisUsage.Found
37 return $this->pool;
38 };
39 return $getPool->bindTo($cache, SymfonyDoctrineProvider::class)();
40 }
41 return new self($cache);
42 }
43 private function __construct(Cache $cache)
44 {
45 $this->cache = $cache;
46 }
47 public function getCache() : Cache
48 {
49 return $this->cache;
50 }
51 public function getItem($key) : CacheItemInterface
52 {
53 assert(self::validKey($key));
54 if (isset($this->deferredItems[$key])) {
55 $this->commit();
56 }
57 $value = $this->cache->fetch($key);
58 if (PHP_VERSION_ID >= 80000) {
59 if ($value !== \false) {
60 return new TypedCacheItem($key, $value, \true);
61 }
62 return new TypedCacheItem($key, null, \false);
63 }
64 if ($value !== \false) {
65 return new CacheItem($key, $value, \true);
66 }
67 return new CacheItem($key, null, \false);
68 }
69 public function getItems(array $keys = []) : array
70 {
71 if ($this->deferredItems) {
72 $this->commit();
73 }
74 assert(self::validKeys($keys));
75 $values = $this->doFetchMultiple($keys);
76 $items = [];
77 if (PHP_VERSION_ID >= 80000) {
78 foreach ($keys as $key) {
79 if (array_key_exists($key, $values)) {
80 $items[$key] = new TypedCacheItem($key, $values[$key], \true);
81 } else {
82 $items[$key] = new TypedCacheItem($key, null, \false);
83 }
84 }
85 return $items;
86 }
87 foreach ($keys as $key) {
88 if (array_key_exists($key, $values)) {
89 $items[$key] = new CacheItem($key, $values[$key], \true);
90 } else {
91 $items[$key] = new CacheItem($key, null, \false);
92 }
93 }
94 return $items;
95 }
96 public function hasItem($key) : bool
97 {
98 assert(self::validKey($key));
99 if (isset($this->deferredItems[$key])) {
100 $this->commit();
101 }
102 return $this->cache->contains($key);
103 }
104 public function clear() : bool
105 {
106 $this->deferredItems = [];
107 if (!$this->cache instanceof ClearableCache) {
108 return \false;
109 }
110 return $this->cache->deleteAll();
111 }
112 public function deleteItem($key) : bool
113 {
114 assert(self::validKey($key));
115 unset($this->deferredItems[$key]);
116 return $this->cache->delete($key);
117 }
118 public function deleteItems(array $keys) : bool
119 {
120 foreach ($keys as $key) {
121 assert(self::validKey($key));
122 unset($this->deferredItems[$key]);
123 }
124 return $this->doDeleteMultiple($keys);
125 }
126 public function save(CacheItemInterface $item) : bool
127 {
128 return $this->saveDeferred($item) && $this->commit();
129 }
130 public function saveDeferred(CacheItemInterface $item) : bool
131 {
132 if (!$item instanceof CacheItem && !$item instanceof TypedCacheItem) {
133 return \false;
134 }
135 $this->deferredItems[$item->getKey()] = $item;
136 return \true;
137 }
138 public function commit() : bool
139 {
140 if (!$this->deferredItems) {
141 return \true;
142 }
143 $now = microtime(\true);
144 $itemsCount = 0;
145 $byLifetime = [];
146 $expiredKeys = [];
147 foreach ($this->deferredItems as $key => $item) {
148 $lifetime = ($item->getExpiry() ?? $now) - $now;
149 if ($lifetime < 0) {
150 $expiredKeys[] = $key;
151 continue;
152 }
153 ++$itemsCount;
154 $byLifetime[(int) $lifetime][$key] = $item->get();
155 }
156 $this->deferredItems = [];
157 switch (count($expiredKeys)) {
158 case 0:
159 break;
160 case 1:
161 $this->cache->delete(current($expiredKeys));
162 break;
163 default:
164 $this->doDeleteMultiple($expiredKeys);
165 break;
166 }
167 if ($itemsCount === 1) {
168 return $this->cache->save($key, $item->get(), (int) $lifetime);
169 }
170 $success = \true;
171 foreach ($byLifetime as $lifetime => $values) {
172 $success = $this->doSaveMultiple($values, $lifetime) && $success;
173 }
174 return $success;
175 }
176 public function __destruct()
177 {
178 $this->commit();
179 }
180 private static function validKey($key) : bool
181 {
182 if (!is_string($key)) {
183 throw new InvalidArgument(sprintf('Cache key must be string, "%s" given.', is_object($key) ? get_class($key) : gettype($key)));
184 }
185 if ($key === '') {
186 throw new InvalidArgument('Cache key length must be greater than zero.');
187 }
188 if (strpbrk($key, self::RESERVED_CHARACTERS) !== \false) {
189 throw new InvalidArgument(sprintf('Cache key "%s" contains reserved characters "%s".', $key, self::RESERVED_CHARACTERS));
190 }
191 return \true;
192 }
193 private static function validKeys(array $keys) : bool
194 {
195 foreach ($keys as $key) {
196 self::validKey($key);
197 }
198 return \true;
199 }
200 private function doDeleteMultiple(array $keys) : bool
201 {
202 if ($this->cache instanceof MultiDeleteCache) {
203 return $this->cache->deleteMultiple($keys);
204 }
205 $success = \true;
206 foreach ($keys as $key) {
207 $success = $this->cache->delete($key) && $success;
208 }
209 return $success;
210 }
211 private function doFetchMultiple(array $keys) : array
212 {
213 if ($this->cache instanceof MultiGetCache) {
214 return $this->cache->fetchMultiple($keys);
215 }
216 $values = [];
217 foreach ($keys as $key) {
218 $value = $this->cache->fetch($key);
219 if (!$value) {
220 continue;
221 }
222 $values[$key] = $value;
223 }
224 return $values;
225 }
226 private function doSaveMultiple(array $keysAndValues, int $lifetime = 0) : bool
227 {
228 if ($this->cache instanceof MultiPutCache) {
229 return $this->cache->saveMultiple($keysAndValues, $lifetime);
230 }
231 $success = \true;
232 foreach ($keysAndValues as $key => $value) {
233 $success = $this->cache->save($key, $value, $lifetime) && $success;
234 }
235 return $success;
236 }
237 }
238