mirror of
https://github.com/nextcloud/server.git
synced 2026-06-12 18:21:40 -04:00
Fix #31303: Make reminder notification behaviour selectable.
Signed-off-by: Daniel Teichmann <daniel.teichmann@das-netzwerkteam.de>
This commit is contained in:
parent
84ae0703a3
commit
73a7ced1fd
7 changed files with 57 additions and 7 deletions
|
|
@ -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 {
|
||||
|
|
|
|||
4
dist/dav-settings-admin-caldav.js
vendored
4
dist/dav-settings-admin-caldav.js
vendored
File diff suppressed because one or more lines are too long
2
dist/dav-settings-admin-caldav.js.map
vendored
2
dist/dav-settings-admin-caldav.js.map
vendored
File diff suppressed because one or more lines are too long
Loading…
Reference in a new issue