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');