site-accueil-insa/matomo/plugins/UsersManager/vue/src/PersonalSettings/PersonalSettings.vue

275 lines
6.3 KiB
Vue

<!--
Matomo - free/libre analytics platform
@link https://matomo.org
@license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
-->
<template>
<ContentBlock :content-title="title" :feature="'true'">
<form id="userSettingsTable" v-form>
<div>
<Field
uicontrol="text"
name="username"
:title="translate('General_Username')"
:disabled="true"
v-model="username"
:inline-help="translate('UsersManager_YourUsernameCannotBeChanged')"
/>
</div>
<div v-if="isUsersAdminEnabled">
<Field
uicontrol="text"
name="email"
:model-value="email"
@update:model-value="email = $event; doesRequirePasswordConfirmation = true"
:maxlength="100"
:title="translate('UsersManager_Email')"
/>
</div>
<div id="languageHelp" class="inline-help-node">
<a target="_blank" rel="noreferrer noopener" href="https://matomo.org/translations/">
{{ translate('LanguagesManager_AboutPiwikTranslations') }}</a>
</div>
<div>
<Field
uicontrol="select"
name="language"
v-model="language"
:title="translate('General_Language')"
:options="languageOptions"
inline-help="#languageHelp"
/>
</div>
<div>
<Field
uicontrol="select"
name="timeformat"
v-model="timeformat"
:title="translate('General_TimeFormat')"
:options="timeFormats"
/>
</div>
<div>
<Field
uicontrol="radio"
name="defaultReport"
v-model="theDefaultReport"
:introduction="translate('UsersManager_ReportToLoadByDefault')"
:title="translate('General_AllWebsitesDashboard')"
:options="defaultReportOptions"
/>
</div>
<div
class="sites_autocomplete"
>
<SiteSelector
v-model="site"
:show-selected-site="true"
:switch-site-on-select="false"
:show-all-sites-item="false"
:showselectedsite="true"
id="defaultReportSiteSelector"
/>
</div>
<div>
<Field
uicontrol="radio"
name="defaultDate"
v-model="theDefaultDate"
:introduction="translate('UsersManager_ReportDateToLoadByDefault')"
:options="availableDefaultDates"
/>
</div>
<SaveButton @confirm="save()" :saving="loading"/>
<PasswordConfirmation
v-model="showPasswordConfirmation"
@confirmed="doSave"
>
<h2>{{ translate('UsersManager_ConfirmWithPassword') }}</h2>
</PasswordConfirmation>
</form>
</ContentBlock>
</template>
<script lang="ts">
import { defineComponent } from 'vue';
import {
AjaxHelper,
ContentBlock,
SiteRef,
SiteSelector,
NotificationsStore,
translate,
Matomo,
} from 'CoreHome';
import {
SaveButton,
Field,
Form,
PasswordConfirmation,
} from 'CorePluginsAdmin';
interface PersonalSettingsState {
doesRequirePasswordConfirmation: boolean;
username: string;
email: string;
language: string;
timeformat: number;
theDefaultReport: string|number;
site: SiteRef;
theDefaultDate: string;
loading: boolean;
showPasswordConfirmation: boolean;
}
export default defineComponent({
props: {
isUsersAdminEnabled: {
type: Boolean,
required: true,
},
title: {
type: String,
required: true,
},
userLogin: {
type: String,
required: true,
},
userEmail: {
type: String,
required: true,
},
currentLanguageCode: {
type: String,
required: true,
},
languageOptions: {
type: Object,
required: true,
},
currentTimeformat: {
type: Number,
required: true,
},
timeFormats: {
type: Object,
required: true,
},
defaultReport: {
type: [String, Number],
required: true,
},
defaultReportOptions: {
type: Object,
required: true,
},
defaultReportIdSite: {
type: [String, Number],
required: true,
},
defaultReportSiteName: {
type: String,
required: true,
},
defaultDate: {
type: String,
required: true,
},
availableDefaultDates: {
type: Object,
required: true,
},
},
components: {
ContentBlock,
SaveButton,
Field,
SiteSelector,
PasswordConfirmation,
},
directives: {
Form,
},
data(): PersonalSettingsState {
return {
doesRequirePasswordConfirmation: false,
username: this.userLogin,
email: this.userEmail,
language: this.currentLanguageCode,
timeformat: this.currentTimeformat,
theDefaultReport: this.defaultReport,
site: {
id: this.defaultReportIdSite,
name: Matomo.helper.htmlDecode(this.defaultReportSiteName),
},
theDefaultDate: this.defaultDate,
loading: false,
showPasswordConfirmation: false,
};
},
methods: {
save() {
if (this.doesRequirePasswordConfirmation) {
this.showPasswordConfirmation = true;
return;
}
this.doSave();
},
doSave(password?: string) {
const postParams: QueryParameters = {
email: this.email,
defaultReport: this.theDefaultReport === 'MultiSites'
? this.theDefaultReport
: this.site.id,
defaultDate: this.theDefaultDate,
language: this.language,
timeformat: this.timeformat,
};
if (password) {
postParams.passwordConfirmation = password;
}
this.loading = true;
AjaxHelper.post(
{
module: 'UsersManager',
action: 'recordUserSettings',
format: 'json',
},
postParams,
{
withTokenInUrl: true,
},
).then(() => {
const id = NotificationsStore.show({
message: translate('CoreAdminHome_SettingsSaveSuccess'),
id: 'PersonalSettingsSuccess',
context: 'success',
type: 'transient',
});
NotificationsStore.scrollToNotification(id);
this.doesRequirePasswordConfirmation = false;
this.loading = false;
}).catch(() => {
this.loading = false;
});
},
},
});
</script>