]> git.mxchange.org Git - friendica.git/blobdiff - src/Util/ConfigFileLoader.php
Use HTTPRequestOptions constants for HTTPClient::get()
[friendica.git] / src / Util / ConfigFileLoader.php
index 5acf4630d88efa9f8db02fcc876e7c62593d15d8..0c416a189f8fe51ce2527f822e23b7f17d71fab4 100644 (file)
@@ -1,4 +1,23 @@
 <?php
+/**
+ * @copyright Copyright (C) 2010-2021, the Friendica project
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
+ *
+ */
 
 namespace Friendica\Util;
 
@@ -78,27 +97,30 @@ class ConfigFileLoader
         * expected local.config.php
         *
         * @param Cache $config The config cache to load to
+        * @param array $server The $_SERVER array
         * @param bool  $raw    Setup the raw config format
         *
         * @throws Exception
         */
-       public function setupCache(Cache $config, $raw = false)
+       public function setupCache(Cache $config, array $server = [], $raw = false)
        {
                // Load static config files first, the order is important
-               $config->load($this->loadStaticConfig('defaults'));
-               $config->load($this->loadStaticConfig('settings'));
+               $config->load($this->loadStaticConfig('defaults'), Cache::SOURCE_FILE);
+               $config->load($this->loadStaticConfig('settings'), Cache::SOURCE_FILE);
 
                // try to load the legacy config first
-               $config->load($this->loadLegacyConfig('htpreconfig'), true);
-               $config->load($this->loadLegacyConfig('htconfig'), true);
+               $config->load($this->loadLegacyConfig('htpreconfig'), Cache::SOURCE_FILE);
+               $config->load($this->loadLegacyConfig('htconfig'), Cache::SOURCE_FILE);
 
                // Now load every other config you find inside the 'config/' directory
                $this->loadCoreConfig($config);
 
+               $config->load($this->loadEnvConfig($server), Cache::SOURCE_ENV);
+
                // In case of install mode, add the found basepath (because there isn't a basepath set yet
                if (!$raw && empty($config->get('system', 'basepath'))) {
                        // Setting at least the basepath we know
-                       $config->set('system', 'basepath', $this->baseDir);
+                       $config->set('system', 'basepath', $this->baseDir, Cache::SOURCE_FILE);
                }
        }
 
@@ -138,12 +160,12 @@ class ConfigFileLoader
        {
                // try to load legacy ini-files first
                foreach ($this->getConfigFiles(true) as $configFile) {
-                       $config->load($this->loadINIConfigFile($configFile), true);
+                       $config->load($this->loadINIConfigFile($configFile), Cache::SOURCE_FILE);
                }
 
                // try to load supported config at last to overwrite it
                foreach ($this->getConfigFiles() as $configFile) {
-                       $config->load($this->loadConfigFile($configFile), true);
+                       $config->load($this->loadConfigFile($configFile), Cache::SOURCE_FILE);
                }
 
                return [];
@@ -173,6 +195,38 @@ class ConfigFileLoader
                }
        }
 
+       /**
+        * Tries to load environment specific variables, based on the `env.config.php` mapping table
+        *
+        * @param array $server The $_SERVER variable
+        *
+        * @return array The config array (empty if no config was found)
+        *
+        * @throws Exception if the configuration file isn't readable
+        */
+       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
+
+               if (!file_exists($filepath)) {
+                       return [];
+               }
+
+               $envConfig = $this->loadConfigFile($filepath);
+
+               $return = [];
+
+               foreach ($envConfig as $envKey => $configStructure) {
+                       if (isset($server[$envKey])) {
+                               $return[$configStructure[0]][$configStructure[1]] = $server[$envKey];
+                       }
+               }
+
+               return $return;
+       }
+
        /**
         * Get the config files of the config-directory
         *