feat: autoload settings.php

This commit is contained in:
slawkens 2025-05-23 08:39:09 +02:00
parent 1e9b10d648
commit e574943707
2 changed files with 31 additions and 4 deletions

View File

@ -346,6 +346,25 @@ class Plugins {
} }
$settings = []; $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) { foreach (self::getAllPluginsJson() as $plugin) {
if (isset($plugin['settings'])) { if (isset($plugin['settings'])) {
$settingsFile = require BASE . $plugin['settings']; $settingsFile = require BASE . $plugin['settings'];
@ -401,9 +420,15 @@ class Plugins {
return false; return false;
} }
if (!isset($plugin_json['settings']) || !file_exists(BASE . $plugin_json['settings'])) { $settingsFileName = PLUGINS . $plugin_json['filename'] . '/settings.php';
if (!is_file($settingsFileName)) {
if (!isset($plugin_json['settings']) || !is_file(BASE . $plugin_json['settings'])) {
return false; return false;
} }
}
else {
return 'plugins/' . $plugin_json['filename'] . '/settings.php';
}
return $plugin_json['settings']; return $plugin_json['settings'];
} }
@ -432,6 +457,8 @@ class Plugins {
return false; return false;
} }
$plugin_json['filename'] = $filename;
return $plugin_json; return $plugin_json;
} }

View File

@ -560,8 +560,8 @@ class Settings implements \ArrayAccess
$settingsFilePath = BASE . $settings[$pluginKeyName]['settingsFilename']; $settingsFilePath = BASE . $settings[$pluginKeyName]['settingsFilename'];
} }
if (!file_exists($settingsFilePath)) { if (!is_file($settingsFilePath)) {
throw new \RuntimeException('Failed to load settings file for plugin: ' . $pluginKeyName); throw new \RuntimeException('Failed to load settings file for plugin: ' . $pluginKeyName . ' (Tried: ' . $settingsFilePath . ')');
} }
$this->settingsFile[$pluginKeyName] = require $settingsFilePath; $this->settingsFile[$pluginKeyName] = require $settingsFilePath;