diff --git a/src/Core/Config/Model/Config.php b/src/Core/Config/Model/Config.php new file mode 100644 index 0000000000..3af2f7e4b1 --- /dev/null +++ b/src/Core/Config/Model/Config.php @@ -0,0 +1,98 @@ +. + * + */ + +namespace Friendica\Core\Config\Model; + +use Friendica\Core\Config\Capability\IManageConfigValues; +use Friendica\Core\Config\Util\ConfigFileManager; +use Friendica\Core\Config\ValueObject\Cache; + +/** + * Configuration model, which manages the whole system configuration + */ +class Config implements IManageConfigValues +{ + /** + * @var Cache + */ + protected $configCache; + + /** @var ConfigFileManager */ + protected $configFileManager; + + /** + * @param ConfigFileManager $configFileManager The configuration file manager to save back configs + * @param Cache $configCache The configuration cache (based on the config-files) + */ + public function __construct(ConfigFileManager $configFileManager, Cache $configCache) + { + $this->configFileManager = $configFileManager; + $this->configCache = $configCache; + } + + /** + * {@inheritDoc} + */ + public function getCache(): Cache + { + return $this->configCache; + } + + public function save() + { + $this->configFileManager->saveData($this->configCache); + } + + public function load(string $cat = 'config') + { + $configCache = new Cache(); + + $this->configFileManager->setupCache($configCache, $_SERVER); + $this->configCache = $configCache; + } + + public function get(string $cat, string $key, $default_value = null, bool $refresh = false) + { + return $this->configCache->get($cat, $key) ?? $default_value; + } + + public function set(string $cat, string $key, $value, bool $autosave = true): bool + { + $stored = $this->configCache->set($cat, $key, $value, Cache::SOURCE_DATA); + + if ($stored && $autosave) { + $this->save(); + } + + return $stored; + } + + public function delete(string $cat, string $key, bool $autosave = true): bool + { + $removed = $this->configCache->delete($cat, $key); + + if ($removed && $autosave) { + $this->save(); + } + + return $removed; + } +} diff --git a/static/dependencies.config.php b/static/dependencies.config.php index 08867d86d9..90f01feede 100644 --- a/static/dependencies.config.php +++ b/static/dependencies.config.php @@ -98,10 +98,7 @@ return [ ], ], Config\Capability\IManageConfigValues::class => [ - 'instanceOf' => Config\Factory\Config::class, - 'call' => [ - ['create', [], Dice::CHAIN_CALL], - ], + 'instanceOf' => Config\Model\Config::class, ], PConfig\Capability\IManagePersonalConfigValues::class => [ 'instanceOf' => PConfig\Factory\PConfig::class,