From 0b47a7823a8c48e31442595d4c802ae7f77096f3 Mon Sep 17 00:00:00 2001
From: Oleg Pudeyev <oleg@bsdpower.com>
Date: Mon, 24 Dec 2012 15:36:43 -0500
Subject: [PATCH 1/4] [ticket/11037] Eliminate globals from cache service.

PHPBB3-11037
---
 phpBB/includes/cache/service.php | 76 ++++++++++++++------------------
 1 file changed, 34 insertions(+), 42 deletions(-)

diff --git a/phpBB/includes/cache/service.php b/phpBB/includes/cache/service.php
index e63ec6e33a..0768236f3d 100644
--- a/phpBB/includes/cache/service.php
+++ b/phpBB/includes/cache/service.php
@@ -21,16 +21,24 @@ if (!defined('IN_PHPBB'))
 */
 class phpbb_cache_service
 {
-	private $driver;
+	protected $driver;
+	protected $config;
+	protected $db;
+	protected $phpbb_root_path;
+	protected $php_ext;
 
 	/**
 	* Creates a cache service around a cache driver
 	*
 	* @param phpbb_cache_driver_interface $driver The cache driver
 	*/
-	public function __construct(phpbb_cache_driver_interface $driver = null)
+	public function __construct(phpbb_cache_driver_interface $driver, phpbb_config $config, phpbb_db_driver $db, $phpbb_root_path, $php_ext)
 	{
 		$this->set_driver($driver);
+		$this->config = $config;
+		$this->db = $db;
+		$this->phpbb_root_path = $phpbb_root_path;
+		$this->php_ext = $php_ext;
 	}
 
 	/**
@@ -64,21 +72,19 @@ class phpbb_cache_service
 	*/
 	function obtain_word_list()
 	{
-		global $db;
-
 		if (($censors = $this->driver->get('_word_censors')) === false)
 		{
 			$sql = 'SELECT word, replacement
 				FROM ' . WORDS_TABLE;
-			$result = $db->sql_query($sql);
+			$result = $this->db->sql_query($sql);
 
 			$censors = array();
-			while ($row = $db->sql_fetchrow($result))
+			while ($row = $this->db->sql_fetchrow($result))
 			{
 				$censors['match'][] = get_censor_preg_expression($row['word']);
 				$censors['replace'][] = $row['replacement'];
 			}
-			$db->sql_freeresult($result);
+			$this->db->sql_freeresult($result);
 
 			$this->driver->put('_word_censors', $censors);
 		}
@@ -93,23 +99,21 @@ class phpbb_cache_service
 	{
 		if (($icons = $this->driver->get('_icons')) === false)
 		{
-			global $db;
-
 			// Topic icons
 			$sql = 'SELECT *
 				FROM ' . ICONS_TABLE . '
 				ORDER BY icons_order';
-			$result = $db->sql_query($sql);
+			$result = $this->db->sql_query($sql);
 
 			$icons = array();
-			while ($row = $db->sql_fetchrow($result))
+			while ($row = $this->db->sql_fetchrow($result))
 			{
 				$icons[$row['icons_id']]['img'] = $row['icons_url'];
 				$icons[$row['icons_id']]['width'] = (int) $row['icons_width'];
 				$icons[$row['icons_id']]['height'] = (int) $row['icons_height'];
 				$icons[$row['icons_id']]['display'] = (bool) $row['display_on_posting'];
 			}
-			$db->sql_freeresult($result);
+			$this->db->sql_freeresult($result);
 
 			$this->driver->put('_icons', $icons);
 		}
@@ -124,15 +128,13 @@ class phpbb_cache_service
 	{
 		if (($ranks = $this->driver->get('_ranks')) === false)
 		{
-			global $db;
-
 			$sql = 'SELECT *
 				FROM ' . RANKS_TABLE . '
 				ORDER BY rank_min DESC';
-			$result = $db->sql_query($sql);
+			$result = $this->db->sql_query($sql);
 
 			$ranks = array();
-			while ($row = $db->sql_fetchrow($result))
+			while ($row = $this->db->sql_fetchrow($result))
 			{
 				if ($row['rank_special'])
 				{
@@ -150,7 +152,7 @@ class phpbb_cache_service
 					);
 				}
 			}
-			$db->sql_freeresult($result);
+			$this->db->sql_freeresult($result);
 
 			$this->driver->put('_ranks', $ranks);
 		}
@@ -169,8 +171,6 @@ class phpbb_cache_service
 	{
 		if (($extensions = $this->driver->get('_extensions')) === false)
 		{
-			global $db;
-
 			$extensions = array(
 				'_allowed_post'	=> array(),
 				'_allowed_pm'	=> array(),
@@ -181,9 +181,9 @@ class phpbb_cache_service
 				FROM ' . EXTENSIONS_TABLE . ' e, ' . EXTENSION_GROUPS_TABLE . ' g
 				WHERE e.group_id = g.group_id
 					AND (g.allow_group = 1 OR g.allow_in_pm = 1)';
-			$result = $db->sql_query($sql);
+			$result = $this->db->sql_query($sql);
 
-			while ($row = $db->sql_fetchrow($result))
+			while ($row = $this->db->sql_fetchrow($result))
 			{
 				$extension = strtolower(trim($row['extension']));
 
@@ -210,7 +210,7 @@ class phpbb_cache_service
 					$extensions['_allowed_pm'][$extension] = 0;
 				}
 			}
-			$db->sql_freeresult($result);
+			$this->db->sql_freeresult($result);
 
 			$this->driver->put('_extensions', $extensions);
 		}
@@ -275,9 +275,7 @@ class phpbb_cache_service
 	{
 		if (($bots = $this->driver->get('_bots')) === false)
 		{
-			global $db;
-
-			switch ($db->sql_layer)
+			switch ($this->db->sql_layer)
 			{
 				case 'mssql':
 				case 'mssql_odbc':
@@ -303,14 +301,14 @@ class phpbb_cache_service
 					ORDER BY LENGTH(bot_agent) DESC';
 				break;
 			}
-			$result = $db->sql_query($sql);
+			$result = $this->db->sql_query($sql);
 
 			$bots = array();
-			while ($row = $db->sql_fetchrow($result))
+			while ($row = $this->db->sql_fetchrow($result))
 			{
 				$bots[] = $row;
 			}
-			$db->sql_freeresult($result);
+			$this->db->sql_freeresult($result);
 
 			$this->driver->put('_bots', $bots);
 		}
@@ -323,8 +321,6 @@ class phpbb_cache_service
 	*/
 	function obtain_cfg_items($style)
 	{
-		global $config, $phpbb_root_path;
-
 		$parsed_array = $this->driver->get('_cfg_' . $style['style_path']);
 
 		if ($parsed_array === false)
@@ -332,14 +328,14 @@ class phpbb_cache_service
 			$parsed_array = array();
 		}
 
-		$filename = $phpbb_root_path . 'styles/' . $style['style_path'] . '/style.cfg';
+		$filename = $this->phpbb_root_path . 'styles/' . $style['style_path'] . '/style.cfg';
 
 		if (!file_exists($filename))
 		{
 			return $parsed_array;
 		}
 
-		if (!isset($parsed_array['filetime']) || (($config['load_tplcompile'] && @filemtime($filename) > $parsed_array['filetime'])))
+		if (!isset($parsed_array['filetime']) || (($this->config['load_tplcompile'] && @filemtime($filename) > $parsed_array['filetime'])))
 		{
 			// Re-parse cfg file
 			$parsed_array = parse_cfg_file($filename);
@@ -358,18 +354,16 @@ class phpbb_cache_service
 	{
 		if (($usernames = $this->driver->get('_disallowed_usernames')) === false)
 		{
-			global $db;
-
 			$sql = 'SELECT disallow_username
 				FROM ' . DISALLOW_TABLE;
-			$result = $db->sql_query($sql);
+			$result = $this->db->sql_query($sql);
 
 			$usernames = array();
-			while ($row = $db->sql_fetchrow($result))
+			while ($row = $this->db->sql_fetchrow($result))
 			{
 				$usernames[] = str_replace('%', '.*?', preg_quote(utf8_clean_string($row['disallow_username']), '#'));
 			}
-			$db->sql_freeresult($result);
+			$this->db->sql_freeresult($result);
 
 			$this->driver->put('_disallowed_usernames', $usernames);
 		}
@@ -382,22 +376,20 @@ class phpbb_cache_service
 	*/
 	function obtain_hooks()
 	{
-		global $phpbb_root_path, $phpEx;
-
 		if (($hook_files = $this->driver->get('_hooks')) === false)
 		{
 			$hook_files = array();
 
 			// Now search for hooks...
-			$dh = @opendir($phpbb_root_path . 'includes/hooks/');
+			$dh = @opendir($this->phpbb_root_path . 'includes/hooks/');
 
 			if ($dh)
 			{
 				while (($file = readdir($dh)) !== false)
 				{
-					if (strpos($file, 'hook_') === 0 && substr($file, -(strlen($phpEx) + 1)) === '.' . $phpEx)
+					if (strpos($file, 'hook_') === 0 && substr($file, -(strlen($this->php_ext) + 1)) === '.' . $this->php_ext)
 					{
-						$hook_files[] = substr($file, 0, -(strlen($phpEx) + 1));
+						$hook_files[] = substr($file, 0, -(strlen($this->php_ext) + 1));
 					}
 				}
 				closedir($dh);

From bad7661ee985e63b8765845d710367e9f4f8260b Mon Sep 17 00:00:00 2001
From: Oleg Pudeyev <oleg@bsdpower.com>
Date: Wed, 26 Dec 2012 10:47:03 -0500
Subject: [PATCH 2/4] [ticket/11037] Add/update docblocks.

PHPBB3-11037
---
 phpBB/includes/cache/service.php | 33 ++++++++++++++++++++++++++++++++
 1 file changed, 33 insertions(+)

diff --git a/phpBB/includes/cache/service.php b/phpBB/includes/cache/service.php
index 0768236f3d..8c1e1ea1f8 100644
--- a/phpBB/includes/cache/service.php
+++ b/phpBB/includes/cache/service.php
@@ -21,16 +21,49 @@ if (!defined('IN_PHPBB'))
 */
 class phpbb_cache_service
 {
+	/**
+	* Cache driver.
+	*
+	* @var phpbb_cache_driver_interface
+	*/
 	protected $driver;
+
+	/**
+	* The config.
+	*
+	* @var phpbb_config
+	*/
 	protected $config;
+
+	/**
+	* Database connection.
+	*
+	* @var phpbb_db_driver
+	*/
 	protected $db;
+
+	/**
+	* Root path.
+	*
+	* @var string
+	*/
 	protected $phpbb_root_path;
+
+	/**
+	* PHP extension.
+	*
+	* @var string
+	*/
 	protected $php_ext;
 
 	/**
 	* Creates a cache service around a cache driver
 	*
 	* @param phpbb_cache_driver_interface $driver The cache driver
+	* @param phpbb_config $config The config
+	* @param phpbb_db_driver $db Database connection
+	* @param string $phpbb_root_path Root path
+	* @param string $php_ext PHP extension
 	*/
 	public function __construct(phpbb_cache_driver_interface $driver, phpbb_config $config, phpbb_db_driver $db, $phpbb_root_path, $php_ext)
 	{

From 58aa593e392778f21f507a62e412079ce5049b47 Mon Sep 17 00:00:00 2001
From: Oleg Pudeyev <oleg@bsdpower.com>
Date: Wed, 26 Dec 2012 17:57:05 -0500
Subject: [PATCH 3/4] [ticket/11037] Update services.yml.

PHPBB3-11037
---
 phpBB/config/services.yml | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/phpBB/config/services.yml b/phpBB/config/services.yml
index febdc5acb8..991f6d1214 100644
--- a/phpBB/config/services.yml
+++ b/phpBB/config/services.yml
@@ -10,6 +10,10 @@ services:
         class: phpbb_cache_service
         arguments:
              - @cache.driver
+             - @config
+             - @dbal.conn
+             - %core.root_path%
+             - %core.php_ext%
 
     cache.driver:
         class: %cache.driver.class%

From 9c7772040c473fd453971eeb2c9ee8ed26069a2d Mon Sep 17 00:00:00 2001
From: Oleg Pudeyev <oleg@bsdpower.com>
Date: Sat, 29 Dec 2012 14:23:14 -0500
Subject: [PATCH 4/4] [ticket/11037] Fix unit tests.

PHPBB3-11037
---
 tests/cache/common_test_case.php | 5 +++--
 tests/cache/null_driver_test.php | 5 +++--
 2 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/tests/cache/common_test_case.php b/tests/cache/common_test_case.php
index fa298ec9ae..a5bc2bfda9 100644
--- a/tests/cache/common_test_case.php
+++ b/tests/cache/common_test_case.php
@@ -64,9 +64,10 @@ abstract class phpbb_cache_common_test_case extends phpbb_database_test_case
 
 	public function test_cache_sql()
 	{
-		global $db, $cache;
+		global $db, $cache, $phpbb_root_path, $phpEx;
+		$config = new phpbb_config(array());
 		$db = $this->new_dbal();
-		$cache = new phpbb_cache_service($this->driver);
+		$cache = new phpbb_cache_service($this->driver, $config, $db, $phpbb_root_path, $phpEx);
 
 		$sql = "SELECT * FROM phpbb_config
 			WHERE config_name = 'foo'";
diff --git a/tests/cache/null_driver_test.php b/tests/cache/null_driver_test.php
index 86553d4dc5..43a0cc806c 100644
--- a/tests/cache/null_driver_test.php
+++ b/tests/cache/null_driver_test.php
@@ -47,9 +47,10 @@ class phpbb_cache_null_driver_test extends phpbb_database_test_case
 
 	public function test_cache_sql()
 	{
-		global $db, $cache;
+		global $db, $cache, $phpbb_root_path, $phpEx;
+		$config = new phpbb_config(array());
 		$db = $this->new_dbal();
-		$cache = new phpbb_cache_service($this->driver);
+		$cache = new phpbb_cache_service($this->driver, $config, $db, $phpbb_root_path, $phpEx);
 
 		$sql = "SELECT * FROM phpbb_config
 			WHERE config_name = 'foo'";