From 1c2a3733fda150cb3632e79b22013df97600d6ad Mon Sep 17 00:00:00 2001 From: Cyperghost Date: Wed, 13 Aug 2025 11:49:48 +0200 Subject: [PATCH 1/4] Refactor user ignore and unignore actions to use dedicated commands `IgnoreUser` and `UnignoreUser`. --- .../lib/action/UserIgnoreAction.class.php | 16 ++--- .../lib/command/user/IgnoreUser.class.php | 68 +++++++++++++++++++ .../lib/command/user/UnignoreUser.class.php | 42 ++++++++++++ .../user/ignore/UserIgnoreAction.class.php | 65 ++++-------------- .../lib/event/user/UserIgnored.class.php | 18 +++++ .../lib/event/user/UserUnignored.class.php | 18 +++++ 6 files changed, 162 insertions(+), 65 deletions(-) create mode 100644 wcfsetup/install/files/lib/command/user/IgnoreUser.class.php create mode 100644 wcfsetup/install/files/lib/command/user/UnignoreUser.class.php create mode 100644 wcfsetup/install/files/lib/event/user/UserIgnored.class.php create mode 100644 wcfsetup/install/files/lib/event/user/UserUnignored.class.php diff --git a/wcfsetup/install/files/lib/action/UserIgnoreAction.class.php b/wcfsetup/install/files/lib/action/UserIgnoreAction.class.php index 3cdb22357a4..5edf0614410 100644 --- a/wcfsetup/install/files/lib/action/UserIgnoreAction.class.php +++ b/wcfsetup/install/files/lib/action/UserIgnoreAction.class.php @@ -6,8 +6,9 @@ use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Server\RequestHandlerInterface; +use wcf\command\user\IgnoreUser; +use wcf\command\user\UnignoreUser; use wcf\data\user\ignore\UserIgnore; -use wcf\data\user\ignore\UserIgnoreAction as IgnoreUserIgnoreAction; use wcf\data\user\UserProfile; use wcf\http\Helper; use wcf\system\cache\runtime\UserProfileRuntimeCache; @@ -62,18 +63,9 @@ public function handle(ServerRequestInterface $request): ResponseInterface $type = \intval($form->getData()['data']['type']); if ($type === UserIgnore::TYPE_NO_IGNORE) { - (new IgnoreUserIgnoreAction([], 'unignore', [ - 'data' => [ - 'userID' => $parameters['id'], - ], - ]))->executeAction(); + (new UnignoreUser($parameters['id']))(); } else { - (new IgnoreUserIgnoreAction([], 'ignore', [ - 'data' => [ - 'userID' => $parameters['id'], - 'type' => $type, - ], - ]))->executeAction(); + (new IgnoreUser($parameters['id'], $type))(); } return new JsonResponse([ diff --git a/wcfsetup/install/files/lib/command/user/IgnoreUser.class.php b/wcfsetup/install/files/lib/command/user/IgnoreUser.class.php new file mode 100644 index 00000000000..83cff107cfd --- /dev/null +++ b/wcfsetup/install/files/lib/command/user/IgnoreUser.class.php @@ -0,0 +1,68 @@ + + * @since 6.3 + */ +final class IgnoreUser +{ + public function __construct( + private readonly int $ignoreUserID, + /** @var UserIgnore::TYPE_BLOCK_DIRECT_CONTACT|UserIgnore::TYPE_HIDE_MESSAGES */ + private readonly int $type + ) {} + + public function __invoke(): void + { + $user = WCF::getUser(); + + $this->ignoreUser($user->userID, $this->ignoreUserID, $this->type); + $this->deleteFollowing($user->userID, $this->ignoreUserID); + + $this->resetStorage($user, $this->ignoreUserID); + + $event = new UserIgnored($this->ignoreUserID, $this->type); + EventHandler::getInstance()->fire($event); + } + + private function resetStorage(User $user, int $ignoreUserID): void + { + UserStorageHandler::getInstance()->reset([$user->userID, $ignoreUserID], 'ignoredByUserIDs'); + UserStorageHandler::getInstance()->reset([$user->userID, $ignoreUserID], 'followerUserIDs'); + } + + private function deleteFollowing(int $userID, int $followUserID): void + { + $sql = "DELETE FROM wcf1_user_follow + WHERE userID = ? + AND followUserID = ?"; + $statement = WCF::getDB()->prepare($sql); + $statement->execute([ + $userID, + $followUserID, + ]); + } + + private function ignoreUser(int $userID, int $ignoreUserID, int $type): void + { + $sql = "INSERT INTO wcf1_user_ignore + (userID, ignoreUserID, type, time) + VALUES (?, ?, ?, ?) + ON DUPLICATE KEY UPDATE type = VALUES(type), time = VALUES(time)"; + $statement = WCF::getDB()->prepare($sql); + $statement->execute([$userID, $ignoreUserID, $type, TIME_NOW]); + } +} diff --git a/wcfsetup/install/files/lib/command/user/UnignoreUser.class.php b/wcfsetup/install/files/lib/command/user/UnignoreUser.class.php new file mode 100644 index 00000000000..d16708ae37d --- /dev/null +++ b/wcfsetup/install/files/lib/command/user/UnignoreUser.class.php @@ -0,0 +1,42 @@ + + * @since 6.3 + */ +final class UnignoreUser +{ + public function __construct( + private readonly int $userID, + ) {} + + public function __invoke(): void + { + $this->removeUserIgnore(WCF::getUser()->userID, $this->userID); + + UserStorageHandler::getInstance()->reset([WCF::getUser()->userID, $this->userID], 'ignoredUserIDs'); + + $event = new UserUnignored($this->userID); + EventHandler::getInstance()->fire($event); + } + + private function removeUserIgnore(int $userID, int $ignoreUserID): void + { + $sql = "DELETE FROM wcf1_user_ignore + WHERE userID = ? + AND ignoreUserID = ?"; + $statement = WCF::getDB()->prepare($sql); + $statement->execute([$userID, $ignoreUserID]); + } +} diff --git a/wcfsetup/install/files/lib/data/user/ignore/UserIgnoreAction.class.php b/wcfsetup/install/files/lib/data/user/ignore/UserIgnoreAction.class.php index dd20313cd5e..5c80472dba2 100644 --- a/wcfsetup/install/files/lib/data/user/ignore/UserIgnoreAction.class.php +++ b/wcfsetup/install/files/lib/data/user/ignore/UserIgnoreAction.class.php @@ -2,9 +2,9 @@ namespace wcf\data\user\ignore; +use wcf\command\user\IgnoreUser; +use wcf\command\user\UnignoreUser; use wcf\data\AbstractDatabaseObjectAction; -use wcf\data\user\follow\UserFollow; -use wcf\data\user\follow\UserFollowEditor; use wcf\system\cache\runtime\UserProfileRuntimeCache; use wcf\system\exception\IllegalLinkException; use wcf\system\exception\PermissionDeniedException; @@ -38,6 +38,8 @@ class UserIgnoreAction extends AbstractDatabaseObjectAction * Validates the 'ignore' action. * * @return void + * + * @deprecated 6.3 */ public function validateIgnore() { @@ -70,53 +72,14 @@ public function validateIgnore() * Ignores a user. * * @return array{isIgnoredUser: 1} + * + * @deprecated 6.3 use the `IgnoreUser` command instead. */ public function ignore() { - $ignore = new UserIgnoreEditor(UserIgnore::getIgnore($this->parameters['data']['userID'])); $type = $this->parameters['data']['type'] ?? UserIgnore::TYPE_BLOCK_DIRECT_CONTACT; - if ($ignore->ignoreID) { - $ignore->update([ - 'type' => $type, - 'time' => TIME_NOW, - ]); - } else { - $ignore = UserIgnoreEditor::createOrIgnore([ - 'ignoreUserID' => $this->parameters['data']['userID'], - 'type' => $type, - 'time' => TIME_NOW, - 'userID' => WCF::getUser()->userID, - ]); - } - - if ($ignore !== null) { - UserStorageHandler::getInstance()->reset([WCF::getUser()->userID], 'ignoredUserIDs'); - UserStorageHandler::getInstance()->reset([$this->parameters['data']['userID']], 'ignoredByUserIDs'); - - // check if target user is following the current user - $sql = "SELECT * - FROM wcf1_user_follow - WHERE userID = ? - AND followUserID = ?"; - $statement = WCF::getDB()->prepare($sql); - $statement->execute([ - $this->parameters['data']['userID'], - WCF::getUser()->userID, - ]); - - $follow = $statement->fetchObject(UserFollow::class); - - // remove follower - if ($follow !== null) { - $followEditor = new UserFollowEditor($follow); - $followEditor->delete(); - - // reset storage - UserStorageHandler::getInstance()->reset([WCF::getUser()->userID], 'followerUserIDs'); - UserStorageHandler::getInstance()->reset([$this->parameters['data']['userID']], 'followingUserIDs'); - } - } + (new IgnoreUser($this->parameters['data']['userID'], $type))(); return ['isIgnoredUser' => 1]; } @@ -125,6 +88,8 @@ public function ignore() * Validates the 'unignore' action. * * @return void + * + * @deprecated 6.3 */ public function validateUnignore() { @@ -140,18 +105,12 @@ public function validateUnignore() * Unignores a user. * * @return array{isIgnoredUser: 0} + * + * @deprecated 6.3 use the `UnignoreUser` command instead. */ public function unignore() { - $ignore = UserIgnore::getIgnore($this->parameters['data']['userID']); - - if ($ignore->ignoreID) { - $ignoreEditor = new UserIgnoreEditor($ignore); - $ignoreEditor->delete(); - - UserStorageHandler::getInstance()->reset([WCF::getUser()->userID], 'ignoredUserIDs'); - UserStorageHandler::getInstance()->reset([$this->parameters['data']['userID']], 'ignoredByUserIDs'); - } + (new UnignoreUser($this->parameters['data']['userID']))(); return ['isIgnoredUser' => 0]; } diff --git a/wcfsetup/install/files/lib/event/user/UserIgnored.class.php b/wcfsetup/install/files/lib/event/user/UserIgnored.class.php new file mode 100644 index 00000000000..0388a469c06 --- /dev/null +++ b/wcfsetup/install/files/lib/event/user/UserIgnored.class.php @@ -0,0 +1,18 @@ + + * @since 6.3 + */ +final class UserIgnored implements IPsr14Event +{ + public function __construct(public readonly int $ignoreUserID, public readonly int $type) {} +} diff --git a/wcfsetup/install/files/lib/event/user/UserUnignored.class.php b/wcfsetup/install/files/lib/event/user/UserUnignored.class.php new file mode 100644 index 00000000000..bbda27032e4 --- /dev/null +++ b/wcfsetup/install/files/lib/event/user/UserUnignored.class.php @@ -0,0 +1,18 @@ + + * @since 6.3 + */ +final class UserUnignored implements IPsr14Event +{ + public function __construct(public readonly int $userID) {} +} From c08274815c6150e82561261451a13c1fb406d4b6 Mon Sep 17 00:00:00 2001 From: Cyperghost Date: Wed, 13 Aug 2025 12:21:26 +0200 Subject: [PATCH 2/4] Refactor `IgnoreUser` and `UnignoreUser` commands to use `User` objects instead of IDs. --- .../lib/action/UserIgnoreAction.class.php | 6 ++-- .../lib/command/user/IgnoreUser.class.php | 34 ++++++------------- .../lib/command/user/UnignoreUser.class.php | 14 ++++---- .../user/ignore/UserIgnoreAction.class.php | 8 +++-- .../lib/event/user/UserIgnored.class.php | 5 +-- .../lib/event/user/UserUnignored.class.php | 5 +-- 6 files changed, 35 insertions(+), 37 deletions(-) diff --git a/wcfsetup/install/files/lib/action/UserIgnoreAction.class.php b/wcfsetup/install/files/lib/action/UserIgnoreAction.class.php index 5edf0614410..c3b8a3fe56b 100644 --- a/wcfsetup/install/files/lib/action/UserIgnoreAction.class.php +++ b/wcfsetup/install/files/lib/action/UserIgnoreAction.class.php @@ -12,6 +12,7 @@ use wcf\data\user\UserProfile; use wcf\http\Helper; use wcf\system\cache\runtime\UserProfileRuntimeCache; +use wcf\system\cache\runtime\UserRuntimeCache; use wcf\system\exception\IllegalLinkException; use wcf\system\exception\PermissionDeniedException; use wcf\system\form\builder\field\RadioButtonFormField; @@ -62,10 +63,11 @@ public function handle(ServerRequestInterface $request): ResponseInterface $type = \intval($form->getData()['data']['type']); + $user = UserRuntimeCache::getInstance()->getObject($parameters['id']); if ($type === UserIgnore::TYPE_NO_IGNORE) { - (new UnignoreUser($parameters['id']))(); + (new UnignoreUser(WCF::getUser(), $user))(); } else { - (new IgnoreUser($parameters['id'], $type))(); + (new IgnoreUser(WCF::getUser(), $user, $type))(); } return new JsonResponse([ diff --git a/wcfsetup/install/files/lib/command/user/IgnoreUser.class.php b/wcfsetup/install/files/lib/command/user/IgnoreUser.class.php index 83cff107cfd..a421eec2444 100644 --- a/wcfsetup/install/files/lib/command/user/IgnoreUser.class.php +++ b/wcfsetup/install/files/lib/command/user/IgnoreUser.class.php @@ -6,6 +6,7 @@ use wcf\data\user\User; use wcf\event\user\UserIgnored; use wcf\system\event\EventHandler; +use wcf\system\user\command\Unfollow; use wcf\system\user\storage\UserStorageHandler; use wcf\system\WCF; @@ -20,49 +21,36 @@ final class IgnoreUser { public function __construct( - private readonly int $ignoreUserID, + private readonly User $user, + private readonly User $ignoreUser, /** @var UserIgnore::TYPE_BLOCK_DIRECT_CONTACT|UserIgnore::TYPE_HIDE_MESSAGES */ private readonly int $type ) {} public function __invoke(): void { - $user = WCF::getUser(); + $this->ignoreUser($this->user, $this->ignoreUser, $this->type); - $this->ignoreUser($user->userID, $this->ignoreUserID, $this->type); - $this->deleteFollowing($user->userID, $this->ignoreUserID); + (new Unfollow(WCF::getUser(), $this->ignoreUser))(); - $this->resetStorage($user, $this->ignoreUserID); + $this->resetStorage($this->user, $this->ignoreUser); - $event = new UserIgnored($this->ignoreUserID, $this->type); + $event = new UserIgnored($this->user, $this->ignoreUser, $this->type); EventHandler::getInstance()->fire($event); } - private function resetStorage(User $user, int $ignoreUserID): void + private function resetStorage(User $user, User $ignoreUser): void { - UserStorageHandler::getInstance()->reset([$user->userID, $ignoreUserID], 'ignoredByUserIDs'); - UserStorageHandler::getInstance()->reset([$user->userID, $ignoreUserID], 'followerUserIDs'); + UserStorageHandler::getInstance()->reset([$user->userID, $ignoreUser->userID], 'ignoredByUserIDs'); } - private function deleteFollowing(int $userID, int $followUserID): void - { - $sql = "DELETE FROM wcf1_user_follow - WHERE userID = ? - AND followUserID = ?"; - $statement = WCF::getDB()->prepare($sql); - $statement->execute([ - $userID, - $followUserID, - ]); - } - - private function ignoreUser(int $userID, int $ignoreUserID, int $type): void + private function ignoreUser(User $user, User $ignoreUser, int $type): void { $sql = "INSERT INTO wcf1_user_ignore (userID, ignoreUserID, type, time) VALUES (?, ?, ?, ?) ON DUPLICATE KEY UPDATE type = VALUES(type), time = VALUES(time)"; $statement = WCF::getDB()->prepare($sql); - $statement->execute([$userID, $ignoreUserID, $type, TIME_NOW]); + $statement->execute([$user->userID, $ignoreUser->userID, $type, TIME_NOW]); } } diff --git a/wcfsetup/install/files/lib/command/user/UnignoreUser.class.php b/wcfsetup/install/files/lib/command/user/UnignoreUser.class.php index d16708ae37d..40f34159af7 100644 --- a/wcfsetup/install/files/lib/command/user/UnignoreUser.class.php +++ b/wcfsetup/install/files/lib/command/user/UnignoreUser.class.php @@ -2,6 +2,7 @@ namespace wcf\command\user; +use wcf\data\user\User; use wcf\event\user\UserUnignored; use wcf\system\event\EventHandler; use wcf\system\user\storage\UserStorageHandler; @@ -18,25 +19,26 @@ final class UnignoreUser { public function __construct( - private readonly int $userID, + private readonly User $user, + private readonly User $unignoreUser, ) {} public function __invoke(): void { - $this->removeUserIgnore(WCF::getUser()->userID, $this->userID); + $this->removeUserIgnore($this->user, $this->unignoreUser); - UserStorageHandler::getInstance()->reset([WCF::getUser()->userID, $this->userID], 'ignoredUserIDs'); + UserStorageHandler::getInstance()->reset([$this->user->userID, $this->unignoreUser->userID], 'ignoredUserIDs'); - $event = new UserUnignored($this->userID); + $event = new UserUnignored($this->user, $this->unignoreUser); EventHandler::getInstance()->fire($event); } - private function removeUserIgnore(int $userID, int $ignoreUserID): void + private function removeUserIgnore(User $user, User $unignoreUser): void { $sql = "DELETE FROM wcf1_user_ignore WHERE userID = ? AND ignoreUserID = ?"; $statement = WCF::getDB()->prepare($sql); - $statement->execute([$userID, $ignoreUserID]); + $statement->execute([$user->userID, $unignoreUser->userID]); } } diff --git a/wcfsetup/install/files/lib/data/user/ignore/UserIgnoreAction.class.php b/wcfsetup/install/files/lib/data/user/ignore/UserIgnoreAction.class.php index 5c80472dba2..ab31de1eeed 100644 --- a/wcfsetup/install/files/lib/data/user/ignore/UserIgnoreAction.class.php +++ b/wcfsetup/install/files/lib/data/user/ignore/UserIgnoreAction.class.php @@ -6,6 +6,7 @@ use wcf\command\user\UnignoreUser; use wcf\data\AbstractDatabaseObjectAction; use wcf\system\cache\runtime\UserProfileRuntimeCache; +use wcf\system\cache\runtime\UserRuntimeCache; use wcf\system\exception\IllegalLinkException; use wcf\system\exception\PermissionDeniedException; use wcf\system\exception\UserInputException; @@ -78,8 +79,9 @@ public function validateIgnore() public function ignore() { $type = $this->parameters['data']['type'] ?? UserIgnore::TYPE_BLOCK_DIRECT_CONTACT; + $user = UserRuntimeCache::getInstance()->getObject($this->parameters['data']['userID']); - (new IgnoreUser($this->parameters['data']['userID'], $type))(); + (new IgnoreUser(WCF::getUser(), $user, $type))(); return ['isIgnoredUser' => 1]; } @@ -110,7 +112,9 @@ public function validateUnignore() */ public function unignore() { - (new UnignoreUser($this->parameters['data']['userID']))(); + $user = UserRuntimeCache::getInstance()->getObject($this->parameters['data']['userID']); + + (new UnignoreUser(WCF::getUser(), $user))(); return ['isIgnoredUser' => 0]; } diff --git a/wcfsetup/install/files/lib/event/user/UserIgnored.class.php b/wcfsetup/install/files/lib/event/user/UserIgnored.class.php index 0388a469c06..f88eff634c1 100644 --- a/wcfsetup/install/files/lib/event/user/UserIgnored.class.php +++ b/wcfsetup/install/files/lib/event/user/UserIgnored.class.php @@ -2,10 +2,11 @@ namespace wcf\event\user; +use wcf\data\user\User; use wcf\event\IPsr14Event; /** - * Indicates that the current user has ignored another user. + * Indicates that the user has ignored another user. * * @author Olaf Braun * @copyright 2001-2025 WoltLab GmbH @@ -14,5 +15,5 @@ */ final class UserIgnored implements IPsr14Event { - public function __construct(public readonly int $ignoreUserID, public readonly int $type) {} + public function __construct(public readonly User $user, public readonly User $ignoreUser, public readonly int $type) {} } diff --git a/wcfsetup/install/files/lib/event/user/UserUnignored.class.php b/wcfsetup/install/files/lib/event/user/UserUnignored.class.php index bbda27032e4..ad2db5c9962 100644 --- a/wcfsetup/install/files/lib/event/user/UserUnignored.class.php +++ b/wcfsetup/install/files/lib/event/user/UserUnignored.class.php @@ -2,10 +2,11 @@ namespace wcf\event\user; +use wcf\data\user\User; use wcf\event\IPsr14Event; /** - * Indicates that the current user unignored another user. + * Indicates that the user unignored another user. * * @author Olaf Braun * @copyright 2001-2025 WoltLab GmbH @@ -14,5 +15,5 @@ */ final class UserUnignored implements IPsr14Event { - public function __construct(public readonly int $userID) {} + public function __construct(public readonly User $user, public readonly User $unignoreUser) {} } From e342482e27df10f96a302a13100146aee7ca516c Mon Sep 17 00:00:00 2001 From: Cyperghost Date: Wed, 13 Aug 2025 12:25:22 +0200 Subject: [PATCH 3/4] Replace `UserRuntimeCache` with `UserProfileRuntimeCache` in user ignore actions. --- .../lib/data/user/ignore/UserIgnoreAction.class.php | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/wcfsetup/install/files/lib/data/user/ignore/UserIgnoreAction.class.php b/wcfsetup/install/files/lib/data/user/ignore/UserIgnoreAction.class.php index ab31de1eeed..3acbdfadb90 100644 --- a/wcfsetup/install/files/lib/data/user/ignore/UserIgnoreAction.class.php +++ b/wcfsetup/install/files/lib/data/user/ignore/UserIgnoreAction.class.php @@ -6,7 +6,6 @@ use wcf\command\user\UnignoreUser; use wcf\data\AbstractDatabaseObjectAction; use wcf\system\cache\runtime\UserProfileRuntimeCache; -use wcf\system\cache\runtime\UserRuntimeCache; use wcf\system\exception\IllegalLinkException; use wcf\system\exception\PermissionDeniedException; use wcf\system\exception\UserInputException; @@ -79,9 +78,9 @@ public function validateIgnore() public function ignore() { $type = $this->parameters['data']['type'] ?? UserIgnore::TYPE_BLOCK_DIRECT_CONTACT; - $user = UserRuntimeCache::getInstance()->getObject($this->parameters['data']['userID']); + $userProfile = UserProfileRuntimeCache::getInstance()->getObject($this->parameters['data']['userID']); - (new IgnoreUser(WCF::getUser(), $user, $type))(); + (new IgnoreUser(WCF::getUser(), $userProfile->getDecoratedObject(), $type))(); return ['isIgnoredUser' => 1]; } @@ -112,9 +111,9 @@ public function validateUnignore() */ public function unignore() { - $user = UserRuntimeCache::getInstance()->getObject($this->parameters['data']['userID']); + $userProfile = UserProfileRuntimeCache::getInstance()->getObject($this->parameters['data']['userID']); - (new UnignoreUser(WCF::getUser(), $user))(); + (new UnignoreUser(WCF::getUser(), $userProfile->getDecoratedObject()))(); return ['isIgnoredUser' => 0]; } From 3ef7506711ea56c47bb37dd6a65426acee4e91a2 Mon Sep 17 00:00:00 2001 From: Alexander Ebert Date: Thu, 21 Aug 2025 16:17:37 +0200 Subject: [PATCH 4/4] Minor fixes --- .../lib/command/user/IgnoreUser.class.php | 27 +++++++++++-------- .../lib/command/user/UnignoreUser.class.php | 15 ++++++----- .../lib/event/user/UserIgnored.class.php | 6 ++++- .../lib/event/user/UserUnignored.class.php | 7 +++-- .../system/user/command/Unfollow.class.php | 7 ++--- 5 files changed, 38 insertions(+), 24 deletions(-) diff --git a/wcfsetup/install/files/lib/command/user/IgnoreUser.class.php b/wcfsetup/install/files/lib/command/user/IgnoreUser.class.php index a421eec2444..2e6b8a097c0 100644 --- a/wcfsetup/install/files/lib/command/user/IgnoreUser.class.php +++ b/wcfsetup/install/files/lib/command/user/IgnoreUser.class.php @@ -2,7 +2,6 @@ namespace wcf\command\user; -use wcf\data\user\ignore\UserIgnore; use wcf\data\user\User; use wcf\event\user\UserIgnored; use wcf\system\event\EventHandler; @@ -11,7 +10,7 @@ use wcf\system\WCF; /** - * The current user ignores the given user. + * Saves that one user ignores another user. * * @author Olaf Braun * @copyright 2001-2025 WoltLab GmbH @@ -22,35 +21,41 @@ final class IgnoreUser { public function __construct( private readonly User $user, - private readonly User $ignoreUser, + private readonly User $target, /** @var UserIgnore::TYPE_BLOCK_DIRECT_CONTACT|UserIgnore::TYPE_HIDE_MESSAGES */ private readonly int $type ) {} public function __invoke(): void { - $this->ignoreUser($this->user, $this->ignoreUser, $this->type); + $this->ignoreUser($this->user, $this->target, $this->type); - (new Unfollow(WCF::getUser(), $this->ignoreUser))(); + (new Unfollow($this->target, $this->user))(); - $this->resetStorage($this->user, $this->ignoreUser); + $this->resetStorage($this->user, $this->target); - $event = new UserIgnored($this->user, $this->ignoreUser, $this->type); + $event = new UserIgnored($this->user, $this->target, $this->type); EventHandler::getInstance()->fire($event); } - private function resetStorage(User $user, User $ignoreUser): void + private function resetStorage(User $user, User $target): void { - UserStorageHandler::getInstance()->reset([$user->userID, $ignoreUser->userID], 'ignoredByUserIDs'); + UserStorageHandler::getInstance()->reset([$user->userID], 'ignoredUserIDs'); + UserStorageHandler::getInstance()->reset([$target->userID], 'ignoredByUserIDs'); } - private function ignoreUser(User $user, User $ignoreUser, int $type): void + private function ignoreUser(User $user, User $target, int $type): void { $sql = "INSERT INTO wcf1_user_ignore (userID, ignoreUserID, type, time) VALUES (?, ?, ?, ?) ON DUPLICATE KEY UPDATE type = VALUES(type), time = VALUES(time)"; $statement = WCF::getDB()->prepare($sql); - $statement->execute([$user->userID, $ignoreUser->userID, $type, TIME_NOW]); + $statement->execute([ + $user->userID, + $target->userID, + $type, + TIME_NOW, + ]); } } diff --git a/wcfsetup/install/files/lib/command/user/UnignoreUser.class.php b/wcfsetup/install/files/lib/command/user/UnignoreUser.class.php index 40f34159af7..61af7fd3d7c 100644 --- a/wcfsetup/install/files/lib/command/user/UnignoreUser.class.php +++ b/wcfsetup/install/files/lib/command/user/UnignoreUser.class.php @@ -9,7 +9,7 @@ use wcf\system\WCF; /** - * The current user unignores the given user. + * Saves that a user is no longer ignoring another user. * * @author Olaf Braun * @copyright 2001-2025 WoltLab GmbH @@ -20,25 +20,26 @@ final class UnignoreUser { public function __construct( private readonly User $user, - private readonly User $unignoreUser, + private readonly User $target, ) {} public function __invoke(): void { - $this->removeUserIgnore($this->user, $this->unignoreUser); + $this->removeUserIgnore($this->user, $this->target); - UserStorageHandler::getInstance()->reset([$this->user->userID, $this->unignoreUser->userID], 'ignoredUserIDs'); + UserStorageHandler::getInstance()->reset([$this->user->userID], 'ignoredUserIDs'); + UserStorageHandler::getInstance()->reset([$this->target->userID], 'ignoredByUserIDs'); - $event = new UserUnignored($this->user, $this->unignoreUser); + $event = new UserUnignored($this->user, $this->target); EventHandler::getInstance()->fire($event); } - private function removeUserIgnore(User $user, User $unignoreUser): void + private function removeUserIgnore(User $user, User $target): void { $sql = "DELETE FROM wcf1_user_ignore WHERE userID = ? AND ignoreUserID = ?"; $statement = WCF::getDB()->prepare($sql); - $statement->execute([$user->userID, $unignoreUser->userID]); + $statement->execute([$user->userID, $target->userID]); } } diff --git a/wcfsetup/install/files/lib/event/user/UserIgnored.class.php b/wcfsetup/install/files/lib/event/user/UserIgnored.class.php index f88eff634c1..1fd5b4d97cb 100644 --- a/wcfsetup/install/files/lib/event/user/UserIgnored.class.php +++ b/wcfsetup/install/files/lib/event/user/UserIgnored.class.php @@ -15,5 +15,9 @@ */ final class UserIgnored implements IPsr14Event { - public function __construct(public readonly User $user, public readonly User $ignoreUser, public readonly int $type) {} + public function __construct( + public readonly User $user, + public readonly User $target, + public readonly int $type, + ) {} } diff --git a/wcfsetup/install/files/lib/event/user/UserUnignored.class.php b/wcfsetup/install/files/lib/event/user/UserUnignored.class.php index ad2db5c9962..b77222916fd 100644 --- a/wcfsetup/install/files/lib/event/user/UserUnignored.class.php +++ b/wcfsetup/install/files/lib/event/user/UserUnignored.class.php @@ -6,7 +6,7 @@ use wcf\event\IPsr14Event; /** - * Indicates that the user unignored another user. + * Indicates that the user no longer ignores another user. * * @author Olaf Braun * @copyright 2001-2025 WoltLab GmbH @@ -15,5 +15,8 @@ */ final class UserUnignored implements IPsr14Event { - public function __construct(public readonly User $user, public readonly User $unignoreUser) {} + public function __construct( + public readonly User $user, + public readonly User $target, + ) {} } diff --git a/wcfsetup/install/files/lib/system/user/command/Unfollow.class.php b/wcfsetup/install/files/lib/system/user/command/Unfollow.class.php index 0c01f98e2d0..c5f624ba355 100644 --- a/wcfsetup/install/files/lib/system/user/command/Unfollow.class.php +++ b/wcfsetup/install/files/lib/system/user/command/Unfollow.class.php @@ -18,9 +18,10 @@ */ final class Unfollow { - public function __construct(private readonly User $user, private readonly User $target) - { - } + public function __construct( + private readonly User $user, + private readonly User $target, + ) {} public function __invoke(): void {