commit: a636e5340426f8c9b40811bd01c8710f438a2cf2
parent 44bddf6cd2ebe636ef58855949128d37244f04a7
Author: Shpuld Shpuldson <shp@cock.li>
Date: Mon, 15 Feb 2021 11:10:09 +0200
add reason field when approval is required
Diffstat:
4 files changed, 33 insertions(+), 4 deletions(-)
diff --git a/src/boot/after_store.js b/src/boot/after_store.js
@@ -51,6 +51,7 @@ const getInstanceConfig = async ({ store }) => {
const vapidPublicKey = data.pleroma.vapid_public_key
store.dispatch('setInstanceOption', { name: 'textlimit', value: textlimit })
+ store.dispatch('setInstanceOption', { name: 'accountApprovalRequired', value: data.approval_required })
if (vapidPublicKey) {
store.dispatch('setInstanceOption', { name: 'vapidPublicKey', value: vapidPublicKey })
diff --git a/src/components/registration/registration.js b/src/components/registration/registration.js
@@ -10,7 +10,8 @@ const registration = {
fullname: '',
username: '',
password: '',
- confirm: ''
+ confirm: '',
+ reason: ''
},
captcha: {}
}),
@@ -24,7 +25,8 @@ const registration = {
confirm: {
required,
sameAsPassword: sameAs('password')
- }
+ },
+ reason: { required: requiredIf(() => this.accountApprovalRequired) }
}
}
},
@@ -38,7 +40,10 @@ const registration = {
computed: {
token () { return this.$route.params.token },
bioPlaceholder () {
- return this.$t('registration.bio_placeholder').replace(/\s*\n\s*/g, ' \n')
+ return this.replaceNewlines(this.$t('registration.bio_placeholder'))
+ },
+ reasonPlaceholder () {
+ return this.replaceNewlines(this.$t('registration.reason_placeholder'))
},
...mapState({
registrationOpen: (state) => state.instance.registrationOpen,
@@ -46,7 +51,8 @@ const registration = {
isPending: (state) => state.users.signUpPending,
serverValidationErrors: (state) => state.users.signUpErrors,
termsOfService: (state) => state.instance.tos,
- accountActivationRequired: (state) => state.instance.accountActivationRequired
+ accountActivationRequired: (state) => state.instance.accountActivationRequired,
+ accountApprovalRequired: (state) => state.instance.accountApprovalRequired
})
},
methods: {
@@ -73,6 +79,9 @@ const registration = {
},
setCaptcha () {
this.getCaptcha().then(cpt => { this.captcha = cpt })
+ },
+ replaceNewlines (str) {
+ return str.replace(/\s*\n\s*/g, ' \n')
}
}
}
diff --git a/src/components/registration/registration.vue b/src/components/registration/registration.vue
@@ -163,6 +163,23 @@
</div>
<div
+ v-if="accountApprovalRequired"
+ class="form-group"
+ >
+ <label
+ class="form--label"
+ for="reason"
+ >{{ $t('registration.reason') }}</label>
+ <textarea
+ id="reason"
+ v-model="user.reason"
+ :disabled="isPending"
+ class="form-control"
+ :placeholder="reasonPlaceholder"
+ />
+ </div>
+
+ <div
v-if="captcha.type != 'none'"
id="captcha-group"
class="form-group"
diff --git a/src/i18n/en.json b/src/i18n/en.json
@@ -228,6 +228,8 @@
"username_placeholder": "e.g. lain",
"fullname_placeholder": "e.g. Lain Iwakura",
"bio_placeholder": "e.g.\nHi, I'm Lain.\nI’m an anime girl living in suburban Japan. You may know me from the Wired.",
+ "reason": "Reason to register",
+ "reason_placeholder": "This instance approves registrations manually.\nLet the administration know why you want to register.",
"validations": {
"username_required": "cannot be left blank",
"fullname_required": "cannot be left blank",