From 010114b88728b55f9fa0a7b4854f2a331b816226 Mon Sep 17 00:00:00 2001 From: Christian Lange Date: Sat, 10 Apr 2021 17:56:00 +0200 Subject: [PATCH 1/2] E-Mail-Reminder to all attendees is sent only by organizer of the reminder/event --- .../CalDAV/Reminder/INotificationProvider.php | 4 +++- .../NotificationProvider/AbstractProvider.php | 4 +++- .../NotificationProvider/EmailProvider.php | 17 +++++++++++++---- .../NotificationProvider/PushProvider.php | 4 +++- .../dav/lib/CalDAV/Reminder/ReminderService.php | 8 ++++---- 5 files changed, 26 insertions(+), 11 deletions(-) diff --git a/apps/dav/lib/CalDAV/Reminder/INotificationProvider.php b/apps/dav/lib/CalDAV/Reminder/INotificationProvider.php index 3ce05476ff..feea411e48 100644 --- a/apps/dav/lib/CalDAV/Reminder/INotificationProvider.php +++ b/apps/dav/lib/CalDAV/Reminder/INotificationProvider.php @@ -44,9 +44,11 @@ interface INotificationProvider { * @param VEvent $vevent * @param string $calendarDisplayName * @param IUser[] $users + * @param IUser $userOfReminder * @return void */ public function send(VEvent $vevent, string $calendarDisplayName, - array $users = []): void; + array $users = [], + IUser $userOfReminder = null): void; } diff --git a/apps/dav/lib/CalDAV/Reminder/NotificationProvider/AbstractProvider.php b/apps/dav/lib/CalDAV/Reminder/NotificationProvider/AbstractProvider.php index 5b46271f45..8f3df19456 100644 --- a/apps/dav/lib/CalDAV/Reminder/NotificationProvider/AbstractProvider.php +++ b/apps/dav/lib/CalDAV/Reminder/NotificationProvider/AbstractProvider.php @@ -91,11 +91,13 @@ abstract class AbstractProvider implements INotificationProvider { * @param VEvent $vevent * @param string $calendarDisplayName * @param IUser[] $users + * @param IUser $userOfReminder * @return void */ abstract public function send(VEvent $vevent, string $calendarDisplayName, - array $users = []): void; + array $users = [], + IUser $userOfReminder = null): void; /** * @return string diff --git a/apps/dav/lib/CalDAV/Reminder/NotificationProvider/EmailProvider.php b/apps/dav/lib/CalDAV/Reminder/NotificationProvider/EmailProvider.php index 38c875315b..371a4bd876 100644 --- a/apps/dav/lib/CalDAV/Reminder/NotificationProvider/EmailProvider.php +++ b/apps/dav/lib/CalDAV/Reminder/NotificationProvider/EmailProvider.php @@ -37,6 +37,7 @@ use OCP\IConfig; use OCP\IL10N; use OCP\ILogger; use OCP\IURLGenerator; +use OCP\IUser; use OCP\L10N\IFactory as L10NFactory; use OCP\Mail\IEMailTemplate; use OCP\Mail\IMailer; @@ -80,15 +81,24 @@ class EmailProvider extends AbstractProvider { * @param VEvent $vevent * @param string $calendarDisplayName * @param array $users + * @param IUser $userOfReminder * @throws \Exception */ public function send(VEvent $vevent, string $calendarDisplayName, - array $users = []):void { + array $users = [], + IUser $userOfReminder = null):void { $fallbackLanguage = $this->getFallbackLanguage(); $emailAddressesOfSharees = $this->getEMailAddressesOfAllUsersWithWriteAccessToCalendar($users); - $emailAddressesOfAttendees = $this->getAllEMailAddressesFromEvent($vevent); + + $organizer = $this->getOrganizerEMailAndNameFromEvent($vevent); + + $emailAddressesOfAttendees = []; + + if ($userOfReminder && strcasecmp($userOfReminder->getEMailAddress(), key($organizer)) == 0) { + $emailAddressesOfAttendees = $this->getAllEMailAddressesFromEvent($vevent); + } // Quote from php.net: // If the input arrays have the same string keys, then the later value for that key will overwrite the previous one. @@ -99,7 +109,6 @@ class EmailProvider extends AbstractProvider { ); $sortedByLanguage = $this->sortEMailAddressesByLanguage($emailAddresses, $fallbackLanguage); - $organizer = $this->getOrganizerEMailAndNameFromEvent($vevent); foreach ($sortedByLanguage as $lang => $emailAddresses) { if (!$this->hasL10NForLang($lang)) { @@ -196,7 +205,7 @@ class EmailProvider extends AbstractProvider { } $organizer = $vevent->ORGANIZER; - if (strcasecmp($organizer->getValue(), 'mailto:') !== 0) { + if (!str_starts_with($organizer->getValue(), 'mailto:')) { return null; } diff --git a/apps/dav/lib/CalDAV/Reminder/NotificationProvider/PushProvider.php b/apps/dav/lib/CalDAV/Reminder/NotificationProvider/PushProvider.php index 6db3ca563a..67b08929fa 100644 --- a/apps/dav/lib/CalDAV/Reminder/NotificationProvider/PushProvider.php +++ b/apps/dav/lib/CalDAV/Reminder/NotificationProvider/PushProvider.php @@ -83,11 +83,13 @@ class PushProvider extends AbstractProvider { * @param VEvent $vevent * @param string $calendarDisplayName * @param IUser[] $users + * @param IUser $userOfReminder * @throws \Exception */ public function send(VEvent $vevent, string $calendarDisplayName = null, - array $users = []):void { + array $users = [], + IUser $userOfReminder = null):void { if ($this->config->getAppValue('dav', 'sendEventRemindersPush', 'no') !== 'yes') { return; } diff --git a/apps/dav/lib/CalDAV/Reminder/ReminderService.php b/apps/dav/lib/CalDAV/Reminder/ReminderService.php index 83fe413c0e..2c31001e33 100644 --- a/apps/dav/lib/CalDAV/Reminder/ReminderService.php +++ b/apps/dav/lib/CalDAV/Reminder/ReminderService.php @@ -142,13 +142,13 @@ class ReminderService { } $users = $this->getAllUsersWithWriteAccessToCalendar($reminder['calendar_id']); - $user = $this->getUserFromPrincipalURI($reminder['principaluri']); - if ($user) { - $users[] = $user; + $userOfReminder = $this->getUserFromPrincipalURI($reminder['principaluri']); + if ($userOfReminder) { + $users[] = $userOfReminder; } $notificationProvider = $this->notificationProviderManager->getProvider($reminder['type']); - $notificationProvider->send($vevent, $reminder['displayname'], $users); + $notificationProvider->send($vevent, $reminder['displayname'], $users, $userOfReminder); $this->deleteOrProcessNext($reminder, $vevent); } From 70c7173020ca76341755d9de17c0a940b0904623 Mon Sep 17 00:00:00 2001 From: lange Date: Sat, 8 May 2021 13:22:37 +0200 Subject: [PATCH 2/2] fixes from code-review --- apps/dav/lib/CalDAV/Reminder/INotificationProvider.php | 4 ++-- .../Reminder/NotificationProvider/AbstractProvider.php | 4 ++-- .../Reminder/NotificationProvider/EmailProvider.php | 8 ++++---- .../CalDAV/Reminder/NotificationProvider/PushProvider.php | 4 ++-- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/apps/dav/lib/CalDAV/Reminder/INotificationProvider.php b/apps/dav/lib/CalDAV/Reminder/INotificationProvider.php index feea411e48..69118c67d1 100644 --- a/apps/dav/lib/CalDAV/Reminder/INotificationProvider.php +++ b/apps/dav/lib/CalDAV/Reminder/INotificationProvider.php @@ -44,11 +44,11 @@ interface INotificationProvider { * @param VEvent $vevent * @param string $calendarDisplayName * @param IUser[] $users - * @param IUser $userOfReminder + * @param IUser $reminderOwner * @return void */ public function send(VEvent $vevent, string $calendarDisplayName, array $users = [], - IUser $userOfReminder = null): void; + IUser $reminderOwner = null): void; } diff --git a/apps/dav/lib/CalDAV/Reminder/NotificationProvider/AbstractProvider.php b/apps/dav/lib/CalDAV/Reminder/NotificationProvider/AbstractProvider.php index 8f3df19456..f15688cd21 100644 --- a/apps/dav/lib/CalDAV/Reminder/NotificationProvider/AbstractProvider.php +++ b/apps/dav/lib/CalDAV/Reminder/NotificationProvider/AbstractProvider.php @@ -91,13 +91,13 @@ abstract class AbstractProvider implements INotificationProvider { * @param VEvent $vevent * @param string $calendarDisplayName * @param IUser[] $users - * @param IUser $userOfReminder + * @param IUser $reminderOwner * @return void */ abstract public function send(VEvent $vevent, string $calendarDisplayName, array $users = [], - IUser $userOfReminder = null): void; + IUser $reminderOwner = null): void; /** * @return string diff --git a/apps/dav/lib/CalDAV/Reminder/NotificationProvider/EmailProvider.php b/apps/dav/lib/CalDAV/Reminder/NotificationProvider/EmailProvider.php index 371a4bd876..056b633dc6 100644 --- a/apps/dav/lib/CalDAV/Reminder/NotificationProvider/EmailProvider.php +++ b/apps/dav/lib/CalDAV/Reminder/NotificationProvider/EmailProvider.php @@ -81,13 +81,13 @@ class EmailProvider extends AbstractProvider { * @param VEvent $vevent * @param string $calendarDisplayName * @param array $users - * @param IUser $userOfReminder + * @param IUser $reminderOwner * @throws \Exception */ public function send(VEvent $vevent, string $calendarDisplayName, array $users = [], - IUser $userOfReminder = null):void { + IUser $reminderOwner = null):void { $fallbackLanguage = $this->getFallbackLanguage(); $emailAddressesOfSharees = $this->getEMailAddressesOfAllUsersWithWriteAccessToCalendar($users); @@ -96,7 +96,7 @@ class EmailProvider extends AbstractProvider { $emailAddressesOfAttendees = []; - if ($userOfReminder && strcasecmp($userOfReminder->getEMailAddress(), key($organizer)) == 0) { + if ($organizer !== null && $reminderOwner instanceof IUser && strcasecmp($reminderOwner->getEMailAddress(), key($organizer)) === 0) { $emailAddressesOfAttendees = $this->getAllEMailAddressesFromEvent($vevent); } @@ -205,7 +205,7 @@ class EmailProvider extends AbstractProvider { } $organizer = $vevent->ORGANIZER; - if (!str_starts_with($organizer->getValue(), 'mailto:')) { + if (strcasecmp($organizer->getValue(), 'mailto:') !== 0) { return null; } diff --git a/apps/dav/lib/CalDAV/Reminder/NotificationProvider/PushProvider.php b/apps/dav/lib/CalDAV/Reminder/NotificationProvider/PushProvider.php index 67b08929fa..72c39cc904 100644 --- a/apps/dav/lib/CalDAV/Reminder/NotificationProvider/PushProvider.php +++ b/apps/dav/lib/CalDAV/Reminder/NotificationProvider/PushProvider.php @@ -83,13 +83,13 @@ class PushProvider extends AbstractProvider { * @param VEvent $vevent * @param string $calendarDisplayName * @param IUser[] $users - * @param IUser $userOfReminder + * @param IUser $reminderOwner * @throws \Exception */ public function send(VEvent $vevent, string $calendarDisplayName = null, array $users = [], - IUser $userOfReminder = null):void { + IUser $reminderOwner = null):void { if ($this->config->getAppValue('dav', 'sendEventRemindersPush', 'no') !== 'yes') { return; }