From e5749437074c3b3556628a2aeb5bad2edf97bde0 Mon Sep 17 00:00:00 2001 From: slawkens Date: Fri, 23 May 2025 08:39:09 +0200 Subject: [PATCH] feat: autoload settings.php --- system/src/Plugins.php | 31 +++++++++++++++++++++++++++++-- system/src/Settings.php | 4 ++-- 2 files changed, 31 insertions(+), 4 deletions(-) diff --git a/system/src/Plugins.php b/system/src/Plugins.php index 4acca75e..2e55cce8 100644 --- a/system/src/Plugins.php +++ b/system/src/Plugins.php @@ -346,6 +346,25 @@ class Plugins { } $settings = []; + foreach (self::getAllPluginsJson() as $plugin) { + if (!self::getAutoLoadOption($plugin, 'settings', true)) { + continue; + } + + $settingsFileName = PLUGINS . $plugin['filename'] . '/settings.php'; + if (!is_file($settingsFileName)) { + continue; + } + + $settingsFile = require $settingsFileName; + if (!isset($settingsFile['key'])) { + warning("Settings file for plugin - {$plugin['name']} does not contain 'key' field"); + continue; + } + + $settings[$settingsFile['key']] = ['pluginFilename' => $plugin['filename'], 'settingsFilename' => 'plugins/' . $plugin['filename'] . '/settings.php']; + } + foreach (self::getAllPluginsJson() as $plugin) { if (isset($plugin['settings'])) { $settingsFile = require BASE . $plugin['settings']; @@ -401,8 +420,14 @@ class Plugins { return false; } - if (!isset($plugin_json['settings']) || !file_exists(BASE . $plugin_json['settings'])) { - return false; + $settingsFileName = PLUGINS . $plugin_json['filename'] . '/settings.php'; + if (!is_file($settingsFileName)) { + if (!isset($plugin_json['settings']) || !is_file(BASE . $plugin_json['settings'])) { + return false; + } + } + else { + return 'plugins/' . $plugin_json['filename'] . '/settings.php'; } return $plugin_json['settings']; @@ -432,6 +457,8 @@ class Plugins { return false; } + $plugin_json['filename'] = $filename; + return $plugin_json; } diff --git a/system/src/Settings.php b/system/src/Settings.php index 0df8fa81..ca4192ad 100644 --- a/system/src/Settings.php +++ b/system/src/Settings.php @@ -560,8 +560,8 @@ class Settings implements \ArrayAccess $settingsFilePath = BASE . $settings[$pluginKeyName]['settingsFilename']; } - if (!file_exists($settingsFilePath)) { - throw new \RuntimeException('Failed to load settings file for plugin: ' . $pluginKeyName); + if (!is_file($settingsFilePath)) { + throw new \RuntimeException('Failed to load settings file for plugin: ' . $pluginKeyName . ' (Tried: ' . $settingsFilePath . ')'); } $this->settingsFile[$pluginKeyName] = require $settingsFilePath;