Adding ConfigFileSaver and tests
This commit is contained in:
parent
fa31bb6dde
commit
49def0dc27
|
@ -1087,8 +1087,9 @@ function admin_page_site_post(App $a)
|
||||||
update_table($a, "gcontact", ['connect', 'addr'], $old_host, $new_host);
|
update_table($a, "gcontact", ['connect', 'addr'], $old_host, $new_host);
|
||||||
|
|
||||||
// update config
|
// update config
|
||||||
$configCacheSaver = new \Friendica\Util\Config\ConfigCacheSaver($a->getBasePath());
|
$configFileSaver = new \Friendica\Util\Config\ConfigFileSaver($a->getBasePath());
|
||||||
$configCacheSaver->saveToConfigFile('system', 'hostname', parse_url($new_url, PHP_URL_HOST));
|
$configFileSaver->addConfigValue('system', 'hostname', parse_url($new_url, PHP_URL_HOST));
|
||||||
|
$configFileSaver->saveToConfigFile();
|
||||||
Config::set('system', 'hostname', parse_url($new_url, PHP_URL_HOST));
|
Config::set('system', 'hostname', parse_url($new_url, PHP_URL_HOST));
|
||||||
Config::set('system', 'url', $new_url);
|
Config::set('system', 'url', $new_url);
|
||||||
$a->setBaseURL($new_url);
|
$a->setBaseURL($new_url);
|
||||||
|
|
|
@ -13,7 +13,7 @@ use Friendica\Core\Config\Configuration;
|
||||||
use Friendica\Database\DBA;
|
use Friendica\Database\DBA;
|
||||||
use Friendica\Model\Profile;
|
use Friendica\Model\Profile;
|
||||||
use Friendica\Network\HTTPException\InternalServerErrorException;
|
use Friendica\Network\HTTPException\InternalServerErrorException;
|
||||||
use Friendica\Util\Config\ConfigCacheLoader;
|
use Friendica\Util\Config\ConfigFileLoader;
|
||||||
use Friendica\Util\HTTPSignature;
|
use Friendica\Util\HTTPSignature;
|
||||||
use Friendica\Util\Profiler;
|
use Friendica\Util\Profiler;
|
||||||
use Psr\Log\LoggerInterface;
|
use Psr\Log\LoggerInterface;
|
||||||
|
@ -355,7 +355,7 @@ class App
|
||||||
$this->getMode()->determine($this->getBasePath());
|
$this->getMode()->determine($this->getBasePath());
|
||||||
|
|
||||||
if ($this->getMode()->has(App\Mode::DBAVAILABLE)) {
|
if ($this->getMode()->has(App\Mode::DBAVAILABLE)) {
|
||||||
$loader = new ConfigCacheLoader($this->getBasePath(), $this->getMode());
|
$loader = new ConfigFileLoader($this->getBasePath(), $this->getMode());
|
||||||
$this->config->getCache()->load($loader->loadCoreConfig('addon'), true);
|
$this->config->getCache()->load($loader->loadCoreConfig('addon'), true);
|
||||||
|
|
||||||
$this->profiler->update(
|
$this->profiler->update(
|
||||||
|
@ -363,7 +363,7 @@ class App
|
||||||
$this->config->get('rendertime', 'callstack', false));
|
$this->config->get('rendertime', 'callstack', false));
|
||||||
|
|
||||||
Core\Hook::loadHooks();
|
Core\Hook::loadHooks();
|
||||||
$loader = new ConfigCacheLoader($this->getBasePath(), $this->mode);
|
$loader = new ConfigFileLoader($this->getBasePath(), $this->mode);
|
||||||
Core\Hook::callAll('load_config', $loader);
|
Core\Hook::callAll('load_config', $loader);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,7 @@ namespace Friendica\Core\Config\Cache;
|
||||||
/**
|
/**
|
||||||
* The Friendica config cache for the application
|
* The Friendica config cache for the application
|
||||||
* Initial, all *.config.php files are loaded into this cache with the
|
* Initial, all *.config.php files are loaded into this cache with the
|
||||||
* ConfigCacheLoader ( @see ConfigCacheLoader )
|
* ConfigFileLoader ( @see ConfigFileLoader )
|
||||||
*/
|
*/
|
||||||
class ConfigCache implements IConfigCache, IPConfigCache
|
class ConfigCache implements IConfigCache, IPConfigCache
|
||||||
{
|
{
|
||||||
|
|
|
@ -7,7 +7,7 @@ use Friendica\BaseObject;
|
||||||
use Friendica\Core\Config;
|
use Friendica\Core\Config;
|
||||||
use Friendica\Core\Installer;
|
use Friendica\Core\Installer;
|
||||||
use Friendica\Core\Theme;
|
use Friendica\Core\Theme;
|
||||||
use Friendica\Util\Config\ConfigCacheLoader;
|
use Friendica\Util\Config\ConfigFileLoader;
|
||||||
use RuntimeException;
|
use RuntimeException;
|
||||||
|
|
||||||
class AutomaticInstallation extends Console
|
class AutomaticInstallation extends Console
|
||||||
|
@ -104,8 +104,8 @@ HELP;
|
||||||
}
|
}
|
||||||
|
|
||||||
//reload the config cache
|
//reload the config cache
|
||||||
$loader = new ConfigCacheLoader($a->getBasePath(), $a->getMode());
|
$loader = new ConfigFileLoader($a->getBasePath(), $a->getMode());
|
||||||
$loader->loadConfigFiles($configCache);
|
$loader->setupCache($configCache);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
// Creating config file
|
// Creating config file
|
||||||
|
|
|
@ -6,19 +6,19 @@ use Friendica\Core;
|
||||||
use Friendica\Core\Config;
|
use Friendica\Core\Config;
|
||||||
use Friendica\Core\Config\Adapter;
|
use Friendica\Core\Config\Adapter;
|
||||||
use Friendica\Core\Config\Cache;
|
use Friendica\Core\Config\Cache;
|
||||||
use Friendica\Util\Config\ConfigCacheLoader;
|
use Friendica\Util\Config\ConfigFileLoader;
|
||||||
|
|
||||||
class ConfigFactory
|
class ConfigFactory
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* @param ConfigCacheLoader $loader The Config Cache loader (INI/config/.htconfig)
|
* @param ConfigFileLoader $loader The Config Cache loader (INI/config/.htconfig)
|
||||||
*
|
*
|
||||||
* @return Cache\ConfigCache
|
* @return Cache\ConfigCache
|
||||||
*/
|
*/
|
||||||
public static function createCache(ConfigCacheLoader $loader)
|
public static function createCache(ConfigFileLoader $loader)
|
||||||
{
|
{
|
||||||
$configCache = new Cache\ConfigCache();
|
$configCache = new Cache\ConfigCache();
|
||||||
$loader->loadConfigFiles($configCache);
|
$loader->setupCache($configCache);
|
||||||
|
|
||||||
return $configCache;
|
return $configCache;
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,7 +24,7 @@ class DependencyFactory
|
||||||
{
|
{
|
||||||
$basePath = BasePath::create($directory, $_SERVER);
|
$basePath = BasePath::create($directory, $_SERVER);
|
||||||
$mode = new App\Mode($basePath);
|
$mode = new App\Mode($basePath);
|
||||||
$configLoader = new Config\ConfigCacheLoader($basePath, $mode);
|
$configLoader = new Config\ConfigFileLoader($basePath, $mode);
|
||||||
$configCache = Factory\ConfigFactory::createCache($configLoader);
|
$configCache = Factory\ConfigFactory::createCache($configLoader);
|
||||||
$profiler = Factory\ProfilerFactory::create($configCache);
|
$profiler = Factory\ProfilerFactory::create($configCache);
|
||||||
Factory\DBFactory::init($basePath, $configCache, $profiler, $_SERVER);
|
Factory\DBFactory::init($basePath, $configCache, $profiler, $_SERVER);
|
||||||
|
|
|
@ -1,229 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
namespace Friendica\Util\Config;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The ConfigCacheSaver saves specific variables back from the ConfigCache (@see ConfigCache )
|
|
||||||
* into the config-files
|
|
||||||
*
|
|
||||||
* It is capable of loading the following config files:
|
|
||||||
* - *.config.php (current)
|
|
||||||
* - *.ini.php (deprecated)
|
|
||||||
* - *.htconfig.php (deprecated)
|
|
||||||
*/
|
|
||||||
class ConfigCacheSaver extends ConfigCacheManager
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* The standard indentation for config files
|
|
||||||
* @var string
|
|
||||||
*/
|
|
||||||
const INDENT = "\t";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The settings array to save to
|
|
||||||
* @var array
|
|
||||||
*/
|
|
||||||
private $settings = [];
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Adds a given value to the config file
|
|
||||||
* Either it replaces the current value or it will get added
|
|
||||||
*
|
|
||||||
* @param string $cat The configuration category
|
|
||||||
* @param string $key The configuration key
|
|
||||||
* @param string $value The new value
|
|
||||||
*/
|
|
||||||
public function addConfigValue($cat, $key, $value)
|
|
||||||
{
|
|
||||||
$this->settings[$cat][$key] = $value;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function reset()
|
|
||||||
{
|
|
||||||
$this->settings = [];
|
|
||||||
}
|
|
||||||
|
|
||||||
public function saveToConfigFile($name = '')
|
|
||||||
{
|
|
||||||
$saved = false;
|
|
||||||
|
|
||||||
if (!empty($this->getConfigFullName($name))) {
|
|
||||||
$this->saveConfigFile($this->getConfigFullName($name));
|
|
||||||
$saved = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!empty($this->getIniFullName($name))) {
|
|
||||||
$this->saveINIConfigFile($this->getIniFullName($name));
|
|
||||||
$saved = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!empty($this->getHtConfigFullName($name))) {
|
|
||||||
$this->saveToLegacyConfig($this->getHtConfigFullName($name));
|
|
||||||
$saved = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return $saved;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Saves a value to either an config or an ini file
|
|
||||||
*
|
|
||||||
* @param string $name The configuration file name ('local', 'addon', ..)
|
|
||||||
* @param string $cat The configuration category
|
|
||||||
* @param string $key The configuration key
|
|
||||||
* @param string $value The new value
|
|
||||||
*/
|
|
||||||
private function saveToCoreConfig($name, $cat, $key, $value)
|
|
||||||
{
|
|
||||||
if (!empty($this->getConfigFullName($name))) {
|
|
||||||
$this->saveConfigFile($this->getConfigFullName($name), $cat, $key, $value);
|
|
||||||
} elseif (!empty($this->getIniFullName($name))) {
|
|
||||||
$this->saveINIConfigFile($this->getIniFullName($name), $cat, $key, $value);
|
|
||||||
} else {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Saves a value to a config file
|
|
||||||
*
|
|
||||||
* @param string $fullName The configuration full name (including the path)
|
|
||||||
* @param string $cat The configuration category
|
|
||||||
* @param string $key The configuration key
|
|
||||||
* @param string $value The new value
|
|
||||||
*
|
|
||||||
* @throws \Exception In case a file operation doesn't work
|
|
||||||
*/
|
|
||||||
private function saveConfigFile($fullName, $cat, $key, $value)
|
|
||||||
{
|
|
||||||
$reading = fopen($fullName, 'r');
|
|
||||||
if (!$reading) {
|
|
||||||
throw new \Exception('Cannot open config file \'' . $fullName . '\'.');
|
|
||||||
}
|
|
||||||
$writing = fopen($fullName . '.tmp', 'w');
|
|
||||||
if (!$writing) {
|
|
||||||
throw new \Exception('Cannot create temporary config file \'' . $fullName . '.tmp\'.');
|
|
||||||
}
|
|
||||||
$categoryFound = false;
|
|
||||||
$categoryBracketFound = false;
|
|
||||||
$lineFound = false;
|
|
||||||
$lineArrowFound = false;
|
|
||||||
while (!feof($reading)) {
|
|
||||||
$line = fgets($reading);
|
|
||||||
// find the first line like "'system' =>"
|
|
||||||
if (!$categoryFound && stristr($line, sprintf('\'%s\'', $cat))) {
|
|
||||||
$categoryFound = true;
|
|
||||||
}
|
|
||||||
// find the first line with a starting bracket ( "[" )
|
|
||||||
if ($categoryFound && !$categoryBracketFound && stristr($line, '[')) {
|
|
||||||
$categoryBracketFound = true;
|
|
||||||
}
|
|
||||||
// find the first line with the key like "'value'"
|
|
||||||
if ($categoryBracketFound && !$lineFound && stristr($line, sprintf('\'%s\'', $key))) {
|
|
||||||
$lineFound = true;
|
|
||||||
}
|
|
||||||
// find the first line with an arrow ("=>") after finding the key
|
|
||||||
if ($lineFound && !$lineArrowFound && stristr($line, '=>')) {
|
|
||||||
$lineArrowFound = true;
|
|
||||||
}
|
|
||||||
// find the current value and replace it
|
|
||||||
if ($lineArrowFound && preg_match_all('/\'(.*?)\'/', $line, $matches, PREG_SET_ORDER)) {
|
|
||||||
$lineVal = end($matches)[0];
|
|
||||||
$writeLine = str_replace($lineVal, '\'' . $value . '\'', $line);
|
|
||||||
$categoryFound = false;
|
|
||||||
$categoryBracketFound = false;
|
|
||||||
$lineFound = false;
|
|
||||||
$lineArrowFound = false;
|
|
||||||
// if a line contains a closing bracket for the category ( "]" ) and we didn't find the key/value pair,
|
|
||||||
// add it as a new line before the closing bracket
|
|
||||||
} elseif ($categoryBracketFound && !$lineArrowFound && stristr($line, ']')) {
|
|
||||||
$categoryFound = false;
|
|
||||||
$categoryBracketFound = false;
|
|
||||||
$lineFound = false;
|
|
||||||
$lineArrowFound = false;
|
|
||||||
$writeLine = sprintf(self::INDENT . self::INDENT .'\'%s\' => \'%s\',' . PHP_EOL, $key, $value);
|
|
||||||
$writeLine .= $line;
|
|
||||||
} else {
|
|
||||||
$writeLine = $line;
|
|
||||||
}
|
|
||||||
fputs($writing, $writeLine);
|
|
||||||
}
|
|
||||||
if (!fclose($reading)) {
|
|
||||||
throw new \Exception('Cannot close config file \'' . $fullName . '\'.');
|
|
||||||
};
|
|
||||||
if (!fclose($writing)) {
|
|
||||||
throw new \Exception('Cannot close temporary config file \'' . $fullName . '.tmp\'.');
|
|
||||||
};
|
|
||||||
if (!rename($fullName, $fullName . '.old')) {
|
|
||||||
throw new \Exception('Cannot backup current config file \'' . $fullName . '\'.');
|
|
||||||
}
|
|
||||||
if (!rename($fullName . '.tmp', $fullName)) {
|
|
||||||
throw new \Exception('Cannot move temporary config file \'' . $fullName . '.tmp\' to current.');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Saves a value to a ini file
|
|
||||||
*
|
|
||||||
* @param string $fullName The configuration full name (including the path)
|
|
||||||
* @param string $cat The configuration category
|
|
||||||
* @param string $key The configuration key
|
|
||||||
* @param string $value The new value
|
|
||||||
*/
|
|
||||||
private function saveINIConfigFile($fullName, $cat, $key, $value)
|
|
||||||
{
|
|
||||||
$reading = fopen($fullName, 'r');
|
|
||||||
$writing = fopen($fullName . '.tmp', 'w');
|
|
||||||
$categoryFound = false;
|
|
||||||
while (!feof($reading)) {
|
|
||||||
$line = fgets($reading);
|
|
||||||
if (!$categoryFound && stristr($line, sprintf('[%s]', $cat))) {
|
|
||||||
$categoryFound = true;
|
|
||||||
$writeLine = $line;
|
|
||||||
} elseif ($categoryFound && preg_match_all('/^' . $key . '\s*=\s*(.*?)$/', $line, $matches, PREG_SET_ORDER)) {
|
|
||||||
$writeLine = $key . ' = ' . $value . PHP_EOL;
|
|
||||||
$categoryFound = false;
|
|
||||||
} elseif ($categoryFound && (preg_match_all('/^\[.*?\]$/', $line) || preg_match_all('/^INI;.*$/', $line))) {
|
|
||||||
$categoryFound = false;
|
|
||||||
$writeLine = $key . ' = ' . $value . PHP_EOL;
|
|
||||||
$writeLine .= $line;
|
|
||||||
} else {
|
|
||||||
$writeLine = $line;
|
|
||||||
}
|
|
||||||
fputs($writing, $writeLine);
|
|
||||||
}
|
|
||||||
fclose($reading);
|
|
||||||
fclose($writing);
|
|
||||||
rename($fullName, $fullName . '.old');
|
|
||||||
rename($fullName . '.tmp', $fullName);
|
|
||||||
}
|
|
||||||
|
|
||||||
private function saveToLegacyConfig($name, $cat, $key, $value)
|
|
||||||
{
|
|
||||||
if (empty($this->getHtConfigFullName($name))) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
$fullName = $this->getHtConfigFullName($name);
|
|
||||||
$reading = fopen($fullName, 'r');
|
|
||||||
$writing = fopen($fullName . '.tmp', 'w');
|
|
||||||
$found = false;
|
|
||||||
while (!feof($reading)) {
|
|
||||||
$line = fgets($reading);
|
|
||||||
if (preg_match_all('/^\$a\-\>config\[\'' . $cat . '\',\'' . $key . '\'\]\s*=\s\'*(.*?)\'$/', $line, $matches, PREG_SET_ORDER)) {
|
|
||||||
$writeLine = $key . ' = ' . $value . PHP_EOL;
|
|
||||||
$found = true;
|
|
||||||
} else {
|
|
||||||
$writeLine = $line;
|
|
||||||
}
|
|
||||||
fputs($writing, $writeLine);
|
|
||||||
}
|
|
||||||
if (!$found) {
|
|
||||||
$writeLine = $key . ' = ' . $value . PHP_EOL;
|
|
||||||
fputs($writing, $writeLine);
|
|
||||||
}
|
|
||||||
fclose($reading);
|
|
||||||
fclose($writing);
|
|
||||||
rename($fullName, $fullName . '.old');
|
|
||||||
rename($fullName . '.tmp', $fullName);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -7,14 +7,14 @@ use Friendica\Core\Addon;
|
||||||
use Friendica\Core\Config\Cache\IConfigCache;
|
use Friendica\Core\Config\Cache\IConfigCache;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The ConfigCacheLoader loads config-files and stores them in a IConfigCache ( @see IConfigCache )
|
* The ConfigFileLoader loads config-files and stores them in a IConfigCache ( @see IConfigCache )
|
||||||
*
|
*
|
||||||
* It is capable of loading the following config files:
|
* It is capable of loading the following config files:
|
||||||
* - *.config.php (current)
|
* - *.config.php (current)
|
||||||
* - *.ini.php (deprecated)
|
* - *.ini.php (deprecated)
|
||||||
* - *.htconfig.php (deprecated)
|
* - *.htconfig.php (deprecated)
|
||||||
*/
|
*/
|
||||||
class ConfigCacheLoader extends ConfigCacheManager
|
class ConfigFileLoader extends ConfigFileManager
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* @var App\Mode
|
* @var App\Mode
|
||||||
|
@ -28,7 +28,7 @@ class ConfigCacheLoader extends ConfigCacheManager
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Load the configuration files
|
* Load the configuration files into an configuration cache
|
||||||
*
|
*
|
||||||
* First loads the default value for all the configuration keys, then the legacy configuration files, then the
|
* First loads the default value for all the configuration keys, then the legacy configuration files, then the
|
||||||
* expected local.config.php
|
* expected local.config.php
|
||||||
|
@ -37,7 +37,7 @@ class ConfigCacheLoader extends ConfigCacheManager
|
||||||
*
|
*
|
||||||
* @throws \Exception
|
* @throws \Exception
|
||||||
*/
|
*/
|
||||||
public function loadConfigFiles(IConfigCache $config)
|
public function setupCache(IConfigCache $config)
|
||||||
{
|
{
|
||||||
$config->load($this->loadCoreConfig('defaults'));
|
$config->load($this->loadCoreConfig('defaults'));
|
||||||
$config->load($this->loadCoreConfig('settings'));
|
$config->load($this->loadCoreConfig('settings'));
|
|
@ -2,7 +2,10 @@
|
||||||
|
|
||||||
namespace Friendica\Util\Config;
|
namespace Friendica\Util\Config;
|
||||||
|
|
||||||
abstract class ConfigCacheManager
|
/**
|
||||||
|
* An abstract class in case of handling with config files
|
||||||
|
*/
|
||||||
|
abstract class ConfigFileManager
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* The Sub directory of the config-files
|
* The Sub directory of the config-files
|
||||||
|
@ -20,7 +23,7 @@ abstract class ConfigCacheManager
|
||||||
* The default name of the user defined ini file
|
* The default name of the user defined ini file
|
||||||
* @var string
|
* @var string
|
||||||
*/
|
*/
|
||||||
const CONFIG_INI = 'ini';
|
const CONFIG_INI = 'local';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The default name of the user defined legacy config file
|
* The default name of the user defined legacy config file
|
294
src/Util/Config/ConfigFileSaver.php
Normal file
294
src/Util/Config/ConfigFileSaver.php
Normal file
|
@ -0,0 +1,294 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Friendica\Util\Config;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The ConfigFileSaver saves specific variables into the config-files
|
||||||
|
*
|
||||||
|
* It is capable of loading the following config files:
|
||||||
|
* - *.config.php (current)
|
||||||
|
* - *.ini.php (deprecated)
|
||||||
|
* - *.htconfig.php (deprecated)
|
||||||
|
*/
|
||||||
|
class ConfigFileSaver extends ConfigFileManager
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* The standard indentation for config files
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
const INDENT = "\t";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The settings array to save to
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
private $settings = [];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds a given value to the config file
|
||||||
|
* Either it replaces the current value or it will get added
|
||||||
|
*
|
||||||
|
* @param string $cat The configuration category
|
||||||
|
* @param string $key The configuration key
|
||||||
|
* @param string $value The new value
|
||||||
|
*/
|
||||||
|
public function addConfigValue($cat, $key, $value)
|
||||||
|
{
|
||||||
|
$this->settings[] = ['cat' => $cat, 'key' => $key, 'value' => $value];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Resetting all added configuration entries so far
|
||||||
|
*/
|
||||||
|
public function reset()
|
||||||
|
{
|
||||||
|
$this->settings = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Save all added configuration entries to the given config files
|
||||||
|
* After updating the config entries, all configuration entries will be reseted
|
||||||
|
*
|
||||||
|
* @param string $name The name of the configuration file (default is empty, which means the default name each type)
|
||||||
|
*
|
||||||
|
* @return bool true, if at least one configuration file was successfully updated
|
||||||
|
*/
|
||||||
|
public function saveToConfigFile($name = '')
|
||||||
|
{
|
||||||
|
$saved = false;
|
||||||
|
|
||||||
|
// Check for the *.config.php file inside the /config/ path
|
||||||
|
list($reading, $writing) = $this->openFile($this->getConfigFullName($name));
|
||||||
|
if (isset($reading) && isset($writing)) {
|
||||||
|
$this->saveConfigFile($reading, $writing);
|
||||||
|
// Close the current file handler and rename them
|
||||||
|
if ($this->closeFile($this->getConfigFullName($name), $reading, $writing)) {
|
||||||
|
// just return true, if everything went fine
|
||||||
|
$saved = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check for the *.ini.php file inside the /config/ path
|
||||||
|
list($reading, $writing) = $this->openFile($this->getIniFullName($name));
|
||||||
|
if (isset($reading) && isset($writing)) {
|
||||||
|
$this->saveINIConfigFile($reading, $writing);
|
||||||
|
// Close the current file handler and rename them
|
||||||
|
if ($this->closeFile($this->getIniFullName($name), $reading, $writing)) {
|
||||||
|
// just return true, if everything went fine
|
||||||
|
$saved = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check for the *.php file (normally .htconfig.php) inside the / path
|
||||||
|
list($reading, $writing) = $this->openFile($this->getHtConfigFullName($name));
|
||||||
|
if (isset($reading) && isset($writing)) {
|
||||||
|
$this->saveToLegacyConfig($reading, $writing);
|
||||||
|
// Close the current file handler and rename them
|
||||||
|
if ($this->closeFile($this->getHtConfigFullName($name), $reading, $writing)) {
|
||||||
|
// just return true, if everything went fine
|
||||||
|
$saved = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->reset();
|
||||||
|
|
||||||
|
return $saved;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Opens a config file and returns two handler for reading and writing
|
||||||
|
*
|
||||||
|
* @param string $fullName The full name of the current config
|
||||||
|
*
|
||||||
|
* @return array An array containing the two reading and writing handler
|
||||||
|
*/
|
||||||
|
private function openFile($fullName)
|
||||||
|
{
|
||||||
|
if (empty($fullName)) {
|
||||||
|
return [null, null];
|
||||||
|
}
|
||||||
|
|
||||||
|
$reading = fopen($fullName, 'r');
|
||||||
|
|
||||||
|
if (!$reading) {
|
||||||
|
return [null, null];
|
||||||
|
}
|
||||||
|
|
||||||
|
$writing = fopen($fullName . '.tmp', 'w');
|
||||||
|
|
||||||
|
if (!$writing) {
|
||||||
|
fclose($reading);
|
||||||
|
return [null, null];
|
||||||
|
}
|
||||||
|
|
||||||
|
return [$reading, $writing];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Close and rename the config file
|
||||||
|
*
|
||||||
|
* @param string $fullName The full name of the current config
|
||||||
|
* @param resource $reading The reading resource handler
|
||||||
|
* @param resource $writing The writing resource handler
|
||||||
|
*
|
||||||
|
* @return bool True, if the close was successful
|
||||||
|
*/
|
||||||
|
private function closeFile($fullName, $reading, $writing)
|
||||||
|
{
|
||||||
|
fclose($reading);
|
||||||
|
fclose($writing);
|
||||||
|
|
||||||
|
if (!rename($fullName, $fullName . '.old')) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!rename($fullName . '.tmp', $fullName)) {
|
||||||
|
// revert the move of the current config file to have at least the old config
|
||||||
|
rename($fullName . '.old', $fullName);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Saves all configuration values to a config file
|
||||||
|
*
|
||||||
|
* @param resource $reading The reading handler
|
||||||
|
* @param resource $writing The writing handler
|
||||||
|
*/
|
||||||
|
private function saveConfigFile($reading, $writing)
|
||||||
|
{
|
||||||
|
$settingsCount = count(array_keys($this->settings));
|
||||||
|
$categoryFound = array_fill(0, $settingsCount, false);
|
||||||
|
$categoryBracketFound = array_fill(0, $settingsCount, false);;
|
||||||
|
$lineFound = array_fill(0, $settingsCount, false);;
|
||||||
|
$lineArrowFound = array_fill(0, $settingsCount, false);;
|
||||||
|
|
||||||
|
while (!feof($reading)) {
|
||||||
|
|
||||||
|
$line = fgets($reading);
|
||||||
|
|
||||||
|
// check for each added setting if we have to replace a config line
|
||||||
|
for ($i = 0; $i < $settingsCount; $i++) {
|
||||||
|
|
||||||
|
// find the first line like "'system' =>"
|
||||||
|
if (!$categoryFound[$i] && stristr($line, sprintf('\'%s\'', $this->settings[$i]['cat']))) {
|
||||||
|
$categoryFound[$i] = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// find the first line with a starting bracket ( "[" )
|
||||||
|
if ($categoryFound[$i] && !$categoryBracketFound[$i] && stristr($line, '[')) {
|
||||||
|
$categoryBracketFound[$i] = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// find the first line with the key like "'value'"
|
||||||
|
if ($categoryBracketFound[$i] && !$lineFound[$i] && stristr($line, sprintf('\'%s\'', $this->settings[$i]['key']))) {
|
||||||
|
$lineFound[$i] = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// find the first line with an arrow ("=>") after finding the key
|
||||||
|
if ($lineFound[$i] && !$lineArrowFound[$i] && stristr($line, '=>')) {
|
||||||
|
$lineArrowFound[$i] = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// find the current value and replace it
|
||||||
|
if ($lineArrowFound[$i] && preg_match_all('/\'(.*?)\'/', $line, $matches, PREG_SET_ORDER)) {
|
||||||
|
$lineVal = end($matches)[0];
|
||||||
|
$line = str_replace($lineVal, '\'' . $this->settings[$i]['value'] . '\'', $line);
|
||||||
|
$categoryFound[$i] = false;
|
||||||
|
$categoryBracketFound[$i] = false;
|
||||||
|
$lineFound[$i] = false;
|
||||||
|
$lineArrowFound[$i] = false;
|
||||||
|
// if a line contains a closing bracket for the category ( "]" ) and we didn't find the key/value pair,
|
||||||
|
// add it as a new line before the closing bracket
|
||||||
|
} elseif ($categoryBracketFound[$i] && !$lineArrowFound[$i] && stristr($line, ']')) {
|
||||||
|
$categoryFound[$i] = false;
|
||||||
|
$categoryBracketFound[$i] = false;
|
||||||
|
$lineFound[$i] = false;
|
||||||
|
$lineArrowFound[$i] = false;
|
||||||
|
$newLine = sprintf(self::INDENT . self::INDENT . '\'%s\' => \'%s\',' . PHP_EOL, $this->settings[$i]['key'], $this->settings[$i]['value']);
|
||||||
|
$line = $newLine . $line;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fputs($writing, $line);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Saves a value to a ini file
|
||||||
|
*
|
||||||
|
* @param resource $reading The reading handler
|
||||||
|
* @param resource $writing The writing handler
|
||||||
|
*/
|
||||||
|
private function saveINIConfigFile($reading, $writing)
|
||||||
|
{
|
||||||
|
$settingsCount = count(array_keys($this->settings));
|
||||||
|
$categoryFound = array_fill(0, $settingsCount, false);
|
||||||
|
|
||||||
|
while (!feof($reading)) {
|
||||||
|
|
||||||
|
$line = fgets($reading);
|
||||||
|
|
||||||
|
// check for each added setting if we have to replace a config line
|
||||||
|
for ($i = 0; $i < $settingsCount; $i++) {
|
||||||
|
|
||||||
|
if (!$categoryFound[$i] && stristr($line, sprintf('[%s]', $this->settings[$i]['cat']))) {
|
||||||
|
$categoryFound[$i] = true;
|
||||||
|
} elseif ($categoryFound[$i] && preg_match_all('/^' . $this->settings[$i]['key'] . '\s*=\s*(.*?)$/', $line, $matches, PREG_SET_ORDER)) {
|
||||||
|
$line = $this->settings[$i]['key'] . ' = ' . $this->settings[$i]['value'] . PHP_EOL;
|
||||||
|
$categoryFound[$i] = false;
|
||||||
|
} elseif ($categoryFound[$i] && (preg_match_all('/^\[.*?\]$/', $line) || preg_match_all('/^INI;.*$/', $line))) {
|
||||||
|
$categoryFound[$i] = false;
|
||||||
|
$newLine = $this->settings[$i]['key'] . ' = ' . $this->settings[$i]['value'] . PHP_EOL;
|
||||||
|
$line = $newLine . $line;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fputs($writing, $line);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Saves a value to a .php file (normally .htconfig.php)
|
||||||
|
*
|
||||||
|
* @param resource $reading The reading handler
|
||||||
|
* @param resource $writing The writing handler
|
||||||
|
*/
|
||||||
|
private function saveToLegacyConfig($reading, $writing)
|
||||||
|
{
|
||||||
|
$settingsCount = count(array_keys($this->settings));
|
||||||
|
$found = array_fill(0, $settingsCount, false);
|
||||||
|
while (!feof($reading)) {
|
||||||
|
|
||||||
|
$line = fgets($reading);
|
||||||
|
|
||||||
|
// check for each added setting if we have to replace a config line
|
||||||
|
for ($i = 0; $i < $settingsCount; $i++) {
|
||||||
|
|
||||||
|
if ($this->settings[$i]['cat'] !== 'config' && preg_match_all('/^\$a\-\>config\[\'' . $this->settings[$i]['cat'] . '\'\]\[\'' . $this->settings[$i]['key'] . '\'\]\s*=\s\'*(.*?)\';$/', $line, $matches, PREG_SET_ORDER)) {
|
||||||
|
$line = '$a->config[\'' . $this->settings[$i]['cat'] . '\'][\'' . $this->settings[$i]['key'] . '\'] = \'' . $this->settings[$i]['value'] . '\';' . PHP_EOL;
|
||||||
|
$found[$i] = true;
|
||||||
|
} elseif ($this->settings[$i]['cat'] === 'config' && preg_match_all('/^\$a\-\>config\[\'' . $this->settings[$i]['key'] . '\'\]\s*=\s\'*(.*?)\';$/', $line, $matches, PREG_SET_ORDER)) {
|
||||||
|
$line = '$a->config[\'' . $this->settings[$i]['key'] . '\'] = \'' . $this->settings[$i]['value'] . '\';' . PHP_EOL;
|
||||||
|
$found[$i] = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fputs($writing, $line);
|
||||||
|
}
|
||||||
|
|
||||||
|
for ($i = 0; $i < $settingsCount; $i++) {
|
||||||
|
if (!$found[$i]) {
|
||||||
|
if ($this->settings[$i]['cat'] !== 'config') {
|
||||||
|
$line = '$a->config[\'' . $this->settings[$i]['cat'] . '\'][\'' . $this->settings[$i]['key'] . '\'] = \'' . $this->settings[$i]['value'] . '\';' . PHP_EOL;
|
||||||
|
} else {
|
||||||
|
$line = '$a->config[\'' . $this->settings[$i]['key'] . '\'] = \'' . $this->settings[$i]['value'] . '\';' . PHP_EOL;
|
||||||
|
}
|
||||||
|
|
||||||
|
fputs($writing, $line);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -9,7 +9,7 @@ use Friendica\App;
|
||||||
use Friendica\Database\DBA;
|
use Friendica\Database\DBA;
|
||||||
use Friendica\Factory;
|
use Friendica\Factory;
|
||||||
use Friendica\Util\BasePath;
|
use Friendica\Util\BasePath;
|
||||||
use Friendica\Util\Config\ConfigCacheLoader;
|
use Friendica\Util\Config\ConfigFileLoader;
|
||||||
use Friendica\Util\Profiler;
|
use Friendica\Util\Profiler;
|
||||||
use PHPUnit\DbUnit\DataSet\YamlDataSet;
|
use PHPUnit\DbUnit\DataSet\YamlDataSet;
|
||||||
use PHPUnit\DbUnit\TestCaseTrait;
|
use PHPUnit\DbUnit\TestCaseTrait;
|
||||||
|
@ -43,7 +43,7 @@ abstract class DatabaseTest extends MockedTest
|
||||||
|
|
||||||
$basePath = BasePath::create(dirname(__DIR__));
|
$basePath = BasePath::create(dirname(__DIR__));
|
||||||
$mode = new App\Mode($basePath);
|
$mode = new App\Mode($basePath);
|
||||||
$configLoader = new ConfigCacheLoader($basePath, $mode);
|
$configLoader = new ConfigFileLoader($basePath, $mode);
|
||||||
$config = Factory\ConfigFactory::createCache($configLoader);
|
$config = Factory\ConfigFactory::createCache($configLoader);
|
||||||
|
|
||||||
$profiler = \Mockery::mock(Profiler::class);
|
$profiler = \Mockery::mock(Profiler::class);
|
||||||
|
|
|
@ -1,63 +0,0 @@
|
||||||
<?php
|
|
||||||
/**
|
|
||||||
* A test .htconfig file
|
|
||||||
*/
|
|
||||||
|
|
||||||
$db_host = 'testhost';
|
|
||||||
$db_user = 'testuser';
|
|
||||||
$db_pass = 'testpw';
|
|
||||||
$db_data = 'testdb';
|
|
||||||
|
|
||||||
$pidfile = '/var/run/friendica.pid';
|
|
||||||
|
|
||||||
// Set the database connection charset to UTF8.
|
|
||||||
// Changing this value will likely corrupt the special characters.
|
|
||||||
// You have been warned.
|
|
||||||
$a->config['system']['db_charset'] = "anotherCharset";
|
|
||||||
|
|
||||||
// Choose a legal default timezone. If you are unsure, use "America/Los_Angeles".
|
|
||||||
// It can be changed later and only applies to timestamps for anonymous viewers.
|
|
||||||
$default_timezone = 'Europe/Berlin';
|
|
||||||
$lang = 'fr';
|
|
||||||
|
|
||||||
// What is your site name?
|
|
||||||
$a->config['sitename'] = "Friendica My Network";
|
|
||||||
|
|
||||||
// Your choices are REGISTER_OPEN, REGISTER_APPROVE, or REGISTER_CLOSED.
|
|
||||||
// Be certain to create your own personal account before setting
|
|
||||||
// REGISTER_CLOSED. 'register_text' (if set) will be displayed prominently on
|
|
||||||
// the registration page. REGISTER_APPROVE requires you set 'admin_email'
|
|
||||||
// to the email address of an already registered person who can authorise
|
|
||||||
// and/or approve/deny the request.
|
|
||||||
// In order to perform system administration via the admin panel, admin_email
|
|
||||||
// must precisely match the email address of the person logged in.
|
|
||||||
$a->config['register_policy'] = REGISTER_OPEN;
|
|
||||||
$a->config['register_text'] = 'A register text';
|
|
||||||
$a->config['admin_email'] = 'admin@friendica.local';
|
|
||||||
$a->config['admin_nickname'] = 'Friendly admin';
|
|
||||||
|
|
||||||
// Maximum size of an imported message, 0 is unlimited
|
|
||||||
$a->config['max_import_size'] = 999;
|
|
||||||
|
|
||||||
// maximum size of uploaded photos
|
|
||||||
$a->config['system']['maximagesize'] = 666;
|
|
||||||
|
|
||||||
// Location of PHP command line processor
|
|
||||||
$a->config['php_path'] = '/another/php';
|
|
||||||
|
|
||||||
// PuSH - aka pubsubhubbub URL. This makes delivery of public posts as fast as private posts
|
|
||||||
$a->config['system']['huburl'] = '[internal]';
|
|
||||||
|
|
||||||
// allowed themes (change this from admin panel after installation)
|
|
||||||
$a->config['system']['allowed_themes'] = 'quattro,vier,duepuntozero';
|
|
||||||
|
|
||||||
// default system theme
|
|
||||||
$a->config['system']['theme'] = 'duepuntozero';
|
|
||||||
|
|
||||||
// By default allow pseudonyms
|
|
||||||
$a->config['system']['no_regfullname'] = true;
|
|
||||||
|
|
||||||
//Deny public access to the local directory
|
|
||||||
//$a->config['system']['block_local_dir'] = false;
|
|
||||||
// Location of the global directory
|
|
||||||
$a->config['system']['directory'] = 'http://another.url';
|
|
|
@ -23,5 +23,6 @@ return [
|
||||||
'system' => [
|
'system' => [
|
||||||
'default_timezone' => 'UTC',
|
'default_timezone' => 'UTC',
|
||||||
'language' => 'en',
|
'language' => 'en',
|
||||||
|
'theme' => 'frio',
|
||||||
],
|
],
|
||||||
];
|
];
|
||||||
|
|
|
@ -11,6 +11,9 @@ username = testuser
|
||||||
password = testpw
|
password = testpw
|
||||||
database = testdb
|
database = testdb
|
||||||
|
|
||||||
|
[system]
|
||||||
|
theme = frio
|
||||||
|
|
||||||
[config]
|
[config]
|
||||||
admin_email = admin@test.it
|
admin_email = admin@test.it
|
||||||
INI;
|
INI;
|
||||||
|
|
|
@ -13,7 +13,7 @@ use Friendica\Core\System;
|
||||||
use Friendica\Factory;
|
use Friendica\Factory;
|
||||||
use Friendica\Network\HTTPException;
|
use Friendica\Network\HTTPException;
|
||||||
use Friendica\Util\BasePath;
|
use Friendica\Util\BasePath;
|
||||||
use Friendica\Util\Config\ConfigCacheLoader;
|
use Friendica\Util\Config\ConfigFileLoader;
|
||||||
use Monolog\Handler\TestHandler;
|
use Monolog\Handler\TestHandler;
|
||||||
|
|
||||||
require_once __DIR__ . '/../../include/api.php';
|
require_once __DIR__ . '/../../include/api.php';
|
||||||
|
@ -38,7 +38,7 @@ class ApiTest extends DatabaseTest
|
||||||
{
|
{
|
||||||
$basePath = BasePath::create(dirname(__DIR__) . '/../');
|
$basePath = BasePath::create(dirname(__DIR__) . '/../');
|
||||||
$mode = new App\Mode($basePath);
|
$mode = new App\Mode($basePath);
|
||||||
$configLoader = new ConfigCacheLoader($basePath, $mode);
|
$configLoader = new ConfigFileLoader($basePath, $mode);
|
||||||
$configCache = Factory\ConfigFactory::createCache($configLoader);
|
$configCache = Factory\ConfigFactory::createCache($configLoader);
|
||||||
$profiler = Factory\ProfilerFactory::create($configCache);
|
$profiler = Factory\ProfilerFactory::create($configCache);
|
||||||
Factory\DBFactory::init($basePath, $configCache, $profiler, $_SERVER);
|
Factory\DBFactory::init($basePath, $configCache, $profiler, $_SERVER);
|
||||||
|
|
|
@ -7,7 +7,7 @@ use Friendica\Database\DBA;
|
||||||
use Friendica\Factory;
|
use Friendica\Factory;
|
||||||
use Friendica\Test\DatabaseTest;
|
use Friendica\Test\DatabaseTest;
|
||||||
use Friendica\Util\BasePath;
|
use Friendica\Util\BasePath;
|
||||||
use Friendica\Util\Config\ConfigCacheLoader;
|
use Friendica\Util\Config\ConfigFileLoader;
|
||||||
|
|
||||||
class DBATest extends DatabaseTest
|
class DBATest extends DatabaseTest
|
||||||
{
|
{
|
||||||
|
@ -15,7 +15,7 @@ class DBATest extends DatabaseTest
|
||||||
{
|
{
|
||||||
$basePath = BasePath::create(dirname(__DIR__) . '/../../');
|
$basePath = BasePath::create(dirname(__DIR__) . '/../../');
|
||||||
$mode = new App\Mode($basePath);
|
$mode = new App\Mode($basePath);
|
||||||
$configLoader = new ConfigCacheLoader($basePath, $mode);
|
$configLoader = new ConfigFileLoader($basePath, $mode);
|
||||||
$configCache = Factory\ConfigFactory::createCache($configLoader);
|
$configCache = Factory\ConfigFactory::createCache($configLoader);
|
||||||
$profiler = Factory\ProfilerFactory::create($configCache);
|
$profiler = Factory\ProfilerFactory::create($configCache);
|
||||||
Factory\DBFactory::init($basePath, $configCache, $profiler, $_SERVER);
|
Factory\DBFactory::init($basePath, $configCache, $profiler, $_SERVER);
|
||||||
|
|
|
@ -7,7 +7,7 @@ use Friendica\Database\DBStructure;
|
||||||
use Friendica\Factory;
|
use Friendica\Factory;
|
||||||
use Friendica\Test\DatabaseTest;
|
use Friendica\Test\DatabaseTest;
|
||||||
use Friendica\Util\BasePath;
|
use Friendica\Util\BasePath;
|
||||||
use Friendica\Util\Config\ConfigCacheLoader;
|
use Friendica\Util\Config\ConfigFileLoader;
|
||||||
|
|
||||||
class DBStructureTest extends DatabaseTest
|
class DBStructureTest extends DatabaseTest
|
||||||
{
|
{
|
||||||
|
@ -15,7 +15,7 @@ class DBStructureTest extends DatabaseTest
|
||||||
{
|
{
|
||||||
$basePath = BasePath::create(dirname(__DIR__) . '/../../');
|
$basePath = BasePath::create(dirname(__DIR__) . '/../../');
|
||||||
$mode = new App\Mode($basePath);
|
$mode = new App\Mode($basePath);
|
||||||
$configLoader = new ConfigCacheLoader($basePath, $mode);
|
$configLoader = new ConfigFileLoader($basePath, $mode);
|
||||||
$configCache = Factory\ConfigFactory::createCache($configLoader);
|
$configCache = Factory\ConfigFactory::createCache($configLoader);
|
||||||
$profiler = Factory\ProfilerFactory::create($configCache);
|
$profiler = Factory\ProfilerFactory::create($configCache);
|
||||||
Factory\DBFactory::init($basePath, $configCache, $profiler, $_SERVER);
|
Factory\DBFactory::init($basePath, $configCache, $profiler, $_SERVER);
|
||||||
|
|
|
@ -1,133 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
namespace Friendica\Test\src\Util\Config;
|
|
||||||
|
|
||||||
use Friendica\App;
|
|
||||||
use Friendica\Core\Config\Cache\ConfigCache;
|
|
||||||
use Friendica\Test\MockedTest;
|
|
||||||
use Friendica\Test\Util\VFSTrait;
|
|
||||||
use Friendica\Util\Config\ConfigCacheLoader;
|
|
||||||
use Friendica\Util\Config\ConfigCacheSaver;
|
|
||||||
use Mockery\MockInterface;
|
|
||||||
use org\bovigo\vfs\vfsStream;
|
|
||||||
|
|
||||||
class ConfigCacheSaverTest extends MockedTest
|
|
||||||
{
|
|
||||||
use VFSTrait;
|
|
||||||
/**
|
|
||||||
* @var App\Mode|MockInterface
|
|
||||||
*/
|
|
||||||
private $mode;
|
|
||||||
protected function setUp()
|
|
||||||
{
|
|
||||||
parent::setUp();
|
|
||||||
$this->setUpVfsDir();
|
|
||||||
$this->mode = \Mockery::mock(App\Mode::class);
|
|
||||||
$this->mode->shouldReceive('isInstall')->andReturn(true);
|
|
||||||
}
|
|
||||||
/**
|
|
||||||
* Test the saveToConfigFile() method with a local.config.php file
|
|
||||||
*/
|
|
||||||
public function testSaveToConfigFileLocal()
|
|
||||||
{
|
|
||||||
$this->delConfigFile('local.config.php');
|
|
||||||
$file = dirname(__DIR__) . DIRECTORY_SEPARATOR .
|
|
||||||
'..' . DIRECTORY_SEPARATOR .
|
|
||||||
'..' . DIRECTORY_SEPARATOR .
|
|
||||||
'datasets' . DIRECTORY_SEPARATOR .
|
|
||||||
'config' . DIRECTORY_SEPARATOR .
|
|
||||||
'local.config.php';
|
|
||||||
|
|
||||||
vfsStream::newFile('local.config.php')
|
|
||||||
->at($this->root->getChild('config'))
|
|
||||||
->setContent(file_get_contents($file));
|
|
||||||
|
|
||||||
$configCacheSaver = new ConfigCacheSaver($this->root->url());
|
|
||||||
$configCacheLoader = new ConfigCacheLoader($this->root->url(), $this->mode);
|
|
||||||
$configCache = new ConfigCache();
|
|
||||||
$configCacheLoader->loadConfigFiles($configCache);
|
|
||||||
|
|
||||||
$this->assertEquals('admin@test.it', $configCache->get('config', 'admin_email'));
|
|
||||||
$this->assertNull($configCache->get('config', 'test_val'));
|
|
||||||
|
|
||||||
$configCacheSaver->saveToConfigFile('config', 'admin_email', 'new@mail.it');
|
|
||||||
$configCacheSaver->saveToConfigFile('config', 'test_val', 'Testing$!"$with@all.we can!');
|
|
||||||
|
|
||||||
$newConfigCache = new ConfigCache();
|
|
||||||
$configCacheLoader->loadConfigFiles($newConfigCache);
|
|
||||||
|
|
||||||
$this->assertEquals('new@mail.it', $newConfigCache->get('config', 'admin_email'));
|
|
||||||
$this->assertEquals('Testing$!"$with@all.we can!', $newConfigCache->get('config', 'test_val'));
|
|
||||||
$this->assertTrue($this->root->hasChild('config' . DIRECTORY_SEPARATOR . 'local.config.php'));
|
|
||||||
$this->assertTrue($this->root->hasChild('config' . DIRECTORY_SEPARATOR . 'local.config.php.old'));
|
|
||||||
$this->assertFalse($this->root->hasChild('config' . DIRECTORY_SEPARATOR . 'local.config.php.tmp'));
|
|
||||||
|
|
||||||
$this->assertEquals(file_get_contents($file), file_get_contents($this->root->getChild('config' . DIRECTORY_SEPARATOR . 'local.config.php.old')->url()));
|
|
||||||
}
|
|
||||||
/**
|
|
||||||
* Test the saveToConfigFile() method with a local.ini.php file
|
|
||||||
*/
|
|
||||||
public function testSaveToConfigFileINI()
|
|
||||||
{
|
|
||||||
$this->delConfigFile('local.config.php');
|
|
||||||
$file = dirname(__DIR__) . DIRECTORY_SEPARATOR .
|
|
||||||
'..' . DIRECTORY_SEPARATOR .
|
|
||||||
'..' . DIRECTORY_SEPARATOR .
|
|
||||||
'datasets' . DIRECTORY_SEPARATOR .
|
|
||||||
'config' . DIRECTORY_SEPARATOR .
|
|
||||||
'local.ini.php';
|
|
||||||
vfsStream::newFile('local.ini.php')
|
|
||||||
->at($this->root->getChild('config'))
|
|
||||||
->setContent(file_get_contents($file));
|
|
||||||
$configCacheSaver = new ConfigCacheSaver($this->root->url());
|
|
||||||
$configCacheLoader = new ConfigCacheLoader($this->root->url(), $this->mode);
|
|
||||||
$configCache = new ConfigCache();
|
|
||||||
$configCacheLoader->loadConfigFiles($configCache);
|
|
||||||
$this->assertEquals('admin@test.it', $configCache->get('config', 'admin_email'));
|
|
||||||
$this->assertNull($configCache->get('config', 'test_val'));
|
|
||||||
$configCacheSaver->saveToConfigFile('config', 'admin_email', 'new@mail.it');
|
|
||||||
$configCacheSaver->saveToConfigFile('config', 'test_val', "Testing@with.all we can");
|
|
||||||
$newConfigCache = new ConfigCache();
|
|
||||||
$configCacheLoader->loadConfigFiles($newConfigCache);
|
|
||||||
$this->assertEquals('new@mail.it', $newConfigCache->get('config', 'admin_email'));
|
|
||||||
$this->assertEquals("Testing@with.all we can", $newConfigCache->get('config', 'test_val'));
|
|
||||||
$this->assertTrue($this->root->hasChild('config' . DIRECTORY_SEPARATOR . 'local.ini.php'));
|
|
||||||
$this->assertTrue($this->root->hasChild('config' . DIRECTORY_SEPARATOR . 'local.ini.php.old'));
|
|
||||||
$this->assertFalse($this->root->hasChild('config' . DIRECTORY_SEPARATOR . 'local.ini.php.tmp'));
|
|
||||||
$this->assertEquals(file_get_contents($file), file_get_contents($this->root->getChild('config' . DIRECTORY_SEPARATOR . 'local.ini.old')->url()));
|
|
||||||
}
|
|
||||||
/**
|
|
||||||
* Test the saveToConfigFile() method with a .htconfig.php file
|
|
||||||
* @todo fix it after 2019.03 merge to develop
|
|
||||||
*/
|
|
||||||
public function testSaveToConfigFileHtconfig()
|
|
||||||
{
|
|
||||||
$this->markTestSkipped('Needs 2019.03 merge to develop first');
|
|
||||||
$this->delConfigFile('local.config.php');
|
|
||||||
$file = dirname(__DIR__) . DIRECTORY_SEPARATOR .
|
|
||||||
'..' . DIRECTORY_SEPARATOR .
|
|
||||||
'..' . DIRECTORY_SEPARATOR .
|
|
||||||
'..' . DIRECTORY_SEPARATOR .
|
|
||||||
'datasets' . DIRECTORY_SEPARATOR .
|
|
||||||
'config' . DIRECTORY_SEPARATOR .
|
|
||||||
'.htconfig.test.php';
|
|
||||||
vfsStream::newFile('.htconfig.php')
|
|
||||||
->at($this->root)
|
|
||||||
->setContent(file_get_contents($file));
|
|
||||||
$configCacheSaver = new ConfigCacheSaver($this->root->url(), $this->mode);
|
|
||||||
$configCache = new ConfigCache();
|
|
||||||
$configCacheSaver->loadConfigFiles($configCache);
|
|
||||||
$this->assertEquals('admin@test.it', $configCache->get('config', 'admin_email'));
|
|
||||||
$this->assertEquals('!<unset>!', $configCache->get('config', 'test_val'));
|
|
||||||
$configCacheSaver->saveToConfigFile('config', 'admin_email', 'new@mail.it');
|
|
||||||
$configCacheSaver->saveToConfigFile('config', 'test_val', 'Testing$!"$with@all.we can!');
|
|
||||||
$newConfigCache = new ConfigCache();
|
|
||||||
$configCacheSaver->loadConfigFiles($newConfigCache);
|
|
||||||
$this->assertEquals('new@mail.it', $newConfigCache->get('config', 'admin_email'));
|
|
||||||
$this->assertEquals('Testing$!"$with@all.we can!', $newConfigCache->get('config', 'test_val'));
|
|
||||||
$this->assertTrue($this->root->hasChild('config' . DIRECTORY_SEPARATOR . '.htconfig.php'));
|
|
||||||
$this->assertTrue($this->root->hasChild('config' . DIRECTORY_SEPARATOR . '.htconfig.php.old'));
|
|
||||||
$this->assertFalse($this->root->hasChild('config' . DIRECTORY_SEPARATOR . '.htconfig.php.tmp'));
|
|
||||||
$this->assertEquals(file_get_contents($file), file_get_contents($this->root->getChild('config' . DIRECTORY_SEPARATOR . '.htconfig.php.old')->url()));
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -6,11 +6,11 @@ use Friendica\App;
|
||||||
use Friendica\Core\Config\Cache\ConfigCache;
|
use Friendica\Core\Config\Cache\ConfigCache;
|
||||||
use Friendica\Test\MockedTest;
|
use Friendica\Test\MockedTest;
|
||||||
use Friendica\Test\Util\VFSTrait;
|
use Friendica\Test\Util\VFSTrait;
|
||||||
use Friendica\Util\Config\ConfigCacheLoader;
|
use Friendica\Util\Config\ConfigFileLoader;
|
||||||
use Mockery\MockInterface;
|
use Mockery\MockInterface;
|
||||||
use org\bovigo\vfs\vfsStream;
|
use org\bovigo\vfs\vfsStream;
|
||||||
|
|
||||||
class ConfigCacheLoaderTest extends MockedTest
|
class ConfigFileLoaderTest extends MockedTest
|
||||||
{
|
{
|
||||||
use VFSTrait;
|
use VFSTrait;
|
||||||
|
|
||||||
|
@ -34,10 +34,10 @@ class ConfigCacheLoaderTest extends MockedTest
|
||||||
*/
|
*/
|
||||||
public function testLoadConfigFiles()
|
public function testLoadConfigFiles()
|
||||||
{
|
{
|
||||||
$configCacheLoader = new ConfigCacheLoader($this->root->url(), $this->mode);
|
$configFileLoader = new ConfigFileLoader($this->root->url(), $this->mode);
|
||||||
$configCache = new ConfigCache();
|
$configCache = new ConfigCache();
|
||||||
|
|
||||||
$configCacheLoader->loadConfigFiles($configCache);
|
$configFileLoader->setupCache($configCache);
|
||||||
|
|
||||||
$this->assertEquals($this->root->url(), $configCache->get('system', 'basepath'));
|
$this->assertEquals($this->root->url(), $configCache->get('system', 'basepath'));
|
||||||
}
|
}
|
||||||
|
@ -55,10 +55,10 @@ class ConfigCacheLoaderTest extends MockedTest
|
||||||
->at($this->root->getChild('config'))
|
->at($this->root->getChild('config'))
|
||||||
->setContent('<?php return true;');
|
->setContent('<?php return true;');
|
||||||
|
|
||||||
$configCacheLoader = new ConfigCacheLoader($this->root->url(), $this->mode);
|
$configFileLoader = new ConfigFileLoader($this->root->url(), $this->mode);
|
||||||
$configCache = new ConfigCache();
|
$configCache = new ConfigCache();
|
||||||
|
|
||||||
$configCacheLoader->loadConfigFiles($configCache);
|
$configFileLoader->setupCache($configCache);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -79,10 +79,10 @@ class ConfigCacheLoaderTest extends MockedTest
|
||||||
->at($this->root->getChild('config'))
|
->at($this->root->getChild('config'))
|
||||||
->setContent(file_get_contents($file));
|
->setContent(file_get_contents($file));
|
||||||
|
|
||||||
$configCacheLoader = new ConfigCacheLoader($this->root->url(), $this->mode);
|
$configFileLoader = new ConfigFileLoader($this->root->url(), $this->mode);
|
||||||
$configCache = new ConfigCache();
|
$configCache = new ConfigCache();
|
||||||
|
|
||||||
$configCacheLoader->loadConfigFiles($configCache);
|
$configFileLoader->setupCache($configCache);
|
||||||
|
|
||||||
$this->assertEquals('testhost', $configCache->get('database', 'hostname'));
|
$this->assertEquals('testhost', $configCache->get('database', 'hostname'));
|
||||||
$this->assertEquals('testuser', $configCache->get('database', 'username'));
|
$this->assertEquals('testuser', $configCache->get('database', 'username'));
|
||||||
|
@ -111,10 +111,10 @@ class ConfigCacheLoaderTest extends MockedTest
|
||||||
->at($this->root->getChild('config'))
|
->at($this->root->getChild('config'))
|
||||||
->setContent(file_get_contents($file));
|
->setContent(file_get_contents($file));
|
||||||
|
|
||||||
$configCacheLoader = new ConfigCacheLoader($this->root->url(), $this->mode);
|
$configFileLoader = new ConfigFileLoader($this->root->url(), $this->mode);
|
||||||
$configCache = new ConfigCache();
|
$configCache = new ConfigCache();
|
||||||
|
|
||||||
$configCacheLoader->loadConfigFiles($configCache);
|
$configFileLoader->setupCache($configCache);
|
||||||
|
|
||||||
$this->assertEquals('testhost', $configCache->get('database', 'hostname'));
|
$this->assertEquals('testhost', $configCache->get('database', 'hostname'));
|
||||||
$this->assertEquals('testuser', $configCache->get('database', 'username'));
|
$this->assertEquals('testuser', $configCache->get('database', 'username'));
|
||||||
|
@ -136,16 +136,16 @@ class ConfigCacheLoaderTest extends MockedTest
|
||||||
'..' . DIRECTORY_SEPARATOR .
|
'..' . DIRECTORY_SEPARATOR .
|
||||||
'datasets' . DIRECTORY_SEPARATOR .
|
'datasets' . DIRECTORY_SEPARATOR .
|
||||||
'config' . DIRECTORY_SEPARATOR .
|
'config' . DIRECTORY_SEPARATOR .
|
||||||
'.htconfig.test.php';
|
'.htconfig.php';
|
||||||
|
|
||||||
vfsStream::newFile('.htconfig.php')
|
vfsStream::newFile('.htconfig.php')
|
||||||
->at($this->root)
|
->at($this->root)
|
||||||
->setContent(file_get_contents($file));
|
->setContent(file_get_contents($file));
|
||||||
|
|
||||||
$configCacheLoader = new ConfigCacheLoader($this->root->url(), $this->mode);
|
$configFileLoader = new ConfigFileLoader($this->root->url(), $this->mode);
|
||||||
$configCache = new ConfigCache();
|
$configCache = new ConfigCache();
|
||||||
|
|
||||||
$configCacheLoader->loadConfigFiles($configCache);
|
$configFileLoader->setupCache($configCache);
|
||||||
|
|
||||||
$this->assertEquals('testhost', $configCache->get('database', 'hostname'));
|
$this->assertEquals('testhost', $configCache->get('database', 'hostname'));
|
||||||
$this->assertEquals('testuser', $configCache->get('database', 'username'));
|
$this->assertEquals('testuser', $configCache->get('database', 'username'));
|
||||||
|
@ -157,7 +157,7 @@ class ConfigCacheLoaderTest extends MockedTest
|
||||||
$this->assertEquals('Europe/Berlin', $configCache->get('system', 'default_timezone'));
|
$this->assertEquals('Europe/Berlin', $configCache->get('system', 'default_timezone'));
|
||||||
$this->assertEquals('fr', $configCache->get('system', 'language'));
|
$this->assertEquals('fr', $configCache->get('system', 'language'));
|
||||||
|
|
||||||
$this->assertEquals('admin@friendica.local', $configCache->get('config', 'admin_email'));
|
$this->assertEquals('admin@test.it', $configCache->get('config', 'admin_email'));
|
||||||
$this->assertEquals('Friendly admin', $configCache->get('config', 'admin_nickname'));
|
$this->assertEquals('Friendly admin', $configCache->get('config', 'admin_nickname'));
|
||||||
|
|
||||||
$this->assertEquals('/another/php', $configCache->get('config', 'php_path'));
|
$this->assertEquals('/another/php', $configCache->get('config', 'php_path'));
|
||||||
|
@ -191,9 +191,9 @@ class ConfigCacheLoaderTest extends MockedTest
|
||||||
->at($this->root->getChild('addon')->getChild('test')->getChild('config'))
|
->at($this->root->getChild('addon')->getChild('test')->getChild('config'))
|
||||||
->setContent(file_get_contents($file));
|
->setContent(file_get_contents($file));
|
||||||
|
|
||||||
$configCacheLoader = new ConfigCacheLoader($this->root->url(), $this->mode);
|
$configFileLoader = new ConfigFileLoader($this->root->url(), $this->mode);
|
||||||
|
|
||||||
$conf = $configCacheLoader->loadAddonConfig('test');
|
$conf = $configFileLoader->loadAddonConfig('test');
|
||||||
|
|
||||||
$this->assertEquals('testhost', $conf['database']['hostname']);
|
$this->assertEquals('testhost', $conf['database']['hostname']);
|
||||||
$this->assertEquals('testuser', $conf['database']['username']);
|
$this->assertEquals('testuser', $conf['database']['username']);
|
139
tests/src/Util/Config/ConfigFileSaverTest.php
Normal file
139
tests/src/Util/Config/ConfigFileSaverTest.php
Normal file
|
@ -0,0 +1,139 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Friendica\Test\src\Util\Config;
|
||||||
|
|
||||||
|
use Friendica\App;
|
||||||
|
use Friendica\Core\Config\Cache\ConfigCache;
|
||||||
|
use Friendica\Test\MockedTest;
|
||||||
|
use Friendica\Test\Util\VFSTrait;
|
||||||
|
use Friendica\Util\Config\ConfigFileLoader;
|
||||||
|
use Friendica\Util\Config\ConfigFileSaver;
|
||||||
|
use Mockery\MockInterface;
|
||||||
|
use org\bovigo\vfs\vfsStream;
|
||||||
|
|
||||||
|
class ConfigFileSaverTest extends MockedTest
|
||||||
|
{
|
||||||
|
use VFSTrait;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var App\Mode|MockInterface
|
||||||
|
*/
|
||||||
|
private $mode;
|
||||||
|
|
||||||
|
protected function setUp()
|
||||||
|
{
|
||||||
|
parent::setUp();
|
||||||
|
$this->setUpVfsDir();
|
||||||
|
$this->mode = \Mockery::mock(App\Mode::class);
|
||||||
|
$this->mode->shouldReceive('isInstall')->andReturn(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function dataConfigFiles()
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'config' => [
|
||||||
|
'fileName' => 'local.config.php',
|
||||||
|
'filePath' => dirname(__DIR__) . DIRECTORY_SEPARATOR .
|
||||||
|
'..' . DIRECTORY_SEPARATOR .
|
||||||
|
'..' . DIRECTORY_SEPARATOR .
|
||||||
|
'datasets' . DIRECTORY_SEPARATOR .
|
||||||
|
'config',
|
||||||
|
'relativePath' => 'config',
|
||||||
|
],
|
||||||
|
'ini' => [
|
||||||
|
'fileName' => 'local.ini.php',
|
||||||
|
'filePath' => dirname(__DIR__) . DIRECTORY_SEPARATOR .
|
||||||
|
'..' . DIRECTORY_SEPARATOR .
|
||||||
|
'..' . DIRECTORY_SEPARATOR .
|
||||||
|
'datasets' . DIRECTORY_SEPARATOR .
|
||||||
|
'config',
|
||||||
|
'relativePath' => 'config',
|
||||||
|
],
|
||||||
|
'htconfig' => [
|
||||||
|
'fileName' => '.htconfig.php',
|
||||||
|
'filePath' => dirname(__DIR__) . DIRECTORY_SEPARATOR .
|
||||||
|
'..' . DIRECTORY_SEPARATOR .
|
||||||
|
'..' . DIRECTORY_SEPARATOR .
|
||||||
|
'datasets' . DIRECTORY_SEPARATOR .
|
||||||
|
'config',
|
||||||
|
'relativePath' => '',
|
||||||
|
],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test the saveToConfigFile() method
|
||||||
|
* @dataProvider dataConfigFiles
|
||||||
|
*
|
||||||
|
* @todo 20190324 [nupplaphil] for ini-configs, it isn't possible to use $ or ! inside values
|
||||||
|
*/
|
||||||
|
public function testSaveToConfig($fileName, $filePath, $relativePath)
|
||||||
|
{
|
||||||
|
$this->delConfigFile('local.config.php');
|
||||||
|
|
||||||
|
if (empty($relativePath)) {
|
||||||
|
$root = $this->root;
|
||||||
|
$relativeFullName = $fileName;
|
||||||
|
} else {
|
||||||
|
$root = $this->root->getChild($relativePath);
|
||||||
|
$relativeFullName = $relativePath . DIRECTORY_SEPARATOR . $fileName;
|
||||||
|
}
|
||||||
|
|
||||||
|
vfsStream::newFile($fileName)
|
||||||
|
->at($root)
|
||||||
|
->setContent(file_get_contents($filePath . DIRECTORY_SEPARATOR . $fileName));
|
||||||
|
|
||||||
|
$configFileSaver = new ConfigFileSaver($this->root->url());
|
||||||
|
$configFileLoader = new ConfigFileLoader($this->root->url(), $this->mode);
|
||||||
|
$configCache = new ConfigCache();
|
||||||
|
$configFileLoader->setupCache($configCache);
|
||||||
|
|
||||||
|
$this->assertEquals('admin@test.it', $configCache->get('config', 'admin_email'));
|
||||||
|
$this->assertNull($configCache->get('config', 'test_val'));
|
||||||
|
$this->assertNull($configCache->get('system', 'test_val2'));
|
||||||
|
|
||||||
|
$configFileSaver->addConfigValue('system', 'theme', 'frio');
|
||||||
|
$configFileSaver->addConfigValue('config', 'admin_email', 'new@mail.it');
|
||||||
|
$configFileSaver->addConfigValue('config', 'test_val', 'Testingwith@all.we can');
|
||||||
|
$configFileSaver->addConfigValue('system', 'theme', 'vier');
|
||||||
|
$configFileSaver->addConfigValue('system', 'test_val2', 'TestIt Now');
|
||||||
|
$this->assertTrue($configFileSaver->saveToConfigFile());
|
||||||
|
|
||||||
|
$newConfigCache = new ConfigCache();
|
||||||
|
$configFileLoader->setupCache($newConfigCache);
|
||||||
|
|
||||||
|
$this->assertEquals('new@mail.it', $newConfigCache->get('config', 'admin_email'));
|
||||||
|
$this->assertEquals('Testingwith@all.we can', $newConfigCache->get('config', 'test_val'));
|
||||||
|
$this->assertEquals('vier', $newConfigCache->get('system', 'theme'));
|
||||||
|
$this->assertEquals('TestIt Now', $newConfigCache->get('system', 'test_val2'));
|
||||||
|
|
||||||
|
$this->assertTrue($this->root->hasChild($relativeFullName));
|
||||||
|
$this->assertTrue($this->root->hasChild($relativeFullName . '.old'));
|
||||||
|
$this->assertFalse($this->root->hasChild($relativeFullName . '.tmp'));
|
||||||
|
|
||||||
|
$this->assertEquals(file_get_contents($filePath . DIRECTORY_SEPARATOR . $fileName), file_get_contents($this->root->getChild($relativeFullName . '.old')->url()));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test the saveToConfigFile() method without permissions
|
||||||
|
* @dataProvider dataConfigFiles
|
||||||
|
*/
|
||||||
|
public function testNoPermission($fileName, $filePath, $relativePath)
|
||||||
|
{
|
||||||
|
$this->delConfigFile('local.config.php');
|
||||||
|
|
||||||
|
if (empty($relativePath)) {
|
||||||
|
$root = $this->root;
|
||||||
|
$relativeFullName = $fileName;
|
||||||
|
} else {
|
||||||
|
$root = $this->root->getChild($relativePath);
|
||||||
|
$relativeFullName = $relativePath . DIRECTORY_SEPARATOR . $fileName;
|
||||||
|
}
|
||||||
|
|
||||||
|
$root->chmod(000);
|
||||||
|
|
||||||
|
vfsStream::newFile($fileName)
|
||||||
|
->at($root)
|
||||||
|
->setContent(file_get_contents($filePath . DIRECTORY_SEPARATOR . $fileName));
|
||||||
|
}
|
||||||
|
}
|
12
update.php
12
update.php
|
@ -12,7 +12,7 @@ use Friendica\Model\Contact;
|
||||||
use Friendica\Model\GContact;
|
use Friendica\Model\GContact;
|
||||||
use Friendica\Model\Item;
|
use Friendica\Model\Item;
|
||||||
use Friendica\Model\User;
|
use Friendica\Model\User;
|
||||||
use Friendica\Util\Config\ConfigCacheSaver;
|
use Friendica\Util\Config\ConfigFileSaver;
|
||||||
use Friendica\Util\DateTimeFormat;
|
use Friendica\Util\DateTimeFormat;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -357,8 +357,9 @@ function update_1303()
|
||||||
{
|
{
|
||||||
$app = \Friendica\BaseObject::getApp();
|
$app = \Friendica\BaseObject::getApp();
|
||||||
$configCache = $app->getConfigCache();
|
$configCache = $app->getConfigCache();
|
||||||
$configCacheSaver = new ConfigCacheSaver($app->getBasePath());
|
$configFileSaver = new ConfigFileSaver($app->getBasePath());
|
||||||
$updateConfigEntry = function($cat, $key) use ($configCache, $configCacheSaver) {
|
|
||||||
|
$updateConfigEntry = function($cat, $key) use ($configCache, $configFileSaver) {
|
||||||
// check if the config file differs from the whole configuration (= The db contains other values)
|
// check if the config file differs from the whole configuration (= The db contains other values)
|
||||||
$fileConfig = $configCache->get($cat, $key);
|
$fileConfig = $configCache->get($cat, $key);
|
||||||
if ($fileConfig === '!<unset>!') {
|
if ($fileConfig === '!<unset>!') {
|
||||||
|
@ -367,11 +368,14 @@ function update_1303()
|
||||||
$savedConfig = Config::get($cat, $key, null, true);
|
$savedConfig = Config::get($cat, $key, null, true);
|
||||||
if ($fileConfig !== $savedConfig) {
|
if ($fileConfig !== $savedConfig) {
|
||||||
Logger::info('Difference in config found', ['cat' => $cat, 'key' => $key, 'file' => $fileConfig, 'saved' => $savedConfig]);
|
Logger::info('Difference in config found', ['cat' => $cat, 'key' => $key, 'file' => $fileConfig, 'saved' => $savedConfig]);
|
||||||
$configCacheSaver->saveToConfigFile($cat, $key, $savedConfig);
|
$configFileSaver->addConfigValue($cat, $key, $savedConfig);
|
||||||
} else {
|
} else {
|
||||||
Logger::info('No Difference in config found', ['cat' => $cat, 'key' => $key, 'value' => $fileConfig, 'saved' => $savedConfig]);
|
Logger::info('No Difference in config found', ['cat' => $cat, 'key' => $key, 'value' => $fileConfig, 'saved' => $savedConfig]);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
$configFileSaver->saveToConfigFile();
|
||||||
|
|
||||||
$updateConfigEntry('config', 'hostname');
|
$updateConfigEntry('config', 'hostname');
|
||||||
$updateConfigEntry('system', 'basepath');
|
$updateConfigEntry('system', 'basepath');
|
||||||
return Update::SUCCESS;
|
return Update::SUCCESS;
|
||||||
|
|
Loading…
Reference in a new issue