diff --git a/apps/dav/js/settings-admin-caldav.js b/apps/dav/js/settings-admin-caldav.js index ad30ba6ad3..ba85df1e89 100644 --- a/apps/dav/js/settings-admin-caldav.js +++ b/apps/dav/js/settings-admin-caldav.js @@ -41,4 +41,13 @@ $('#caldavSendRemindersNotifications').change(function() { var val = $(this)[0].checked; OCP.AppConfig.setValue('dav', 'sendEventReminders', val ? 'yes' : 'no'); + + $('#caldavSendRemindersNotificationsPush').prop('disabled', !val) }); + +$('#caldavSendRemindersNotificationsPush').change(function() { + var val = $(this)[0].checked; + + OCP.AppConfig.setValue('dav', 'sendEventRemindersPush', val ? 'yes' : 'no'); +}); + diff --git a/apps/dav/lib/CalDAV/Reminder/NotificationProvider/PushProvider.php b/apps/dav/lib/CalDAV/Reminder/NotificationProvider/PushProvider.php index 3872b67e59..6e9e783186 100644 --- a/apps/dav/lib/CalDAV/Reminder/NotificationProvider/PushProvider.php +++ b/apps/dav/lib/CalDAV/Reminder/NotificationProvider/PushProvider.php @@ -83,6 +83,10 @@ class PushProvider extends AbstractProvider { public function send(VEvent $vevent, string $calendarDisplayName=null, array $users=[]):void { + if ($this->config->getAppValue('dav', 'sendEventRemindersPush', 'no') !== 'yes') { + return; + } + $eventDetails = $this->extractEventDetails($vevent); $eventDetails['calendar_displayname'] = $calendarDisplayName; diff --git a/apps/dav/lib/Settings/CalDAVSettings.php b/apps/dav/lib/Settings/CalDAVSettings.php index 958c463b1d..8e9b2aae92 100644 --- a/apps/dav/lib/Settings/CalDAVSettings.php +++ b/apps/dav/lib/Settings/CalDAVSettings.php @@ -49,6 +49,7 @@ class CalDAVSettings implements ISettings { 'send_invitations' => $this->config->getAppValue('dav', 'sendInvitations', 'yes'), 'generate_birthday_calendar' => $this->config->getAppValue('dav', 'generateBirthdayCalendar', 'yes'), 'send_reminders_notifications' => $this->config->getAppValue('dav', 'sendEventReminders', 'yes'), + 'send_reminders_notifications_push' => $this->config->getAppValue('dav', 'sendEventRemindersPush', 'no'), ]; return new TemplateResponse('dav', 'settings-admin-caldav', $parameters); diff --git a/apps/dav/templates/settings-admin-caldav.php b/apps/dav/templates/settings-admin-caldav.php index ba55a88470..4c53e6421a 100644 --- a/apps/dav/templates/settings-admin-caldav.php +++ b/apps/dav/templates/settings-admin-caldav.php @@ -93,4 +93,10 @@ script('dav', [
t('Notifications will be send through background jobs, so these need to happen often enough.')); ?>

+

+ + /> + +

diff --git a/apps/dav/tests/unit/CalDAV/Reminder/NotificationProvider/PushProviderTest.php b/apps/dav/tests/unit/CalDAV/Reminder/NotificationProvider/PushProviderTest.php index bbf71837b0..8bd4a660dc 100644 --- a/apps/dav/tests/unit/CalDAV/Reminder/NotificationProvider/PushProviderTest.php +++ b/apps/dav/tests/unit/CalDAV/Reminder/NotificationProvider/PushProviderTest.php @@ -63,6 +63,7 @@ class PushProviderTest extends AbstractNotificationProviderTest { public function setUp() { parent::setUp(); + $this->config = $this->createMock(IConfig::class); $this->manager = $this->createMock(IManager::class); $this->timeFactory = $this->createMock(ITimeFactory::class); @@ -80,7 +81,38 @@ class PushProviderTest extends AbstractNotificationProviderTest { $this->assertEquals(PushProvider::NOTIFICATION_TYPE, 'DISPLAY'); } + public function testNotSend(): void { + $this->config->expects($this->once()) + ->method('getAppValue') + ->with('dav', 'sendEventRemindersPush', 'no') + ->willReturn('no'); + + $this->manager->expects($this->never()) + ->method('createNotification'); + $this->manager->expects($this->never()) + ->method('notify'); + + $user1 = $this->createMock(IUser::class); + $user1->method('getUID') + ->willReturn('uid1'); + $user2 = $this->createMock(IUser::class); + $user2->method('getUID') + ->willReturn('uid2'); + $user3 = $this->createMock(IUser::class); + $user3->method('getUID') + ->willReturn('uid3'); + + $users = [$user1, $user2, $user3]; + + $this->provider->send($this->vcalendar->VEVENT, $this->calendarDisplayName, $users); + } + public function testSend(): void { + $this->config->expects($this->once()) + ->method('getAppValue') + ->with('dav', 'sendEventRemindersPush', 'no') + ->willReturn('yes'); + $user1 = $this->createMock(IUser::class); $user1->method('getUID') ->willReturn('uid1');