diff --git a/index.php b/index.php index 69c1d161..04db613d 100644 --- a/index.php +++ b/index.php @@ -79,17 +79,36 @@ public function __construct(string $baseDir) { $this->baseDir = $baseDir; if ($dir = getenv('NEXTCLOUD_CONFIG_DIR')) { - $configFileName = rtrim($dir, '/') . '/config.php'; + $configDir = rtrim($dir, '/'); } else { - $configFileName = $this->baseDir . '/../config/config.php'; + $configDir = $this->baseDir . '/../config'; } - if (!file_exists($configFileName)) { + + $configFiles = [$configDir . '/config.php']; + + if (!file_exists($configFiles[0])) { throw new \Exception('Could not find config.php. Is this file in the "updater" subfolder of Nextcloud?'); } - /** @var array $CONFIG */ - require_once $configFileName; - $this->configValues = $CONFIG; + $extraConfigFiles = glob($configDir . '/*.config.php'); + if (is_array($extraConfigFiles)) { + natsort($extraConfigFiles); + $configFiles = array_merge($configFiles, $extraConfigFiles); + } + + foreach ($configFiles as $configFile) { + /** + * @psalm-suppress UnresolvableInclude + * @var mixed $CONFIG + */ + require_once $configFile; + + if (isset($CONFIG) && is_array($CONFIG)) { + $this->configValues = array_merge($this->configValues, $CONFIG); + } + + unset($CONFIG); + } if (php_sapi_name() !== 'cli' && ($this->configValues['upgrade.disable-web'] ?? false)) { // updater disabled diff --git a/lib/Updater.php b/lib/Updater.php index 37d112d1..14f4dca4 100644 --- a/lib/Updater.php +++ b/lib/Updater.php @@ -41,17 +41,36 @@ public function __construct(string $baseDir) { $this->baseDir = $baseDir; if ($dir = getenv('NEXTCLOUD_CONFIG_DIR')) { - $configFileName = rtrim($dir, '/') . '/config.php'; + $configDir = rtrim($dir, '/'); } else { - $configFileName = $this->baseDir . '/../config/config.php'; + $configDir = $this->baseDir . '/../config'; } - if (!file_exists($configFileName)) { + + $configFiles = [$configDir . '/config.php']; + + if (!file_exists($configFiles[0])) { throw new \Exception('Could not find config.php. Is this file in the "updater" subfolder of Nextcloud?'); } - /** @var array $CONFIG */ - require_once $configFileName; - $this->configValues = $CONFIG; + $extraConfigFiles = glob($configDir . '/*.config.php'); + if (is_array($extraConfigFiles)) { + natsort($extraConfigFiles); + $configFiles = array_merge($configFiles, $extraConfigFiles); + } + + foreach ($configFiles as $configFile) { + /** + * @psalm-suppress UnresolvableInclude + * @var mixed $CONFIG + */ + require_once $configFile; + + if (isset($CONFIG) && is_array($CONFIG)) { + $this->configValues = array_merge($this->configValues, $CONFIG); + } + + unset($CONFIG); + } if (php_sapi_name() !== 'cli' && ($this->configValues['upgrade.disable-web'] ?? false)) { // updater disabled diff --git a/updater.phar b/updater.phar index 3e760b1b..de6e25b1 100755 Binary files a/updater.phar and b/updater.phar differ