From 8720094b52c75f336bbade7aacae25014d65b324 Mon Sep 17 00:00:00 2001 From: Michael Date: Tue, 5 Nov 2019 05:03:05 +0000 Subject: [PATCH 1/2] Pass the parameters from the router to the modules --- src/App/Module.php | 22 +++++++++++++++------- src/App/Router.php | 17 +++++++++++++++++ 2 files changed, 32 insertions(+), 7 deletions(-) diff --git a/src/App/Module.php b/src/App/Module.php index 33a9b2fc2..eb5552285 100644 --- a/src/App/Module.php +++ b/src/App/Module.php @@ -63,6 +63,11 @@ class Module */ private $module_class; + /** + * @var array The module parameters + */ + private $module_parameters; + /** * @var bool true, if the module is a backend module */ @@ -98,10 +103,11 @@ class Module return $this->isBackend; } - public function __construct(string $module = self::DEFAULT, string $moduleClass = self::DEFAULT_CLASS, bool $isBackend = false, bool $printNotAllowedAddon = false) + public function __construct(string $module = self::DEFAULT, string $moduleClass = self::DEFAULT_CLASS, array $moduleParameters = [], bool $isBackend = false, bool $printNotAllowedAddon = false) { $this->module = $module; $this->module_class = $moduleClass; + $this->module_parameters = $moduleParameters; $this->isBackend = $isBackend; $this->printNotAllowedAddon = $printNotAllowedAddon; } @@ -129,7 +135,7 @@ class Module $isBackend = in_array($module, Module::BACKEND_MODULES);; - return new Module($module, $this->module_class, $isBackend, $this->printNotAllowedAddon); + return new Module($module, $this->module_class, [], $isBackend, $this->printNotAllowedAddon); } /** @@ -148,6 +154,7 @@ class Module $printNotAllowedAddon = false; $module_class = null; + $module_parameters = []; /** * ROUTING * @@ -156,6 +163,7 @@ class Module **/ try { $module_class = $router->getModuleClass($args->getCommand()); + $module_parameters = $router->getModuleParameters(); } catch (MethodNotAllowedException $e) { $module_class = MethodNotAllowed::class; } catch (NotFoundException $e) { @@ -185,7 +193,7 @@ class Module $module_class = $module_class ?: PageNotFound::class; } - return new Module($this->module, $module_class, $this->isBackend, $printNotAllowedAddon); + return new Module($this->module, $module_class, $module_parameters, $this->isBackend, $printNotAllowedAddon); } /** @@ -233,18 +241,18 @@ class Module Core\Hook::callAll($this->module . '_mod_init', $placeholder); - call_user_func([$this->module_class, 'init']); + call_user_func([$this->module_class, 'init'], $this->module_parameters); // "rawContent" is especially meant for technical endpoints. // This endpoint doesn't need any theme initialization or other comparable stuff. - call_user_func([$this->module_class, 'rawContent']); + call_user_func([$this->module_class, 'rawContent'], $this->module_parameters); if ($server['REQUEST_METHOD'] === 'POST') { Core\Hook::callAll($this->module . '_mod_post', $post); - call_user_func([$this->module_class, 'post']); + call_user_func([$this->module_class, 'post'], $this->module_parameters); } Core\Hook::callAll($this->module . '_mod_afterpost', $placeholder); - call_user_func([$this->module_class, 'afterpost']); + call_user_func([$this->module_class, 'afterpost'], $this->module_parameters); } } diff --git a/src/App/Router.php b/src/App/Router.php index f723321ac..a4a4a852a 100644 --- a/src/App/Router.php +++ b/src/App/Router.php @@ -39,6 +39,11 @@ class Router */ private $httpMethod; + /** + * @var array Module parameters + */ + private $parameters = []; + /** * @param array $server The $_SERVER variable * @param RouteCollector|null $routeCollector Optional the loaded Route collector @@ -172,10 +177,12 @@ class Router $dispatcher = new \FastRoute\Dispatcher\GroupCountBased($this->routeCollector->getData()); $moduleClass = null; + $this->parameters = []; $routeInfo = $dispatcher->dispatch($this->httpMethod, $cmd); if ($routeInfo[0] === Dispatcher::FOUND) { $moduleClass = $routeInfo[1]; + $this->parameters = $routeInfo[2]; } elseif ($routeInfo[0] === Dispatcher::METHOD_NOT_ALLOWED) { throw new HTTPException\MethodNotAllowedException(L10n::t('Method not allowed for this module. Allowed method(s): %s', implode(', ', $routeInfo[1]))); } else { @@ -184,4 +191,14 @@ class Router return $moduleClass; } + + /** + * Returns the module parameters. + * + * @return array parameters + */ + public function getModuleParameters() + { + return $this->parameters; + } } From 695a920d408d37d236bf4c7b351f0c0aa27b9d3c Mon Sep 17 00:00:00 2001 From: Michael Date: Tue, 5 Nov 2019 06:51:19 +0000 Subject: [PATCH 2/2] Making tests happy --- tests/src/App/ModeTest.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/tests/src/App/ModeTest.php b/tests/src/App/ModeTest.php index fe65793f8..12ec2b4db 100644 --- a/tests/src/App/ModeTest.php +++ b/tests/src/App/ModeTest.php @@ -200,7 +200,7 @@ class ModeTest extends MockedTest public function testIsBackendButIndex() { $server = []; - $module = new Module(Module::DEFAULT, Module::DEFAULT_CLASS, true); + $module = new Module(Module::DEFAULT, Module::DEFAULT_CLASS, [], true); $mobileDetect = new MobileDetect(); $mode = (new Mode())->determineRunMode(false, $module, $server, $mobileDetect); @@ -214,7 +214,7 @@ class ModeTest extends MockedTest public function testIsNotBackend() { $server = []; - $module = new Module(Module::DEFAULT, Module::DEFAULT_CLASS, false); + $module = new Module(Module::DEFAULT, Module::DEFAULT_CLASS, [], false); $mobileDetect = new MobileDetect(); $mode = (new Mode())->determineRunMode(false, $module, $server, $mobileDetect); @@ -232,7 +232,7 @@ class ModeTest extends MockedTest 'HTTP_X_REQUESTED_WITH' => 'xmlhttprequest', ]; - $module = new Module(Module::DEFAULT, Module::DEFAULT_CLASS, false); + $module = new Module(Module::DEFAULT, Module::DEFAULT_CLASS, [], false); $mobileDetect = new MobileDetect(); $mode = (new Mode())->determineRunMode(true, $module, $server, $mobileDetect); @@ -246,7 +246,7 @@ class ModeTest extends MockedTest public function testIsNotAjax() { $server = []; - $module = new Module(Module::DEFAULT, Module::DEFAULT_CLASS, false); + $module = new Module(Module::DEFAULT, Module::DEFAULT_CLASS, [], false); $mobileDetect = new MobileDetect(); $mode = (new Mode())->determineRunMode(true, $module, $server, $mobileDetect); @@ -260,7 +260,7 @@ class ModeTest extends MockedTest public function testIsMobileIsTablet() { $server = []; - $module = new Module(Module::DEFAULT, Module::DEFAULT_CLASS, false); + $module = new Module(Module::DEFAULT, Module::DEFAULT_CLASS, [], false); $mobileDetect = \Mockery::mock(MobileDetect::class); $mobileDetect->shouldReceive('isMobile')->andReturn(true); $mobileDetect->shouldReceive('isTablet')->andReturn(true); @@ -278,7 +278,7 @@ class ModeTest extends MockedTest public function testIsNotMobileIsNotTablet() { $server = []; - $module = new Module(Module::DEFAULT, Module::DEFAULT_CLASS, false); + $module = new Module(Module::DEFAULT, Module::DEFAULT_CLASS, [], false); $mobileDetect = \Mockery::mock(MobileDetect::class); $mobileDetect->shouldReceive('isMobile')->andReturn(false); $mobileDetect->shouldReceive('isTablet')->andReturn(false);