. * */ namespace Friendica\Core\Config\Factory; use Friendica\Core\Config\Util; use Friendica\Core\Config\ValueObject\Cache; /** * The config factory for creating either the cache or the whole model */ class Config { /** * The key of the $_SERVER variable to override the config directory * * @var string */ const CONFIG_DIR_ENV = 'FRIENDICA_CONFIG_DIR'; /** * The Sub directory of the config-files * * @var string */ const CONFIG_DIR = 'config'; /** * The Sub directory of the static config-files * * @var string */ const STATIC_DIR = 'static'; /** * @param string $basePath The basepath of FRIENDICA * @param array $server The $_SERVER array * * @return Util\ConfigFileManager */ public function createConfigFileLoader(string $basePath, array $server = []): Util\ConfigFileManager { if (!empty($server[self::CONFIG_DIR_ENV]) && is_dir($server[self::CONFIG_DIR_ENV])) { $configDir = $server[self::CONFIG_DIR_ENV]; } else { $configDir = $basePath . DIRECTORY_SEPARATOR . self::CONFIG_DIR; } $staticDir = $basePath . DIRECTORY_SEPARATOR . self::STATIC_DIR; return new Util\ConfigFileManager($basePath, $configDir, $staticDir, new Util\ConfigFileTransformer()); } /** * @param Util\ConfigFileManager $configFileManager The Config Cache manager (INI/config/.htconfig) * @param array $server * * @return Cache */ public function createCache(Util\ConfigFileManager $configFileManager, array $server = []): Cache { $configCache = new Cache(); $configFileManager->setupCache($configCache, $server); return $configCache; } /** * @param Cache $configCache The config cache of this adapter * @param Repository\Config $configRepo The configuration repository * * @return Capability\IManageConfigValues */ public function create(Util\ConfigFileManager $loader, Cache $configCache, Repository\Config $configRepo) { if ($configCache->get('system', 'config_adapter') === 'preload') { $configuration = new Type\PreloadConfig($loader, $configCache, $configRepo); } else { $configuration = new Type\JitConfig($loader, $configCache, $configRepo); } return $configuration; } }