summaryrefslogtreecommitdiff
path: root/src/Config
diff options
context:
space:
mode:
authorIgor Scheller <igor.scheller@igorshp.de>2018-09-25 17:33:31 +0200
committermsquare <msquare@notrademark.de>2018-10-30 21:13:56 +0100
commit7f61dc95be4ac543986c7df2459532fd8f81368d (patch)
tree930497c659bbaa3e073313a261f3458348fd423d /src/Config
parent63d1292bf80d88be40eec7695c1a59f29e6609c5 (diff)
EventConfig: Merge event configuration from database to global config
Diffstat (limited to 'src/Config')
-rw-r--r--src/Config/ConfigServiceProvider.php59
1 files changed, 58 insertions, 1 deletions
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);
+ }
}