![]() 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/mautic.corals.io/app/bundles/CoreBundle/Cache/ |
<?php declare(strict_types=1); namespace Mautic\CoreBundle\Cache; use Symfony\Component\HttpKernel\CacheWarmer\CacheWarmerInterface; class MiddlewareCacheWarmer implements CacheWarmerInterface { private ?string $cacheFile = null; /** * @var \SplPriorityQueue|\ReflectionClass[] */ private \SplPriorityQueue $specs; public function __construct( private string $env ) { $this->specs = new \SplPriorityQueue(); } /** * @inerhitDoc */ public function warmUp(string $cacheDirectory) { $this->cacheFile = sprintf('%s/middlewares.cache.php', $cacheDirectory); $this->createCacheFile($cacheDirectory); return []; } public function isOptional(): bool { return false; } private function createCacheFile($cacheDirectory): void { $middlewarsDir = __DIR__.'/../../../middlewares'; $this->loadFromDirectory($middlewarsDir); $envDir = $middlewarsDir.'/'.ucfirst($this->env); if (file_exists($envDir)) { $this->loadFromDirectory($envDir, $this->env); } if (file_exists($this->cacheFile)) { unlink($this->cacheFile); } if (false === file_exists($cacheDirectory)) { mkdir($cacheDirectory, 0777, true); } $data = []; $this->specs->setExtractFlags(\SplPriorityQueue::EXTR_DATA); /** @var \ReflectionClass $middleware */ foreach ($this->specs as $middleware) { $data[] = $middleware->getName(); } $content = sprintf('<?php return %s;', var_export($data, true)); file_put_contents($this->cacheFile, $content); } private function loadFromDirectory(string $directory, ?string $env = null): void { $glob = glob($directory.'/*Middleware.php'); if (!empty($glob)) { $this->addMiddlewares($glob, $env); } } private function addMiddlewares(array $middlewares, ?string $env = null): void { $prefix = 'Mautic\\Middleware\\'; if ($env) { $prefix .= ucfirst($env).'\\'; } foreach ($middlewares as $middleware) { $this->push($prefix.basename(substr($middleware, 0, -4))); } } private function push(string $middlewareClass): void { try { $reflection = new \ReflectionClass($middlewareClass); $priority = $reflection->getConstant('PRIORITY'); $this->specs->insert($reflection, $priority); } catch (\ReflectionException) { /* If there's an error getting the kernel class, it's * an invalid middleware. If it's invalid, don't push * it to the stack */ } } }