From 10e75eaf0ae577aff1f133ac742be6022a227a71 Mon Sep 17 00:00:00 2001 From: Alexander Ebert Date: Wed, 25 Dec 2019 17:26:04 +0100 Subject: [PATCH] Improved event access for user notifications Closes #3017 --- .../UserNotificationEditor.class.php | 15 +++------ .../UserNotificationHandler.class.php | 31 +++++++++++++++++++ 2 files changed, 35 insertions(+), 11 deletions(-) diff --git a/wcfsetup/install/files/lib/data/user/notification/UserNotificationEditor.class.php b/wcfsetup/install/files/lib/data/user/notification/UserNotificationEditor.class.php index 168e59ccdb..205fafd920 100644 --- a/wcfsetup/install/files/lib/data/user/notification/UserNotificationEditor.class.php +++ b/wcfsetup/install/files/lib/data/user/notification/UserNotificationEditor.class.php @@ -1,7 +1,7 @@ update([ - 'confirmTime' => TIME_NOW, - 'mailNotified' => 1 - ]); - - // delete notification_to_user assignment (mimic legacy notification system) - $sql = "DELETE FROM wcf".WCF_N."_user_notification_to_user - WHERE notificationID = ?"; - $statement = WCF::getDB()->prepareStatement($sql); - $statement->execute([$this->notificationID]); + UserNotificationHandler::getInstance()->markAsConfirmedByIDs([$this->notificationID]); } } diff --git a/wcfsetup/install/files/lib/system/user/notification/UserNotificationHandler.class.php b/wcfsetup/install/files/lib/system/user/notification/UserNotificationHandler.class.php index 378a7838bf..e94ff344a2 100644 --- a/wcfsetup/install/files/lib/system/user/notification/UserNotificationHandler.class.php +++ b/wcfsetup/install/files/lib/system/user/notification/UserNotificationHandler.class.php @@ -122,6 +122,7 @@ class UserNotificationHandler extends SingletonFactory { 'userProfile' => $userProfile, 'event' => $event ]; + // @deprecated 5.2 This event exposes incomplete data and should not be used, please use the following events instead. EventHandler::getInstance()->fireAction($this, 'fireEvent', $parameters); // find existing notifications @@ -181,6 +182,11 @@ class UserNotificationHandler extends SingletonFactory { ]); } WCF::getDB()->commitTransaction(); + + $triggerCountParameters = $parameters; + $triggerCountParameters['updateTriggerCount'] = $notificationIDs; + EventHandler::getInstance()->fireAction($this, 'updateTriggerCount', $parameters); + unset($triggerCountParameters); } } @@ -268,6 +274,10 @@ class UserNotificationHandler extends SingletonFactory { // reset notification count UserStorageHandler::getInstance()->reset(array_keys($recipients), 'userNotificationCount'); + + $parameters['notifications'] = $notifications; + $parameters['recipients'] = $recipients; + EventHandler::getInstance()->fireAction($this, 'createdNotification', $parameters); } } @@ -777,6 +787,14 @@ class UserNotificationHandler extends SingletonFactory { UserStorageHandler::getInstance()->reset(array_unique($userIDs), 'userNotificationCount'); } + $parameters = [ + 'eventIDs' => $eventIDs, + 'objectIDs' => $objectIDs, + 'objectType' => $objectType, + 'userIDs' => $userIDs, + ]; + EventHandler::getInstance()->fireAction($this, 'removeNotifications', $parameters); + // delete notifications $sql = "DELETE FROM wcf".WCF_N."_user_notification ".$conditions; @@ -817,6 +835,15 @@ class UserNotificationHandler extends SingletonFactory { array_unshift($parameters, TIME_NOW); $statement->execute($parameters); + $parameters = [ + 'event' => $event, + 'eventName' => $eventName, + 'objectIDs' => $objectIDs, + 'objectType' => $objectType, + 'recipientIDs' => $recipientIDs, + ]; + EventHandler::getInstance()->fireAction($this, 'markAsConfirmed', $parameters); + // delete notification_to_user assignments (mimic legacy notification system) $sql = "DELETE FROM wcf".WCF_N."_user_notification_to_user WHERE notificationID NOT IN ( @@ -840,6 +867,7 @@ class UserNotificationHandler extends SingletonFactory { * Marks a single notification id as confirmed. * * @param integer $notificationID + * @deprecated 5.2 Please use `UserNotificationHandler::markAsConfirmedByIDs()` instead. */ public function markAsConfirmedByID($notificationID) { $this->markAsConfirmedByIDs([$notificationID]); @@ -867,6 +895,9 @@ class UserNotificationHandler extends SingletonFactory { array_unshift($parameters, TIME_NOW); $statement->execute($parameters); + $parameters = ['notificationIDs' => $notificationIDs]; + EventHandler::getInstance()->fireAction($this, 'markAsConfirmedByIDs', $parameters); + // delete notification_to_user assignments (mimic legacy notification system) $sql = "DELETE FROM wcf".WCF_N."_user_notification_to_user ".$conditions; -- 2.20.1