Merge pull request #16970 from nextcloud/bugfix/noid/opt_in_for_push_notifications_calendar_reminders

Make push notifications for calendar reminders opt-in
This commit is contained in:
Roeland Jago Douma 2019-09-04 20:08:21 +02:00 committed by GitHub
commit 4456d01c6e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 52 additions and 0 deletions

View file

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

View file

@ -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;

View file

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

View file

@ -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>

View file

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