From 74dbaac0394f45955553ff46515404fe5b06bfba Mon Sep 17 00:00:00 2001
From: MateBartus <mate.bartus@gmail.com>
Date: Thu, 30 Apr 2015 22:40:17 +0200
Subject: [PATCH] [ticket/13800] Make router's extension manager dependency
 optional

PHPBB3-13800
---
 phpBB/config/default/container/services.yml   | 20 +------------------
 .../default/container/services_routing.yml    | 19 ++++++++++++++++++
 phpBB/phpbb/routing/router.php                | 17 +++++++++-------
 tests/controller/common_helper_route.php      |  2 +-
 tests/controller/controller_test.php          |  2 +-
 tests/pagination/pagination_test.php          |  2 +-
 6 files changed, 33 insertions(+), 29 deletions(-)
 create mode 100644 phpBB/config/default/container/services_routing.yml

diff --git a/phpBB/config/default/container/services.yml b/phpBB/config/default/container/services.yml
index 670ea3bd61..95d624a8ae 100644
--- a/phpBB/config/default/container/services.yml
+++ b/phpBB/config/default/container/services.yml
@@ -15,6 +15,7 @@ imports:
     - { resource: services_password.yml }
     - { resource: services_profilefield.yml }
     - { resource: services_report.yml }
+    - { resource: services_routing.yml }
     - { resource: services_text_formatter.yml }
     - { resource: services_twig.yml }
     - { resource: services_user.yml }
@@ -157,25 +158,6 @@ services:
             - null
             - %core.disable_super_globals%
 
-    router:
-        class: phpbb\routing\router
-        arguments:
-            - @filesystem
-            - @ext.manager
-            - %core.root_path%
-            - %core.php_ext%
-            - %core.environment%
-
-    router.listener:
-        class: Symfony\Component\HttpKernel\EventListener\RouterListener
-        arguments:
-            - @router
-            - null
-            - null
-            - @request_stack
-        tags:
-            - { name: kernel.event_subscriber }
-
     # WARNING: The Symfony request does not escape the input and should be used very carefully
     #           prefer the phpbb request (service @request) as possible
     symfony_request:
diff --git a/phpBB/config/default/container/services_routing.yml b/phpBB/config/default/container/services_routing.yml
new file mode 100644
index 0000000000..6749202c0d
--- /dev/null
+++ b/phpBB/config/default/container/services_routing.yml
@@ -0,0 +1,19 @@
+services:
+    router:
+        class: phpbb\routing\router
+        arguments:
+            - @filesystem
+            - %core.root_path%
+            - %core.php_ext%
+            - %core.environment%
+            - @ext.manager
+
+    router.listener:
+        class: Symfony\Component\HttpKernel\EventListener\RouterListener
+        arguments:
+            - @router
+            - null
+            - null
+            - @request_stack
+        tags:
+            - { name: kernel.event_subscriber }
diff --git a/phpBB/phpbb/routing/router.php b/phpBB/phpbb/routing/router.php
index 7444f06253..dd5bffe22b 100644
--- a/phpBB/phpbb/routing/router.php
+++ b/phpBB/phpbb/routing/router.php
@@ -94,13 +94,14 @@ class router implements RouterInterface
 	 * Construct method
 	 *
 	 * @param \phpbb\filesystem\filesystem_interface $filesystem	Filesystem helper
-	 * @param manager	$extension_manager	Extension manager
-	 * @param string	$phpbb_root_path	phpBB root path
-	 * @param string	$php_ext			PHP file extension
-	 * @param string	$environment		Name of the current environment
-	 * @param array		$routing_files		Array of strings containing paths to YAML files holding route information
+	 * @param string		$phpbb_root_path						phpBB root path
+	 * @param string		$php_ext								PHP file extension
+	 * @param string		$environment							Name of the current environment
+	 * @param manager|null	$extension_manager						Extension manager
+	 * @param array			$routing_files							Array of strings containing paths to YAML files
+	 * 																holding route information
 	 */
-	public function __construct(\phpbb\filesystem\filesystem_interface $filesystem, manager $extension_manager, $phpbb_root_path, $php_ext, $environment, $routing_files = array())
+	public function __construct(\phpbb\filesystem\filesystem_interface $filesystem, $phpbb_root_path, $php_ext, $environment, manager $extension_manager = null, $routing_files = array())
 	{
 		$this->filesystem			= $filesystem;
 		$this->extension_manager	= $extension_manager;
@@ -172,7 +173,9 @@ class router implements RouterInterface
 	{
 		if ($this->route_collection == null || empty($this->routing_files))
 		{
-			$this->find_routing_files($this->extension_manager->all_enabled(false))
+			$this->find_routing_files(
+					($this->extension_manager !== null) ? $this->extension_manager->all_enabled(false) : array()
+				)
 				->find($this->phpbb_root_path);
 		}
 
diff --git a/tests/controller/common_helper_route.php b/tests/controller/common_helper_route.php
index 3e4b5fd38d..6910530279 100644
--- a/tests/controller/common_helper_route.php
+++ b/tests/controller/common_helper_route.php
@@ -120,7 +120,7 @@ abstract class phpbb_controller_common_helper_route extends phpbb_test_case
 			)
 		);
 
-		$this->router = new phpbb_mock_router($this->filesystem, $this->extension_manager, dirname(__FILE__) . '/', 'php', PHPBB_ENVIRONMENT);
+		$this->router = new phpbb_mock_router($this->filesystem, dirname(__FILE__) . '/', 'php', PHPBB_ENVIRONMENT, $this->extension_manager);
 		$this->router->find_routing_files($this->extension_manager->all_enabled(false));
 		$this->router->find(dirname(__FILE__) . '/');
 		// Set correct current phpBB root path
diff --git a/tests/controller/controller_test.php b/tests/controller/controller_test.php
index 5c0290ee6f..5781d3ebc1 100644
--- a/tests/controller/controller_test.php
+++ b/tests/controller/controller_test.php
@@ -40,7 +40,7 @@ class phpbb_controller_controller_test extends phpbb_test_case
 
 	public function test_router_find_files()
 	{
-		$router = new \phpbb\routing\router(new \phpbb\filesystem\filesystem(), $this->extension_manager, dirname(__FILE__) . '/', 'php', PHPBB_ENVIRONMENT);
+		$router = new \phpbb\routing\router(new \phpbb\filesystem\filesystem(), dirname(__FILE__) . '/', 'php', PHPBB_ENVIRONMENT, $this->extension_manager);
 		$router->find_routing_files($this->extension_manager->all_enabled(false));
 		$routes = $router->find(__DIR__)->get_routes();
 
diff --git a/tests/pagination/pagination_test.php b/tests/pagination/pagination_test.php
index 4916665a72..67c3d0a30f 100644
--- a/tests/pagination/pagination_test.php
+++ b/tests/pagination/pagination_test.php
@@ -41,7 +41,7 @@ class phpbb_pagination_pagination_test extends phpbb_template_template_test_case
 		$manager = new phpbb_mock_extension_manager(dirname(__FILE__) . '/', array());
 
 		$this->config = new \phpbb\config\config(array('enable_mod_rewrite' => '1'));
-		$router = new phpbb_mock_router($filesystem, $manager, dirname(__FILE__) . '/', 'php', PHPBB_ENVIRONMENT);
+		$router = new phpbb_mock_router($filesystem, dirname(__FILE__) . '/', 'php', PHPBB_ENVIRONMENT, $manager);
 		$router->find_routing_files($manager->all_enabled(false));
 		$router->find(dirname(__FILE__) . '/');