/
NodeTypesLoader.php
78 lines (69 loc) · 3.13 KB
/
NodeTypesLoader.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
76
77
78
<?php
declare(strict_types=1);
namespace Neos\ContentRepository\Configuration;
use Neos\Flow\Configuration\Exception as ConfigurationException;
use Neos\Flow\Configuration\Exception\ParseErrorException;
use Neos\Flow\Configuration\Loader\LoaderInterface;
use Neos\Flow\Configuration\Source\YamlSource;
use Neos\Flow\Core\ApplicationContext;
use Neos\Flow\Package\PackageInterface;
use Neos\Utility\Arrays;
use Neos\Utility\Files;
class NodeTypesLoader implements LoaderInterface
{
/**
* @var YamlSource
*/
private $yamlSource;
/**
* @var string
*/
private $configurationBasePath;
public function __construct(YamlSource $yamlSource, string $configurationBasePath = FLOW_PATH_CONFIGURATION)
{
$this->yamlSource = $yamlSource;
$this->configurationBasePath = $configurationBasePath;
}
/**
* @param PackageInterface[] $packages
* @param ApplicationContext $context
* @return array
* @throws ParseErrorException | ConfigurationException
*/
public function load(array $packages, ApplicationContext $context): array
{
$configuration = [];
// NodeTypes Directory Configuration
foreach ($packages as $package) {
$nodeTypesDirectory = Files::concatenatePaths([$package->getPackagePath(), 'NodeTypes']);
if (\is_dir($nodeTypesDirectory)) {
$iterator = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($nodeTypesDirectory));
$allYamlFilesIterator = new \CallbackFilterIterator($iterator, static function (\SplFileInfo $fileInfo) {
return $fileInfo->isFile() && $fileInfo->getExtension() === 'yaml';
});
/** @var \SplFileInfo $fileInfo */
foreach ($allYamlFilesIterator as $fileInfo) {
$path = Files::concatenatePaths([
$fileInfo->getPath(),
$fileInfo->getBasename('.' . $fileInfo->getExtension())
]);
$configuration = Arrays::arrayMergeRecursiveOverrule(
$configuration,
$this->yamlSource->load($path, false)
);
}
}
// Package configuration
$configuration = Arrays::arrayMergeRecursiveOverrule($configuration, $this->yamlSource->load($package->getConfigurationPath() . 'NodeTypes', true));
}
$configuration = Arrays::arrayMergeRecursiveOverrule($configuration, $this->yamlSource->load($this->configurationBasePath . 'NodeTypes', true));
// Context configuration
foreach ($context->getHierarchy() as $contextName) {
foreach ($packages as $package) {
$configuration = Arrays::arrayMergeRecursiveOverrule($configuration, $this->yamlSource->load($package->getConfigurationPath() . $contextName . '/' . 'NodeTypes', true));
}
$configuration = Arrays::arrayMergeRecursiveOverrule($configuration, $this->yamlSource->load($this->configurationBasePath . $contextName . '/' . 'NodeTypes', true));
}
return $configuration;
}
}