]> git.mxchange.org Git - friendica.git/commitdiff
Replace Hook with EventDispatcher in Feature class
authorArt4 <art4@wlabs.de>
Wed, 29 Jan 2025 08:12:08 +0000 (08:12 +0000)
committerHypolite Petovan <hypolite@mrpetovan.com>
Tue, 4 Feb 2025 18:22:54 +0000 (13:22 -0500)
src/Content/Feature.php
src/Event/ArrayFilterEvent.php
src/EventSubscriber/HookEventBridge.php
tests/Unit/EventSubscriber/HookEventBridgeTest.php

index 8b5e56eba4471258d9bfa353a6f09cb6b95981b7..92198ae2c95bff0dc26f33020753b2755843fc01 100644 (file)
@@ -9,6 +9,7 @@ namespace Friendica\Content;
 
 use Friendica\Core\Hook;
 use Friendica\DI;
+use Friendica\Event\ArrayFilterEvent;
 
 class Feature
 {
@@ -41,15 +42,23 @@ class Feature
         */
        public static function isEnabled(int $uid, $feature): bool
        {
-               if (!DI::config()->get('feature_lock', $feature, false)) {
-                       $enabled = DI::config()->get('feature', $feature) ?? self::getDefault($feature);
-                       $enabled = DI::pConfig()->get($uid, 'feature', $feature) ?? $enabled;
+               $config          = DI::config();
+               $pConfig         = DI::pConfig();
+               $eventDispatcher = DI::eventDispatcher();
+
+               if (!$config->get('feature_lock', $feature, false)) {
+                       $enabled = $config->get('feature', $feature) ?? self::getDefault($feature);
+                       $enabled = $pConfig->get($uid, 'feature', $feature) ?? $enabled;
                } else {
                        $enabled = true;
                }
 
                $arr = ['uid' => $uid, 'feature' => $feature, 'enabled' => $enabled];
-               Hook::callAll('isEnabled', $arr);
+
+               $arr = $eventDispatcher->dispatch(
+                       new ArrayFilterEvent(ArrayFilterEvent::FEATURE_ENABLED, $arr)
+               )->getArray();
+
                return (bool)$arr['enabled'];
        }
 
index 4c888dcb8049f5c00ae82b7b3c3aa213c86fe20b..5d084e42d5300c78e9431940ef7b4118eee8d41e 100644 (file)
@@ -20,6 +20,8 @@ final class ArrayFilterEvent extends Event
 
        public const NAV_INFO = 'friendica.data.nav_info';
 
+       public const FEATURE_ENABLED = 'friendica.data.feature_enabled';
+
        private array $array;
 
        public function __construct(string $name, array $array)
index c7e3280125385e74d482e14a1d373ea72d6104b8..ede5fe409f6a1185f41634319ad1d08274adc622 100644 (file)
@@ -38,6 +38,7 @@ final class HookEventBridge
                ConfigLoadedEvent::CONFIG_LOADED  => 'load_config',
                ArrayFilterEvent::APP_MENU        => 'app_menu',
                ArrayFilterEvent::NAV_INFO        => 'nav_info',
+               ArrayFilterEvent::FEATURE_ENABLED => 'isEnabled',
                HtmlFilterEvent::HEAD             => 'head',
                HtmlFilterEvent::FOOTER           => 'footer',
                HtmlFilterEvent::PAGE_HEADER      => 'page_header',
@@ -55,6 +56,7 @@ final class HookEventBridge
                        ConfigLoadedEvent::CONFIG_LOADED  => 'onConfigLoadedEvent',
                        ArrayFilterEvent::APP_MENU        => 'onArrayFilterEvent',
                        ArrayFilterEvent::NAV_INFO        => 'onArrayFilterEvent',
+                       ArrayFilterEvent::FEATURE_ENABLED => 'onArrayFilterEvent',
                        HtmlFilterEvent::HEAD             => 'onHtmlFilterEvent',
                        HtmlFilterEvent::FOOTER           => 'onHtmlFilterEvent',
                        HtmlFilterEvent::PAGE_HEADER      => 'onHtmlFilterEvent',
@@ -88,7 +90,7 @@ final class HookEventBridge
        }
 
        /**
-        * @param string|array $data
+        * @param string|array|object $data
         *
         * @return string|array|object
         */
index ce1ebc58a0e01b8763ce14644e92978fc1f26a04..df138f45773923966ed9a445f132bd6fbe8064a9 100644 (file)
@@ -26,6 +26,7 @@ class HookEventBridgeTest extends TestCase
                        ConfigLoadedEvent::CONFIG_LOADED  => 'onConfigLoadedEvent',
                        ArrayFilterEvent::APP_MENU        => 'onArrayFilterEvent',
                        ArrayFilterEvent::NAV_INFO        => 'onArrayFilterEvent',
+                       ArrayFilterEvent::FEATURE_ENABLED => 'onArrayFilterEvent',
                        HtmlFilterEvent::HEAD             => 'onHtmlFilterEvent',
                        HtmlFilterEvent::FOOTER           => 'onHtmlFilterEvent',
                        HtmlFilterEvent::PAGE_HEADER      => 'onHtmlFilterEvent',
@@ -114,6 +115,8 @@ class HookEventBridgeTest extends TestCase
                return [
                        ['test', 'test'],
                        [ArrayFilterEvent::APP_MENU, 'app_menu'],
+                       [ArrayFilterEvent::NAV_INFO, 'nav_info'],
+                       [ArrayFilterEvent::FEATURE_ENABLED, 'isEnabled'],
                ];
        }