From 585892fa503e5fa7316703d2ddf278aa81b336fb Mon Sep 17 00:00:00 2001
From: Matthias Schmidt <gravatronics@live.com>
Date: Tue, 28 Feb 2017 19:57:14 +0100
Subject: [PATCH] Fix deleting all activity events for likes/follows instead of
 specific ones

---
 .../files/lib/data/like/LikeAction.class.php  |  2 +-
 .../user/follow/UserFollowAction.class.php    |  2 +-
 .../event/UserActivityEventHandler.class.php  | 28 +++++++++++++++++++
 3 files changed, 30 insertions(+), 2 deletions(-)

diff --git a/wcfsetup/install/files/lib/data/like/LikeAction.class.php b/wcfsetup/install/files/lib/data/like/LikeAction.class.php
index 3a45946375..9121aa2a3c 100644
--- a/wcfsetup/install/files/lib/data/like/LikeAction.class.php
+++ b/wcfsetup/install/files/lib/data/like/LikeAction.class.php
@@ -166,7 +166,7 @@ class LikeAction extends AbstractDatabaseObjectAction implements IGroupedUserLis
 				UserActivityEventHandler::getInstance()->fireEvent($this->objectType->objectType.'.recentActivityEvent', $this->parameters['data']['objectID'], $this->likeableObject->getLanguageID());
 			}
 			else {
-				UserActivityEventHandler::getInstance()->removeEvents($this->objectType->objectType.'.recentActivityEvent', array($this->parameters['data']['objectID']));
+				UserActivityEventHandler::getInstance()->removeEvent($this->objectType->objectType.'.recentActivityEvent', $this->parameters['data']['objectID']);
 			}
 		}
 		
diff --git a/wcfsetup/install/files/lib/data/user/follow/UserFollowAction.class.php b/wcfsetup/install/files/lib/data/user/follow/UserFollowAction.class.php
index 1b48377a2c..e759194e40 100644
--- a/wcfsetup/install/files/lib/data/user/follow/UserFollowAction.class.php
+++ b/wcfsetup/install/files/lib/data/user/follow/UserFollowAction.class.php
@@ -98,7 +98,7 @@ class UserFollowAction extends AbstractDatabaseObjectAction implements IGroupedU
 			$followEditor->delete();
 			
 			// remove activity event
-			UserActivityEventHandler::getInstance()->removeEvents('com.woltlab.wcf.user.recentActivityEvent.follow', array($this->parameters['data']['userID']));
+			UserActivityEventHandler::getInstance()->removeEvent('com.woltlab.wcf.user.recentActivityEvent.follow', $this->parameters['data']['userID']);
 		}
 		
 		// reset storage
diff --git a/wcfsetup/install/files/lib/system/user/activity/event/UserActivityEventHandler.class.php b/wcfsetup/install/files/lib/system/user/activity/event/UserActivityEventHandler.class.php
index 5d1db1e09b..0fcf9cc03b 100644
--- a/wcfsetup/install/files/lib/system/user/activity/event/UserActivityEventHandler.class.php
+++ b/wcfsetup/install/files/lib/system/user/activity/event/UserActivityEventHandler.class.php
@@ -99,6 +99,34 @@ class UserActivityEventHandler extends SingletonFactory {
 		return $returnValues['returnValues'];
 	}
 	
+	/**
+	 * Removes an activity event.
+	 * 
+	 * @param	integer		$objectType
+	 * @param	integer		$objectID
+	 * @param	integer		$userID
+	 * @throws	SystemException
+	 */
+	public function removeEvent($objectType, $objectID, $userID = null) {
+		$objectTypeID = $this->getObjectTypeID($objectType);
+		if ($objectTypeID === null) {
+			throw new SystemException("Unknown recent activity event '".$objectType."'");
+		}
+		
+		if ($userID === null) $userID = WCF::getUser()->userID;
+		
+		$sql = "DELETE FROM	wcf".WCF_N."_user_activity_event
+			WHERE		objectTypeID = ?
+					AND objectID = ?
+					AND userID = ?";
+		$statement = WCF::getDB()->prepareStatement($sql);
+		$statement->execute(array(
+			$objectTypeID,
+			$objectID,
+			$userID
+		));
+	}
+	
 	/**
 	 * Removes activity events.
 	 * 
-- 
2.20.1