PluginProbe ʕ •ᴥ•ʔ
MailPoet – Newsletters, Email Marketing, and Automation / 5.36.0
MailPoet – Newsletters, Email Marketing, and Automation v5.36.0
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 / orm / src / Cache / Region / FileLockRegion.php
mailpoet / vendor-prefixed / doctrine / orm / src / Cache / Region Last commit date
DefaultMultiGetRegion.php 9 months ago DefaultRegion.php 9 months ago FileLockRegion.php 9 months ago UpdateTimestampCache.php 9 months ago index.php 9 months ago
FileLockRegion.php
152 lines
1 <?php
2 declare (strict_types=1);
3 namespace MailPoetVendor\Doctrine\ORM\Cache\Region;
4 if (!defined('ABSPATH')) exit;
5 use MailPoetVendor\Doctrine\ORM\Cache\CacheEntry;
6 use MailPoetVendor\Doctrine\ORM\Cache\CacheKey;
7 use MailPoetVendor\Doctrine\ORM\Cache\CollectionCacheEntry;
8 use MailPoetVendor\Doctrine\ORM\Cache\ConcurrentRegion;
9 use MailPoetVendor\Doctrine\ORM\Cache\Lock;
10 use MailPoetVendor\Doctrine\ORM\Cache\Region;
11 use InvalidArgumentException;
12 use function array_filter;
13 use function array_map;
14 use function chmod;
15 use function file_get_contents;
16 use function file_put_contents;
17 use function fileatime;
18 use function glob;
19 use function is_dir;
20 use function is_file;
21 use function is_writable;
22 use function mkdir;
23 use function sprintf;
24 use function time;
25 use function unlink;
26 use const DIRECTORY_SEPARATOR;
27 use const LOCK_EX;
28 class FileLockRegion implements ConcurrentRegion
29 {
30 public const LOCK_EXTENSION = 'lock';
31 private $region;
32 private $directory;
33 private $lockLifetime;
34 public function __construct(Region $region, $directory, $lockLifetime)
35 {
36 if (!is_dir($directory) && !@mkdir($directory, 0775, \true)) {
37 throw new InvalidArgumentException(sprintf('The directory "%s" does not exist and could not be created.', $directory));
38 }
39 if (!is_writable($directory)) {
40 throw new InvalidArgumentException(sprintf('The directory "%s" is not writable.', $directory));
41 }
42 $this->region = $region;
43 $this->directory = $directory;
44 $this->lockLifetime = $lockLifetime;
45 }
46 private function isLocked(CacheKey $key, ?Lock $lock = null) : bool
47 {
48 $filename = $this->getLockFileName($key);
49 if (!is_file($filename)) {
50 return \false;
51 }
52 $time = $this->getLockTime($filename);
53 $content = $this->getLockContent($filename);
54 if (!$content || !$time) {
55 @unlink($filename);
56 return \false;
57 }
58 if ($lock && $content === $lock->value) {
59 return \false;
60 }
61 // outdated lock
62 if ($time + $this->lockLifetime <= time()) {
63 @unlink($filename);
64 return \false;
65 }
66 return \true;
67 }
68 private function getLockFileName(CacheKey $key) : string
69 {
70 return $this->directory . DIRECTORY_SEPARATOR . $key->hash . '.' . self::LOCK_EXTENSION;
71 }
72 private function getLockContent(string $filename)
73 {
74 return @file_get_contents($filename);
75 }
76 private function getLockTime(string $filename)
77 {
78 return @fileatime($filename);
79 }
80 public function getName()
81 {
82 return $this->region->getName();
83 }
84 public function contains(CacheKey $key)
85 {
86 if ($this->isLocked($key)) {
87 return \false;
88 }
89 return $this->region->contains($key);
90 }
91 public function get(CacheKey $key)
92 {
93 if ($this->isLocked($key)) {
94 return null;
95 }
96 return $this->region->get($key);
97 }
98 public function getMultiple(CollectionCacheEntry $collection)
99 {
100 if (array_filter(array_map([$this, 'isLocked'], $collection->identifiers))) {
101 return null;
102 }
103 return $this->region->getMultiple($collection);
104 }
105 public function put(CacheKey $key, CacheEntry $entry, ?Lock $lock = null)
106 {
107 if ($this->isLocked($key, $lock)) {
108 return \false;
109 }
110 return $this->region->put($key, $entry);
111 }
112 public function evict(CacheKey $key)
113 {
114 if ($this->isLocked($key)) {
115 @unlink($this->getLockFileName($key));
116 }
117 return $this->region->evict($key);
118 }
119 public function evictAll()
120 {
121 // The check below is necessary because on some platforms glob returns false
122 // when nothing matched (even though no errors occurred)
123 $filenames = glob(sprintf('%s/*.%s', $this->directory, self::LOCK_EXTENSION));
124 if ($filenames) {
125 foreach ($filenames as $filename) {
126 @unlink($filename);
127 }
128 }
129 return $this->region->evictAll();
130 }
131 public function lock(CacheKey $key)
132 {
133 if ($this->isLocked($key)) {
134 return null;
135 }
136 $lock = Lock::createLockRead();
137 $filename = $this->getLockFileName($key);
138 if (!@file_put_contents($filename, $lock->value, LOCK_EX)) {
139 return null;
140 }
141 chmod($filename, 0664);
142 return $lock;
143 }
144 public function unlock(CacheKey $key, Lock $lock)
145 {
146 if ($this->isLocked($key, $lock)) {
147 return \false;
148 }
149 return @unlink($this->getLockFileName($key));
150 }
151 }
152