| <?php |
|
|
| |
| |
| |
| |
| |
| |
|
|
| namespace Piwik\Container; |
|
|
| use DI\Definition\Exception\InvalidDefinition; |
| use DI\Definition\Source\DefinitionSource; |
| use DI\Definition\ValueDefinition; |
| use Piwik\Application\Kernel\GlobalSettingsProvider; |
|
|
| |
| |
| |
| |
| |
| |
| |
| class IniConfigDefinitionSource implements DefinitionSource |
| { |
| |
| |
| |
| private $config; |
|
|
| |
| |
| |
| private $prefix; |
|
|
| |
| |
| |
| public function __construct(GlobalSettingsProvider $config, $prefix = 'ini.') |
| { |
| $this->config = $config; |
| $this->prefix = $prefix; |
| } |
|
|
| |
| |
| |
| public function getDefinition($name) |
| { |
| if (strpos($name, $this->prefix) !== 0) { |
| return null; |
| } |
|
|
| list($sectionName, $configKey) = $this->parseEntryName($name); |
|
|
| $section = $this->getSection($sectionName); |
|
|
| if ($configKey === null) { |
| $value = new ValueDefinition($section); |
| $value->setName($name); |
| return $value; |
| } |
|
|
| if (! array_key_exists($configKey, $section)) { |
| return null; |
| } |
|
|
| $value = new ValueDefinition($section[$configKey]); |
| $value->setName($name); |
| return $value; |
| } |
|
|
| public function getDefinitions(): array |
| { |
| $result = []; |
| foreach ($this->config as $section) { |
| $value = new ValueDefinition($this->getSection($section)); |
| $value->setName($section); |
|
|
| $result[$section] = $value; |
| } |
| return $result; |
| } |
|
|
| 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->getSection($sectionName); |
|
|
| if (!is_array($section)) { |
| throw new InvalidDefinition(sprintf( |
| 'IniFileChain did not return an array for the config section %s', |
| $section |
| )); |
| } |
|
|
| return $section; |
| } |
| } |
|
|