From fcc3dd996da198a8c659a5bb8bc02b27fa8f0885 Mon Sep 17 00:00:00 2001
From: Jakub Senko <jakubsenko@gmail.com>
Date: Mon, 18 Jun 2018 20:35:01 +0200
Subject: [PATCH] [ticket/12624] Add debug.load_time parameter

PHPBB3-12624
---
 phpBB/common.php                                    |  2 ++
 phpBB/config/development/config.yml                 |  1 +
 phpBB/includes/functions.php                        |  4 +++-
 phpBB/phpbb/db/driver/driver.php                    | 13 +++++++++++++
 phpBB/phpbb/db/driver/driver_interface.php          |  7 +++++++
 phpBB/phpbb/db/driver/factory.php                   |  8 ++++++++
 phpBB/phpbb/db/driver/mssql_odbc.php                |  4 ++--
 phpBB/phpbb/db/driver/mssqlnative.php               |  4 ++--
 phpBB/phpbb/db/driver/mysql.php                     |  4 ++--
 phpBB/phpbb/db/driver/mysqli.php                    |  4 ++--
 phpBB/phpbb/db/driver/oracle.php                    |  4 ++--
 phpBB/phpbb/db/driver/postgres.php                  |  4 ++--
 phpBB/phpbb/db/driver/sqlite3.php                   |  4 ++--
 .../phpbb/di/extension/container_configuration.php  |  1 +
 .../install_filesystem/task/create_config_file.php  |  1 -
 tests/mock/container_builder.php                    |  5 +++++
 vagrant/after.sh                                    |  3 ---
 17 files changed, 54 insertions(+), 19 deletions(-)

diff --git a/phpBB/common.php b/phpBB/common.php
index 7ace4cf12a..dc56fd70fa 100644
--- a/phpBB/common.php
+++ b/phpBB/common.php
@@ -131,6 +131,8 @@ catch (InvalidArgumentException $e)
 $phpbb_class_loader->set_cache($phpbb_container->get('cache.driver'));
 $phpbb_class_loader_ext->set_cache($phpbb_container->get('cache.driver'));
 
+$phpbb_container->get('dbal.conn')->set_debug_load_time($phpbb_container->getParameter('debug.load_time'));
+
 require($phpbb_root_path . 'includes/compatibility_globals.' . $phpEx);
 
 register_compatibility_globals();
diff --git a/phpBB/config/development/config.yml b/phpBB/config/development/config.yml
index 1e144d68d6..84873d61a8 100644
--- a/phpBB/config/development/config.yml
+++ b/phpBB/config/development/config.yml
@@ -6,6 +6,7 @@ core:
 
     debug:
         exceptions: true
+        load_time: true
 
     twig:
         debug: true
diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php
index 04f0203f80..e133ce6096 100644
--- a/phpBB/includes/functions.php
+++ b/phpBB/includes/functions.php
@@ -4532,10 +4532,12 @@ function phpbb_check_and_display_sql_report(\phpbb\request\request_interface $re
 */
 function phpbb_generate_debug_output(\phpbb\db\driver\driver_interface $db, \phpbb\config\config $config, \phpbb\auth\auth $auth, \phpbb\user $user, \phpbb\event\dispatcher_interface $phpbb_dispatcher)
 {
+	global $phpbb_container;
+
 	$debug_info = array();
 
 	// Output page creation time
-	if (defined('PHPBB_DISPLAY_LOAD_TIME'))
+	if ($phpbb_container->getParameter('debug.load_time'))
 	{
 		if (isset($GLOBALS['starttime']))
 		{
diff --git a/phpBB/phpbb/db/driver/driver.php b/phpBB/phpbb/db/driver/driver.php
index a36ce8c0d7..6fd8995dbe 100644
--- a/phpBB/phpbb/db/driver/driver.php
+++ b/phpBB/phpbb/db/driver/driver.php
@@ -75,6 +75,11 @@ abstract class driver implements driver_interface
 	const SUBQUERY_SELECT_TYPE = 4;
 	const SUBQUERY_BUILD = 5;
 
+	/**
+	* @var bool
+	*/
+	protected $debug_load_time = false;
+
 	/**
 	* Constructor
 	*/
@@ -95,6 +100,14 @@ abstract class driver implements driver_interface
 		$this->one_char = chr(0) . '_';
 	}
 
+	/**
+	* {@inheritdoc}
+	*/
+	public function set_debug_load_time($value)
+	{
+		$this->debug_load_time = $value;
+	}
+
 	/**
 	* {@inheritdoc}
 	*/
diff --git a/phpBB/phpbb/db/driver/driver_interface.php b/phpBB/phpbb/db/driver/driver_interface.php
index 8b487c5d42..ed4a87a259 100644
--- a/phpBB/phpbb/db/driver/driver_interface.php
+++ b/phpBB/phpbb/db/driver/driver_interface.php
@@ -15,6 +15,13 @@ namespace phpbb\db\driver;
 
 interface driver_interface
 {
+	/**
+	* Set value for load_time debug parameter
+	*
+	* @param bool $value
+	*/
+	public function set_debug_load_time($value);
+
 	/**
 	* Gets the name of the sql layer.
 	*
diff --git a/phpBB/phpbb/db/driver/factory.php b/phpBB/phpbb/db/driver/factory.php
index fb3a826254..2c7953e9c9 100644
--- a/phpBB/phpbb/db/driver/factory.php
+++ b/phpBB/phpbb/db/driver/factory.php
@@ -65,6 +65,14 @@ class factory implements driver_interface
 		$this->driver = $driver;
 	}
 
+	/**
+	* {@inheritdoc}
+	*/
+	public function set_debug_load_time($value)
+	{
+		$this->get_driver()->set_debug_load_time($value);
+	}
+
 	/**
 	* {@inheritdoc}
 	*/
diff --git a/phpBB/phpbb/db/driver/mssql_odbc.php b/phpBB/phpbb/db/driver/mssql_odbc.php
index 9d9ad603e0..f6fd80fd91 100644
--- a/phpBB/phpbb/db/driver/mssql_odbc.php
+++ b/phpBB/phpbb/db/driver/mssql_odbc.php
@@ -156,7 +156,7 @@ class mssql_odbc extends \phpbb\db\driver\mssql_base
 			{
 				$this->sql_report('start', $query);
 			}
-			else if (defined('PHPBB_DISPLAY_LOAD_TIME'))
+			else if ($this->debug_load_time)
 			{
 				$this->curtime = microtime(true);
 			}
@@ -176,7 +176,7 @@ class mssql_odbc extends \phpbb\db\driver\mssql_base
 				{
 					$this->sql_report('stop', $query);
 				}
-				else if (defined('PHPBB_DISPLAY_LOAD_TIME'))
+				else if ($this->debug_load_time)
 				{
 					$this->sql_time += microtime(true) - $this->curtime;
 				}
diff --git a/phpBB/phpbb/db/driver/mssqlnative.php b/phpBB/phpbb/db/driver/mssqlnative.php
index de81a6a0c8..a4f533a97b 100644
--- a/phpBB/phpbb/db/driver/mssqlnative.php
+++ b/phpBB/phpbb/db/driver/mssqlnative.php
@@ -128,7 +128,7 @@ class mssqlnative extends \phpbb\db\driver\mssql_base
 			{
 				$this->sql_report('start', $query);
 			}
-			else if (defined('PHPBB_DISPLAY_LOAD_TIME'))
+			else if ($this->debug_load_time)
 			{
 				$this->curtime = microtime(true);
 			}
@@ -150,7 +150,7 @@ class mssqlnative extends \phpbb\db\driver\mssql_base
 				{
 					$this->sql_report('stop', $query);
 				}
-				else if (defined('PHPBB_DISPLAY_LOAD_TIME'))
+				else if ($this->debug_load_time)
 				{
 					$this->sql_time += microtime(true) - $this->curtime;
 				}
diff --git a/phpBB/phpbb/db/driver/mysql.php b/phpBB/phpbb/db/driver/mysql.php
index 5eabe0f9ef..9616b520fe 100644
--- a/phpBB/phpbb/db/driver/mysql.php
+++ b/phpBB/phpbb/db/driver/mysql.php
@@ -176,7 +176,7 @@ class mysql extends \phpbb\db\driver\mysql_base
 			{
 				$this->sql_report('start', $query);
 			}
-			else if (defined('PHPBB_DISPLAY_LOAD_TIME'))
+			else if ($this->debug_load_time)
 			{
 				$this->curtime = microtime(true);
 			}
@@ -195,7 +195,7 @@ class mysql extends \phpbb\db\driver\mysql_base
 				{
 					$this->sql_report('stop', $query);
 				}
-				else if (defined('PHPBB_DISPLAY_LOAD_TIME'))
+				else if ($this->debug_load_time)
 				{
 					$this->sql_time += microtime(true) - $this->curtime;
 				}
diff --git a/phpBB/phpbb/db/driver/mysqli.php b/phpBB/phpbb/db/driver/mysqli.php
index 57962fdf20..f46cbb151b 100644
--- a/phpBB/phpbb/db/driver/mysqli.php
+++ b/phpBB/phpbb/db/driver/mysqli.php
@@ -178,7 +178,7 @@ class mysqli extends \phpbb\db\driver\mysql_base
 			{
 				$this->sql_report('start', $query);
 			}
-			else if (defined('PHPBB_DISPLAY_LOAD_TIME'))
+			else if ($this->debug_load_time)
 			{
 				$this->curtime = microtime(true);
 			}
@@ -197,7 +197,7 @@ class mysqli extends \phpbb\db\driver\mysql_base
 				{
 					$this->sql_report('stop', $query);
 				}
-				else if (defined('PHPBB_DISPLAY_LOAD_TIME'))
+				else if ($this->debug_load_time)
 				{
 					$this->sql_time += microtime(true) - $this->curtime;
 				}
diff --git a/phpBB/phpbb/db/driver/oracle.php b/phpBB/phpbb/db/driver/oracle.php
index 5fd14709f8..dbd1b3b384 100644
--- a/phpBB/phpbb/db/driver/oracle.php
+++ b/phpBB/phpbb/db/driver/oracle.php
@@ -251,7 +251,7 @@ class oracle extends \phpbb\db\driver\driver
 			{
 				$this->sql_report('start', $query);
 			}
-			else if (defined('PHPBB_DISPLAY_LOAD_TIME'))
+			else if ($this->debug_load_time)
 			{
 				$this->curtime = microtime(true);
 			}
@@ -432,7 +432,7 @@ class oracle extends \phpbb\db\driver\driver
 				{
 					$this->sql_report('stop', $query);
 				}
-				else if (defined('PHPBB_DISPLAY_LOAD_TIME'))
+				else if ($this->debug_load_time)
 				{
 					$this->sql_time += microtime(true) - $this->curtime;
 				}
diff --git a/phpBB/phpbb/db/driver/postgres.php b/phpBB/phpbb/db/driver/postgres.php
index 44476612c3..bed28fe814 100644
--- a/phpBB/phpbb/db/driver/postgres.php
+++ b/phpBB/phpbb/db/driver/postgres.php
@@ -178,7 +178,7 @@ class postgres extends \phpbb\db\driver\driver
 			{
 				$this->sql_report('start', $query);
 			}
-			else if (defined('PHPBB_DISPLAY_LOAD_TIME'))
+			else if ($this->debug_load_time)
 			{
 				$this->curtime = microtime(true);
 			}
@@ -198,7 +198,7 @@ class postgres extends \phpbb\db\driver\driver
 				{
 					$this->sql_report('stop', $query);
 				}
-				else if (defined('PHPBB_DISPLAY_LOAD_TIME'))
+				else if ($this->debug_load_time)
 				{
 					$this->sql_time += microtime(true) - $this->curtime;
 				}
diff --git a/phpBB/phpbb/db/driver/sqlite3.php b/phpBB/phpbb/db/driver/sqlite3.php
index 0508500c52..748302ce3b 100644
--- a/phpBB/phpbb/db/driver/sqlite3.php
+++ b/phpBB/phpbb/db/driver/sqlite3.php
@@ -123,7 +123,7 @@ class sqlite3 extends \phpbb\db\driver\driver
 			{
 				$this->sql_report('start', $query);
 			}
-			else if (defined('PHPBB_DISPLAY_LOAD_TIME'))
+			else if ($this->debug_load_time)
 			{
 				$this->curtime = microtime(true);
 			}
@@ -160,7 +160,7 @@ class sqlite3 extends \phpbb\db\driver\driver
 				{
 					$this->sql_report('stop', $query);
 				}
-				else if (defined('PHPBB_DISPLAY_LOAD_TIME'))
+				else if ($this->debug_load_time)
 				{
 					$this->sql_time += microtime(true) - $this->curtime;
 				}
diff --git a/phpBB/phpbb/di/extension/container_configuration.php b/phpBB/phpbb/di/extension/container_configuration.php
index 3870670ac0..977f921418 100644
--- a/phpBB/phpbb/di/extension/container_configuration.php
+++ b/phpBB/phpbb/di/extension/container_configuration.php
@@ -35,6 +35,7 @@ class container_configuration implements ConfigurationInterface
 					->addDefaultsIfNotSet()
 					->children()
 						->booleanNode('exceptions')->defaultValue(false)->end()
+						->booleanNode('load_time')->defaultValue(false)->end()
 					->end()
 				->end()
 				->arrayNode('twig')
diff --git a/phpBB/phpbb/install/module/install_filesystem/task/create_config_file.php b/phpBB/phpbb/install/module/install_filesystem/task/create_config_file.php
index 5bc425b929..47537ba549 100644
--- a/phpBB/phpbb/install/module/install_filesystem/task/create_config_file.php
+++ b/phpBB/phpbb/install/module/install_filesystem/task/create_config_file.php
@@ -191,7 +191,6 @@ class create_config_file extends \phpbb\install\task_base
 		}
 
 		$config_content .= "\n@define('PHPBB_INSTALLED', true);\n";
-		$config_content .= "// @define('PHPBB_DISPLAY_LOAD_TIME', true);\n";
 
 		if ($environment)
 		{
diff --git a/tests/mock/container_builder.php b/tests/mock/container_builder.php
index edf0d58a28..05083c3a3c 100644
--- a/tests/mock/container_builder.php
+++ b/tests/mock/container_builder.php
@@ -18,6 +18,11 @@ class phpbb_mock_container_builder implements ContainerInterface
 	protected $services = array();
 	protected $parameters = array();
 
+	public function __construct()
+	{
+		$this->setParameter('debug.load_time', false);
+	}
+
 	/**
 	* Sets a service.
 	*
diff --git a/vagrant/after.sh b/vagrant/after.sh
index 03008a88d0..3b56777a4e 100755
--- a/vagrant/after.sh
+++ b/vagrant/after.sh
@@ -37,9 +37,6 @@ echo "@define('DEBUG', true);" >> ${PHPBB_CONFIG}
 # Change environment to development
 sed -i '/^.*PHPBB_ENVIRONMENT.*$/s/production/development/' ${PHPBB_CONFIG}
 
-# Display load time
-sed -i '/^.*PHPBB_DISPLAY_LOAD_TIME.*$/s/^\/\/[[:blank:]]*//' ${PHPBB_CONFIG}
-
 # Update the PHP memory limits (enough to allow phpunit tests to run)
 sed -i "s/memory_limit = .*/memory_limit = 1024M/" /etc/php/7.1/fpm/php.ini