Your IP : 127.0.0.1
<?php
/**
* Filesystem configuration loader. Loads configuration from XML files, split by scopes
*
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*
*/
namespace Magento\Framework\Config\Reader;
/**
* @SuppressWarnings(PHPMD.NumberOfChildren)
* @api
* @since 100.0.2
*/
class Filesystem implements \Magento\Framework\Config\ReaderInterface
{
/**
* File locator
*
* @var \Magento\Framework\Config\FileResolverInterface
*/
protected $_fileResolver;
/**
* Config converter
*
* @var \Magento\Framework\Config\ConverterInterface
*/
protected $_converter;
/**
* The name of file that stores configuration
*
* @var string
*/
protected $_fileName;
/**
* Path to corresponding XSD file with validation rules for merged config
*
* @var string
*/
protected $_schema;
/**
* Path to corresponding XSD file with validation rules for separate config files
*
* @var string
*/
protected $_perFileSchema;
/**
* List of id attributes for merge
*
* @var array
*/
protected $_idAttributes = [];
/**
* Class of dom configuration document used for merge
*
* @var string
*/
protected $_domDocumentClass;
/**
* @var \Magento\Framework\Config\ValidationStateInterface
*/
protected $validationState;
/**
* @var string
* @since 100.0.3
*/
protected $_defaultScope;
/**
* @var string
* @since 100.0.3
*/
protected $_schemaFile;
/**
* Constructor
*
* @param \Magento\Framework\Config\FileResolverInterface $fileResolver
* @param \Magento\Framework\Config\ConverterInterface $converter
* @param \Magento\Framework\Config\SchemaLocatorInterface $schemaLocator
* @param \Magento\Framework\Config\ValidationStateInterface $validationState
* @param string $fileName
* @param array $idAttributes
* @param string $domDocumentClass
* @param string $defaultScope
*/
public function __construct(
\Magento\Framework\Config\FileResolverInterface $fileResolver,
\Magento\Framework\Config\ConverterInterface $converter,
\Magento\Framework\Config\SchemaLocatorInterface $schemaLocator,
\Magento\Framework\Config\ValidationStateInterface $validationState,
$fileName,
$idAttributes = [],
$domDocumentClass = \Magento\Framework\Config\Dom::class,
$defaultScope = 'global'
) {
$this->_fileResolver = $fileResolver;
$this->_converter = $converter;
$this->_fileName = $fileName;
$this->_idAttributes = array_replace($this->_idAttributes, $idAttributes);
$this->validationState = $validationState;
$this->_schemaFile = $schemaLocator->getSchema();
$this->_perFileSchema = $schemaLocator->getPerFileSchema() && $validationState->isValidationRequired()
? $schemaLocator->getPerFileSchema() : null;
$this->_domDocumentClass = $domDocumentClass;
$this->_defaultScope = $defaultScope;
}
/**
* Load configuration scope
*
* @param string|null $scope
* @return array
*/
public function read($scope = null)
{
$scope = $scope ?: $this->_defaultScope;
$fileList = $this->_fileResolver->get($this->_fileName, $scope);
if (!count($fileList)) {
return [];
}
$output = $this->_readFiles($fileList);
return $output;
}
/**
* Read configuration files
*
* @param array $fileList
* @return array
* @throws \Magento\Framework\Exception\LocalizedException
*/
protected function _readFiles($fileList)
{
/** @var \Magento\Framework\Config\Dom $configMerger */
$configMerger = null;
foreach ($fileList as $key => $content) {
try {
if (!$configMerger) {
$configMerger = $this->_createConfigMerger($this->_domDocumentClass, $content);
} else {
$configMerger->merge($content);
}
} catch (\Magento\Framework\Config\Dom\ValidationException $e) {
throw new \Magento\Framework\Exception\LocalizedException(
new \Magento\Framework\Phrase(
'The XML in file "%1" is invalid:' . "\n%2\nVerify the XML and try again.",
[$key, $e->getMessage()]
)
);
}
}
if ($this->validationState->isValidationRequired()) {
$errors = [];
if ($configMerger && !$configMerger->validate($this->_schemaFile, $errors)) {
$message = "Invalid Document \n";
throw new \Magento\Framework\Exception\LocalizedException(
new \Magento\Framework\Phrase($message . implode("\n", $errors))
);
}
}
$output = [];
if ($configMerger) {
$output = $this->_converter->convert($configMerger->getDom());
}
return $output;
}
/**
* Return newly created instance of a config merger
*
* @param string $mergerClass
* @param string $initialContents
* @return \Magento\Framework\Config\Dom
* @throws \UnexpectedValueException
*/
protected function _createConfigMerger($mergerClass, $initialContents)
{
$result = new $mergerClass(
$initialContents,
$this->validationState,
$this->_idAttributes,
null,
$this->_perFileSchema
);
if (!$result instanceof \Magento\Framework\Config\Dom) {
throw new \UnexpectedValueException(
"Instance of the DOM config merger is expected, got {$mergerClass} instead."
);
}
return $result;
}
}