diff options
author | Roeland Jago Douma <rullzer@users.noreply.github.com> | 2019-09-04 20:08:21 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-09-04 20:08:21 +0200 |
commit | 4456d01c6ed6bb6021d98dc527529f0de227d874 (patch) | |
tree | 733fd97ceb6dff0bbe6d094e9d384b56c0871f69 /apps/dav | |
parent | d744c04a865766cf2e5c11e8c43183fd4bf9669e (diff) | |
parent | 88f6d1c20edf41bf581d973263a3749948ef4f4c (diff) | |
download | nextcloud-server-4456d01c6ed6bb6021d98dc527529f0de227d874.tar.gz nextcloud-server-4456d01c6ed6bb6021d98dc527529f0de227d874.zip |
Merge pull request #16970 from nextcloud/bugfix/noid/opt_in_for_push_notifications_calendar_reminders
Make push notifications for calendar reminders opt-in
Diffstat (limited to 'apps/dav')
5 files changed, 52 insertions, 0 deletions
diff --git a/apps/dav/js/settings-admin-caldav.js b/apps/dav/js/settings-admin-caldav.js index ad30ba6ad37..ba85df1e89a 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 3872b67e596..6e9e7831865 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 958c463b1d3..8e9b2aae926 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 ba55a884702..4c53e6421a7 100644 --- a/apps/dav/templates/settings-admin-caldav.php +++ b/apps/dav/templates/settings-admin-caldav.php @@ -93,4 +93,10 @@ script('dav', [ <br> <em><?php p($l->t('Notifications will be send through background jobs, so these need to happen often enough.')); ?></em> </p> + <p> + <input type="checkbox" name="caldav_send_reminders_notifications_push" id="caldavSendRemindersNotificationsPush" class="checkbox" + <?php ($_['send_reminders_notifications_push'] === 'yes') ? print_unescaped('checked="checked"') : null ?> + <?php ($_['send_reminders_notifications'] === 'yes') ? null : print_unescaped('disabled="disabled"') ?> /> + <label for="caldavSendRemindersNotificationsPush"><?php p($l->t('Enable notifications for events via push')); ?></label> + </p> </form> diff --git a/apps/dav/tests/unit/CalDAV/Reminder/NotificationProvider/PushProviderTest.php b/apps/dav/tests/unit/CalDAV/Reminder/NotificationProvider/PushProviderTest.php index bbf71837b08..8bd4a660dc4 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'); |