diff --git a/src/App.php b/src/App.php index 67b2592bd3..7c7496c3ba 100644 --- a/src/App.php +++ b/src/App.php @@ -25,6 +25,7 @@ use Exception; use Friendica\App\Arguments; use Friendica\App\BaseURL; use Friendica\App\Module; +use Friendica\Factory\ConfigFactory; use Friendica\Module\Maintenance; use Friendica\Security\Authentication; use Friendica\Core\Config\Cache; @@ -352,7 +353,7 @@ class App $this->profiler->update($this->config); Core\Hook::loadHooks(); - $loader = new ConfigFileLoader($this->getBasePath(), $_SERVER); + $loader = (new ConfigFactory())->createConfigFileLoader($this->getBasePath(), $_SERVER); Core\Hook::callAll('load_config', $loader); } diff --git a/src/Factory/ConfigFactory.php b/src/Factory/ConfigFactory.php index 9a20100b2f..cf55640960 100644 --- a/src/Factory/ConfigFactory.php +++ b/src/Factory/ConfigFactory.php @@ -30,6 +30,45 @@ use Friendica\Util\ConfigFileLoader; class ConfigFactory { + /** + * 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 $serer the $_SERVER array + * + * @return ConfigFileLoader + */ + public function createConfigFileLoader(string $basePath, array $server = []) + { + 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 ConfigFileLoader($basePath, $configDir, $staticDir); + } + /** * @param ConfigFileLoader $loader The Config Cache loader (INI/config/.htconfig) * diff --git a/src/Module/Admin/Summary.php b/src/Module/Admin/Summary.php index 9bd902b354..2d081f4077 100644 --- a/src/Module/Admin/Summary.php +++ b/src/Module/Admin/Summary.php @@ -29,6 +29,7 @@ use Friendica\Core\Update; use Friendica\Database\DBA; use Friendica\Database\DBStructure; use Friendica\DI; +use Friendica\Factory\ConfigFactory; use Friendica\Model\Register; use Friendica\Module\BaseAdmin; use Friendica\Network\HTTPException\InternalServerErrorException; @@ -151,7 +152,7 @@ class Summary extends BaseAdmin } // check legacy basepath settings - $configLoader = new ConfigFileLoader($a->getBasePath(), $_SERVER); + $configLoader = (new ConfigFactory())->createConfigFileLoader($a->getBasePath(), $_SERVER); $configCache = new Cache(); $configLoader->setupCache($configCache); $confBasepath = $configCache->get('system', 'basepath'); diff --git a/src/Util/ConfigFileLoader.php b/src/Util/ConfigFileLoader.php index f2aa9124fc..aabefc18bb 100644 --- a/src/Util/ConfigFileLoader.php +++ b/src/Util/ConfigFileLoader.php @@ -35,27 +35,6 @@ use Friendica\Core\Config\Cache; */ class ConfigFileLoader { - /** - * 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'; - /** * The default name of the user defined ini file * @@ -90,15 +69,16 @@ class ConfigFileLoader */ private $staticDir; - public function __construct(string $basePath, array $server) + /** + * @param string $baseDir The base + * @param string $configDir + * @param string $staticDir + */ + public function __construct(string $baseDir, string $configDir, string $staticDir) { - $this->baseDir = $basePath; - if (!empty($server[self::CONFIG_DIR_ENV]) && is_dir($server[self::CONFIG_DIR_ENV])) { - $this->configDir = $server[self::CONFIG_DIR_ENV]; - } else { - $this->configDir = $this->baseDir . DIRECTORY_SEPARATOR . self::CONFIG_DIR; - } - $this->staticDir = $this->baseDir . DIRECTORY_SEPARATOR . self::STATIC_DIR; + $this->baseDir = $baseDir; + $this->configDir = $configDir; + $this->staticDir = $staticDir; } /** @@ -113,7 +93,7 @@ class ConfigFileLoader * * @throws Exception */ - public function setupCache(Cache $config, array $server = [], $raw = false) + public function setupCache(Cache $config, array $server = [], bool $raw = false) { // Load static config files first, the order is important $config->load($this->loadStaticConfig('defaults'), Cache::SOURCE_FILE); @@ -196,7 +176,7 @@ class ConfigFileLoader $filepath = $this->baseDir . DIRECTORY_SEPARATOR . // /var/www/html/ Addon::DIRECTORY . DIRECTORY_SEPARATOR . // addon/ $name . DIRECTORY_SEPARATOR . // openstreetmap/ - self::CONFIG_DIR . DIRECTORY_SEPARATOR . // config/ + 'config'. DIRECTORY_SEPARATOR . // config/ $name . ".config.php"; // openstreetmap.config.php if (file_exists($filepath)) { @@ -217,9 +197,8 @@ class ConfigFileLoader */ public function loadEnvConfig(array $server) { - $filepath = $this->baseDir . DIRECTORY_SEPARATOR . // /var/www/html/ - self::STATIC_DIR . DIRECTORY_SEPARATOR . // static/ - "env.config.php"; // env.config.php + $filepath = $this->staticDir . DIRECTORY_SEPARATOR . // /var/www/html/static/ + "env.config.php"; // env.config.php if (!file_exists($filepath)) { return []; diff --git a/static/dependencies.config.php b/static/dependencies.config.php index 79b7f13648..bf7b412c2f 100644 --- a/static/dependencies.config.php +++ b/static/dependencies.config.php @@ -74,10 +74,12 @@ return [ ] ], Util\ConfigFileLoader::class => [ - 'shared' => true, - 'constructParams' => [ - [Dice::INSTANCE => '$basepath'], - $_SERVER, + 'instanceOf' => Factory\ConfigFactory::class, + 'call' => [ + ['createConfigFileLoader', [ + [Dice::INSTANCE => '$basepath'], + $_SERVER, + ], Dice::CHAIN_CALL], ], ], Config\Cache::class => [ diff --git a/tests/src/Core/Cache/DatabaseCacheTest.php b/tests/src/Core/Cache/DatabaseCacheTest.php index a89714a853..37859ef785 100644 --- a/tests/src/Core/Cache/DatabaseCacheTest.php +++ b/tests/src/Core/Cache/DatabaseCacheTest.php @@ -55,7 +55,7 @@ class DatabaseCacheTest extends CacheTest // load real config to avoid mocking every config-entry which is related to the Database class $configFactory = new ConfigFactory(); - $loader = new ConfigFileLoader($this->root->url(), []); + $loader = (new ConfigFactory())->createConfigFileLoader($this->root->url(), []); $configCache = $configFactory->createCache($loader); $dba = new StaticDatabase($configCache, $profiler, $logger); diff --git a/tests/src/Core/Lock/DatabaseLockDriverTest.php b/tests/src/Core/Lock/DatabaseLockDriverTest.php index 9e995c123e..c51d153efc 100644 --- a/tests/src/Core/Lock/DatabaseLockDriverTest.php +++ b/tests/src/Core/Lock/DatabaseLockDriverTest.php @@ -57,7 +57,7 @@ class DatabaseLockDriverTest extends LockTest // load real config to avoid mocking every config-entry which is related to the Database class $configFactory = new ConfigFactory(); - $loader = new ConfigFileLoader($this->root->url(), []); + $loader = (new ConfigFactory())->createConfigFileLoader($this->root->url(), []); $configCache = $configFactory->createCache($loader); $dba = new StaticDatabase($configCache, $profiler, $logger); diff --git a/tests/src/Model/ProcessTest.php b/tests/src/Model/ProcessTest.php index 66a02eced3..a4739d7f5b 100644 --- a/tests/src/Model/ProcessTest.php +++ b/tests/src/Model/ProcessTest.php @@ -33,7 +33,7 @@ class ProcessTest extends DatabaseTest // load real config to avoid mocking every config-entry which is related to the Database class $configFactory = new ConfigFactory(); - $loader = new ConfigFileLoader($this->root->url(), []); + $loader = (new ConfigFactory())->createConfigFileLoader($this->root->url(), []); $configCache = $configFactory->createCache($loader); $this->dba = new StaticDatabase($configCache, $profiler, $logger); diff --git a/tests/src/Model/Storage/DatabaseStorageTest.php b/tests/src/Model/Storage/DatabaseStorageTest.php index 8fd8c8c42c..aa25d1cc7f 100644 --- a/tests/src/Model/Storage/DatabaseStorageTest.php +++ b/tests/src/Model/Storage/DatabaseStorageTest.php @@ -55,7 +55,7 @@ class DatabaseStorageTest extends StorageTest // load real config to avoid mocking every config-entry which is related to the Database class $configFactory = new ConfigFactory(); - $loader = new ConfigFileLoader($this->root->url(), []); + $loader = (new ConfigFactory())->createConfigFileLoader($this->root->url(), []); $configCache = $configFactory->createCache($loader); $dba = new StaticDatabase($configCache, $profiler, $logger); diff --git a/tests/src/Util/Config/ConfigFileLoaderTest.php b/tests/src/Util/Config/ConfigFileLoaderTest.php index c69d94679d..cb3ae840ce 100644 --- a/tests/src/Util/Config/ConfigFileLoaderTest.php +++ b/tests/src/Util/Config/ConfigFileLoaderTest.php @@ -22,6 +22,7 @@ namespace Friendica\Test\src\Util\Config; use Friendica\Core\Config\Cache; +use Friendica\Factory\ConfigFactory; use Friendica\Test\MockedTest; use Friendica\Test\Util\VFSTrait; use Friendica\Util\ConfigFileLoader; @@ -45,7 +46,11 @@ class ConfigFileLoaderTest extends MockedTest { $this->delConfigFile('local.config.php'); - $configFileLoader = new ConfigFileLoader($this->root->url(), []); + $configFileLoader = new ConfigFileLoader( + $this->root->url(), + $this->root->url() . DIRECTORY_SEPARATOR . ConfigFactory::CONFIG_DIR, + $this->root->url() . DIRECTORY_SEPARATOR . ConfigFactory::STATIC_DIR + ); $configCache = new Cache(); $configFileLoader->setupCache($configCache); @@ -67,7 +72,11 @@ class ConfigFileLoaderTest extends MockedTest ->at($this->root->getChild('config')) ->setContent('root->url(), []); + $configFileLoader = new ConfigFileLoader( + $this->root->url(), + $this->root->url() . DIRECTORY_SEPARATOR . ConfigFactory::CONFIG_DIR, + $this->root->url() . DIRECTORY_SEPARATOR . ConfigFactory::STATIC_DIR + ); $configCache = new Cache(); $configFileLoader->setupCache($configCache); @@ -91,7 +100,11 @@ class ConfigFileLoaderTest extends MockedTest ->at($this->root->getChild('config')) ->setContent(file_get_contents($file)); - $configFileLoader = new ConfigFileLoader($this->root->url(), []); + $configFileLoader = new ConfigFileLoader( + $this->root->url(), + $this->root->url() . DIRECTORY_SEPARATOR . ConfigFactory::CONFIG_DIR, + $this->root->url() . DIRECTORY_SEPARATOR . ConfigFactory::STATIC_DIR + ); $configCache = new Cache(); $configFileLoader->setupCache($configCache); @@ -123,7 +136,11 @@ class ConfigFileLoaderTest extends MockedTest ->at($this->root->getChild('config')) ->setContent(file_get_contents($file)); - $configFileLoader = new ConfigFileLoader($this->root->url(), []); + $configFileLoader = new ConfigFileLoader( + $this->root->url(), + $this->root->url() . DIRECTORY_SEPARATOR . ConfigFactory::CONFIG_DIR, + $this->root->url() . DIRECTORY_SEPARATOR . ConfigFactory::STATIC_DIR + ); $configCache = new Cache(); $configFileLoader->setupCache($configCache); @@ -154,7 +171,11 @@ class ConfigFileLoaderTest extends MockedTest ->at($this->root) ->setContent(file_get_contents($file)); - $configFileLoader = new ConfigFileLoader($this->root->url(), []); + $configFileLoader = new ConfigFileLoader( + $this->root->url(), + $this->root->url() . DIRECTORY_SEPARATOR . ConfigFactory::CONFIG_DIR, + $this->root->url() . DIRECTORY_SEPARATOR . ConfigFactory::STATIC_DIR + ); $configCache = new Cache(); $configFileLoader->setupCache($configCache); @@ -203,7 +224,11 @@ class ConfigFileLoaderTest extends MockedTest ->at($this->root->getChild('addon')->getChild('test')->getChild('config')) ->setContent(file_get_contents($file)); - $configFileLoader = new ConfigFileLoader($this->root->url(), []); + $configFileLoader = new ConfigFileLoader( + $this->root->url(), + $this->root->url() . DIRECTORY_SEPARATOR . ConfigFactory::CONFIG_DIR, + $this->root->url() . DIRECTORY_SEPARATOR . ConfigFactory::STATIC_DIR + ); $conf = $configFileLoader->loadAddonConfig('test'); @@ -235,7 +260,11 @@ class ConfigFileLoaderTest extends MockedTest ->at($this->root->getChild('config')) ->setContent(file_get_contents($fileDir . 'B.config.php')); - $configFileLoader = new ConfigFileLoader($this->root->url(), []); + $configFileLoader = new ConfigFileLoader( + $this->root->url(), + $this->root->url() . DIRECTORY_SEPARATOR . ConfigFactory::CONFIG_DIR, + $this->root->url() . DIRECTORY_SEPARATOR . ConfigFactory::STATIC_DIR + ); $configCache = new Cache(); $configFileLoader->setupCache($configCache); @@ -264,7 +293,11 @@ class ConfigFileLoaderTest extends MockedTest ->at($this->root->getChild('config')) ->setContent(file_get_contents($fileDir . 'B.ini.php')); - $configFileLoader = new ConfigFileLoader($this->root->url(), []); + $configFileLoader = new ConfigFileLoader( + $this->root->url(), + $this->root->url() . DIRECTORY_SEPARATOR . ConfigFactory::CONFIG_DIR, + $this->root->url() . DIRECTORY_SEPARATOR . ConfigFactory::STATIC_DIR + ); $configCache = new Cache(); $configFileLoader->setupCache($configCache); @@ -293,7 +326,11 @@ class ConfigFileLoaderTest extends MockedTest ->at($this->root->getChild('config')) ->setContent(file_get_contents($fileDir . 'B.ini.php')); - $configFileLoader = new ConfigFileLoader($this->root->url(), []); + $configFileLoader = new ConfigFileLoader( + $this->root->url(), + $this->root->url() . DIRECTORY_SEPARATOR . ConfigFactory::CONFIG_DIR, + $this->root->url() . DIRECTORY_SEPARATOR . ConfigFactory::STATIC_DIR + ); $configCache = new Cache(); $configFileLoader->setupCache($configCache); @@ -309,7 +346,7 @@ class ConfigFileLoaderTest extends MockedTest { $this->delConfigFile('local.config.php'); - $configFileLoader = new ConfigFileLoader($this->root->url(), ['FRIENDICA_CONFIG_DIR' => '/a/wrong/dir/']); + $configFileLoader = (new ConfigFactory())->createConfigFileLoader($this->root->url(), ['FRIENDICA_CONFIG_DIR' => '/a/wrong/dir/']); $configCache = new Cache(); $configFileLoader->setupCache($configCache); @@ -334,7 +371,7 @@ class ConfigFileLoaderTest extends MockedTest ->at($this->root->getChild('config2')) ->setContent(file_get_contents($fileDir . 'B.config.php')); - $configFileLoader = new ConfigFileLoader($this->root->url(), ['FRIENDICA_CONFIG_DIR' => $this->root->getChild('config2')->url()]); + $configFileLoader = (new ConfigFactory())->createConfigFileLoader($this->root->url(), ['FRIENDICA_CONFIG_DIR' => $this->root->getChild('config2')->url()]); $configCache = new Cache(); $configFileLoader->setupCache($configCache);