From 134d6d18f95cb4f68983f9090876b46d3ab98326 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Wed, 6 Nov 2019 22:34:38 -0500 Subject: [PATCH] Pass Router parameter to module content method --- src/App/Module.php | 8 ++++++++ src/App/Page.php | 2 +- src/App/Router.php | 27 ++++++++++++--------------- static/dependencies.config.php | 2 +- tests/src/App/ModuleTest.php | 2 +- tests/src/App/RouterTest.php | 4 ++-- 6 files changed, 25 insertions(+), 20 deletions(-) diff --git a/src/App/Module.php b/src/App/Module.php index eb5552285e..868520c025 100644 --- a/src/App/Module.php +++ b/src/App/Module.php @@ -94,6 +94,14 @@ class Module return $this->module_class; } + /** + * @return array The module parameters extracted from the route + */ + public function getParameters() + { + return $this->module_parameters; + } + /** * @return bool True, if the current module is a backend module * @see Module::BACKEND_MODULES for a list diff --git a/src/App/Page.php b/src/App/Page.php index de75db32fe..7af0bc8995 100644 --- a/src/App/Page.php +++ b/src/App/Page.php @@ -308,7 +308,7 @@ class Page implements ArrayAccess $arr = ['content' => $content]; Hook::callAll($moduleClass . '_mod_content', $arr); $content = $arr['content']; - $arr = ['content' => call_user_func([$moduleClass, 'content'], [])]; + $arr = ['content' => call_user_func([$moduleClass, 'content'], $module->getParameters())]; Hook::callAll($moduleClass . '_mod_aftercontent', $arr); $content .= $arr['content']; } catch (HTTPException $e) { diff --git a/src/App/Router.php b/src/App/Router.php index a4a4a852a0..c9ba21bb35 100644 --- a/src/App/Router.php +++ b/src/App/Router.php @@ -65,12 +65,21 @@ class Router * * @throws HTTPException\InternalServerErrorException In case of invalid configs */ - public function addRoutes(array $routes) + public function loadRoutes(array $routes) { $routeCollector = (isset($this->routeCollector) ? $this->routeCollector : new RouteCollector(new Std(), new GroupCountBased())); + $this->addRoutes($routeCollector, $routes); + + $this->routeCollector = $routeCollector; + + return $this; + } + + private function addRoutes(RouteCollector $routeCollector, array $routes) + { foreach ($routes as $route => $config) { if ($this->isGroup($config)) { $this->addGroup($route, $config, $routeCollector); @@ -80,10 +89,6 @@ class Router throw new HTTPException\InternalServerErrorException("Wrong route config for route '" . print_r($route, true) . "'"); } } - - $this->routeCollector = $routeCollector; - - return $this; } /** @@ -96,15 +101,7 @@ class Router private function addGroup(string $groupRoute, array $routes, RouteCollector $routeCollector) { $routeCollector->addGroup($groupRoute, function (RouteCollector $routeCollector) use ($routes) { - foreach ($routes as $route => $config) { - if ($this->isGroup($config)) { - $this->addGroup($route, $config, $routeCollector); - } elseif ($this->isRoute($config)) { - $routeCollector->addRoute($config[1], $route, $config[0]); - }else { - throw new HTTPException\InternalServerErrorException("Wrong route config for route '" . print_r($route, true) . "'"); - } - } + $this->addRoutes($routeCollector, $routes); }); } @@ -174,7 +171,7 @@ class Router $cmd = '/' . ltrim($cmd, '/'); - $dispatcher = new \FastRoute\Dispatcher\GroupCountBased($this->routeCollector->getData()); + $dispatcher = new Dispatcher\GroupCountBased($this->routeCollector->getData()); $moduleClass = null; $this->parameters = []; diff --git a/static/dependencies.config.php b/static/dependencies.config.php index 938b13495b..fbc085f4bc 100644 --- a/static/dependencies.config.php +++ b/static/dependencies.config.php @@ -171,7 +171,7 @@ return [ $_SERVER, null ], 'call' => [ - ['addRoutes', [include __DIR__ . '/routes.config.php'], Dice::CHAIN_CALL], + ['loadRoutes', [include __DIR__ . '/routes.config.php'], Dice::CHAIN_CALL], ], ], L10n::class => [ diff --git a/tests/src/App/ModuleTest.php b/tests/src/App/ModuleTest.php index 8327bc706d..ce2a40b806 100644 --- a/tests/src/App/ModuleTest.php +++ b/tests/src/App/ModuleTest.php @@ -152,7 +152,7 @@ class ModuleTest extends DatabaseTest $config = \Mockery::mock(Configuration::class); $config->shouldReceive('get')->with('config', 'private_addons', false)->andReturn($privAdd)->atMost()->once(); - $router = (new App\Router([]))->addRoutes(include __DIR__ . '/../../../static/routes.config.php'); + $router = (new App\Router([]))->loadRoutes(include __DIR__ . '/../../../static/routes.config.php'); $module = (new App\Module($name))->determineClass(new App\Arguments('', $command), $router, $config); diff --git a/tests/src/App/RouterTest.php b/tests/src/App/RouterTest.php index b2dbaed20c..102808f6ac 100644 --- a/tests/src/App/RouterTest.php +++ b/tests/src/App/RouterTest.php @@ -159,7 +159,7 @@ class RouterTest extends TestCase { $router = (new Router([ 'REQUEST_METHOD' => Router::GET - ]))->addRoutes($routes); + ]))->loadRoutes($routes); $this->assertEquals(Module\Home::class, $router->getModuleClass('/')); $this->assertEquals(Module\Friendica::class, $router->getModuleClass('/group/route')); @@ -174,7 +174,7 @@ class RouterTest extends TestCase { $router = (new Router([ 'REQUEST_METHOD' => Router::POST - ]))->addRoutes($routes); + ]))->loadRoutes($routes); // Don't find GET $this->assertEquals(Module\NodeInfo::class, $router->getModuleClass('/post/it'));