diff --git a/src/Core/Hooks/HookEventBridge.php b/src/Core/Hooks/HookEventBridge.php index ae7a42c154..06f918ea6d 100644 --- a/src/Core/Hooks/HookEventBridge.php +++ b/src/Core/Hooks/HookEventBridge.php @@ -78,6 +78,8 @@ final class HookEventBridge ArrayFilterEvent::PROFILE_SIDEBAR_ENTRY => 'profile_sidebar_enter', ArrayFilterEvent::PROFILE_SIDEBAR => 'profile_sidebar', ArrayFilterEvent::PROFILE_TABS => 'profile_tabs', + ArrayFilterEvent::PROFILE_SETTINGS_FORM => 'profile_edit', + ArrayFilterEvent::PROFILE_SETTINGS_POST => 'profile_post', ArrayFilterEvent::MODERATION_USERS_TABS => 'moderation_users_tabs', ArrayFilterEvent::ACL_LOOKUP_END => 'acl_lookup_end', ArrayFilterEvent::OEMBED_FETCH_END => 'oembed_fetch_url', @@ -171,6 +173,8 @@ final class HookEventBridge ArrayFilterEvent::PROFILE_SIDEBAR_ENTRY => 'onProfileSidebarEntryEvent', ArrayFilterEvent::PROFILE_SIDEBAR => 'onArrayFilterEvent', ArrayFilterEvent::PROFILE_TABS => 'onArrayFilterEvent', + ArrayFilterEvent::PROFILE_SETTINGS_FORM => 'onArrayFilterEvent', + ArrayFilterEvent::PROFILE_SETTINGS_POST => 'onArrayFilterEvent', ArrayFilterEvent::MODERATION_USERS_TABS => 'onArrayFilterEvent', ArrayFilterEvent::ACL_LOOKUP_END => 'onArrayFilterEvent', ArrayFilterEvent::OEMBED_FETCH_END => 'onOembedFetchEndEvent', diff --git a/src/Event/ArrayFilterEvent.php b/src/Event/ArrayFilterEvent.php index 1f73eadf62..864f269cdb 100644 --- a/src/Event/ArrayFilterEvent.php +++ b/src/Event/ArrayFilterEvent.php @@ -106,6 +106,10 @@ final class ArrayFilterEvent extends Event public const PROFILE_TABS = 'friendica.data.profile_tabs'; + public const PROFILE_SETTINGS_FORM = 'friendica.data.profile_settings_form'; + + public const PROFILE_SETTINGS_POST = 'friendica.data.profile_settings_post'; + public const MODERATION_USERS_TABS = 'friendica.data.moderation_users_tabs'; public const ACL_LOOKUP_END = 'friendica.data.acl_lookup_end'; diff --git a/src/Module/Settings/Profile/Index.php b/src/Module/Settings/Profile/Index.php index f63ae3b135..bf865667e4 100644 --- a/src/Module/Settings/Profile/Index.php +++ b/src/Module/Settings/Profile/Index.php @@ -7,30 +7,33 @@ namespace Friendica\Module\Settings\Profile; -use Friendica\App; +use Friendica\App\Arguments; +use Friendica\App\BaseURL; +use Friendica\App\Page; use Friendica\Core\ACL; -use Friendica\Core\Hook; use Friendica\Core\L10n; use Friendica\Core\Protocol; use Friendica\Core\Renderer; use Friendica\Core\Session\Capability\IHandleUserSessions; use Friendica\Core\Theme; +use Friendica\Core\Worker; use Friendica\Database\DBA; +use Friendica\Event\ArrayFilterEvent; use Friendica\Model\Contact; use Friendica\Model\Profile; use Friendica\Module\Response; -use Friendica\Navigation\SystemMessages; -use Friendica\Profile\ProfileField; use Friendica\Model\User; use Friendica\Module\BaseSettings; use Friendica\Module\Security\Login; +use Friendica\Navigation\SystemMessages; use Friendica\Network\HTTPException; +use Friendica\Profile\ProfileField; use Friendica\Security\PermissionSet; use Friendica\Util\ACLFormatter; use Friendica\Util\DateTimeFormat; use Friendica\Util\Profiler; use Friendica\Util\Temporal; -use Friendica\Core\Worker; +use Psr\EventDispatcher\EventDispatcherInterface; use Psr\Log\LoggerInterface; class Index extends BaseSettings @@ -47,9 +50,27 @@ class Index extends BaseSettings private $permissionSetFactory; /** @var ACLFormatter */ private $aclFormatter; + private EventDispatcherInterface $eventDispatcher; - public function __construct(ACLFormatter $aclFormatter, PermissionSet\Factory\PermissionSet $permissionSetFactory, PermissionSet\Repository\PermissionSet $permissionSetRepo, SystemMessages $systemMessages, ProfileField\Factory\ProfileField $profileFieldFactory, ProfileField\Repository\ProfileField $profileFieldRepo, IHandleUserSessions $session, App\Page $page, L10n $l10n, App\BaseURL $baseUrl, App\Arguments $args, LoggerInterface $logger, Profiler $profiler, Response $response, array $server, array $parameters = []) - { + public function __construct( + ACLFormatter $aclFormatter, + PermissionSet\Factory\PermissionSet $permissionSetFactory, + PermissionSet\Repository\PermissionSet $permissionSetRepo, + SystemMessages $systemMessages, + ProfileField\Factory\ProfileField $profileFieldFactory, + ProfileField\Repository\ProfileField $profileFieldRepo, + EventDispatcherInterface $eventDispatcher, + IHandleUserSessions $session, + Page $page, + L10n $l10n, + BaseURL $baseUrl, + Arguments $args, + LoggerInterface $logger, + Profiler $profiler, + Response $response, + array $server, + array $parameters = [], + ) { parent::__construct($session, $page, $l10n, $baseUrl, $args, $logger, $profiler, $response, $server, $parameters); $this->profileFieldRepo = $profileFieldRepo; @@ -58,6 +79,7 @@ class Index extends BaseSettings $this->permissionSetRepo = $permissionSetRepo; $this->permissionSetFactory = $permissionSetFactory; $this->aclFormatter = $aclFormatter; + $this->eventDispatcher = $eventDispatcher; } protected function post(array $request = []) @@ -73,7 +95,9 @@ class Index extends BaseSettings self::checkFormSecurityTokenRedirectOnError('/settings/profile', 'settings_profile'); - Hook::callAll('profile_post', $request); + $request = $this->eventDispatcher->dispatch( + new ArrayFilterEvent(ArrayFilterEvent::PROFILE_SETTINGS_POST, $request), + )->getArray(); $dob = trim($request['dob'] ?? ''); @@ -288,8 +312,16 @@ class Index extends BaseSettings '$custom_fields' => $custom_fields, ]); - $arr = ['profile' => $owner, 'entry' => $o]; - Hook::callAll('profile_edit', $arr); + $hook_data = [ + 'profile' => $owner, + 'entry' => $o, + ]; + + $hook_data = $this->eventDispatcher->dispatch( + new ArrayFilterEvent(ArrayFilterEvent::PROFILE_SETTINGS_FORM, $hook_data), + )->getArray(); + + $o = $hook_data['entry'] ?? $o; return $o; } diff --git a/src/Navigation/Notifications/Repository/Notify.php b/src/Navigation/Notifications/Repository/Notify.php index c59eed92aa..7f55fd1a48 100644 --- a/src/Navigation/Notifications/Repository/Notify.php +++ b/src/Navigation/Notifications/Repository/Notify.php @@ -13,7 +13,6 @@ use Friendica\Content\Text\BBCode; use Friendica\Content\Text\Plaintext; use Friendica\Core\Config\Capability\IManageConfigValues; use Friendica\Core\PConfig\Capability\IManagePersonalConfigValues; -use Friendica\Core\Hook; use Friendica\Core\L10n; use Friendica\Database\Database; use Friendica\Database\DBA; diff --git a/tests/Unit/Core/Hooks/HookEventBridgeTest.php b/tests/Unit/Core/Hooks/HookEventBridgeTest.php index 7b655ee0a1..436e1435bc 100644 --- a/tests/Unit/Core/Hooks/HookEventBridgeTest.php +++ b/tests/Unit/Core/Hooks/HookEventBridgeTest.php @@ -67,6 +67,8 @@ class HookEventBridgeTest extends TestCase ArrayFilterEvent::PROFILE_SIDEBAR_ENTRY => 'onProfileSidebarEntryEvent', ArrayFilterEvent::PROFILE_SIDEBAR => 'onArrayFilterEvent', ArrayFilterEvent::PROFILE_TABS => 'onArrayFilterEvent', + ArrayFilterEvent::PROFILE_SETTINGS_FORM => 'onArrayFilterEvent', + ArrayFilterEvent::PROFILE_SETTINGS_POST => 'onArrayFilterEvent', ArrayFilterEvent::MODERATION_USERS_TABS => 'onArrayFilterEvent', ArrayFilterEvent::ACL_LOOKUP_END => 'onArrayFilterEvent', ArrayFilterEvent::OEMBED_FETCH_END => 'onOembedFetchEndEvent', @@ -559,6 +561,8 @@ class HookEventBridgeTest extends TestCase [ArrayFilterEvent::CONTACT_PHOTO_MENU, 'contact_photo_menu'], [ArrayFilterEvent::PROFILE_SIDEBAR, 'profile_sidebar'], [ArrayFilterEvent::PROFILE_TABS, 'profile_tabs'], + [ArrayFilterEvent::PROFILE_SETTINGS_FORM, 'profile_edit'], + [ArrayFilterEvent::PROFILE_SETTINGS_POST, 'profile_post'], [ArrayFilterEvent::MODERATION_USERS_TABS, 'moderation_users_tabs'], [ArrayFilterEvent::ACL_LOOKUP_END, 'acl_lookup_end'], [ArrayFilterEvent::PAGE_INFO, 'page_info_data'], diff --git a/tests/Unit/Event/ArrayFilterEventTest.php b/tests/Unit/Event/ArrayFilterEventTest.php index aae225cd46..85f9307a0d 100644 --- a/tests/Unit/Event/ArrayFilterEventTest.php +++ b/tests/Unit/Event/ArrayFilterEventTest.php @@ -64,6 +64,8 @@ class ArrayFilterEventTest extends TestCase [ArrayFilterEvent::PROFILE_SIDEBAR_ENTRY, 'friendica.data.profile_sidebar_entry'], [ArrayFilterEvent::PROFILE_SIDEBAR, 'friendica.data.profile_sidebar'], [ArrayFilterEvent::PROFILE_TABS, 'friendica.data.profile_tabs'], + [ArrayFilterEvent::PROFILE_SETTINGS_FORM, 'friendica.data.profile_settings_form'], + [ArrayFilterEvent::PROFILE_SETTINGS_POST, 'friendica.data.profile_settings_post'], [ArrayFilterEvent::MODERATION_USERS_TABS, 'friendica.data.moderation_users_tabs'], [ArrayFilterEvent::ACL_LOOKUP_END, 'friendica.data.acl_lookup_end'], [ArrayFilterEvent::OEMBED_FETCH_END, 'friendica.data.oembed_fetch_end'],