<?php // phpcs:ignore SlevomatCodingStandard.TypeHints.DeclareStrictTypes.DeclareStrictTypesMissing namespace MailPoet\Doctrine; if (!defined('ABSPATH')) exit; use MailPoetVendor\Doctrine\Common\Cache\CacheProvider; use ReflectionClass; use ReflectionException; // Simple filesystem-based cache storage for Doctrine Metadata. // // Needed because Doctrine's FilesystemCache doesn't work read-only (when metadata dumped) // and it calls realpath() that could fail on some hostings due to filesystem permissions. class MetadataCache extends CacheProvider { /** @var bool */ private $isDevMode; /** @var string */ private $directory; public function __construct( $dir, $isReadOnly ) { $this->isDevMode = defined('WP_DEBUG') && WP_DEBUG && !$isReadOnly; $this->directory = rtrim($dir, '/\\'); if (!file_exists($this->directory)) { mkdir($this->directory); } } protected function doFetch($id) { if (!$this->doContains($id)) { return false; } return unserialize((string)file_get_contents($this->getFilename($id))); } protected function doContains($id) { $filename = $this->getFilename($id); $fileExists = file_exists($filename); // in dev mode invalidate cache if source file has changed if ($fileExists && $this->isDevMode) { /** @var \stdClass $classMetadata */ $classMetadata = unserialize((string)file_get_contents($filename)); if (!isset($classMetadata->name) || (!class_exists($classMetadata->name) && !interface_exists($classMetadata->name))) { return false; } try { $reflection = new ReflectionClass($classMetadata->name); } catch (ReflectionException $e) { return false; } clearstatcache(); return filemtime((string)$filename) >= filemtime((string)$reflection->getFileName()); } return $fileExists; } protected function doSave($id, $data, $lifeTime = 0) { $filename = $this->getFilename($id); $result = @file_put_contents($filename, serialize($data)); if ($result === false) { throw new \RuntimeException("Error while writing to '$filename'"); } return true; } protected function doDelete($id) { @unlink($this->getFilename($id)); return true; } protected function doFlush() { $directoryContent = glob($this->directory . DIRECTORY_SEPARATOR . '*'); if ($directoryContent === false) { return false; } foreach ($directoryContent as $filename) { if (is_file($filename)) { @unlink($filename); } } return true; } protected function doGetStats() { return null; } private function getFilename($id) { return $this->directory . DIRECTORY_SEPARATOR . md5($id); } }
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
Annotations | Folder | 0755 |
|
|
EntityTraits | Folder | 0755 |
|
|
EventListeners | Folder | 0755 |
|
|
Middlewares | Folder | 0755 |
|
|
Types | Folder | 0755 |
|
|
Validator | Folder | 0755 |
|
|
WPDB | Folder | 0755 |
|
|
ArrayCache.php | File | 2.01 KB | 0644 |
|
CacheOnlyMappingDriver.php | File | 1.67 KB | 0644 |
|
ConfigurationFactory.php | File | 2.7 KB | 0644 |
|
ConnectionFactory.php | File | 1.84 KB | 0644 |
|
EntityManagerFactory.php | File | 3.94 KB | 0644 |
|
MetadataCache.php | File | 2.69 KB | 0644 |
|
PSRArrayCache.php | File | 1.76 KB | 0644 |
|
PSRCacheInvalidArgumentException.php | File | 319 B | 0644 |
|
PSRCacheItem.php | File | 1.09 KB | 0644 |
|
PSRMetadataCache.php | File | 2.34 KB | 0644 |
|
ProxyClassNameResolver.php | File | 1.11 KB | 0644 |
|
Repository.php | File | 4.46 KB | 0644 |
|
TablePrefixMetadataFactory.php | File | 3.23 KB | 0644 |
|
index.php | File | 6 B | 0644 |
|