pluginList = $pluginList; $this->settings = $settings; $this->environments = $environments; $this->definitions = $definitions; } /** * @link http://php-di.org/doc/container-configuration.html * @throws \Exception * @return Container */ public function create() { $builder = new ContainerBuilder(); $builder->useAnnotations(false); $builder->setDefinitionCache(new ArrayCache()); // INI config $builder->addDefinitions(new IniConfigDefinitionSource($this->settings)); // Global config $builder->addDefinitions(PIWIK_USER_PATH . '/config/global.php'); // Plugin configs $this->addPluginConfigs($builder); // Development config if ($this->isDevelopmentModeEnabled()) { $this->addEnvironmentConfig($builder, 'dev'); } // Environment config foreach ($this->environments as $environment) { $this->addEnvironmentConfig($builder, $environment); } // User config if (file_exists(PIWIK_USER_PATH . '/config/config.php') && !in_array('test', $this->environments, true)) { $builder->addDefinitions(PIWIK_USER_PATH . '/config/config.php'); } if (!empty($this->definitions)) { foreach ($this->definitions as $definitionArray) { $builder->addDefinitions($definitionArray); } } $container = $builder->build(); $container->set('Piwik\Application\Kernel\PluginList', $this->pluginList); $container->set('Piwik\Application\Kernel\GlobalSettingsProvider', $this->settings); return $container; } private function addEnvironmentConfig(ContainerBuilder $builder, $environment) { if (!$environment) { return; } $file = sprintf('%s/config/environment/%s.php', PIWIK_USER_PATH, $environment); if (file_exists($file)) { $builder->addDefinitions($file); } // add plugin environment configs $plugins = $this->pluginList->getActivatedPlugins(); foreach ($plugins as $plugin) { $baseDir = Manager::getPluginDirectory($plugin); $environmentFile = $baseDir . '/config/' . $environment . '.php'; if (file_exists($environmentFile)) { $builder->addDefinitions($environmentFile); } } } private function addPluginConfigs(ContainerBuilder $builder) { $plugins = $this->pluginList->getActivatedPlugins(); foreach ($plugins as $plugin) { $baseDir = Manager::getPluginDirectory($plugin); $file = $baseDir . '/config/config.php'; if (file_exists($file)) { $builder->addDefinitions($file); } } } private function isDevelopmentModeEnabled() { $section = $this->settings->getSection('Development'); return (bool) @$section['enabled']; // TODO: code redundancy w/ Development. hopefully ok for now. } }