summaryrefslogtreecommitdiffstats
path: root/apps/dav
diff options
context:
space:
mode:
authorJoas Schilling <coding@schilljs.com>2022-05-24 15:49:34 +0200
committerJoas Schilling <coding@schilljs.com>2022-07-01 12:33:07 +0200
commit4f7f4d74db0464b255eeedd4890b0604540e1e60 (patch)
treec1ea3cc60c8353c0aaed100733adf5b01611956b /apps/dav
parent5dee54d70bcd207c9b96a4cf6bb58f82fe9fbba9 (diff)
downloadnextcloud-server-4f7f4d74db0464b255eeedd4890b0604540e1e60.tar.gz
nextcloud-server-4f7f4d74db0464b255eeedd4890b0604540e1e60.zip
Add UI to opt-in on the status automation
Signed-off-by: Joas Schilling <coding@schilljs.com>
Diffstat (limited to 'apps/dav')
-rw-r--r--apps/dav/lib/Settings/AvailabilitySettings.php25
-rw-r--r--apps/dav/src/service/PreferenceService.js50
-rw-r--r--apps/dav/src/views/Availability.vue17
3 files changed, 92 insertions, 0 deletions
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 <coding@schilljs.com>
+ *
+ * @author Joas Schilling <coding@schilljs.com>
+ *
+ * @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 <http://www.gnu.org/licenses/>.
+ */
+
+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')" />
+ <CheckboxRadioSwitch :checked.sync="automated">
+ {{ $t('dav', 'Automatically set user status to "Do not distrub" outside of visibility to mute all notifications.') }}
+ </CheckboxRadioSwitch>
+
<Button :disabled="loading || saving"
type="primary"
@click="save">
@@ -34,6 +38,7 @@
<script>
import { CalendarAvailability } from '@nextcloud/calendar-availability-vue'
+import { loadState } from '@nextcloud/initial-state'
import {
showError,
showSuccess,
@@ -43,8 +48,13 @@ import {
getEmptySlots,
saveScheduleInboxAvailability,
} from '../service/CalendarService'
+import {
+ enableUserStatusAutomation,
+ disableUserStatusAutomation,
+} from '../service/PreferenceService'
import jstz from 'jstimezonedetect'
import Button from '@nextcloud/vue/dist/Components/Button'
+import CheckboxRadioSwitch from '@nextcloud/vue/dist/Components/CheckboxRadioSwitch'
import SettingsSection from '@nextcloud/vue/dist/Components/SettingsSection'
import TimezonePicker from '@nextcloud/vue/dist/Components/TimezonePicker'
@@ -52,6 +62,7 @@ export default {
name: 'Availability',
components: {
Button,
+ CheckboxRadioSwitch,
CalendarAvailability,
SettingsSection,
TimezonePicker,
@@ -66,6 +77,7 @@ export default {
saving: false,
timezone: defaultTimezoneId,
slots: getEmptySlots(),
+ automated: loadState('dav', 'user_status_automation') === 'yes',
}
},
async mounted() {
@@ -96,6 +108,11 @@ export default {
this.saving = true
await saveScheduleInboxAvailability(this.slots, this.timezone)
+ if (this.automated) {
+ await enableUserStatusAutomation()
+ } else {
+ await disableUserStatusAutomation()
+ }
showSuccess(t('dav', 'Saved availability'))
} catch (e) {