diff options
author | Georg Ehrke <developer@georgehrke.com> | 2019-09-02 15:18:43 +0200 |
---|---|---|
committer | Georg Ehrke <developer@georgehrke.com> | 2019-09-02 15:18:43 +0200 |
commit | 88f6d1c20edf41bf581d973263a3749948ef4f4c (patch) | |
tree | bd554008994fba80047be2486ff377e1ada29240 | |
parent | daf89e6b34515222b55bdd6bc32c9001664ac548 (diff) | |
download | nextcloud-server-88f6d1c20edf41bf581d973263a3749948ef4f4c.tar.gz nextcloud-server-88f6d1c20edf41bf581d973263a3749948ef4f4c.zip |
Make push notifications for calendar reminders opt-in
Signed-off-by: Georg Ehrke <developer@georgehrke.com>
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'); |