From 7f61dc95be4ac543986c7df2459532fd8f81368d Mon Sep 17 00:00:00 2001 From: Igor Scheller Date: Tue, 25 Sep 2018 17:33:31 +0200 Subject: EventConfig: Merge event configuration from database to global config --- src/Config/ConfigServiceProvider.php | 59 +++++++++++++++++++++++++++++++++++- 1 file changed, 58 insertions(+), 1 deletion(-) (limited to 'src/Config') diff --git a/src/Config/ConfigServiceProvider.php b/src/Config/ConfigServiceProvider.php index 63f43ced..cb8e96ce 100644 --- a/src/Config/ConfigServiceProvider.php +++ b/src/Config/ConfigServiceProvider.php @@ -2,14 +2,31 @@ namespace Engelsystem\Config; +use Engelsystem\Application; use Engelsystem\Container\ServiceProvider; +use Engelsystem\Models\EventConfig; use Exception; +use Illuminate\Database\QueryException; class ConfigServiceProvider extends ServiceProvider { /** @var array */ protected $configFiles = ['config.default.php', 'config.php']; + /** @var EventConfig */ + protected $eventConfig; + + /** + * @param Application $app + * @param EventConfig $eventConfig + */ + public function __construct(Application $app, EventConfig $eventConfig = null) + { + parent::__construct($app); + + $this->eventConfig = $eventConfig; + } + public function register() { $config = $this->app->make(Config::class); @@ -17,7 +34,7 @@ class ConfigServiceProvider extends ServiceProvider $this->app->instance('config', $config); foreach ($this->configFiles as $file) { - $file = config_path($file); + $file = $this->getConfigPath($file); if (!file_exists($file)) { continue; @@ -33,4 +50,44 @@ class ConfigServiceProvider extends ServiceProvider throw new Exception('Configuration not found'); } } + + public function boot() + { + if (!$this->eventConfig) { + return; + } + + /** @var Config $config */ + $config = $this->app->get('config'); + /** @var EventConfig[] $values */ + try { + $values = $this->eventConfig->newQuery()->get(['name', 'value']); + } catch (QueryException $e) { + return; + } + + foreach ($values as $option) { + $data = $option->value; + + if (is_array($data) && $config->has($option->name)) { + $data = array_replace_recursive( + $config->get($option->name), + $data + ); + } + + $config->set($option->name, $data); + } + } + + /** + * Get the config path + * + * @param string $path + * @return string + */ + protected function getConfigPath($path = ''): string + { + return config_path($path); + } } -- cgit v1.2.3-54-g00ecf