Added first version of ConfigCacheSaver
This commit is contained in:
parent
dda26a46f5
commit
383a6715c3
|
@ -8,12 +8,12 @@ use Detection\MobileDetect;
|
||||||
use DOMDocument;
|
use DOMDocument;
|
||||||
use DOMXPath;
|
use DOMXPath;
|
||||||
use Exception;
|
use Exception;
|
||||||
use Friendica\Core\Config\Cache\ConfigCacheLoader;
|
|
||||||
use Friendica\Core\Config\Cache\IConfigCache;
|
use Friendica\Core\Config\Cache\IConfigCache;
|
||||||
use Friendica\Core\Config\Configuration;
|
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\HTTPSignature;
|
use Friendica\Util\HTTPSignature;
|
||||||
use Friendica\Util\Profiler;
|
use Friendica\Util\Profiler;
|
||||||
use Psr\Log\LoggerInterface;
|
use Psr\Log\LoggerInterface;
|
||||||
|
|
|
@ -10,6 +10,16 @@ namespace Friendica\Core\Config;
|
||||||
*/
|
*/
|
||||||
class Configuration
|
class Configuration
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
* The blacklist of configuration settings, which should not get saved to the backend
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
private $configSaveBlacklist = [
|
||||||
|
'config' => [
|
||||||
|
'hostname' => true,
|
||||||
|
]
|
||||||
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var Cache\IConfigCache
|
* @var Cache\IConfigCache
|
||||||
*/
|
*/
|
||||||
|
@ -117,7 +127,7 @@ class Configuration
|
||||||
$cached = $this->configCache->set($cat, $key, $value);
|
$cached = $this->configCache->set($cat, $key, $value);
|
||||||
|
|
||||||
// If there is no connected adapter, we're finished
|
// If there is no connected adapter, we're finished
|
||||||
if (!$this->configAdapter->isConnected()) {
|
if (!$this->configAdapter->isConnected() && !empty($this->configSaveBlacklist[$cat][$key])) {
|
||||||
return $cached;
|
return $cached;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -7,6 +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 RuntimeException;
|
use RuntimeException;
|
||||||
|
|
||||||
class AutomaticInstallation extends Console
|
class AutomaticInstallation extends Console
|
||||||
|
@ -103,7 +104,7 @@ HELP;
|
||||||
}
|
}
|
||||||
|
|
||||||
//reload the config cache
|
//reload the config cache
|
||||||
$loader = new Config\Cache\ConfigCacheLoader($a->getBasePath(), $a->getMode());
|
$loader = new ConfigCacheLoader($a->getBasePath(), $a->getMode());
|
||||||
$loader->loadConfigFiles($configCache);
|
$loader->loadConfigFiles($configCache);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -6,15 +6,16 @@ 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;
|
||||||
|
|
||||||
class ConfigFactory
|
class ConfigFactory
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* @param Cache\ConfigCacheLoader $loader The Config Cache loader (INI/config/.htconfig)
|
* @param ConfigCacheLoader $loader The Config Cache loader (INI/config/.htconfig)
|
||||||
*
|
*
|
||||||
* @return Cache\ConfigCache
|
* @return Cache\ConfigCache
|
||||||
*/
|
*/
|
||||||
public static function createCache(Cache\ConfigCacheLoader $loader)
|
public static function createCache(ConfigCacheLoader $loader)
|
||||||
{
|
{
|
||||||
$configCache = new Cache\ConfigCache();
|
$configCache = new Cache\ConfigCache();
|
||||||
$loader->loadConfigFiles($configCache);
|
$loader->loadConfigFiles($configCache);
|
||||||
|
|
|
@ -3,9 +3,9 @@
|
||||||
namespace Friendica\Factory;
|
namespace Friendica\Factory;
|
||||||
|
|
||||||
use Friendica\App;
|
use Friendica\App;
|
||||||
use Friendica\Core\Config\Cache;
|
|
||||||
use Friendica\Factory;
|
use Friendica\Factory;
|
||||||
use Friendica\Util\BasePath;
|
use Friendica\Util\BasePath;
|
||||||
|
use Friendica\Util\Config;
|
||||||
|
|
||||||
class DependencyFactory
|
class DependencyFactory
|
||||||
{
|
{
|
||||||
|
@ -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 Cache\ConfigCacheLoader($basePath, $mode);
|
$configLoader = new Config\ConfigCacheLoader($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,29 +1,21 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace Friendica\Core\Config\Cache;
|
namespace Friendica\Util\Config;
|
||||||
|
|
||||||
use Friendica\App;
|
use Friendica\App;
|
||||||
use Friendica\Core\Addon;
|
use Friendica\Core\Addon;
|
||||||
|
use Friendica\Core\Config\Cache\IConfigCache;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The ConfigCacheLoader loads config-files and stores them in a ConfigCache ( @see ConfigCache )
|
* The ConfigCacheLoader 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
|
class ConfigCacheLoader extends ConfigCacheManager
|
||||||
{
|
{
|
||||||
/**
|
|
||||||
* The Sub directory of the config-files
|
|
||||||
* @var string
|
|
||||||
*/
|
|
||||||
const SUBDIRECTORY = 'config';
|
|
||||||
|
|
||||||
private $baseDir;
|
|
||||||
private $configDir;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var App\Mode
|
* @var App\Mode
|
||||||
*/
|
*/
|
||||||
|
@ -31,9 +23,8 @@ class ConfigCacheLoader
|
||||||
|
|
||||||
public function __construct($baseDir, App\Mode $mode)
|
public function __construct($baseDir, App\Mode $mode)
|
||||||
{
|
{
|
||||||
|
parent::__construct($baseDir);
|
||||||
$this->appMode = $mode;
|
$this->appMode = $mode;
|
||||||
$this->baseDir = $baseDir;
|
|
||||||
$this->configDir = $baseDir . DIRECTORY_SEPARATOR . self::SUBDIRECTORY;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -74,10 +65,10 @@ class ConfigCacheLoader
|
||||||
*/
|
*/
|
||||||
public function loadCoreConfig($name)
|
public function loadCoreConfig($name)
|
||||||
{
|
{
|
||||||
if (file_exists($this->configDir . DIRECTORY_SEPARATOR . $name . '.config.php')) {
|
if (!empty($this->getConfigFullName($name))) {
|
||||||
return $this->loadConfigFile($this->configDir . DIRECTORY_SEPARATOR . $name . '.config.php');
|
return $this->loadConfigFile($this->getConfigFullName($name));
|
||||||
} elseif (file_exists($this->configDir . DIRECTORY_SEPARATOR . $name . '.ini.php')) {
|
} elseif (!empty($this->getIniFullName($name))) {
|
||||||
return $this->loadINIConfigFile($this->configDir . DIRECTORY_SEPARATOR . $name . '.ini.php');
|
return $this->loadINIConfigFile($this->getIniFullName($name));
|
||||||
} else {
|
} else {
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
@ -118,14 +109,11 @@ class ConfigCacheLoader
|
||||||
*/
|
*/
|
||||||
private function loadLegacyConfig($name)
|
private function loadLegacyConfig($name)
|
||||||
{
|
{
|
||||||
$filePath = $this->baseDir . DIRECTORY_SEPARATOR . '.' . $name . '.php';
|
|
||||||
|
|
||||||
$config = [];
|
$config = [];
|
||||||
|
if (!empty($this->getHtConfigFullName($name))) {
|
||||||
if (file_exists($filePath)) {
|
|
||||||
$a = new \stdClass();
|
$a = new \stdClass();
|
||||||
$a->config = [];
|
$a->config = [];
|
||||||
include $filePath;
|
include $this->getHtConfigFullName($name);
|
||||||
|
|
||||||
$htConfigCategories = array_keys($a->config);
|
$htConfigCategories = array_keys($a->config);
|
||||||
|
|
|
@ -0,0 +1,39 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Friendica\Util\Config;
|
||||||
|
|
||||||
|
abstract class ConfigCacheManager
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* The Sub directory of the config-files
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
const SUBDIRECTORY = 'config';
|
||||||
|
|
||||||
|
protected $baseDir;
|
||||||
|
protected $configDir;
|
||||||
|
|
||||||
|
public function __construct($baseDir)
|
||||||
|
{
|
||||||
|
$this->baseDir = $baseDir;
|
||||||
|
$this->configDir = $baseDir . DIRECTORY_SEPARATOR . self::SUBDIRECTORY;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function getConfigFullName($name)
|
||||||
|
{
|
||||||
|
$fullName = $this->configDir . DIRECTORY_SEPARATOR . $name . '.config.php';
|
||||||
|
return file_exists($fullName) ? $fullName : '';
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function getIniFullName($name)
|
||||||
|
{
|
||||||
|
$fullName = $this->configDir . DIRECTORY_SEPARATOR . $name . '.ini.php';
|
||||||
|
return file_exists($fullName) ? $fullName : '';
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function getHtConfigFullName($name)
|
||||||
|
{
|
||||||
|
$fullName = $this->baseDir . DIRECTORY_SEPARATOR . '.' . $name . '.php';
|
||||||
|
return file_exists($fullName) ? $fullName : '';
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,198 @@
|
||||||
|
<?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";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Saves 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 saveToConfigFile($cat, $key, $value)
|
||||||
|
{
|
||||||
|
$this->saveToLegacyConfig('htpreconfig', $cat, $key, $value);
|
||||||
|
$this->saveToLegacyConfig('htconfig', $cat, $key, $value);
|
||||||
|
$this->saveToCoreConfig('local', $cat, $key, $value);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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);
|
||||||
|
}
|
||||||
|
}
|
|
@ -6,10 +6,10 @@
|
||||||
namespace Friendica\Test;
|
namespace Friendica\Test;
|
||||||
|
|
||||||
use Friendica\App;
|
use Friendica\App;
|
||||||
use Friendica\Core\Config\Cache;
|
|
||||||
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\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 Cache\ConfigCacheLoader($basePath, $mode);
|
$configLoader = new ConfigCacheLoader($basePath, $mode);
|
||||||
$config = Factory\ConfigFactory::createCache($configLoader);
|
$config = Factory\ConfigFactory::createCache($configLoader);
|
||||||
|
|
||||||
$profiler = \Mockery::mock(Profiler::class);
|
$profiler = \Mockery::mock(Profiler::class);
|
||||||
|
|
|
@ -7,13 +7,13 @@ namespace Friendica\Test;
|
||||||
|
|
||||||
use Friendica\App;
|
use Friendica\App;
|
||||||
use Friendica\Core\Config;
|
use Friendica\Core\Config;
|
||||||
use Friendica\Core\Config\Cache;
|
|
||||||
use Friendica\Core\PConfig;
|
use Friendica\Core\PConfig;
|
||||||
use Friendica\Core\Protocol;
|
use Friendica\Core\Protocol;
|
||||||
use Friendica\Core\System;
|
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 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 Cache\ConfigCacheLoader($basePath, $mode);
|
$configLoader = new ConfigCacheLoader($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);
|
||||||
|
|
|
@ -3,11 +3,11 @@ namespace Friendica\Test\src\Database;
|
||||||
|
|
||||||
use Friendica\App;
|
use Friendica\App;
|
||||||
use Friendica\Core\Config;
|
use Friendica\Core\Config;
|
||||||
use Friendica\Core\Config\Cache;
|
|
||||||
use Friendica\Database\DBA;
|
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;
|
||||||
|
|
||||||
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 Cache\ConfigCacheLoader($basePath, $mode);
|
$configLoader = new ConfigCacheLoader($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);
|
||||||
|
|
|
@ -3,11 +3,11 @@
|
||||||
namespace Friendica\Test\src\Database;
|
namespace Friendica\Test\src\Database;
|
||||||
|
|
||||||
use Friendica\App;
|
use Friendica\App;
|
||||||
use Friendica\Core\Config\Cache;
|
|
||||||
use Friendica\Database\DBStructure;
|
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;
|
||||||
|
|
||||||
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 Cache\ConfigCacheLoader($basePath, $mode);
|
$configLoader = new ConfigCacheLoader($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,12 +1,12 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace Friendica\Test\src\Core\Config\Cache;
|
namespace Friendica\Test\src\Util\Config;
|
||||||
|
|
||||||
use Friendica\App;
|
use Friendica\App;
|
||||||
use Friendica\Core\Config\Cache\ConfigCache;
|
use Friendica\Core\Config\Cache\ConfigCache;
|
||||||
use Friendica\Core\Config\Cache\ConfigCacheLoader;
|
|
||||||
use Friendica\Test\MockedTest;
|
use Friendica\Test\MockedTest;
|
||||||
use Friendica\Test\Util\VFSTrait;
|
use Friendica\Test\Util\VFSTrait;
|
||||||
|
use Friendica\Util\Config\ConfigCacheLoader;
|
||||||
use Mockery\MockInterface;
|
use Mockery\MockInterface;
|
||||||
use org\bovigo\vfs\vfsStream;
|
use org\bovigo\vfs\vfsStream;
|
||||||
|
|
||||||
|
@ -68,13 +68,7 @@ class ConfigCacheLoaderTest extends MockedTest
|
||||||
{
|
{
|
||||||
$this->delConfigFile('local.config.php');
|
$this->delConfigFile('local.config.php');
|
||||||
|
|
||||||
$file = dirname(__DIR__) . DIRECTORY_SEPARATOR .
|
$file = dirname(__DIR__) . DIRECTORY_SEPARATOR;
|
||||||
'..' . DIRECTORY_SEPARATOR .
|
|
||||||
'..' . DIRECTORY_SEPARATOR .
|
|
||||||
'..' . DIRECTORY_SEPARATOR .
|
|
||||||
'datasets' . DIRECTORY_SEPARATOR .
|
|
||||||
'config' . DIRECTORY_SEPARATOR .
|
|
||||||
'local.config.php';
|
|
||||||
|
|
||||||
vfsStream::newFile('local.config.php')
|
vfsStream::newFile('local.config.php')
|
||||||
->at($this->root->getChild('config'))
|
->at($this->root->getChild('config'))
|
||||||
|
@ -101,13 +95,7 @@ class ConfigCacheLoaderTest extends MockedTest
|
||||||
{
|
{
|
||||||
$this->delConfigFile('local.config.php');
|
$this->delConfigFile('local.config.php');
|
||||||
|
|
||||||
$file = dirname(__DIR__) . DIRECTORY_SEPARATOR .
|
$file = dirname(__DIR__) . DIRECTORY_SEPARATOR;
|
||||||
'..' . DIRECTORY_SEPARATOR .
|
|
||||||
'..' . DIRECTORY_SEPARATOR .
|
|
||||||
'..' . DIRECTORY_SEPARATOR .
|
|
||||||
'datasets' . DIRECTORY_SEPARATOR .
|
|
||||||
'config' . DIRECTORY_SEPARATOR .
|
|
||||||
'local.ini.php';
|
|
||||||
|
|
||||||
vfsStream::newFile('local.ini.php')
|
vfsStream::newFile('local.ini.php')
|
||||||
->at($this->root->getChild('config'))
|
->at($this->root->getChild('config'))
|
||||||
|
@ -133,13 +121,7 @@ class ConfigCacheLoaderTest extends MockedTest
|
||||||
{
|
{
|
||||||
$this->delConfigFile('local.config.php');
|
$this->delConfigFile('local.config.php');
|
||||||
|
|
||||||
$file = dirname(__DIR__) . DIRECTORY_SEPARATOR .
|
$file = dirname(__DIR__) . DIRECTORY_SEPARATOR;
|
||||||
'..' . DIRECTORY_SEPARATOR .
|
|
||||||
'..' . DIRECTORY_SEPARATOR .
|
|
||||||
'..' . DIRECTORY_SEPARATOR .
|
|
||||||
'datasets' . DIRECTORY_SEPARATOR .
|
|
||||||
'config' . DIRECTORY_SEPARATOR .
|
|
||||||
'.htconfig.test.php';
|
|
||||||
|
|
||||||
vfsStream::newFile('.htconfig.php')
|
vfsStream::newFile('.htconfig.php')
|
||||||
->at($this->root)
|
->at($this->root)
|
||||||
|
@ -183,13 +165,7 @@ class ConfigCacheLoaderTest extends MockedTest
|
||||||
|
|
||||||
vfsStream::create($structure, $this->root);
|
vfsStream::create($structure, $this->root);
|
||||||
|
|
||||||
$file = dirname(__DIR__) . DIRECTORY_SEPARATOR .
|
$file = dirname(__DIR__) . DIRECTORY_SEPARATOR;
|
||||||
'..' . DIRECTORY_SEPARATOR .
|
|
||||||
'..' . DIRECTORY_SEPARATOR .
|
|
||||||
'..' . DIRECTORY_SEPARATOR .
|
|
||||||
'datasets' . DIRECTORY_SEPARATOR .
|
|
||||||
'config' . DIRECTORY_SEPARATOR .
|
|
||||||
'local.config.php';
|
|
||||||
|
|
||||||
vfsStream::newFile('test.config.php')
|
vfsStream::newFile('test.config.php')
|
||||||
->at($this->root->getChild('addon')->getChild('test')->getChild('config'))
|
->at($this->root->getChild('addon')->getChild('test')->getChild('config'))
|
|
@ -0,0 +1,128 @@
|
||||||
|
<?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 .
|
||||||
|
'..' . 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->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();
|
||||||
|
$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 .
|
||||||
|
'..' . 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->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();
|
||||||
|
$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()));
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user