-
Notifications
You must be signed in to change notification settings - Fork 9.4k
/
Copy pathReader.php
75 lines (68 loc) · 1.85 KB
/
Reader.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\Framework\Config;
use Magento\Framework\Exception\LocalizedException;
/**
* Read config from different sources and aggregate them
*
* @package Magento\Framework\Config
*/
class Reader implements \Magento\Framework\App\Config\Scope\ReaderInterface
{
/**
* @var array
*/
private $sources;
/**
* @param array $sources
*/
public function __construct(array $sources)
{
$this->sources = $this->prepareSources($sources);
}
/**
* Read configuration data
*
* @param null|string $scope
* @throws LocalizedException Exception is thrown when scope other than default is given
* @return array
*/
public function read($scope = null)
{
$config = [];
foreach ($this->sources as $sourceData) {
/** @var \Magento\Framework\App\Config\Reader\Source\SourceInterface $source */
$source = $sourceData['class'];
$config = array_replace_recursive($config, $source->get($scope));
}
return $config;
}
/**
* Prepare source for usage
*
* @param array $array
* @return array
*/
private function prepareSources(array $array)
{
$array = array_filter(
$array,
function ($item) {
return (!isset($item['disable']) || !$item['disable']) && $item['class'];
}
);
uasort(
$array,
function ($firstItem, $nexItem) {
if ((int)$firstItem['sortOrder'] == (int)$nexItem['sortOrder']) {
return 0;
}
return (int)$firstItem['sortOrder'] < (int)$nexItem['sortOrder'] ? -1 : 1;
}
);
return $array;
}
}