Refactoring ConfigCacheLoader methods
authorPhilipp Holzer <admin@philipp.info>
Tue, 5 Feb 2019 21:27:57 +0000 (22:27 +0100)
committerPhilipp Holzer <admin@philipp.info>
Tue, 5 Feb 2019 21:27:57 +0000 (22:27 +0100)
bin/auth_ejabberd.php
bin/console.php
bin/daemon.php
bin/worker.php
index.php
src/App.php
src/Core/Config/ConfigCache.php
src/Core/Config/ConfigCacheLoader.php
src/Util/BasePath.php

index af728f2..11df438 100755 (executable)
@@ -54,7 +54,7 @@ chdir($directory);
 
 require dirname(__DIR__) . '/vendor/autoload.php';
 
-$basedir = BasePath::create(dirname(__DIR__));
+$basedir = BasePath::create(dirname(__DIR__), $_SERVER);
 $configLoader = new Config\ConfigCacheLoader($basedir);
 $config = Factory\ConfigFactory::createCache($configLoader);
 $logger = Factory\LoggerFactory::create('auth_ejabberd', $config);
index e7b1786..9061824 100755 (executable)
@@ -7,7 +7,7 @@ use Friendica\Core\Config;
 use Friendica\Factory;
 use Friendica\Util\BasePath;
 
-$basedir = BasePath::create(dirname(__DIR__));
+$basedir = BasePath::create(dirname(__DIR__), $_SERVER);
 $configLoader = new Config\ConfigCacheLoader($basedir);
 $config = Factory\ConfigFactory::createCache($configLoader);
 $logger = Factory\LoggerFactory::create('console', $config);
