![]() 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/amasty/base/Model/SysInfo/Provider/Module/Dir/ |
<?php declare(strict_types=1); /** * @author Amasty Team * @copyright Copyright (c) Amasty (https://www.amasty.com) * @package Magento 2 Base Package */ namespace Amasty\Base\Model\SysInfo\Provider\Module\Dir; use Magento\Framework\App\DeploymentConfig; use Magento\Framework\Config\ConfigOptionsListConstants; use Magento\Framework\Config\FileIterator; use Magento\Framework\Config\FileIteratorFactory; use Magento\Framework\Exception\FileSystemException; use Magento\Framework\Exception\RuntimeException; use Magento\Framework\Exception\ValidatorException; use Magento\Framework\Module\Dir; use Magento\Framework\Module\Dir\Reader as FrameworkDirReader; use Magento\Framework\Filesystem\Directory\ReadFactory; class Reader { /** * @var FileIteratorFactory */ private $fileIteratorFactory; /** * @var ReadFactory */ private $readFactory; /** * @var FrameworkDirReader */ private $frameworkDirReader; /** * @var DeploymentConfig */ private $deploymentConfig; /** * Found configuration files grouped by configuration types (filename). * * @var array */ private $fileIterators = []; public function __construct( FileIteratorFactory $fileIteratorFactory, ReadFactory $readFactory, FrameworkDirReader $frameworkDirReader, DeploymentConfig $deploymentConfig ) { $this->fileIteratorFactory = $fileIteratorFactory; $this->readFactory = $readFactory; $this->frameworkDirReader = $frameworkDirReader; $this->deploymentConfig = $deploymentConfig; } /** * Go through all modules and find configuration files of active modules. * * @param string $filename * @param string $moduleProviderName * @param string|bool $moduleStatus * @return FileIterator * @throws FileSystemException * @throws ValidatorException|RuntimeException */ public function getConfigurationFiles( string $filename, string $moduleProviderName = 'all', $moduleStatus = 'all' ): FileIterator { return $this->getFilesIterator($filename, $moduleProviderName, $moduleStatus, Dir::MODULE_ETC_DIR); } /** * Retrieve iterator for files with $filename from components located in component $subDir. * * @param string $filename * @param string $moduleProviderName * @param string|bool $moduleStatus * @param string $subDir * @return FileIterator * @throws FileSystemException * @throws ValidatorException|RuntimeException */ private function getFilesIterator( string $filename, string $moduleProviderName, $moduleStatus, string $subDir = '' ): FileIterator { if (!isset($this->fileIterators[$subDir][$filename][$moduleProviderName][$moduleStatus])) { $this->fileIterators[$subDir][$filename][$moduleProviderName][$moduleStatus] = $this->fileIteratorFactory->create( $this->getFiles($filename, $moduleProviderName, $moduleStatus, $subDir) ); } return $this->fileIterators[$subDir][$filename][$moduleProviderName][$moduleStatus]; } /** * Go through all modules and find corresponding files of active modules * * @param string $filename * @param string $moduleProviderName * @param string|bool $requiredModuleStatus * @param string $subDir * @return array * @throws FileSystemException * @throws ValidatorException|RuntimeException */ private function getFiles( string $filename, string $moduleProviderName, $requiredModuleStatus, string $subDir = '' ): array { $result = []; $moduleList = $this->deploymentConfig->get(ConfigOptionsListConstants::KEY_MODULES); foreach ($moduleList as $moduleName => $moduleStatus) { if ($this->isValid($moduleName, $moduleStatus, $moduleProviderName, $requiredModuleStatus)) { try { $moduleSubDir = $this->frameworkDirReader->getModuleDir($subDir, $moduleName); } catch (\InvalidArgumentException $e) { continue; } $file = $moduleSubDir . '/' . $filename; $directoryRead = $this->readFactory->create($moduleSubDir); $path = $directoryRead->getRelativePath($file); if ($directoryRead->isExist($path)) { $result[] = $file; } } } return $result; } private function isValid($moduleName, $moduleStatus, $moduleProviderName, $requiredModuleStatus) { $isValid = true; if ($moduleProviderName != 'all' && strpos($moduleName, $moduleProviderName . '_') !== 0) { $isValid = false; } if ($requiredModuleStatus != 'all' && $requiredModuleStatus != (bool)$moduleStatus) { $isValid = false; } return $isValid; } }