Security update for Core, with self-updated composer
[yaffs-website] / vendor / dflydev / dot-access-configuration / src / Dflydev / DotAccessConfiguration / YamlFileConfigurationBuilder.php
1 <?php
2
3 /*
4  * This file is a part of dflydev/dot-access-configuration.
5  *
6  * (c) Dragonfly Development Inc.
7  *
8  * For the full copyright and license information, please view the LICENSE
9  * file that was distributed with this source code.
10  */
11
12 namespace Dflydev\DotAccessConfiguration;
13
14 use Dflydev\DotAccessData\Util as DotAccessDataUtil;
15 use Symfony\Component\Yaml\Yaml;
16
17 class YamlFileConfigurationBuilder extends AbstractConfigurationBuilder
18 {
19     /**
20      * YAML Configuration Filenames
21      *
22      * @var array
23      */
24     private $yamlConfigurationFilenames;
25
26     /**
27      * Constructor
28      *
29      * @param array $yamlConfigurationFilenames
30      */
31     public function __construct(array $yamlConfigurationFilenames)
32     {
33         $this->yamlConfigurationFilenames = $yamlConfigurationFilenames;
34     }
35
36     /**
37      * {@inheritdocs}
38      */
39     public function internalBuild(ConfigurationInterface $configuration)
40     {
41         $config = array();
42         $imports = array();
43         foreach ($this->yamlConfigurationFilenames as $yamlConfigurationFilename) {
44             if (file_exists($yamlConfigurationFilename)) {
45                 $config = DotAccessDataUtil::mergeAssocArray($config, Yaml::parse(file_get_contents($yamlConfigurationFilename)));
46                 if (isset($config['imports'])) {
47                     foreach ((array) $config['imports'] as $file) {
48                         if (0 === strpos($file, '/')) {
49                             // Absolute path
50                             $imports[] = $file;
51                         } else {
52                             if ($realpath = realpath(dirname($yamlConfigurationFilename).'/'.$file)) {
53                                 $imports[] = $realpath;
54                             }
55                         }
56                     }
57                 }
58             }
59         }
60
61         if ($imports) {
62             $importsBuilder = new static($imports);
63
64             // We want to reconfigure the imports builder to have the
65             // same basic configuration as this instance.
66             $this->reconfigure($importsBuilder);
67
68             $configuration->import($importsBuilder->build());
69
70             $internalImports = $configuration->get('imports');
71         } else {
72             $internalImports = null;
73         }
74
75         $configuration->importRaw($config);
76
77         if ($internalImports) {
78            foreach ((array) $internalImports as $import) {
79                 $configuration->append('imports', $import);
80             }
81         }
82
83         return $configuration;
84     }
85 }