* @param int[] $recipientIDs
* @param mixed[] $additionalData
* @param int $baseObjectID
+ * @param int $contentLanguageID
* @throws SystemException
*/
public function fireEvent(
IUserNotificationObject $notificationObject,
array $recipientIDs,
array $additionalData = [],
- $baseObjectID = 0
+ $baseObjectID = 0,
+ $contentLanguageID = 0
) {
// check given object type and event name
if (!isset($this->availableEvents[$objectType][$eventName])) {
}
}
+ // Remove recipients who do not have the content language enabled.
+ if ($contentLanguageID) {
+ $recipientIDs = $this->filterUsersByContentLanguage($recipientIDs, $contentLanguageID);
+ if (empty($recipientIDs)) {
+ return;
+ }
+ }
+
// get recipients
$recipientList = new UserNotificationEventRecipientList();
$recipientList->getConditionBuilder()->add('event_to_user.eventID = ?', [$event->eventID]);
return [];
}
+
+ public function filterUsersByContentLanguage(array $userIDs, int $contentLanguageID): array
+ {
+ $conditions = new PreparedStatementConditionBuilder();
+ $conditions->add("userID IN (?)", [$userIDs]);
+ $conditions->add("languageID = ?", [$contentLanguageID]);
+
+ $sql = "SELECT userID
+ FROM wcf" . WCF_N . "_user_to_language
+ " . $conditions;
+ $statement = WCF::getDB()->prepareStatement($sql);
+ $statement->execute($conditions->getParameters());
+ $filterUserIDs = [];
+ while ($userID = $statement->fetchColumn()) {
+ $filterUserIDs[] = $userID;
+ }
+
+ return \array_intersect($userIDs, $filterUserIDs);
+ }
}