mirror of
https://github.com/nextcloud/server.git
synced 2026-06-11 09:42:09 -04:00
Merge pull request #31337 from D0n1elT/fix/issue-31303_irritating-event-reminder-behaviour
Fix #31303: Make reminder notification behaviour selectable..
This commit is contained in:
commit
47dce35fa3
10 changed files with 99 additions and 9 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'),
|
||||
}
|
||||
},
|
||||
|
|
|
|||
|
|
@ -45,6 +45,7 @@ describe('CalDavSettings', () => {
|
|||
sendInvitations: true,
|
||||
generateBirthdayCalendar: true,
|
||||
sendEventReminders: true,
|
||||
sendEventRemindersToSharedGroupMembers: true,
|
||||
sendEventRemindersPush: true,
|
||||
}
|
||||
},
|
||||
|
|
@ -66,6 +67,10 @@ describe('CalDavSettings', () => {
|
|||
'Send notifications for events'
|
||||
)
|
||||
expect(sendEventReminders).toBeChecked()
|
||||
const sendEventRemindersToSharedGroupMembers = TLUtils.getByLabelText(
|
||||
'Send reminder notifications to calendar sharees as well'
|
||||
)
|
||||
expect(sendEventRemindersToSharedGroupMembers).toBeChecked()
|
||||
const sendEventRemindersPush = TLUtils.getByLabelText(
|
||||
'Enable notifications for events via push'
|
||||
)
|
||||
|
|
@ -107,7 +112,10 @@ describe('CalDavSettings', () => {
|
|||
'sendEventReminders',
|
||||
'no'
|
||||
)
|
||||
|
||||
expect(sendEventRemindersToSharedGroupMembers).toBeDisabled()
|
||||
expect(sendEventRemindersPush).toBeDisabled()
|
||||
|
||||
OCP.AppConfig.setValue.mockClear()
|
||||
await userEvent.click(sendEventReminders)
|
||||
expect(sendEventReminders).toBeChecked()
|
||||
|
|
@ -116,6 +124,8 @@ describe('CalDavSettings', () => {
|
|||
'sendEventReminders',
|
||||
'yes'
|
||||
)
|
||||
|
||||
expect(sendEventRemindersToSharedGroupMembers).toBeEnabled()
|
||||
expect(sendEventRemindersPush).toBeEnabled()
|
||||
})
|
||||
})
|
||||
|
|
|
|||
|
|
@ -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')
|
||||
},
|
||||
|
|
|
|||
|
|
@ -126,7 +126,35 @@ exports[`CalDavSettings interactions 1`] = `
|
|||
</em>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<p
|
||||
class="indented"
|
||||
>
|
||||
<input
|
||||
class="checkbox"
|
||||
id="caldavSendEventRemindersToSharedGroupMembers"
|
||||
type="checkbox"
|
||||
/>
|
||||
|
||||
<label
|
||||
for="caldavSendEventRemindersToSharedGroupMembers"
|
||||
>
|
||||
|
||||
Send reminder notifications to calendar sharees as well
|
||||
|
||||
</label>
|
||||
|
||||
<br />
|
||||
|
||||
<em>
|
||||
|
||||
Reminders are always sent to organizers and attendees.
|
||||
|
||||
</em>
|
||||
</p>
|
||||
|
||||
<p
|
||||
class="indented"
|
||||
>
|
||||
<input
|
||||
class="checkbox"
|
||||
id="caldavSendEventRemindersPush"
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -62,9 +62,10 @@ class CalDAVSettingsTest extends TestCase {
|
|||
['dav', 'sendInvitations', 'yes'],
|
||||
['dav', 'generateBirthdayCalendar', 'yes'],
|
||||
['dav', 'sendEventReminders', 'yes'],
|
||||
['dav', 'sendEventRemindersToSharedGroupMembers', 'yes'],
|
||||
['dav', 'sendEventRemindersPush', 'no'],
|
||||
)
|
||||
->will($this->onConsecutiveCalls('yes', 'no', 'yes', 'yes'));
|
||||
->will($this->onConsecutiveCalls('yes', 'no', 'yes', 'yes', 'yes'));
|
||||
$this->urlGenerator
|
||||
->expects($this->once())
|
||||
->method('linkToDocs')
|
||||
|
|
@ -76,6 +77,7 @@ class CalDAVSettingsTest extends TestCase {
|
|||
['sendInvitations', true],
|
||||
['generateBirthdayCalendar', false],
|
||||
['sendEventReminders', true],
|
||||
['sendEventRemindersToSharedGroupMembers', true],
|
||||
['sendEventRemindersPush', true],
|
||||
);
|
||||
$result = $this->settings->getForm();
|
||||
|
|
|
|||
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