From 4f7f4d74db0464b255eeedd4890b0604540e1e60 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Tue, 24 May 2022 15:49:34 +0200 Subject: [PATCH] Add UI to opt-in on the status automation Signed-off-by: Joas Schilling --- .../dav/lib/Settings/AvailabilitySettings.php | 25 ++++++++++ apps/dav/src/service/PreferenceService.js | 50 +++++++++++++++++++ apps/dav/src/views/Availability.vue | 17 +++++++ dist/dav-settings-personal-availability.js | 4 +- ...tings-personal-availability.js.LICENSE.txt | 21 ++++++++ .../dav-settings-personal-availability.js.map | 2 +- 6 files changed, 116 insertions(+), 3 deletions(-) create mode 100644 apps/dav/src/service/PreferenceService.js diff --git a/apps/dav/lib/Settings/AvailabilitySettings.php b/apps/dav/lib/Settings/AvailabilitySettings.php index 9a163e21edb..2bafdfab9d7 100644 --- a/apps/dav/lib/Settings/AvailabilitySettings.php +++ b/apps/dav/lib/Settings/AvailabilitySettings.php @@ -27,10 +27,35 @@ namespace OCA\DAV\Settings; use OCA\DAV\AppInfo\Application; use OCP\AppFramework\Http\TemplateResponse; +use OCP\AppFramework\Services\IInitialState; +use OCP\IConfig; +use OCP\IUserSession; use OCP\Settings\ISettings; class AvailabilitySettings implements ISettings { + protected IUserSession $userSession; + protected IConfig $config; + protected IInitialState $initialState; + + public function __construct(IUserSession $userSession, + IConfig $config, + IInitialState $initialState) { + $this->userSession = $userSession; + $this->config = $config; + $this->initialState = $initialState; + } + public function getForm(): TemplateResponse { + $this->initialState->provideInitialState( + 'user_status_automation', + $this->config->getUserValue( + $this->userSession->getUser()->getUID(), + 'dav', + 'user_status_automation', + 'no' + ) + ); + return new TemplateResponse(Application::APP_ID, 'settings-personal-availability'); } diff --git a/apps/dav/src/service/PreferenceService.js b/apps/dav/src/service/PreferenceService.js new file mode 100644 index 00000000000..6b8d29029b5 --- /dev/null +++ b/apps/dav/src/service/PreferenceService.js @@ -0,0 +1,50 @@ +/** + * @copyright 2022 Joas Schilling + * + * @author Joas Schilling + * + * @license AGPL-3.0-or-later + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +import axios from '@nextcloud/axios' +import { generateOcsUrl } from '@nextcloud/router' + +/** + * Enable user status automation based on availability + */ +export async function enableUserStatusAutomation() { + return await axios.post( + generateOcsUrl('/apps/provisioning_api/api/v1/config/users/{appId}/{configKey}', { + appId: 'dav', + configKey: 'user_status_automation', + }), + { + configValue: 'yes', + } + ) +} + +/** + * Disable user status automation based on availability + */ +export async function disableUserStatusAutomation() { + return await axios.delete( + generateOcsUrl('/apps/provisioning_api/api/v1/config/users/{appId}/{configKey}', { + appId: 'dav', + configKey: 'user_status_automation', + }) + ) +} diff --git a/apps/dav/src/views/Availability.vue b/apps/dav/src/views/Availability.vue index f3b3ec34bd2..0441f5e9dc7 100644 --- a/apps/dav/src/views/Availability.vue +++ b/apps/dav/src/views/Availability.vue @@ -24,6 +24,10 @@ :l10n-saturday="$t('dav', 'Saturday')" :l10n-sunday="$t('dav', 'Sunday')" /> + + {{ $t('dav', 'Automatically set user status to "Do not distrub" outside of visibility to mute all notifications.') }} + +