File: /home/petsclubcc/magento/vendor/magento/framework/Module/Dir/Reader.php
<?php
/**
* Module configuration file reader
*
* Copyright © 2016 Magento. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\Framework\Module\Dir;
use Magento\Framework\Config\FileIterator;
use Magento\Framework\Config\FileIteratorFactory;
use Magento\Framework\Filesystem;
use Magento\Framework\Module\Dir;
use Magento\Framework\Module\ModuleListInterface;
class Reader
{
/**
* Module directories that were set explicitly
*
* @var array
*/
protected $customModuleDirs = [];
/**
* Directory registry
*
* @var Dir
*/
protected $moduleDirs;
/**
* Modules configuration provider
*
* @var ModuleListInterface
*/
protected $modulesList;
/**
* @var FileIteratorFactory
*/
protected $fileIteratorFactory;
/**
* @var Filesystem\Directory\ReadFactory
*/
protected $readFactory;
/**
* @param Dir $moduleDirs
* @param ModuleListInterface $moduleList
* @param FileIteratorFactory $fileIteratorFactory
* @param Filesystem\Directory\ReadFactory $readFactory
*/
public function __construct(
Dir $moduleDirs,
ModuleListInterface $moduleList,
FileIteratorFactory $fileIteratorFactory,
Filesystem\Directory\ReadFactory $readFactory
) {
$this->moduleDirs = $moduleDirs;
$this->modulesList = $moduleList;
$this->fileIteratorFactory = $fileIteratorFactory;
$this->readFactory = $readFactory;
}
/**
* Go through all modules and find configuration files of active modules
*
* @param string $filename
* @return FileIterator
*/
public function getConfigurationFiles($filename)
{
return $this->fileIteratorFactory->create($this->getFiles($filename, Dir::MODULE_ETC_DIR));
}
/**
* Go through all modules and find composer.json files of active modules
*
* @return FileIterator
*/
public function getComposerJsonFiles()
{
return $this->fileIteratorFactory->create($this->getFiles('composer.json'));
}
/**
* Go through all modules and find corresponding files of active modules
*
* @param string $filename
* @param string $subDir
* @return array
*/
private function getFiles($filename, $subDir = '')
{
$result = [];
foreach ($this->modulesList->getNames() as $moduleName) {
$moduleEtcDir = $this->getModuleDir($subDir, $moduleName);
$file = $moduleEtcDir . '/' . $filename;
$directoryRead = $this->readFactory->create($moduleEtcDir);
$path = $directoryRead->getRelativePath($file);
if ($directoryRead->isExist($path)) {
$result[] = $file;
}
}
return $result;
}
/**
* Retrieve list of module action files
*
* @return array
*/
public function getActionFiles()
{
$actions = [];
foreach ($this->modulesList->getNames() as $moduleName) {
$actionDir = $this->getModuleDir(Dir::MODULE_CONTROLLER_DIR, $moduleName);
if (!file_exists($actionDir)) {
continue;
}
$dirIterator = new \RecursiveDirectoryIterator($actionDir, \RecursiveDirectoryIterator::SKIP_DOTS);
$recursiveIterator = new \RecursiveIteratorIterator($dirIterator, \RecursiveIteratorIterator::LEAVES_ONLY);
$namespace = str_replace('_', '\\', $moduleName);
/** @var \SplFileInfo $actionFile */
foreach ($recursiveIterator as $actionFile) {
$actionName = str_replace('/', '\\', str_replace($actionDir, '', $actionFile->getPathname()));
$action = $namespace . "\\" . Dir::MODULE_CONTROLLER_DIR . substr($actionName, 0, -4);
$actions[strtolower($action)] = $action;
}
}
return $actions;
}
/**
* Get module directory by directory type
*
* @param string $type
* @param string $moduleName
* @return string
*/
public function getModuleDir($type, $moduleName)
{
if (isset($this->customModuleDirs[$moduleName][$type])) {
return $this->customModuleDirs[$moduleName][$type];
}
return $this->moduleDirs->getDir($moduleName, $type);
}
/**
* Set path to the corresponding module directory
*
* @param string $moduleName
* @param string $type directory type (etc, controllers, locale etc)
* @param string $path
* @return void
*/
public function setModuleDir($moduleName, $type, $path)
{
$this->customModuleDirs[$moduleName][$type] = $path;
}
}