Merge branch 'master' into toaster

This commit is contained in:
Moriz Wahl 2021-06-14 13:57:21 +02:00
commit 3949b5ec36
9 changed files with 259 additions and 119 deletions

View File

@ -152,10 +152,7 @@ class AppRequestsController extends AppController
if($result !== true) {
return $this->returnJson($result);
}
$required_fields = $this->checkAndCopyRequiredFields(['target_date'], $params, $data);
if($required_fields !== true) {
return $this->returnJson($required_fields);
}
if(!isset($params['memo']) || strlen($params['memo']) < 5 || strlen($params['memo']) > 150) {
return $this->returnJson(['state' => 'error', 'msg' => 'memo is not set or not in expected range [5;150]']);
}

View File

@ -120,12 +120,12 @@ const loginAPI = {
}
return apiPost(CONFIG.LOGIN_API_URL + 'updateUserInfos', payload)
},
changeUsernameProfile: async (sessionId, email, usernameNew) => {
changeUsernameProfile: async (sessionId, email, username) => {
const payload = {
session_id: sessionId,
email,
update: {
'User.usernameNew': usernameNew,
'User.username': username,
},
}
return apiPost(CONFIG.LOGIN_API_URL + 'updateUserInfos', payload)

View File

@ -2,6 +2,7 @@
<div>
<side-bar @logout="logout" :balance="balance" :pending="pending">
<template slot="links">
<p></p>
<sidebar-item
:link="{
name: $t('send'),

View File

@ -17,7 +17,6 @@
:email="transactionData.email"
:amount="transactionData.amount"
:memo="transactionData.memo"
:date="transactionData.target_date"
:loading="loading"
@send-transaction="sendTransaction"
@on-reset="onReset"
@ -54,7 +53,6 @@ const EMPTY_TRANSACTION_DATA = {
email: '',
amount: 0,
memo: '',
target_date: '',
}
export default {
@ -96,7 +94,6 @@ export default {
},
methods: {
setTransaction(data) {
data.target_date = new Date(Date.now()).toISOString()
this.transactionData = data
this.currentTransactionStep = 1
},

View File

@ -16,10 +16,6 @@
{{ memo ? memo : '-' }}
<b-badge variant="primary" pill>{{ $t('form.message') }}</b-badge>
</b-list-group-item>
<b-list-group-item class="d-flex justify-content-between align-items-center">
{{ $d($moment(date), 'long') }}
<b-badge variant="primary" pill>{{ $t('form.date') }}</b-badge>
</b-list-group-item>
</b-list-group>
</b-col>
</b-row>
@ -42,7 +38,6 @@ export default {
email: { type: String, default: '' },
amount: { type: Number, default: 0 },
memo: { type: String, default: '' },
date: { type: String, default: '' },
loading: { type: Boolean, default: false },
},
}

View File

@ -0,0 +1,23 @@
import { shallowMount } from '@vue/test-utils'
import UserProfile from './UserProfile'
const localVue = global.localVue
describe('UserProfile', () => {
let wrapper
const Wrapper = () => {
return shallowMount(UserProfile, { localVue })
}
describe('shallowMount', () => {
beforeEach(() => {
wrapper = Wrapper()
})
it('renders the component', () => {
expect(wrapper.findComponent({ name: 'user-card' }).exists()).toBeTruthy()
})
})
})

View File

@ -6,31 +6,36 @@
style="background-color: #ebebeba3 !important"
>
<b-container>
<b-row class="mb-4 text-right">
<b-col class="text-right">
<a href="#userdata_form" v-if="editUserdata" @click="editUserdata = !editUserdata">
<span>{{ $t('form.edit') }}</span>
</a>
<div v-else>
<a href="#userdata_form" @click="onSubmit">
<span class="mr-4 text-success display-4">{{ $t('form.save') }}</span>
</a>
<a href="#userdata_form" @click="editUserdata = !editUserdata">
<span>
<b>{{ $t('form.cancel') }}</b>
</span>
</a>
</div>
<b-row class="text-right">
<b-col class="mb-3">
<b-icon
v-if="editUserdata"
@click="editUserdata = !editUserdata"
class="pointer"
icon="pencil"
>
{{ $t('form.change') }}
</b-icon>
<b-icon
v-else
@click="editUserdata = !editUserdata"
class="pointer"
icon="x-circle"
variant="danger"
></b-icon>
</b-col>
</b-row>
</b-container>
<div>
<b-container>
<b-form @keyup.prevent="loadSubmitButton">
<b-row class="mb-3">
<b-col class="col-lg-3 col-md-12 col-sm-12 text-md-left text-lg-right">
<small>{{ $t('form.firstname') }}</small>
</b-col>
<b-col v-if="editUserdata" class="col-md-9 col-sm-10">
{{ form.firstName }}
<b-col v-if="editUserdata" class="col-sm-10 col-md-9">
{{ $store.state.firstName }}
</b-col>
<b-col v-else class="col-md-9 col-sm-10">
<b-input type="text" v-model="form.firstName"></b-input>
@ -40,8 +45,8 @@
<b-col class="col-lg-3 col-md-12 col-sm-12 text-md-left text-lg-right">
<small>{{ $t('form.lastname') }}</small>
</b-col>
<b-col v-if="editUserdata" class="col-md-9 col-sm-10">
{{ form.lastName }}
<b-col v-if="editUserdata" class="col-sm-10 col-md-9">
{{ $store.state.lastName }}
</b-col>
<b-col v-else class="col-md-9 col-sm-10">
<b-input type="text" v-model="form.lastName"></b-input>
@ -51,14 +56,30 @@
<b-col class="col-lg-3 col-md-10 col-sm-10 text-md-left text-lg-right">
<small>{{ $t('form.description') }}</small>
</b-col>
<b-col v-if="editUserdata" class="col-md-9 col-sm-10">
{{ form.description }}
<b-col v-if="editUserdata" class="col-sm-10 col-md-9">
{{ $store.state.description }}
</b-col>
<b-col v-else class="col-md-9 col-sm-10">
<b-col v-else class="col-sm-10 col-md-9">
<b-textarea rows="3" max-rows="6" v-model="form.description"></b-textarea>
</b-col>
</b-row>
</div>
<b-row class="text-right" v-if="!editUserdata">
<b-col>
<div class="text-right" ref="submitButton">
<b-button
variant="info"
@click="onSubmit"
type="submit"
class="mt-4"
:disabled="loading"
>
{{ $t('form.save') }}
</b-button>
</div>
</b-col>
</b-row>
</b-form>
</b-container>
</b-card>
</div>
@ -80,9 +101,21 @@ export default {
lastName: this.$store.state.lastName,
description: this.$store.state.description,
},
loading: true,
}
},
methods: {
loadSubmitButton() {
if (
this.form.firstName !== this.$store.state.firstName ||
this.form.lastName !== this.$store.state.lastName ||
this.form.description !== this.$store.state.description
) {
this.loading = false
} else {
this.loading = true
}
},
async onSubmit() {
const result = await loginAPI.updateUserInfos(
this.$store.state.sessionId,
@ -98,6 +131,7 @@ export default {
this.$store.commit('lastName', this.form.lastName)
this.$store.commit('description', this.form.description)
this.editUserdata = true
alert('Deine Daten wurden gespeichert und sind geändert.')
} else {
alert(result.result.message)
}

View File

@ -1,62 +1,105 @@
<template>
<b-card id="change_pwd" class="bg-transparent" style="background-color: #ebebeba3 !important">
<b-container>
<b-row class="mb-4 text-right">
<b-col class="text-right">
<a href="#change_pwd" v-if="edit_pwd" @click="edit_pwd = !edit_pwd">
<span>{{ $t('form.password') }} {{ $t('form.change') }}</span>
</a>
<div v-else>
<a href="#change_pwd" @click="onSubmit">
<span class="mr-4 text-success display-4">{{ $t('form.save') }}</span>
<b-form @keyup.prevent="loadSubmitButton">
<b-row class="mb-4 text-right">
<b-col class="text-right">
<a href="#change_pwd" v-if="edit_pwd" @click="edit_pwd = !edit_pwd">
<span>{{ $t('form.password') }} {{ $t('form.change') }}</span>
<b-icon class="pointer ml-3" icon="pencil" />
</a>
<a href="#change_pwd" @click="edit_pwd = !edit_pwd">
<span>
<b>{{ $t('form.cancel') }}</b>
</span>
</a>
</div>
</b-col>
</b-row>
<div v-if="!edit_pwd">
<b-row class="mb-3">
<b-col class="col-lg-3 col-md-10 col-sm-10 text-md-left text-lg-right">
<small>{{ $t('form.password_old') }}</small>
</b-col>
<b-col class="col-md-9 col-sm-10">
<b-input
type="text"
:placeholder="$t('form.password_old')"
v-model="password"
></b-input>
<b-icon
v-else
@click="edit_pwd = !edit_pwd"
class="pointer"
icon="x-circle"
variant="danger"
></b-icon>
</b-col>
</b-row>
<b-row class="mb-3">
<b-col class="col-lg-3 col-md-10 col-sm-10 text-md-left text-lg-right">
<small>{{ $t('form.password_new') }}</small>
</b-col>
<b-col class="col-md-9 col-sm-10">
<b-input
type="text"
:placeholder="$t('form.password_new')"
v-model="passwordNew"
></b-input>
</b-col>
</b-row>
<b-row class="mb-3">
<b-col class="col-lg-3 col-md-10 col-sm-10 text-md-left text-lg-right">
<small>{{ $t('form.password_new_repeat') }}</small>
</b-col>
<b-col class="col-md-9 col-sm-10">
<b-input
type="text"
:placeholder="$t('form.password_new_repeat')"
v-model="passwordNew2"
></b-input>
</b-col>
</b-row>
</div>
<div v-if="!edit_pwd">
<b-row class="mb-3">
<b-col class="col-lg-3 col-md-10 col-sm-10 text-md-left text-lg-right">
<small>{{ $t('form.password_old') }}</small>
</b-col>
<b-col class="col-md-9 col-sm-10">
<b-input-group>
<b-form-input
class="mb-0"
v-model="password"
name="Password"
:type="passwordVisibleOldPwd ? 'text' : 'password'"
prepend-icon="ni ni-lock-circle-open"
:placeholder="$t('form.password_old')"
></b-form-input>
<b-input-group-append>
<b-button variant="outline-primary" @click="togglePasswordVisibilityOldPwd">
<b-icon :icon="passwordVisibleOldPwd ? 'eye' : 'eye-slash'" />
</b-button>
</b-input-group-append>
</b-input-group>
</b-col>
</b-row>
<b-row class="mb-3">
<b-col class="col-lg-3 col-md-10 col-sm-10 text-md-left text-lg-right">
<small>{{ $t('form.password_new') }}</small>
</b-col>
<b-col class="col-md-9 col-sm-10">
<b-input-group>
<b-form-input
class="mb-0"
v-model="passwordNew"
name="Password"
:type="passwordVisibleNewPwd ? 'text' : 'password'"
prepend-icon="ni ni-lock-circle-open"
:placeholder="$t('form.password_new')"
></b-form-input>
<b-input-group-append>
<b-button variant="outline-primary" @click="togglePasswordVisibilityNewPwd">
<b-icon :icon="passwordVisibleNewPwd ? 'eye' : 'eye-slash'" />
</b-button>
</b-input-group-append>
</b-input-group>
</b-col>
</b-row>
<b-row class="mb-3">
<b-col class="col-lg-3 col-md-10 col-sm-10 text-md-left text-lg-right">
<small>{{ $t('form.password_new_repeat') }}</small>
</b-col>
<b-col class="col-md-9 col-sm-10">
<b-input-group>
<b-form-input
class="mb-0"
v-model="passwordNewRepeat"
name="Password"
:type="passwordVisibleNewPwdRepeat ? 'text' : 'password'"
prepend-icon="ni ni-lock-circle-open"
:placeholder="$t('form.password_new_repeat')"
></b-form-input>
<b-input-group-append>
<b-button variant="outline-primary" @click="togglePasswordVisibilityNewPwdRepeat">
<b-icon :icon="passwordVisibleNewPwdRepeat ? 'eye' : 'eye-slash'" />
</b-button>
</b-input-group-append>
</b-input-group>
</b-col>
</b-row>
<b-row class="text-right" v-if="!edit_pwd">
<b-col>
<div class="text-right" ref="submitButton">
<b-button variant="info" @click="onSubmit" class="mt-4">
{{ $t('form.save') }}
</b-button>
</div>
</b-col>
</b-row>
</div>
</b-form>
</b-container>
</b-card>
</template>
@ -71,10 +114,30 @@ export default {
email: null,
password: '',
passwordNew: '',
passwordNew2: '',
passwordNewRepeat: '',
passwordVisibleOldPwd: false,
passwordVisibleNewPwd: false,
passwordVisibleNewPwdRepeat: false,
loading: true,
}
},
methods: {
togglePasswordVisibilityNewPwd() {
this.passwordVisibleNewPwd = !this.passwordVisibleNewPwd
},
togglePasswordVisibilityNewPwdRepeat() {
this.passwordVisibleNewPwdRepeat = !this.passwordVisibleNewPwdRepeat
},
togglePasswordVisibilityOldPwd() {
this.passwordVisibleOldPwd = !this.passwordVisibleOldPwd
},
loadSubmitButton() {
if (this.passwordVisibleNewPwd === this.passwordVisibleNewPwdRepeat) {
this.loading = false
} else {
this.loading = true
}
},
async onSubmit() {
// console.log(this.data)
const result = await loginAPI.changePasswordProfile(

View File

@ -1,42 +1,61 @@
<template>
<b-card id="formusername" class="bg-transparent" style="background-color: #ebebeba3 !important">
<b-container>
<b-row class="mb-4 text-right">
<b-col class="text-right">
<a href="#formusername" v-if="edit_username" @click="edit_username = !edit_username">
<span>{{ $t('form.username') }} {{ $t('form.change') }}</span>
</a>
<div v-else>
<a href="#formusername" @click="edit_username = !edit_username">
<span>
<b>{{ $t('form.cancel') }}</b>
</span>
</a>
</div>
<b-row class="text-right">
<b-col class="mb-3">
<b-icon
v-if="editUsername"
@click="editUsername = !editUsername"
class="pointer"
icon="pencil"
>
{{ $t('form.change') }}
</b-icon>
<b-icon
v-else
@click="editUsername = !editUsername"
class="pointer"
icon="x-circle"
variant="danger"
></b-icon>
</b-col>
</b-row>
</b-container>
<b-container v-if="editUsername">
<b-row class="mb-3">
<b-col class="col-lg-3 col-md-10 col-sm-10 text-md-left text-lg-right">
<small>{{ $t('form.username') }}</small>
</b-col>
<b-col v-if="edit_username" class="col-md-9 col-sm-10">@{{ $store.state.username }}</b-col>
<b-col v-else class="col-md-9 col-sm-10">
<validation-observer v-slot="{ handleSubmit }" ref="formValidator">
<b-form role="form" @submit.prevent="handleSubmit(onSubmit)">
<b-form-input v-model="username" :placeholder="$store.state.username"></b-form-input>
<b-col class="col-md-9 col-sm-10">@{{ username }}</b-col>
</b-row>
</b-container>
<b-container v-else>
<b-row class="mb-3">
<b-col class="col-lg-3 col-md-10 col-sm-10 text-md-left text-lg-right">
<small>{{ $t('form.username') }}</small>
</b-col>
<b-col class="col-md-9 col-sm-10">
<validation-observer ref="formValidator">
<b-form role="form">
<b-form-input v-model="form.username" :placeholder="username"></b-form-input>
<div>
{{ $t('form.change_username_info') }}
</div>
<div class="text-center" ref="submitButton">
<b-button type="submit" class="mt-4">
{{ $t('form.save') }}
</b-button>
</div>
</b-form>
</validation-observer>
</b-col>
</b-row>
<b-row class="text-right">
<b-col>
<div class="text-right" ref="submitButton">
<b-button variant="info" @click="onSubmit" class="mt-4">
{{ $t('form.save') }}
</b-button>
</div>
</b-col>
</b-row>
</b-container>
</b-card>
</template>
@ -47,16 +66,27 @@ export default {
name: 'FormUsername',
data() {
return {
edit_username: true,
username: '',
editUsername: true,
username: this.$store.state.username,
form: {
username: this.$store.state.username,
},
}
},
props: {
UserProfileTestData: { type: Object },
},
methods: {
async onSubmit() {
// console.log(this.data)
const result = await loginAPI.changeUsernameProfile(this.username)
const result = await loginAPI.changeUsernameProfile(
this.$store.state.sessionId,
this.$store.state.email,
this.form.username,
)
if (result.success) {
alert('changeUsername success')
this.$store.commit('username', this.form.username)
this.editUserdata = this.editUsername = !this.editUsername
alert('Dein Username wurde geändert.')
} else {
alert(result.result.message)
}