Replace Hook with EventDispatcher in Feature class

This commit is contained in:
Art4 2025-01-29 08:12:08 +00:00 committed by Hypolite Petovan
parent b9a191f6d8
commit f3ccd198a4
4 changed files with 21 additions and 5 deletions

View file

@ -9,6 +9,7 @@ namespace Friendica\Content;
use Friendica\Core\Hook; use Friendica\Core\Hook;
use Friendica\DI; use Friendica\DI;
use Friendica\Event\ArrayFilterEvent;
class Feature class Feature
{ {
@ -41,15 +42,23 @@ class Feature
*/ */
public static function isEnabled(int $uid, $feature): bool public static function isEnabled(int $uid, $feature): bool
{ {
if (!DI::config()->get('feature_lock', $feature, false)) { $config = DI::config();
$enabled = DI::config()->get('feature', $feature) ?? self::getDefault($feature); $pConfig = DI::pConfig();
$enabled = DI::pConfig()->get($uid, 'feature', $feature) ?? $enabled; $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 { } else {
$enabled = true; $enabled = true;
} }
$arr = ['uid' => $uid, 'feature' => $feature, 'enabled' => $enabled]; $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']; return (bool)$arr['enabled'];
} }

View file

@ -20,6 +20,8 @@ final class ArrayFilterEvent extends Event
public const NAV_INFO = 'friendica.data.nav_info'; public const NAV_INFO = 'friendica.data.nav_info';
public const FEATURE_ENABLED = 'friendica.data.feature_enabled';
private array $array; private array $array;
public function __construct(string $name, array $array) public function __construct(string $name, array $array)

View file

@ -38,6 +38,7 @@ final class HookEventBridge
ConfigLoadedEvent::CONFIG_LOADED => 'load_config', ConfigLoadedEvent::CONFIG_LOADED => 'load_config',
ArrayFilterEvent::APP_MENU => 'app_menu', ArrayFilterEvent::APP_MENU => 'app_menu',
ArrayFilterEvent::NAV_INFO => 'nav_info', ArrayFilterEvent::NAV_INFO => 'nav_info',
ArrayFilterEvent::FEATURE_ENABLED => 'isEnabled',
HtmlFilterEvent::HEAD => 'head', HtmlFilterEvent::HEAD => 'head',
HtmlFilterEvent::FOOTER => 'footer', HtmlFilterEvent::FOOTER => 'footer',
HtmlFilterEvent::PAGE_HEADER => 'page_header', HtmlFilterEvent::PAGE_HEADER => 'page_header',
@ -55,6 +56,7 @@ final class HookEventBridge
ConfigLoadedEvent::CONFIG_LOADED => 'onConfigLoadedEvent', ConfigLoadedEvent::CONFIG_LOADED => 'onConfigLoadedEvent',
ArrayFilterEvent::APP_MENU => 'onArrayFilterEvent', ArrayFilterEvent::APP_MENU => 'onArrayFilterEvent',
ArrayFilterEvent::NAV_INFO => 'onArrayFilterEvent', ArrayFilterEvent::NAV_INFO => 'onArrayFilterEvent',
ArrayFilterEvent::FEATURE_ENABLED => 'onArrayFilterEvent',
HtmlFilterEvent::HEAD => 'onHtmlFilterEvent', HtmlFilterEvent::HEAD => 'onHtmlFilterEvent',
HtmlFilterEvent::FOOTER => 'onHtmlFilterEvent', HtmlFilterEvent::FOOTER => 'onHtmlFilterEvent',
HtmlFilterEvent::PAGE_HEADER => '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 * @return string|array|object
*/ */

View file

@ -26,6 +26,7 @@ class HookEventBridgeTest extends TestCase
ConfigLoadedEvent::CONFIG_LOADED => 'onConfigLoadedEvent', ConfigLoadedEvent::CONFIG_LOADED => 'onConfigLoadedEvent',
ArrayFilterEvent::APP_MENU => 'onArrayFilterEvent', ArrayFilterEvent::APP_MENU => 'onArrayFilterEvent',
ArrayFilterEvent::NAV_INFO => 'onArrayFilterEvent', ArrayFilterEvent::NAV_INFO => 'onArrayFilterEvent',
ArrayFilterEvent::FEATURE_ENABLED => 'onArrayFilterEvent',
HtmlFilterEvent::HEAD => 'onHtmlFilterEvent', HtmlFilterEvent::HEAD => 'onHtmlFilterEvent',
HtmlFilterEvent::FOOTER => 'onHtmlFilterEvent', HtmlFilterEvent::FOOTER => 'onHtmlFilterEvent',
HtmlFilterEvent::PAGE_HEADER => 'onHtmlFilterEvent', HtmlFilterEvent::PAGE_HEADER => 'onHtmlFilterEvent',
@ -114,6 +115,8 @@ class HookEventBridgeTest extends TestCase
return [ return [
['test', 'test'], ['test', 'test'],
[ArrayFilterEvent::APP_MENU, 'app_menu'], [ArrayFilterEvent::APP_MENU, 'app_menu'],
[ArrayFilterEvent::NAV_INFO, 'nav_info'],
[ArrayFilterEvent::FEATURE_ENABLED, 'isEnabled'],
]; ];
} }