![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/old/vendor/magento/module-remote-storage/Driver/Adapter/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\RemoteStorage\Driver\Adapter; use League\Flysystem\Config; use League\Flysystem\FileAttributes; use League\Flysystem\FilesystemAdapter; use Magento\RemoteStorage\Driver\Adapter\Cache\CacheInterface; /** * Cached adapter implementation for filesystem storage. */ class CachedAdapter implements CachedAdapterInterface { /** * @var FilesystemAdapter */ private $adapter; /** * @var CacheInterface */ private $cache; /** * @var MetadataProviderInterface */ private $metadataProvider; /** * Constructor. * * @param FilesystemAdapter $adapter * @param CacheInterface $cache * @param MetadataProviderInterface $metadataProvider */ public function __construct( FilesystemAdapter $adapter, CacheInterface $cache, MetadataProviderInterface $metadataProvider ) { $this->adapter = $adapter; $this->cache = $cache; $this->metadataProvider = $metadataProvider; } /** * {@inheritdoc} */ public function write(string $path, string $contents, Config $config): void { $this->adapter->write($path, $contents, $config); $object = [ 'type' => 'file', 'path' => $path, ]; $this->cache->updateMetadata($path, $object, true); } /** * {@inheritdoc} */ public function writeStream(string $path, $contents, Config $config): void { $this->adapter->writeStream($path, $contents, $config); $object = [ 'type' => 'file', 'path' => $path, ]; $this->cache->updateMetadata($path, $object, true); } /** * {@inheritdoc} */ public function move(string $source, string $destination, Config $config): void { $this->adapter->move($source, $destination, $config); $this->cache->moveFile($source, $destination); } /** * {@inheritdoc} */ public function copy(string $source, string $destination, Config $config): void { $this->adapter->copy($source, $destination, $config); $this->cache->copyFile($source, $destination); } /** * {@inheritdoc} */ public function delete(string $path): void { $this->adapter->delete($path); $this->cache->deleteFile($path); } /** * {@inheritdoc} */ public function deleteDirectory(string $path): void { $this->adapter->deleteDirectory($path); $this->cache->deleteDir($path); } /** * {@inheritdoc} */ public function createDirectory(string $path, Config $config): void { $this->adapter->createDirectory($path, $config); $type = 'dir'; $dirname = $path; $this->cache->updateMetadata($dirname, ['path' => $path, 'type' => $type], true); } /** * {@inheritdoc} */ public function setVisibility(string $path, string $visibility): void { $this->adapter->setVisibility($path, $visibility); $this->cache->updateMetadata($path, ['path' => $path, 'visibility' => $visibility], true); } /** * {@inheritdoc} */ public function fileExists(string $path): bool { $cacheHas = $this->cache->exists($path); if ($cacheHas !== null) { return $cacheHas; } $exists = $this->adapter->fileExists($path); if (!$exists) { try { // check if target is a directory $exists = iterator_count($this->adapter->listContents($path, false)) > 0; } catch (\Throwable $e) { // catch closed iterator $exists = false; } } if (!$exists) { $this->cache->storeFileNotExists($path); } else { $cacheEntry = is_array($exists) ? $exists : ['path' => $path]; $this->cache->updateMetadata($path, $cacheEntry, true); } return $exists; } /** * {@inheritdoc} */ public function read(string $path): string { return $this->adapter->read($path); } /** * {@inheritdoc} */ public function readStream(string $path) { return $this->adapter->readStream($path); } /** * {@inheritdoc} */ public function listContents(string $path, bool $deep): iterable { return $this->adapter->listContents($path, $deep); } /** * {@inheritdoc} */ public function fileSize(string $path): FileAttributes { $result = $this->metadataProvider->getMetadata($path); return new FileAttributes($path, (int)$result['size']); } /** * {@inheritdoc} */ public function mimeType(string $path): FileAttributes { $result = $this->metadataProvider->getMetadata($path); return new FileAttributes($path, null, null, null, $result['mimetype']); } /** * {@inheritdoc} */ public function lastModified(string $path): FileAttributes { $result = $this->metadataProvider->getMetadata($path); return new FileAttributes($path, null, null, (int)$result['timestamp']); } /** * {@inheritdoc} */ public function visibility(string $path): FileAttributes { $result = $this->metadataProvider->getMetadata($path); return new FileAttributes($path, null, $result['visibility']); } }