index 7e71571..5c014a9 100755 (executable)
@@ -33,7 +33,7 @@ if (!file_exists("boot.php") && (sizeof($_SERVER["argv"]) != 0)) {
 
 require dirname(__DIR__) . '/vendor/autoload.php';
 
-$basedir = BasePath::create(dirname(__DIR__));
+$basedir = BasePath::create(dirname(__DIR__), $_SERVER);
 $configLoader = new Config\ConfigCacheLoader($basedir);
 $config = Factory\ConfigFactory::createCache($configLoader);
 $logger = Factory\LoggerFactory::create('daemon', $config);
index 61fdbed..553e984 100755 (executable)
@@ -31,7 +31,7 @@ if (!file_exists("boot.php") && (sizeof($_SERVER["argv"]) != 0)) {
 
 require dirname(__DIR__) . '/vendor/autoload.php';
 
-$basedir = BasePath::create(dirname(__DIR__));
+$basedir = BasePath::create(dirname(__DIR__), $_SERVER);
 $configLoader = new Config\ConfigCacheLoader($basedir);
 $config = Factory\ConfigFactory::createCache($configLoader);
 $logger = Factory\LoggerFactory::create('worker', $config);
index 11b7879..7e73967 100644 (file)
--- a/index.php
+++ b/index.php
@@ -15,7 +15,7 @@ if (!file_exists(__DIR__ . '/vendor/autoload.php')) {
 
 require __DIR__ . '/vendor/autoload.php';
 
-$basedir = BasePath::create(__DIR__);
+$basedir = BasePath::create(__DIR__, $_SERVER);
 $configLoader = new Config\ConfigCacheLoader($basedir);
 $config = Factory\ConfigFactory::createCache($configLoader);
 $logger = Factory\LoggerFactory::create('index', $config);
index 5d55773..38d41cf 100644 (file)
@@ -387,7 +387,7 @@ class App
                        Core\Hook::loadHooks();
                        $loader = new ConfigCacheLoader($this->basePath);
                        Core\Hook::callAll('load_config', $loader);
-                       $this->config->loadConfigArray($loader->loadAddonConfig(), true);
+                       $this->config->loadConfigArray($loader->loadCoreConfig('addon'), true);
                }
 
                $this->loadDefaultTimezone();
index dba2a9d..e03d352 100644 (file)
@@ -11,24 +11,14 @@ namespace Friendica\Core\Config;
  */
 class ConfigCache implements IConfigCache, IPConfigCache
 {
-       /**
-        * NEVER, EVER use this public config array outside of the class
-        * It is only public due to backward compatibility to .htconfig.php
-        *
-        * @var array The cached config array
-        */
-       public $config;
+       private $config;
 
        /**
         * @param array $config    A initial config array
         */
        public function __construct(array $config = [])
        {
-               $this->config = [];
-
-               if (isset($config)) {
-                       $this->loadConfigArray($config, true);
-               }
+               $this->config = $config;
        }
 
        /**
index 58647e5..5521349 100644 (file)
@@ -40,8 +40,8 @@ class ConfigCacheLoader
                // Setting at least the basepath we know
                $config->set('system', 'basepath', $this->baseDir);
 
-               $config->loadConfigArray($this->loadConfigFile('defaults'));
-               $config->loadConfigArray($this->loadConfigFile('settings'));
+               $config->loadConfigArray($this->loadCoreConfig('defaults'));
+               $config->loadConfigArray($this->loadCoreConfig('settings'));
 
                // Legacy .htconfig.php support
                if (file_exists($this->baseDir  . '/.htpreconfig.php')) {
@@ -82,16 +82,11 @@ class ConfigCacheLoader
                        }
                }
 
-               if (file_exists($this->baseDir . '/config/local.config.php')) {
-                       $config->loadConfigArray($this->loadConfigFile('local'), true);
-               } elseif (file_exists($this->baseDir . '/config/local.ini.php')) {
-                       $config->loadConfigArray($this->loadINIConfigFile('local'), true);
-               }
+               $config->loadConfigArray($this->loadCoreConfig('local'), true);
        }
 
        /**
-        * Tries to load the specified legacy configuration file into the App->config array.
-        * Doesn't overwrite previously set values by default to prevent default config files to supersede DB Config.
+        * Tries to load the specified legacy configuration file into the ConfigCache (@see ConfigCache ).
         *
         * @deprecated since version 2018.12
         * @param string $filename
@@ -119,8 +114,7 @@ class ConfigCacheLoader
        }
 
        /**
-        * Tries to load the specified configuration file into the App->config array.
-        * Doesn't overwrite previously set values by default to prevent default config files to supersede DB Config.
+        * Tries to load the specified configuration file and returns the config array.
         *
         * The config format is PHP array and the template for configuration files is the following:
         *
@@ -130,19 +124,13 @@ class ConfigCacheLoader
         *      ],
         * ];
         *
-        * @param string $filename
-        * @param bool   $addon     True, if a config for an addon should be loaded
-        * @return array The configuration
-        * @throws \Exception
+        * @param  string $filepath The filepath of the
+        * @return array The config array0
+        *
+        * @throws \Exception if the config cannot get loaded.
         */
-       public function loadConfigFile($filename, $addon = false)
+       private function loadConfigFile($filepath)
        {
-               if ($addon) {
-                       $filepath = $this->baseDir . Addon::DIRECTORY . $filename . self::SUBDIRECTORY . $filename . ".config.php";
-               } else {
-                       $filepath = $this->configDir . $filename . ".config.php";
-               }
-
                if (!file_exists($filepath)) {
                        throw new \Exception('Error loading non-existent config file ' . $filepath);
                }
@@ -157,22 +145,43 @@ class ConfigCacheLoader
        }
 
        /**
-        * Loads addons configuration files
+        * Tries to load the specified core-configuration and returns the config array.
+        *
+        * @param string $name The name of the configuration
+        *
+        * @return array The config array (empty if no config found)
+        *
+        * @throws \Exception if the configuration file isn't readable
+        */
+       public function loadCoreConfig($name)
+       {
+               if (file_exists($this->configDir . $name . '.config.php')) {
+                       return $this->loadConfigFile($this->configDir . $name . '.config.php');
+               } elseif (file_exists($this->configDir . $name . '.ini.php')) {
+                       return $this->loadINIConfigFile($this->configDir . $name . '.ini.php');
+               } else {
+                       return [];
+               }
+       }
+
+       /**
+        * Tries to load the specified addon-configuration and returns the config array.
         *
         * First loads all activated addons default configuration through the load_config hook, then load the local.config.php
         * again to overwrite potential local addon configuration.
         *
-        * @return array The config array
+        * @param string $name The name of the configuration
         *
-        * @throws \Exception
+        * @return array The config array (empty if no config found)
+        *
+        * @throws \Exception if the configuration file isn't readable
         */
-       public function loadAddonConfig()
+       public function loadAddonConfig($name)
        {
-               // Load the local addon config file to overwritten default addon config values
-               if (file_exists($this->configDir . 'addon.config.php')) {
-                       return $this->loadConfigFile('addon');
-               } elseif (file_exists($this->configDir . 'addon.ini.php')) {
-                       return $this->loadINIConfigFile('addon');
+               $filepath = $this->baseDir . Addon::DIRECTORY . $name . self::SUBDIRECTORY . $name . ".config.php";
+
+               if (file_exists($filepath)) {
+                       return $this->loadConfigFile($filepath);
                } else {
                        return [];
                }
index 56b0fa1..fecc63a 100644 (file)
@@ -12,23 +12,24 @@ class BasePath
         * It first checks for the internal variable, then for DOCUMENT_ROOT and
         * finally for PWD
         *
-        * @param string|null $basepath
+        * @param string|null $basePath The default base path
+        * @param array       $server   server arguments
         *
         * @return string
         *
         * @throws \Exception if directory isn't usable
         */
-       public static function create($basepath)
+       public static function create($basePath, $server = [])
        {
-               if (!$basepath && !empty($_SERVER['DOCUMENT_ROOT'])) {
-                       $basepath = $_SERVER['DOCUMENT_ROOT'];
+               if (!$basePath && !empty($server['DOCUMENT_ROOT'])) {
+                       $basePath = $server['DOCUMENT_ROOT'];
                }
 
-               if (!$basepath && !empty($_SERVER['PWD'])) {
-                       $basepath = $_SERVER['PWD'];
+               if (!$basePath && !empty($server['PWD'])) {
+                       $basePath = $server['PWD'];
                }
 
-               return self::getRealPath($basepath);
+               return self::getRealPath($basePath);
        }
 
        /**
@@ -52,7 +53,6 @@ class BasePath
                }
        }
 
-
        /**
         * @brief Checks if a given directory is usable for the system
         *