From c95d47b0b4d01552804ebcf26e5ae42fc576fc60 Mon Sep 17 00:00:00 2001 From: Philipp Date: Tue, 16 Nov 2021 22:34:49 +0100 Subject: [PATCH] Refactor App\Module to App\ModuleController and rename properties --- index.php | 2 +- src/App.php | 12 +-- src/App/Mode.php | 10 +-- src/App/{Module.php => ModuleController.php} | 79 ++++++++++---------- src/App/Page.php | 16 ++-- src/DI.php | 4 +- static/dependencies.config.php | 6 +- tests/src/App/ModeTest.php | 16 ++-- tests/src/App/ModuleTest.php | 40 +++++----- 9 files changed, 93 insertions(+), 92 deletions(-) rename src/App/{Module.php => ModuleController.php} (82%) diff --git a/index.php b/index.php index cfb5937368..0afd2c7d3e 100644 --- a/index.php +++ b/index.php @@ -41,7 +41,7 @@ $a = \Friendica\DI::app(); \Friendica\DI::mode()->setExecutor(\Friendica\App\Mode::INDEX); $a->runFrontend( - $dice->create(\Friendica\App\Module::class), + $dice->create(\Friendica\App\ModuleController::class), $dice->create(\Friendica\App\Router::class), $dice->create(\Friendica\Core\PConfig\Capability\IManagePersonalConfigValues::class), $dice->create(\Friendica\Security\Authentication::class), diff --git a/src/App.php b/src/App.php index 63d28fc80c..2dd8f9d1ab 100644 --- a/src/App.php +++ b/src/App.php @@ -25,7 +25,7 @@ use Dice\Dice; use Exception; use Friendica\App\Arguments; use Friendica\App\BaseURL; -use Friendica\App\Module; +use Friendica\App\ModuleController; use Friendica\Core\Config\Factory\Config; use Friendica\Module\Maintenance; use Friendica\Security\Authentication; @@ -567,16 +567,16 @@ class App * * This probably should change to limit the size of this monster method. * - * @param App\Module $module The determined module + * @param App\ModuleController $module The determined module * @param App\Router $router * @param IManagePersonalConfigValues $pconfig - * @param Authentication $auth The Authentication backend of the node - * @param App\Page $page The Friendica page printing container + * @param Authentication $auth The Authentication backend of the node + * @param App\Page $page The Friendica page printing container * * @throws HTTPException\InternalServerErrorException * @throws \ImagickException */ - public function runFrontend(App\Module $module, App\Router $router, IManagePersonalConfigValues $pconfig, Authentication $auth, App\Page $page, Dice $dice, float $start_time) + public function runFrontend(App\ModuleController $module, App\Router $router, IManagePersonalConfigValues $pconfig, Authentication $auth, App\Page $page, Dice $dice, float $start_time) { $this->profiler->set($start_time, 'start'); $this->profiler->set(microtime(true), 'classinit'); @@ -703,7 +703,7 @@ class App $page['page_title'] = $moduleName; if (!$this->mode->isInstall() && !$this->mode->has(App\Mode::MAINTENANCEDISABLED)) { - $module = new Module('maintenance', new Maintenance()); + $module = new ModuleController('maintenance', new Maintenance()); } else { // determine the module class and save it to the module instance // @todo there's an implicit dependency due SESSION::start(), so it has to be called here (yet) diff --git a/src/App/Mode.php b/src/App/Mode.php index 1087b08a05..4a1213ae12 100644 --- a/src/App/Mode.php +++ b/src/App/Mode.php @@ -139,14 +139,14 @@ class Mode /** * Checks if the site is called via a backend process * - * @param bool $isBackend True, if the call is from a backend script (daemon, worker, ...) - * @param Module $module The pre-loaded module (just name, not class!) - * @param array $server The $_SERVER variable - * @param MobileDetect $mobileDetect The mobile detection library + * @param bool $isBackend True, if the call is from a backend script (daemon, worker, ...) + * @param ModuleController $module The pre-loaded module (just name, not class!) + * @param array $server The $_SERVER variable + * @param MobileDetect $mobileDetect The mobile detection library * * @return Mode returns the determined mode */ - public function determineRunMode(bool $isBackend, Module $module, array $server, MobileDetect $mobileDetect) + public function determineRunMode(bool $isBackend, ModuleController $module, array $server, MobileDetect $mobileDetect) { foreach (self::BACKEND_CONTENT_TYPES as $type) { if (strpos(strtolower($server['HTTP_ACCEPT'] ?? ''), $type) !== false) { diff --git a/src/App/Module.php b/src/App/ModuleController.php similarity index 82% rename from src/App/Module.php rename to src/App/ModuleController.php index 94caf63a11..013859de9d 100644 --- a/src/App/Module.php +++ b/src/App/ModuleController.php @@ -39,7 +39,7 @@ use Psr\Log\LoggerInterface; /** * Holds the common context of the current, loaded module */ -class Module +class ModuleController { const DEFAULT = 'home'; const DEFAULT_CLASS = Home::class; @@ -78,12 +78,12 @@ class Module /** * @var string The module name */ - private $module; + private $moduleName; /** * @var ICanHandleRequests The module class */ - private $module_class; + private $module; /** * @var bool true, if the module is a backend module @@ -99,33 +99,33 @@ class Module * @return string */ public function getName() + { + return $this->moduleName; + } + + /** + * @return ICanHandleRequests The base module object + */ + public function getModule(): ICanHandleRequests { return $this->module; } - /** - * @return ICanHandleRequests The base class name - */ - public function getClass(): ICanHandleRequests - { - return $this->module_class; - } - /** * @return bool True, if the current module is a backend module - * @see Module::BACKEND_MODULES for a list + * @see ModuleController::BACKEND_MODULES for a list */ public function isBackend() { return $this->isBackend; } - public function __construct(string $module = self::DEFAULT, ICanHandleRequests $module_class = null, bool $isBackend = false, bool $printNotAllowedAddon = false) + public function __construct(string $moduleName = self::DEFAULT, ICanHandleRequests $module = null, bool $isBackend = false, bool $printNotAllowedAddon = false) { $defaultClass = static::DEFAULT_CLASS; - $this->module = $module; - $this->module_class = $module_class ?? new $defaultClass(); + $this->moduleName = $moduleName; + $this->module = $module ?? new $defaultClass(); $this->isBackend = $isBackend; $this->printNotAllowedAddon = $printNotAllowedAddon; } @@ -135,9 +135,9 @@ class Module * * @param Arguments $args The Friendica arguments * - * @return Module The module with the determined module + * @return ModuleController The module with the determined module */ - public function determineModule(Arguments $args) + public function determineName(Arguments $args) { if ($args->getArgc() > 0) { $module = str_replace('.', '_', $args->get(0)); @@ -151,9 +151,10 @@ class Module $module = "login"; } - $isBackend = in_array($module, Module::BACKEND_MODULES);; + $isBackend = in_array($module, ModuleController::BACKEND_MODULES); + ; - return new Module($module, null, $isBackend, $this->printNotAllowedAddon); + return new ModuleController($module, null, $isBackend, $this->printNotAllowedAddon); } /** @@ -164,7 +165,7 @@ class Module * @param IManageConfigValues $config The Friendica Configuration * @param Dice $dice The Dependency Injection container * - * @return Module The determined module of this call + * @return ModuleController The determined module of this call * * @throws \Exception */ @@ -172,7 +173,7 @@ class Module { $printNotAllowedAddon = false; - $module_class = null; + $module_class = null; $module_parameters = []; /** * ROUTING @@ -181,21 +182,21 @@ class Module * post() and/or content() static methods can be respectively called to produce a data change or an output. **/ try { - $module_class = $router->getModuleClass($args->getCommand()); + $module_class = $router->getModuleClass($args->getCommand()); $module_parameters[] = $router->getModuleParameters(); } catch (MethodNotAllowedException $e) { $module_class = MethodNotAllowed::class; } catch (NotFoundException $e) { // Then we try addon-provided modules that we wrap in the LegacyModule class - if (Core\Addon::isEnabled($this->module) && file_exists("addon/{$this->module}/{$this->module}.php")) { + if (Core\Addon::isEnabled($this->moduleName) && file_exists("addon/{$this->moduleName}/{$this->moduleName}.php")) { //Check if module is an app and if public access to apps is allowed or not $privateapps = $config->get('config', 'private_addons', false); - if ((!local_user()) && Core\Hook::isAddonApp($this->module) && $privateapps) { + if ((!local_user()) && Core\Hook::isAddonApp($this->moduleName) && $privateapps) { $printNotAllowedAddon = true; } else { - include_once "addon/{$this->module}/{$this->module}.php"; - if (function_exists($this->module . '_module')) { - $module_parameters[] = "addon/{$this->module}/{$this->module}.php"; + include_once "addon/{$this->moduleName}/{$this->moduleName}.php"; + if (function_exists($this->moduleName . '_module')) { + $module_parameters[] = "addon/{$this->moduleName}/{$this->moduleName}.php"; $module_class = LegacyModule::class; } } @@ -204,8 +205,8 @@ class Module /* Finally, we look for a 'standard' program module in the 'mod' directory * We emulate a Module class through the LegacyModule class */ - if (!$module_class && file_exists("mod/{$this->module}.php")) { - $module_parameters[] = "mod/{$this->module}.php"; + if (!$module_class && file_exists("mod/{$this->moduleName}.php")) { + $module_parameters[] = "mod/{$this->moduleName}.php"; $module_class = LegacyModule::class; } @@ -215,7 +216,7 @@ class Module /** @var ICanHandleRequests $module */ $module = $dice->create($module_class, $module_parameters); - return new Module($this->module, $module, $this->isBackend, $printNotAllowedAddon); + return new ModuleController($this->moduleName, $module, $this->isBackend, $printNotAllowedAddon); } /** @@ -244,7 +245,7 @@ class Module * * Otherwise we are going to emit a 404 not found. */ - if ($this->module_class === PageNotFound::class) { + if ($this->module === PageNotFound::class) { $queryString = $server['QUERY_STRING']; // Stupid browser tried to pre-fetch our Javascript img template. Don't log the event or return anything - just quietly exit. if (!empty($queryString) && preg_match('/{[0-9]}/', $queryString) !== 0) { @@ -295,31 +296,31 @@ class Module $profiler->set(microtime(true), 'ready'); $timestamp = microtime(true); - Core\Hook::callAll($this->module . '_mod_init', $placeholder); + Core\Hook::callAll($this->moduleName . '_mod_init', $placeholder); - $this->module_class->init(); + $this->module->init(); $profiler->set(microtime(true) - $timestamp, 'init'); if ($server['REQUEST_METHOD'] === Router::DELETE) { - $this->module_class->delete(); + $this->module->delete(); } if ($server['REQUEST_METHOD'] === Router::PATCH) { - $this->module_class->patch(); + $this->module->patch(); } if ($server['REQUEST_METHOD'] === Router::POST) { - Core\Hook::callAll($this->module . '_mod_post', $post); - $this->module_class->post(); + Core\Hook::callAll($this->moduleName . '_mod_post', $post); + $this->module->post(); } if ($server['REQUEST_METHOD'] === Router::PUT) { - $this->module_class->put(); + $this->module->put(); } // "rawContent" is especially meant for technical endpoints. // This endpoint doesn't need any theme initialization or other comparable stuff. - $this->module_class->rawContent(); + $this->module->rawContent(); } } diff --git a/src/App/Page.php b/src/App/Page.php index 71d59f59d0..f410f6aa28 100644 --- a/src/App/Page.php +++ b/src/App/Page.php @@ -191,14 +191,14 @@ class Page implements ArrayAccess * - head.tpl template * * @param App $app The Friendica App instance - * @param Module $module The loaded Friendica module + * @param ModuleController $module The loaded Friendica module * @param L10n $l10n The l10n language instance * @param IManageConfigValues $config The Friendica configuration * @param IManagePersonalConfigValues $pConfig The Friendica personal configuration (for user) * * @throws HTTPException\InternalServerErrorException */ - private function initHead(App $app, Module $module, L10n $l10n, IManageConfigValues $config, IManagePersonalConfigValues $pConfig) + private function initHead(App $app, ModuleController $module, L10n $l10n, IManageConfigValues $config, IManagePersonalConfigValues $pConfig) { $interval = ((local_user()) ? $pConfig->get(local_user(), 'system', 'update_interval') : 40000); @@ -337,17 +337,17 @@ class Page implements ArrayAccess * - module content * - hooks for content * - * @param Module $module The module - * @param Mode $mode The Friendica execution mode + * @param ModuleController $module The module + * @param Mode $mode The Friendica execution mode * * @throws HTTPException\InternalServerErrorException */ - private function initContent(Module $module, Mode $mode) + private function initContent(ModuleController $module, Mode $mode) { $content = ''; try { - $moduleClass = $module->getClass(); + $moduleClass = $module->getModule(); $arr = ['content' => $content]; Hook::callAll($moduleClass->getClassName() . '_mod_content', $arr); @@ -389,14 +389,14 @@ class Page implements ArrayAccess * @param App $app The Friendica App * @param BaseURL $baseURL The Friendica Base URL * @param Mode $mode The current node mode - * @param Module $module The loaded Friendica module + * @param ModuleController $module The loaded Friendica module * @param L10n $l10n The l10n language class * @param IManageConfigValues $config The Configuration of this node * @param IManagePersonalConfigValues $pconfig The personal/user configuration * * @throws HTTPException\InternalServerErrorException */ - public function run(App $app, BaseURL $baseURL, Mode $mode, Module $module, L10n $l10n, Profiler $profiler, IManageConfigValues $config, IManagePersonalConfigValues $pconfig) + public function run(App $app, BaseURL $baseURL, Mode $mode, ModuleController $module, L10n $l10n, Profiler $profiler, IManageConfigValues $config, IManagePersonalConfigValues $pconfig) { $moduleName = $module->getName(); diff --git a/src/DI.php b/src/DI.php index ead125cff2..0c134f37b4 100644 --- a/src/DI.php +++ b/src/DI.php @@ -99,11 +99,11 @@ abstract class DI } /** - * @return App\Module + * @return App\ModuleController */ public static function module() { - return self::$dice->create(App\Module::class); + return self::$dice->create(App\ModuleController::class); } /** diff --git a/static/dependencies.config.php b/static/dependencies.config.php index 57ef629bb2..28d26b4e7b 100644 --- a/static/dependencies.config.php +++ b/static/dependencies.config.php @@ -181,10 +181,10 @@ return [ ['determine', [$_SERVER, $_GET], Dice::CHAIN_CALL], ], ], - App\Module::class => [ - 'instanceOf' => App\Module::class, + App\ModuleController::class => [ + 'instanceOf' => App\ModuleController::class, 'call' => [ - ['determineModule', [], Dice::CHAIN_CALL], + ['determineName', [], Dice::CHAIN_CALL], ], ], \Friendica\Core\System::class => [ diff --git a/tests/src/App/ModeTest.php b/tests/src/App/ModeTest.php index 24371925b8..80e45d308f 100644 --- a/tests/src/App/ModeTest.php +++ b/tests/src/App/ModeTest.php @@ -23,7 +23,7 @@ namespace Friendica\Test\src\App; use Detection\MobileDetect; use Friendica\App\Mode; -use Friendica\App\Module; +use Friendica\App\ModuleController; use Friendica\Core\Config\ValueObject\Cache; use Friendica\Database\Database; use Friendica\Test\MockedTest; @@ -204,7 +204,7 @@ class ModeTest extends MockedTest public function testIsBackendNotIsBackend() { $server = []; - $module = new Module(); + $module = new ModuleController(); $mobileDetect = new MobileDetect(); $mode = (new Mode())->determineRunMode(true, $module, $server, $mobileDetect); @@ -218,7 +218,7 @@ class ModeTest extends MockedTest public function testIsBackendButIndex() { $server = []; - $module = new Module(Module::DEFAULT, null, true); + $module = new ModuleController(ModuleController::DEFAULT, null, true); $mobileDetect = new MobileDetect(); $mode = (new Mode())->determineRunMode(false, $module, $server, $mobileDetect); @@ -232,7 +232,7 @@ class ModeTest extends MockedTest public function testIsNotBackend() { $server = []; - $module = new Module(Module::DEFAULT, null, false); + $module = new ModuleController(ModuleController::DEFAULT, null, false); $mobileDetect = new MobileDetect(); $mode = (new Mode())->determineRunMode(false, $module, $server, $mobileDetect); @@ -250,7 +250,7 @@ class ModeTest extends MockedTest 'HTTP_X_REQUESTED_WITH' => 'xmlhttprequest', ]; - $module = new Module(Module::DEFAULT, null, false); + $module = new ModuleController(ModuleController::DEFAULT, null, false); $mobileDetect = new MobileDetect(); $mode = (new Mode())->determineRunMode(true, $module, $server, $mobileDetect); @@ -264,7 +264,7 @@ class ModeTest extends MockedTest public function testIsNotAjax() { $server = []; - $module = new Module(Module::DEFAULT, null, false); + $module = new ModuleController(ModuleController::DEFAULT, null, false); $mobileDetect = new MobileDetect(); $mode = (new Mode())->determineRunMode(true, $module, $server, $mobileDetect); @@ -278,7 +278,7 @@ class ModeTest extends MockedTest public function testIsMobileIsTablet() { $server = []; - $module = new Module(Module::DEFAULT, null, false); + $module = new ModuleController(ModuleController::DEFAULT, null, false); $mobileDetect = Mockery::mock(MobileDetect::class); $mobileDetect->shouldReceive('isMobile')->andReturn(true); $mobileDetect->shouldReceive('isTablet')->andReturn(true); @@ -296,7 +296,7 @@ class ModeTest extends MockedTest public function testIsNotMobileIsNotTablet() { $server = []; - $module = new Module(Module::DEFAULT, null, false); + $module = new ModuleController(ModuleController::DEFAULT, null, false); $mobileDetect = Mockery::mock(MobileDetect::class); $mobileDetect->shouldReceive('isMobile')->andReturn(false); $mobileDetect->shouldReceive('isTablet')->andReturn(false); diff --git a/tests/src/App/ModuleTest.php b/tests/src/App/ModuleTest.php index 8bcd81bc83..52823fc136 100644 --- a/tests/src/App/ModuleTest.php +++ b/tests/src/App/ModuleTest.php @@ -35,11 +35,11 @@ use Mockery; class ModuleTest extends DatabaseTest { - private function assertModule(array $assert, App\Module $module) + private function assertModule(array $assert, App\ModuleController $module) { self::assertEquals($assert['isBackend'], $module->isBackend()); self::assertEquals($assert['name'], $module->getName()); - self::assertEquals($assert['class'], $module->getClass()); + self::assertEquals($assert['class'], $module->getModule()); } /** @@ -47,20 +47,20 @@ class ModuleTest extends DatabaseTest */ public function testDefault() { - $module = new App\Module(); + $module = new App\ModuleController(); - $defaultClass = App\Module::DEFAULT_CLASS; + $defaultClass = App\ModuleController::DEFAULT_CLASS; self::assertModule([ 'isBackend' => false, - 'name' => App\Module::DEFAULT, + 'name' => App\ModuleController::DEFAULT, 'class' => new $defaultClass(), ], $module); } public function dataModuleName() { - $defaultClass = App\Module::DEFAULT_CLASS; + $defaultClass = App\ModuleController::DEFAULT_CLASS; return [ 'default' => [ @@ -88,7 +88,7 @@ class ModuleTest extends DatabaseTest 'withNothing' => [ 'assert' => [ 'isBackend' => false, - 'name' => App\Module::DEFAULT, + 'name' => App\ModuleController::DEFAULT, 'class' => new $defaultClass(), ], 'args' => new App\Arguments(), @@ -96,7 +96,7 @@ class ModuleTest extends DatabaseTest 'withIndex' => [ 'assert' => [ 'isBackend' => false, - 'name' => App\Module::DEFAULT, + 'name' => App\ModuleController::DEFAULT, 'class' => new $defaultClass(), ], 'args' => new App\Arguments(), @@ -104,12 +104,12 @@ class ModuleTest extends DatabaseTest 'withBackendMod' => [ 'assert' => [ 'isBackend' => true, - 'name' => App\Module::BACKEND_MODULES[0], + 'name' => App\ModuleController::BACKEND_MODULES[0], 'class' => new $defaultClass(), ], - 'args' => new App\Arguments(App\Module::BACKEND_MODULES[0] . '/data/in', - App\Module::BACKEND_MODULES[0] . '/data/in', - [App\Module::BACKEND_MODULES[0], 'data', 'in'], + 'args' => new App\Arguments(App\ModuleController::BACKEND_MODULES[0] . '/data/in', + App\ModuleController::BACKEND_MODULES[0] . '/data/in', + [App\ModuleController::BACKEND_MODULES[0], 'data', 'in'], 3), ], 'withFirefoxApp' => [ @@ -133,7 +133,7 @@ class ModuleTest extends DatabaseTest */ public function testModuleName(array $assert, App\Arguments $args) { - $module = (new App\Module())->determineModule($args); + $module = (new App\ModuleController())->determineName($args); self::assertModule($assert, $module); } @@ -142,9 +142,9 @@ class ModuleTest extends DatabaseTest { return [ 'default' => [ - 'assert' => App\Module::DEFAULT_CLASS, - 'name' => App\Module::DEFAULT, - 'command' => App\Module::DEFAULT, + 'assert' => App\ModuleController::DEFAULT_CLASS, + 'name' => App\ModuleController::DEFAULT, + 'command' => App\ModuleController::DEFAULT, 'privAdd' => false, 'args' => [], ], @@ -200,9 +200,9 @@ class ModuleTest extends DatabaseTest $dice->shouldReceive('create')->andReturn(new $assert(...$args)); - $module = (new App\Module($name))->determineClass(new App\Arguments('', $command), $router, $config, $dice); + $module = (new App\ModuleController($name))->determineClass(new App\Arguments('', $command), $router, $config, $dice); - self::assertEquals($assert, $module->getClass()->getClassName()); + self::assertEquals($assert, $module->getModule()->getClassName()); } /** @@ -210,9 +210,9 @@ class ModuleTest extends DatabaseTest */ public function testImmutable() { - $module = new App\Module(); + $module = new App\ModuleController(); - $moduleNew = $module->determineModule(new App\Arguments()); + $moduleNew = $module->determineName(new App\Arguments()); self::assertNotSame($moduleNew, $module); }