From 1a2527cdbad5a519e95ceefc9d9874149a7813b4 Mon Sep 17 00:00:00 2001 From: Philipp Holzer Date: Thu, 14 Mar 2019 02:36:49 +0100 Subject: [PATCH] Move AppMode --- src/App.php | 33 +++++++++------------ src/Core/Config/Cache/ConfigCacheLoader.php | 21 +++++++++++-- src/Factory/DependencyFactory.php | 7 +++-- tests/DatabaseTest.php | 4 ++- tests/include/ApiTest.php | 5 ++-- tests/src/Database/DBATest.php | 5 ++-- tests/src/Database/DBStructureTest.php | 5 ++-- 7 files changed, 49 insertions(+), 31 deletions(-) diff --git a/src/App.php b/src/App.php index b5ad683219..ff201e42ec 100644 --- a/src/App.php +++ b/src/App.php @@ -165,6 +165,16 @@ class App return $this->profiler; } + /** + * Returns the Mode of the Application + * + * @return App\Mode The Application Mode + */ + public function getMode() + { + return $this->mode; + } + /** * Register a stylesheet file path to be included in the tag of every page. * Inclusion is done in App->initHead(). @@ -208,19 +218,21 @@ class App * * @param string $basePath The basedir of the app * @param Configuration $config The Configuration + * @param App\Mode $mode The mode of this Friendica app * @param LoggerInterface $logger The current app logger * @param Profiler $profiler The profiler of this application * @param bool $isBackend Whether it is used for backend or frontend (Default true=backend) * * @throws Exception if the Basepath is not usable */ - public function __construct($basePath, Configuration $config, LoggerInterface $logger, Profiler $profiler, $isBackend = true) + public function __construct($basePath, Configuration $config, App\Mode $mode, LoggerInterface $logger, Profiler $profiler, $isBackend = true) { BaseObject::setApp($this); $this->logger = $logger; $this->config = $config; $this->profiler = $profiler; + $this->mode = $mode; $cfgBasePath = $this->config->get('system', 'basepath'); $this->basePath = !empty($cfgBasePath) ? $cfgBasePath : $basePath; @@ -234,8 +246,6 @@ class App $this->profiler->reset(); - $this->mode = new App\Mode($this->basePath); - $this->reload(); set_time_limit(0); @@ -335,22 +345,6 @@ class App Core\Renderer::registerTemplateEngine('Friendica\Render\FriendicaSmartyEngine'); } - /** - * Returns the Mode of the Application - * - * @return App\Mode The Application Mode - * - * @throws InternalServerErrorException when the mode isn't created - */ - public function getMode() - { - if (empty($this->mode)) { - throw new InternalServerErrorException('Mode of the Application is not defined'); - } - - return $this->mode; - } - /** * Reloads the whole app instance */ @@ -369,6 +363,7 @@ class App $this->config->get('rendertime', 'callstack', false)); Core\Hook::loadHooks(); + $loader = new ConfigCacheLoader($this->basePath, $this->mode); Core\Hook::callAll('load_config', $loader); } diff --git a/src/Core/Config/Cache/ConfigCacheLoader.php b/src/Core/Config/Cache/ConfigCacheLoader.php index 55f18681ce..9e06d8fb89 100644 --- a/src/Core/Config/Cache/ConfigCacheLoader.php +++ b/src/Core/Config/Cache/ConfigCacheLoader.php @@ -2,6 +2,7 @@ namespace Friendica\Core\Config\Cache; +use Friendica\App; use Friendica\Core\Addon; /** @@ -23,8 +24,14 @@ class ConfigCacheLoader private $baseDir; private $configDir; - public function __construct($baseDir) + /** + * @var App\Mode + */ + private $appMode; + + public function __construct($baseDir, App\Mode $mode) { + $this->appMode = $mode; $this->baseDir = $baseDir; $this->configDir = $baseDir . DIRECTORY_SEPARATOR . self::SUBDIRECTORY; } @@ -34,8 +41,12 @@ class ConfigCacheLoader * * First loads the default value for all the configuration keys, then the legacy configuration files, then the * expected local.config.php + * + * @param IConfigCache The config cache to load to + * + * @throws \Exception */ - public function loadConfigFiles(ConfigCache $config) + public function loadConfigFiles(IConfigCache $config) { $config->load($this->loadCoreConfig('defaults')); $config->load($this->loadCoreConfig('settings')); @@ -44,6 +55,12 @@ class ConfigCacheLoader $config->load($this->loadLegacyConfig('htconfig'), true); $config->load($this->loadCoreConfig('local'), true); + + // In case of install mode, add the found basepath (because there isn't a basepath set yet + if ($this->appMode->isInstall()) { + // Setting at least the basepath we know + $config->set('system', 'basepath', $this->baseDir); + } } /** diff --git a/src/Factory/DependencyFactory.php b/src/Factory/DependencyFactory.php index 67384452e9..265dca88ef 100644 --- a/src/Factory/DependencyFactory.php +++ b/src/Factory/DependencyFactory.php @@ -23,7 +23,8 @@ class DependencyFactory public static function setUp($channel, $directory, $isBackend = true) { $basePath = BasePath::create($directory, $_SERVER); - $configLoader = new Cache\ConfigCacheLoader($basePath); + $mode = new App\Mode($basePath); + $configLoader = new Cache\ConfigCacheLoader($basePath, $mode); $configCache = Factory\ConfigFactory::createCache($configLoader); $profiler = Factory\ProfilerFactory::create($configCache); Factory\DBFactory::init($basePath, $configCache, $profiler, $_SERVER); @@ -31,8 +32,8 @@ class DependencyFactory // needed to call PConfig::init() Factory\ConfigFactory::createPConfig($configCache); $logger = Factory\LoggerFactory::create($channel, $config, $profiler); - Factory\LoggerFactory::createDev($channel, $config); + Factory\LoggerFactory::createDev($channel, $config, $profiler); - return new App($basePath, $config, $logger, $profiler, $isBackend); + return new App($basePath, $config, $mode, $logger, $profiler, $isBackend); } } diff --git a/tests/DatabaseTest.php b/tests/DatabaseTest.php index 3ff4c6fe14..6a64b28816 100644 --- a/tests/DatabaseTest.php +++ b/tests/DatabaseTest.php @@ -5,6 +5,7 @@ namespace Friendica\Test; +use Friendica\App; use Friendica\Core\Config\Cache; use Friendica\Database\DBA; use Friendica\Factory; @@ -41,7 +42,8 @@ abstract class DatabaseTest extends MockedTest } $basePath = BasePath::create(dirname(__DIR__)); - $configLoader = new Cache\ConfigCacheLoader($basePath); + $mode = new App\Mode($basePath); + $configLoader = new Cache\ConfigCacheLoader($basePath, $mode); $config = Factory\ConfigFactory::createCache($configLoader); $profiler = \Mockery::mock(Profiler::class); diff --git a/tests/include/ApiTest.php b/tests/include/ApiTest.php index 394e822201..3d7e5bcfb6 100644 --- a/tests/include/ApiTest.php +++ b/tests/include/ApiTest.php @@ -37,14 +37,15 @@ class ApiTest extends DatabaseTest public function setUp() { $basePath = BasePath::create(dirname(__DIR__) . '/../'); - $configLoader = new Cache\ConfigCacheLoader($basePath); + $mode = new App\Mode($basePath); + $configLoader = new Cache\ConfigCacheLoader($basePath, $mode); $configCache = Factory\ConfigFactory::createCache($configLoader); $profiler = Factory\ProfilerFactory::create($configCache); Factory\DBFactory::init($basePath, $configCache, $profiler, $_SERVER); $config = Factory\ConfigFactory::createConfig($configCache); Factory\ConfigFactory::createPConfig($configCache); $logger = Factory\LoggerFactory::create('test', $config, $profiler); - $this->app = new App($basePath, $config, $logger, $profiler, false); + $this->app = new App($basePath, $config, $mode, $logger, $profiler, false); parent::setUp(); diff --git a/tests/src/Database/DBATest.php b/tests/src/Database/DBATest.php index 1408fc37bd..e638e27405 100644 --- a/tests/src/Database/DBATest.php +++ b/tests/src/Database/DBATest.php @@ -14,14 +14,15 @@ class DBATest extends DatabaseTest public function setUp() { $basePath = BasePath::create(dirname(__DIR__) . '/../../'); - $configLoader = new Cache\ConfigCacheLoader($basePath); + $mode = new App\Mode($basePath); + $configLoader = new Cache\ConfigCacheLoader($basePath, $mode); $configCache = Factory\ConfigFactory::createCache($configLoader); $profiler = Factory\ProfilerFactory::create($configCache); Factory\DBFactory::init($basePath, $configCache, $profiler, $_SERVER); $config = Factory\ConfigFactory::createConfig($configCache); Factory\ConfigFactory::createPConfig($configCache); $logger = Factory\LoggerFactory::create('test', $config, $profiler); - $this->app = new App($basePath, $config, $logger, $profiler, false); + $this->app = new App($basePath, $config, $mode, $logger, $profiler, false); parent::setUp(); diff --git a/tests/src/Database/DBStructureTest.php b/tests/src/Database/DBStructureTest.php index 0efecac234..34f659b51c 100644 --- a/tests/src/Database/DBStructureTest.php +++ b/tests/src/Database/DBStructureTest.php @@ -14,14 +14,15 @@ class DBStructureTest extends DatabaseTest public function setUp() { $basePath = BasePath::create(dirname(__DIR__) . '/../../'); - $configLoader = new Cache\ConfigCacheLoader($basePath); + $mode = new App\Mode($basePath); + $configLoader = new Cache\ConfigCacheLoader($basePath, $mode); $configCache = Factory\ConfigFactory::createCache($configLoader); $profiler = Factory\ProfilerFactory::create($configCache); Factory\DBFactory::init($basePath, $configCache, $profiler, $_SERVER); $config = Factory\ConfigFactory::createConfig($configCache); Factory\ConfigFactory::createPConfig($configCache); $logger = Factory\LoggerFactory::create('test', $config, $profiler); - $this->app = new App($basePath, $config, $logger, $profiler, false); + $this->app = new App($basePath, $config, $mode, $logger, $profiler, false); parent::setUp(); }