Newer
Older
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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
<?php
/**
* Piwik - free/libre analytics platform
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
namespace Piwik\Container;
use DI\Definition\Exception\DefinitionException;
use DI\Definition\MergeableDefinition;
use DI\Definition\Source\ChainableDefinitionSource;
use DI\Definition\Source\DefinitionSource;
use DI\Definition\ValueDefinition;
use Piwik\Config;
/**
* Import the old INI config into PHP-DI.
*/
class IniConfigDefinitionSource implements DefinitionSource, ChainableDefinitionSource
{
/**
* @var Config
*/
private $config;
/**
* @var string
*/
private $prefix;
/**
* @var DefinitionSource
*/
private $chainedSource;
/**
* @param Config $config
* @param string $prefix Prefix for the container entries.
*/
public function __construct(Config $config, $prefix = 'old_config.')
{
$this->config = $config;
$this->prefix = $prefix;
}
public function getDefinition($name, MergeableDefinition $parentDefinition = null)
{
// INI only contains values, so no definition merging here
if ($parentDefinition) {
return $this->notFound($name, $parentDefinition);
}
if (strpos($name, $this->prefix) !== 0) {
return $this->notFound($name, $parentDefinition);
}
list($sectionName, $configKey) = $this->parseEntryName($name);
$section = $this->getSection($sectionName);
if ($configKey === null) {
return new ValueDefinition($name, $section);
}
if (! array_key_exists($configKey, $section)) {
return $this->notFound($name, $parentDefinition);
}
return new ValueDefinition($name, $section[$configKey]);
}
public function chain(DefinitionSource $source)
{
$this->chainedSource = $source;
}
private function parseEntryName($name)
{
$parts = explode('.', $name, 3);
array_shift($parts);
if (! isset($parts[1])) {
$parts[1] = null;
}
return $parts;
}
private function getSection($sectionName)
{
$section = $this->config->$sectionName;
if (!is_array($section)) {
throw new DefinitionException(sprintf(
'Piwik\Config did not return an array for the config section %s',
$section
));
}
return $section;
}
private function notFound($name, $parentDefinition)
{
if ($this->chainedSource) {
return $this->chainedSource->getDefinition($name, $parentDefinition);
}
return null;
}
}