From b806043aa6e45d51e10fa6dbe27719620e963c04 Mon Sep 17 00:00:00 2001 From: Matthieu Rolland Date: Tue, 12 Nov 2024 16:53:36 +0100 Subject: [PATCH] fix service availability issue --- classes/Hook.php | 2 +- config/services/common.yml | 3 +-- src/Core/Hook/HookModuleFilter.php | 12 ++++++++++++ src/Core/Hook/HookModuleFilterInterface.php | 4 ++++ .../Resources/config/services/core/common.yml | 5 +++++ 5 files changed, 23 insertions(+), 3 deletions(-) diff --git a/classes/Hook.php b/classes/Hook.php index fd0392f8a0ac4..c4359bf6c387d 100644 --- a/classes/Hook.php +++ b/classes/Hook.php @@ -1130,7 +1130,7 @@ private static function getHookModuleFilter() } try { - $hookModuleFilter = $serviceContainer->get('prestashop.hook.module.filter'); + $hookModuleFilter = $serviceContainer->get(HookModuleFilter::class); } catch (Exception $e) { return null; } diff --git a/config/services/common.yml b/config/services/common.yml index 2d55e057e21c9..16e4fa452d7e9 100644 --- a/config/services/common.yml +++ b/config/services/common.yml @@ -26,7 +26,6 @@ services: public: false tags: ['container.env_var_processor'] - prestashop.hook.module.filter: - class: PrestaShop\PrestaShop\Core\Hook\HookModuleFilter + PrestaShop\PrestaShop\Core\Hook\HookModuleFilter: arguments: - !tagged core.hook_module_exec_filter diff --git a/src/Core/Hook/HookModuleFilter.php b/src/Core/Hook/HookModuleFilter.php index 8d301f513e6e7..b8e76752f0df2 100644 --- a/src/Core/Hook/HookModuleFilter.php +++ b/src/Core/Hook/HookModuleFilter.php @@ -26,6 +26,18 @@ namespace PrestaShop\PrestaShop\Core\Hook; +/** + * This service is responsible for filtering the list of modules for a given hook that is returned by + * the getHookModuleExecList method from Hook.php. It is called at the very end of getHookModuleExecList. + * + * How to use it to filter a list of modules for a hook: + * + * In your module, create a service which implements the HookModuleFilterInterface and give it + * the tag named core.hook_module_exec_filter. Then in your service, you can filter the list of modules + * in the filterHookModuleExecList method, according to your own logic. + * + * Your service will automatically be sent in this class's constructor, and be used to filter the list of modules. + */ class HookModuleFilter implements HookModuleFilterInterface { private $hookModuleFilters; diff --git a/src/Core/Hook/HookModuleFilterInterface.php b/src/Core/Hook/HookModuleFilterInterface.php index 43d7a59f10dee..4be6d8d0b194c 100644 --- a/src/Core/Hook/HookModuleFilterInterface.php +++ b/src/Core/Hook/HookModuleFilterInterface.php @@ -26,6 +26,10 @@ namespace PrestaShop\PrestaShop\Core\Hook; +/** + * This interface must be implemented by all services that will be used by the HookModuleFilter service. + * See HookModuleFilter.php for more explanations. + */ interface HookModuleFilterInterface { public function filterHookModuleExecList(array $modules, string $hookName): array; diff --git a/src/PrestaShopBundle/Resources/config/services/core/common.yml b/src/PrestaShopBundle/Resources/config/services/core/common.yml index be57c3ee5c02b..5dcc2faaf4202 100644 --- a/src/PrestaShopBundle/Resources/config/services/core/common.yml +++ b/src/PrestaShopBundle/Resources/config/services/core/common.yml @@ -1,2 +1,7 @@ imports: - { resource: ./circuit_breaker.yml } + +services: + PrestaShop\PrestaShop\Core\Hook\HookModuleFilter: + arguments: + - !tagged core.hook_module_exec_filter