aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGeorg Ehrke <developer@georgehrke.com>2019-09-02 15:18:43 +0200
committerGeorg Ehrke <developer@georgehrke.com>2019-09-02 15:18:43 +0200
commit88f6d1c20edf41bf581d973263a3749948ef4f4c (patch)
treebd554008994fba80047be2486ff377e1ada29240
parentdaf89e6b34515222b55bdd6bc32c9001664ac548 (diff)
downloadnextcloud-server-88f6d1c20edf41bf581d973263a3749948ef4f4c.tar.gz
nextcloud-server-88f6d1c20edf41bf581d973263a3749948ef4f4c.zip
Make push notifications for calendar reminders opt-in
Signed-off-by: Georg Ehrke <developer@georgehrke.com>
-rw-r--r--apps/dav/js/settings-admin-caldav.js9
-rw-r--r--apps/dav/lib/CalDAV/Reminder/NotificationProvider/PushProvider.php4
-rw-r--r--apps/dav/lib/Settings/CalDAVSettings.php1
-rw-r--r--apps/dav/templates/settings-admin-caldav.php6
-rw-r--r--apps/dav/tests/unit/CalDAV/Reminder/NotificationProvider/PushProviderTest.php32
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');