aboutsummaryrefslogtreecommitdiffstats
path: root/phpBB/phpbb/config_php_file.php
diff options
context:
space:
mode:
authorAndreas Fischer <bantu@phpbb.com>2014-07-11 11:49:51 +0200
committerAndreas Fischer <bantu@phpbb.com>2014-07-11 11:49:51 +0200
commitb2a883d504d9ece8525fcc1a4aa8e44a000db6ca (patch)
tree81a85d5242913fa7e667b5adc873bd4a500ed406 /phpBB/phpbb/config_php_file.php
parent147b942e5c885f13181f0cb4d67cb4ccee4652df (diff)
parent58a52fe5b90215d090ba3b992f96d401d805440c (diff)
downloadforums-b2a883d504d9ece8525fcc1a4aa8e44a000db6ca.tar
forums-b2a883d504d9ece8525fcc1a4aa8e44a000db6ca.tar.gz
forums-b2a883d504d9ece8525fcc1a4aa8e44a000db6ca.tar.bz2
forums-b2a883d504d9ece8525fcc1a4aa8e44a000db6ca.tar.xz
forums-b2a883d504d9ece8525fcc1a4aa8e44a000db6ca.zip
Merge pull request #2671 from Nicofuma/ticket/12775
[ticket/12775] Replace functions_container with a container_builder class. * Nicofuma/ticket/12775: (34 commits) [ticket/12775] Set dbal.conn.driver as synthetic during installation [ticket/12775] Add the definition of dbal.conn in fixtures/config/services.yml [ticket/12775] Inject the connection when created in the container [ticket/12775] Extract the vars later in install/install_update.php [ticket/12775] Rename config_php_handler to config_php_file container_builder [ticket/12775] Set defined_vars as a property of config_php_file [ticket/12775] Fix doc blocks in the container builder [ticket/12775] Remove useless includes of config.php [ticket/12775] Move phpbb_convert_30_dbms_to_31 into the config file class [ticket/12775] Fix comments [ticket/12775] Update doc blocks [ticket/12775] Fix container_builder [ticket/12775] Rename config_php to config_php_file [ticket/12775] Renamed to \phpbb\di\container_builder [ticket/12775] Remove the last include of functions_container [ticket/12775] Fix unit tests [ticket/12775] Add tests for \phpbb\config_php [ticket/12775] Add tests for the container factory [ticket/12775] Use a field instead of a local var in load_config_var() [ticket/12775] Update container and config in install/ ...
Diffstat (limited to 'phpBB/phpbb/config_php_file.php')
-rw-r--r--phpBB/phpbb/config_php_file.php175
1 files changed, 175 insertions, 0 deletions
diff --git a/phpBB/phpbb/config_php_file.php b/phpBB/phpbb/config_php_file.php
new file mode 100644
index 0000000000..1a562e470d
--- /dev/null
+++ b/phpBB/phpbb/config_php_file.php
@@ -0,0 +1,175 @@
+<?php
+/**
+*
+* This file is part of the phpBB Forum Software package.
+*
+* @copyright (c) phpBB Limited <https://www.phpbb.com>
+* @license GNU General Public License, version 2 (GPL-2.0)
+*
+* For full copyright and license information, please see
+* the docs/CREDITS.txt file.
+*
+*/
+
+namespace phpbb;
+
+class config_php_file
+{
+ /** @var string phpBB Root Path */
+ protected $phpbb_root_path;
+
+ /** @var string php file extension */
+ protected $php_ext;
+
+ /**
+ * Indicates whether the php config file has been loaded.
+ *
+ * @var bool
+ */
+ protected $config_loaded = false;
+
+ /**
+ * The content of the php config file
+ *
+ * @var array
+ */
+ protected $config_data = array();
+
+ /**
+ * The path to the config file. (Default: $phpbb_root_path . 'config.' . $php_ext)
+ *
+ * @var string
+ */
+ protected $config_file;
+
+ private $defined_vars;
+
+ /**
+ * Constructor
+ *
+ * @param string $phpbb_root_path phpBB Root Path
+ * @param string $php_ext php file extension
+ */
+ function __construct($phpbb_root_path, $php_ext)
+ {
+ $this->phpbb_root_path = $phpbb_root_path;
+ $this->php_ext = $php_ext;
+ $this->config_file = $this->phpbb_root_path . 'config.' . $this->php_ext;
+ }
+
+ /**
+ * Set the path to the config file.
+ *
+ * @param string $config_file
+ */
+ public function set_config_file($config_file)
+ {
+ $this->config_file = $config_file;
+ $this->config_loaded = false;
+ }
+
+ /**
+ * Returns an associative array containing the variables defined by the config file.
+ *
+ * @return bool|array Return the content of the config file or false if the file does not exists.
+ */
+ public function get_all()
+ {
+ if (!$this->load_config_file())
+ {
+ return false;
+ }
+
+ return $this->config_data;
+ }
+
+ /**
+ * Return the value of a variable defined into the config.php file and false if the variable does not exist.
+ *
+ * @param string $variable The name of the variable
+ * @return mixed
+ */
+ public function get($variable)
+ {
+ if (!$this->load_config_file())
+ {
+ return false;
+ }
+
+ return isset($this->config_data[$variable]) ? $this->config_data[$variable] : false;
+ }
+
+ /**
+ * Load the config file and store the information.
+ *
+ * @return bool True if the file was correctly loaded, false otherwise.
+ */
+ protected function load_config_file()
+ {
+ if (!$this->config_loaded)
+ {
+ if (file_exists($this->config_file))
+ {
+ $this->defined_vars = get_defined_vars();
+
+ require($this->config_file);
+ $this->config_data = array_diff_key(get_defined_vars(), $this->defined_vars);
+
+ $this->config_loaded = true;
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * Convert either 3.0 dbms or 3.1 db driver class name to 3.1 db driver class name.
+ *
+ * If $dbms is a valid 3.1 db driver class name, returns it unchanged.
+ * Otherwise prepends phpbb\db\driver\ to the dbms to convert a 3.0 dbms
+ * to 3.1 db driver class name.
+ *
+ * @param string $dbms dbms parameter
+ * @return string driver class
+ * @throws \RuntimeException
+ */
+ public function convert_30_dbms_to_31($dbms)
+ {
+ // Note: this check is done first because mysqli extension
+ // supplies a mysqli class, and class_exists($dbms) would return
+ // true for mysqli class.
+ // However, per the docblock any valid 3.1 driver name should be
+ // recognized by this function, and have priority over 3.0 dbms.
+ if (strpos($dbms, 'phpbb\db\driver') === false && class_exists('phpbb\db\driver\\' . $dbms))
+ {
+ return 'phpbb\db\driver\\' . $dbms;
+ }
+
+ if (class_exists($dbms))
+ {
+ // Additionally we could check that $dbms extends phpbb\db\driver\driver.
+ // http://php.net/manual/en/class.reflectionclass.php
+ // Beware of possible performance issues:
+ // http://stackoverflow.com/questions/294582/php-5-reflection-api-performance
+ // We could check for interface implementation in all paths or
+ // only when we do not prepend phpbb\db\driver\.
+
+ /*
+ $reflection = new \ReflectionClass($dbms);
+
+ if ($reflection->isSubclassOf('phpbb\db\driver\driver'))
+ {
+ return $dbms;
+ }
+ */
+
+ return $dbms;
+ }
+
+ throw new \RuntimeException("You have specified an invalid dbms driver: $dbms");
+ }
+}