Signed-off-by: Daniel Teichmann <daniel.teichmann@das-netzwerkteam.de>tags/v24.0.0beta1
@@ -33,6 +33,7 @@ namespace OCA\DAV\CalDAV\Reminder; | |||
use DateTimeImmutable; | |||
use OCA\DAV\CalDAV\CalDavBackend; | |||
use OCP\AppFramework\Utility\ITimeFactory; | |||
use OCP\IConfig; | |||
use OCP\IGroup; | |||
use OCP\IGroupManager; | |||
use OCP\IUser; | |||
@@ -66,6 +67,9 @@ class ReminderService { | |||
/** @var ITimeFactory */ | |||
private $timeFactory; | |||
/** @var IConfig */ | |||
private $config; | |||
public const REMINDER_TYPE_EMAIL = 'EMAIL'; | |||
public const REMINDER_TYPE_DISPLAY = 'DISPLAY'; | |||
public const REMINDER_TYPE_AUDIO = 'AUDIO'; | |||
@@ -90,19 +94,22 @@ class ReminderService { | |||
* @param IGroupManager $groupManager | |||
* @param CalDavBackend $caldavBackend | |||
* @param ITimeFactory $timeFactory | |||
* @param IConfig $config | |||
*/ | |||
public function __construct(Backend $backend, | |||
NotificationProviderManager $notificationProviderManager, | |||
IUserManager $userManager, | |||
IGroupManager $groupManager, | |||
CalDavBackend $caldavBackend, | |||
ITimeFactory $timeFactory) { | |||
ITimeFactory $timeFactory, | |||
IConfig $config) { | |||
$this->backend = $backend; | |||
$this->notificationProviderManager = $notificationProviderManager; | |||
$this->userManager = $userManager; | |||
$this->groupManager = $groupManager; | |||
$this->caldavBackend = $caldavBackend; | |||
$this->timeFactory = $timeFactory; | |||
$this->config = $config; | |||
} | |||
/** | |||
@@ -145,7 +152,12 @@ class ReminderService { | |||
continue; | |||
} | |||
$users = $this->getAllUsersWithWriteAccessToCalendar($reminder['calendar_id']); | |||
if ($this->config->getAppValue('dav', 'sendEventRemindersToSharedGroupMembers', 'yes') === 'no') { | |||
$users = $this->getAllUsersWithWriteAccessToCalendar($reminder['calendar_id']); | |||
} else { | |||
$users = []; | |||
} | |||
$user = $this->getUserFromPrincipalURI($reminder['principaluri']); | |||
if ($user) { | |||
$users[] = $user; |
@@ -46,6 +46,7 @@ class CalDAVSettings implements IDelegatedSettings { | |||
'sendInvitations' => 'yes', | |||
'generateBirthdayCalendar' => 'yes', | |||
'sendEventReminders' => 'yes', | |||
'sendEventRemindersToSharedGroupMembers' => 'yes', | |||
'sendEventRemindersPush' => 'no', | |||
]; | |||
@@ -16,6 +16,10 @@ const CalDavSettingsView = new View({ | |||
'generateBirthdayCalendar' | |||
), | |||
sendEventReminders: loadState('dav', 'sendEventReminders'), | |||
sendEventRemindersToSharedGroupMembers: loadState( | |||
'dav', | |||
'sendEventRemindersToSharedGroupMembers' | |||
), | |||
sendEventRemindersPush: loadState('dav', 'sendEventRemindersPush'), | |||
} | |||
}, |
@@ -57,7 +57,21 @@ | |||
{{ $t('dav', 'Notifications are sent via background jobs, so these must occur often enough.') }} | |||
</em> | |||
</p> | |||
<p> | |||
<p class="indented"> | |||
<input id="caldavSendEventRemindersToSharedGroupMembers" | |||
v-model="sendEventRemindersToSharedGroupMembers" | |||
type="checkbox" | |||
class="checkbox" | |||
:disabled="!sendEventReminders"> | |||
<label for="caldavSendEventRemindersToSharedGroupMembers"> | |||
{{ $t('dav', 'Send reminder notifications to calendar sharees as well' ) }} | |||
</label> | |||
<br> | |||
<em> | |||
{{ $t('dav', 'Reminders are always sent to organizers and attendees.' ) }} | |||
</em> | |||
</p> | |||
<p class="indented"> | |||
<input id="caldavSendEventRemindersPush" | |||
v-model="sendEventRemindersPush" | |||
type="checkbox" | |||
@@ -70,6 +84,12 @@ | |||
</div> | |||
</template> | |||
<style lang="scss" scoped> | |||
.indented { | |||
padding-left: 28px; | |||
} | |||
</style> | |||
<script> | |||
import axios from '@nextcloud/axios' | |||
import { generateUrl } from '@nextcloud/router' | |||
@@ -118,6 +138,13 @@ export default { | |||
sendEventReminders(value) { | |||
OCP.AppConfig.setValue('dav', 'sendEventReminders', value ? 'yes' : 'no') | |||
}, | |||
sendEventRemindersToSharedGroupMembers(value) { | |||
OCP.AppConfig.setValue( | |||
'dav', | |||
'sendEventRemindersToSharedGroupMembers', | |||
value ? 'yes' : 'no' | |||
) | |||
}, | |||
sendEventRemindersPush(value) { | |||
OCP.AppConfig.setValue('dav', 'sendEventRemindersPush', value ? 'yes' : 'no') | |||
}, |
@@ -34,6 +34,7 @@ use OCA\DAV\CalDAV\Reminder\INotificationProvider; | |||
use OCA\DAV\CalDAV\Reminder\NotificationProviderManager; | |||
use OCA\DAV\CalDAV\Reminder\ReminderService; | |||
use OCP\AppFramework\Utility\ITimeFactory; | |||
use OCP\IConfig; | |||
use OCP\IGroupManager; | |||
use OCP\IUser; | |||
use OCP\IUserManager; | |||
@@ -63,6 +64,9 @@ class ReminderServiceTest extends TestCase { | |||
/** @var ITimeFactory|\PHPUnit\Framework\MockObject\MockObject */ | |||
private $timeFactory; | |||
/** @var IConfig|\PHPUnit\Framework\MockObject\MockObject */ | |||
private $config; | |||
/** @var ReminderService */ | |||
private $reminderService; | |||
@@ -194,6 +198,7 @@ EOD; | |||
$this->groupManager = $this->createMock(IGroupManager::class); | |||
$this->caldavBackend = $this->createMock(CalDavBackend::class); | |||
$this->timeFactory = $this->createMock(ITimeFactory::class); | |||
$this->config = $this->createMock(IConfig::class); | |||
$this->caldavBackend->method('getShares')->willReturn([]); | |||
@@ -202,7 +207,8 @@ EOD; | |||
$this->userManager, | |||
$this->groupManager, | |||
$this->caldavBackend, | |||
$this->timeFactory); | |||
$this->timeFactory, | |||
$this->config); | |||
} | |||
public function testOnCalendarObjectDelete():void { |