aboutsummaryrefslogtreecommitdiffstats
path: root/phpBB
diff options
context:
space:
mode:
authorIgor Wiedler <igor@wiedler.ch>2013-07-11 17:54:03 -0400
committerIgor Wiedler <igor@wiedler.ch>2013-07-11 18:04:40 -0400
commit1a5d685f45e5fd4450750227ef2eefe34a9b482a (patch)
treec73082cdd293b9f5afd88beb728211ee914ca93b /phpBB
parentbdd1d4d132ce3e1491c8b8509c3b5958887ed1de (diff)
downloadforums-1a5d685f45e5fd4450750227ef2eefe34a9b482a.tar
forums-1a5d685f45e5fd4450750227ef2eefe34a9b482a.tar.gz
forums-1a5d685f45e5fd4450750227ef2eefe34a9b482a.tar.bz2
forums-1a5d685f45e5fd4450750227ef2eefe34a9b482a.tar.xz
forums-1a5d685f45e5fd4450750227ef2eefe34a9b482a.zip
[feature/bootstrap-dic] Bootstrap container from config.php
PHPBB3-11651
Diffstat (limited to 'phpBB')
-rw-r--r--phpBB/includes/functions_container.php80
1 files changed, 68 insertions, 12 deletions
diff --git a/phpBB/includes/functions_container.php b/phpBB/includes/functions_container.php
index 106b7d75cc..0575f00a0b 100644
--- a/phpBB/includes/functions_container.php
+++ b/phpBB/includes/functions_container.php
@@ -21,6 +21,67 @@ if (!defined('IN_PHPBB'))
}
/**
+* Get DB connection from config.php.
+*
+* Used to bootstrap the container.
+*
+* @param string $config_file
+* @return phpbb_db_driver
+*/
+function phpbb_bootstrap_db_connection($config_file)
+{
+ require($config_file);
+ $dbal_driver_class = phpbb_convert_30_dbms_to_31($dbms);
+
+ return new $dbal_driver_class($dbhost, $dbuser, $dbpasswd, $dbname, $dbport, defined('PHPBB_DB_NEW_LINK'));
+}
+
+/**
+* Get table prefix from config.php.
+*
+* Used to bootstrap the container.
+*
+* @param string $config_file
+* @return string table prefix
+*/
+function phpbb_bootstrap_table_prefix($config_file)
+{
+ require($config_file);
+ return $table_prefix;
+}
+
+/**
+* Get enabled extensions.
+*
+* Used to bootstrap the container.
+*
+* @param string $config_file
+* @return array enabled extensions
+*/
+function phpbb_bootstrap_enabled_exts($config_file)
+{
+ $db = phpbb_bootstrap_db_connection($config_file);
+ $table_prefix = phpbb_bootstrap_table_prefix($config_file);
+ $extension_table = $table_prefix.'ext';
+
+ $sql = 'SELECT *
+ FROM ' . $extension_table . '
+ WHERE ext_active = 1';
+
+ $result = $db->sql_query($sql);
+ $rows = $db->sql_fetchrowset($result);
+ $db->sql_freeresult($result);
+
+ $exts = array();
+ foreach ($rows as $row)
+ {
+ $exts[$row['ext_name']] = $phpbb_root_path . 'ext/' . $row['ext_name'] . '/';
+ }
+
+ return $exts;
+}
+
+/**
* Create the ContainerBuilder object
*
* @param array $extensions Array of Container extension objects
@@ -79,16 +140,9 @@ function phpbb_create_install_container($phpbb_root_path, $php_ext)
* @param string $php_ext PHP Extension
* @return ContainerBuilder object (compiled)
*/
-function phpbb_create_compiled_container(array $extensions, array $passes, $phpbb_root_path, $php_ext)
+function phpbb_create_compiled_container($config_file, array $extensions, array $passes, $phpbb_root_path, $php_ext)
{
- // Create a temporary container for access to the ext.manager service
- $tmp_container = phpbb_create_container($extensions, $phpbb_root_path, $php_ext);
- $tmp_container->compile();
-
- // XXX stop writing to global $cache when
- // http://tracker.phpbb.com/browse/PHPBB3-11203 is fixed
- $GLOBALS['cache'] = $tmp_container->get('cache');
- $installed_exts = $tmp_container->get('ext.manager')->all_enabled();
+ $installed_exts = phpbb_bootstrap_enabled_exts($config_file);
// Now pass the enabled extension paths into the ext compiler extension
$extensions[] = new phpbb_di_extension_ext($installed_exts);
@@ -115,7 +169,7 @@ function phpbb_create_compiled_container(array $extensions, array $passes, $phpb
* @param string $php_ext PHP Extension
* @return ContainerBuilder object (compiled)
*/
-function phpbb_create_dumped_container(array $extensions, array $passes, $phpbb_root_path, $php_ext)
+function phpbb_create_dumped_container($config_file, array $extensions, array $passes, $phpbb_root_path, $php_ext)
{
// Check for our cached container; if it exists, use it
$container_filename = phpbb_container_filename($phpbb_root_path, $php_ext);
@@ -155,7 +209,7 @@ function phpbb_create_dumped_container(array $extensions, array $passes, $phpbb_
* @param string $php_ext PHP Extension
* @return ContainerBuilder object (compiled)
*/
-function phpbb_create_dumped_container_unless_debug(array $extensions, array $passes, $phpbb_root_path, $php_ext)
+function phpbb_create_dumped_container_unless_debug($config_file, array $extensions, array $passes, $phpbb_root_path, $php_ext)
{
$container_factory = defined('DEBUG') ? 'phpbb_create_compiled_container' : 'phpbb_create_dumped_container';
return $container_factory($extensions, $passes, $phpbb_root_path, $php_ext);
@@ -172,9 +226,11 @@ function phpbb_create_dumped_container_unless_debug(array $extensions, array $pa
*/
function phpbb_create_default_container($phpbb_root_path, $php_ext)
{
+ $config_file = $phpbb_root_path . 'config.' . $php_ext;
return phpbb_create_dumped_container_unless_debug(
+ $config_file,
array(
- new phpbb_di_extension_config($phpbb_root_path . 'config.' . $php_ext),
+ new phpbb_di_extension_config($config_file),
new phpbb_di_extension_core($phpbb_root_path),
),
array(