- /**
- * Checks the config settings and saves given config values into the config file
- *
- * @param string $basePath The basepath of Friendica
- * @param App\Mode $mode The Application mode
- *
- * @return bool True, if something has been saved
- */
- public static function saveConfigToFile($basePath, App\Mode $mode)
- {
- $configFileLoader = new ConfigFileLoader($basePath, $mode);
- $configCache = new Config\Cache\ConfigCache();
- $configFileLoader->setupCache($configCache, true);
- $configFileSaver = new ConfigFileSaver($basePath);
-
- $updated = false;
-
- if (self::updateConfigEntry($configCache, $configFileSaver,'config', 'hostname')) {
- $updated = true;
- };
-
- if (self::updateConfigEntry($configCache, $configFileSaver,'system', 'basepath', BasePath::create(dirname(__DIR__) . '/../'))) {
- $updated = true;
- }
-
- // In case there is nothing to do, skip the update
- if (!$updated) {
- return true;
- }
-
- if (!$configFileSaver->saveToConfigFile()) {
- Logger::alert('Config entry update failed - maybe wrong permission?');
- return false;
- }
-
- DBA::delete('config', ['cat' => 'config', 'k' => 'hostname']);
- DBA::delete('config', ['cat' => 'system', 'k' => 'basepath']);
-
- return true;
- }
-
- /**
- * Adds a value to the ConfigFileSave in case it isn't already updated
- *
- * @param IConfigCache $configCache The cached config file
- * @param ConfigFileSaver $configFileSaver The config file saver
- * @param string $cat The config category
- * @param string $key The config key
- * @param string $default A default value, if none of the settings are valid
- *
- * @return boolean True, if a value was updated
- *
- * @throws \Exception if DBA or Logger doesn't work
- */
- private static function updateConfigEntry(IConfigCache $configCache, ConfigFileSaver $configFileSaver, $cat, $key, $default = '')
- {
- // check if the config file differs from the whole configuration (= The db contains other values)
- $fileConfig = $configCache->get($cat, $key);
-
- $savedConfig = DBA::selectFirst('config', ['v'], ['cat' => $cat, 'k' => $key]);
-
- if (DBA::isResult($savedConfig)) {
- $savedValue = $savedConfig['v'];
- } else {
- $savedValue = null;
- }
-
- // If the db contains a config value, check it
- if (isset($savedValue) && $fileConfig !== $savedValue) {
- Logger::info('Difference in config found', ['cat' => $cat, 'key' => $key, 'file' => $fileConfig, 'saved' => $savedValue]);
- $configFileSaver->addConfigValue($cat, $key, $savedValue);
- return true;
-
- // If both config values are not set, use the default value
- } elseif (!isset($fileConfig) && !isset($savedValue)) {
- Logger::info('Using default for config', ['cat' => $cat, 'key' => $key, 'value' => $default]);
- $configFileSaver->addConfigValue($cat, $key, $default);
- return true;
-
- // If either the file config value isn't empty or the db value is the same as the
- // file config value, skip it
- } else {
- Logger::info('No Difference in config found', ['cat' => $cat, 'key' => $key, 'value' => $fileConfig, 'saved' => $savedValue]);
- return false;
- }
- }
-