Added new app settings shortcuts findable by spotlight - Application, Login & Registration, Appearance, Adsense, Homepage, Environment, Server

This commit is contained in:
Čarodej
2022-04-05 08:05:32 +02:00
parent d386f70be8
commit 9f783fcd95
5 changed files with 154 additions and 95 deletions

View File

@@ -1,6 +1,7 @@
## Version 2.0.14
#### Release date: 5. April 2022
- Added option to set default max team members for new user registrations
- Added new app settings shortcuts findable by spotlight - Application, Login & Registration, Appearance, Adsense, Homepage, Environment, Server
## Version 2.0.13
#### Release date: 4. April 2022

View File

@@ -849,7 +849,7 @@ return [
'add_member' => 'Add Member',
'go_to_dashboard' => 'Go To Dashboard',
'go_to_settings' => 'Go To Settings',
'go_to_payments' => 'Go To Payments',
'go_to_payments' => 'Payments / Settings',
'go_to_pages' => 'Go To Pages',
'go_to_languages' => 'Go To Languages',
'show_all_plans' => 'Show all Plans',
@@ -929,5 +929,14 @@ return [
'upload_request_default_folder' => 'Upload Request from :timestamp',
'copy_direct_download_link' => 'Copy Direct Download Link',
'direct_link_copied' => 'Your direct download link was copied',
'application_settings' => 'Application / Settings',
'login_registration_settings' => 'Login & Registration / Settings',
'appearance_settings' => 'Appearance / Settings',
'adsense_settings' => 'Adsense / Settings',
'homepage_settings' => 'Homepage / Settings',
'environment_settings' => 'Environment / Settings',
'server_settings' => 'Server / Settings',
'user_features' => 'User Features',
'upload_settings' => 'Upload Settings',
],
];

View File

@@ -1,6 +1,6 @@
{
"/js/main.js": "/js/main.js",
"/chunks/request.js": "/chunks/request.js?id=e7060a440fcd8d12",
"/chunks/request.js": "/chunks/request.js?id=fb2de02956f152b5",
"/chunks/request-upload.js": "/chunks/request-upload.js?id=5b03d20350ef4737",
"/chunks/setup-wizard.js": "/chunks/setup-wizard.js?id=19a0784e59d768ec",
"/chunks/status-check.js": "/chunks/status-check.js?id=87d72b50e83864bb",
@@ -9,13 +9,13 @@
"/chunks/environment.js": "/chunks/environment.js?id=ab5382f4452a258a",
"/chunks/app-setup.js": "/chunks/app-setup.js?id=15938ff1ad2d6ed2",
"/chunks/admin-account.js": "/chunks/admin-account.js?id=916450217130f3b8",
"/chunks/shared.js": "/chunks/shared.js?id=d988ff3a8c3443dd",
"/chunks/shared.js": "/chunks/shared.js?id=ac88d110f7427ebf",
"/chunks/shared/browser.js": "/chunks/shared/browser.js?id=d718abdaf5edb271",
"/chunks/shared/single-file.js": "/chunks/shared/single-file.js?id=1487950970833eda",
"/chunks/shared/authenticate.js": "/chunks/shared/authenticate.js?id=672e931a9fb0b672",
"/chunks/not-found.js": "/chunks/not-found.js?id=9f6ce23ce5d969f1",
"/chunks/temporary-unavailable.js": "/chunks/temporary-unavailable.js?id=f564565faa09d6d6",
"/chunks/admin.js": "/chunks/admin.js?id=88646f72ae64fc9c",
"/chunks/admin.js": "/chunks/admin.js?id=8032540fddb832c5",
"/chunks/dashboard.js": "/chunks/dashboard.js?id=fd1d266e493a79a8",
"/chunks/invoices.js": "/chunks/invoices.js?id=1416cbf6d1a593ac",
"/chunks/subscriptions.js": "/chunks/subscriptions.js?id=5bf6704f5b599f36",
@@ -43,7 +43,7 @@
"/chunks/app-appearance.js": "/chunks/app-appearance.js?id=a694a01f3641712c",
"/chunks/app-index.js": "/chunks/app-index.js?id=efdbfa062749ca00",
"/chunks/app-environment.js": "/chunks/app-environment.js?id=e73ab59f2d81adb0",
"/chunks/app-others.js": "/chunks/app-others.js?id=4593855ee48a3b94",
"/chunks/app-others.js": "/chunks/app-others.js?id=abb8d96cd7c3a576",
"/chunks/app-sign-in-out.js": "/chunks/app-sign-in-out.js?id=1cfffc99465b9a7a",
"/chunks/app-adsense.js": "/chunks/app-adsense.js?id=a5dc9e715f8561bd",
"/chunks/app-server.js": "/chunks/app-server.js?id=2554ff5c24994949",
@@ -57,12 +57,12 @@
"/chunks/sign-up.js": "/chunks/sign-up.js?id=bb92bad614e60d45",
"/chunks/forgotten-password.js": "/chunks/forgotten-password.js?id=50a1bc5e4ed86ec9",
"/chunks/create-new-password.js": "/chunks/create-new-password.js?id=f652de052dba55c1",
"/chunks/settings.js": "/chunks/settings.js?id=ec9eeb1e963303db",
"/chunks/settings.js": "/chunks/settings.js?id=71119613323ea819",
"/chunks/profile.js": "/chunks/profile.js?id=0eca231475e267ab",
"/chunks/settings-password.js": "/chunks/settings-password.js?id=11d4331650cac280",
"/chunks/settings-storage.js": "/chunks/settings-storage.js?id=994b669a56fd417b",
"/chunks/billing.js": "/chunks/billing.js?id=40e758c87bcf6e89",
"/chunks/platform.js": "/chunks/platform.js?id=a4e3656f8b9c5eed",
"/chunks/platform.js": "/chunks/platform.js?id=490c3586a4dca9fb",
"/chunks/files.js": "/chunks/files.js?id=133be06adc673d83",
"/chunks/recent-uploads.js": "/chunks/recent-uploads.js?id=9d3391857f9c3503",
"/chunks/my-shared-items.js": "/chunks/my-shared-items.js?id=53d2c6a72b895d68",

View File

@@ -95,7 +95,7 @@
}"
>
<settings-icon
v-if="['AppOthers', 'Profile', 'Password'].includes(result.action.value)"
v-if="['AppOthers', 'Profile', 'Password', 'AppServer', 'AppAppearance', 'AppIndex', 'AppEnvironment', 'AppOthers', 'AppSignInUp', 'AppAdsense'].includes(result.action.value)"
size="18"
class="vue-feather text-theme"
/>
@@ -432,6 +432,55 @@ export default {
value: 'Invoices',
},
},
{
title: this.$t('application_settings'),
action: {
type: 'route',
value: 'AppOthers',
},
},
{
title: this.$t('login_registration_settings'),
action: {
type: 'route',
value: 'AppSignInUp',
},
},
{
title: this.$t('appearance_settings'),
action: {
type: 'route',
value: 'AppAppearance',
},
},
{
title: this.$t('adsense_settings'),
action: {
type: 'route',
value: 'AppAdsense',
},
},
{
title: this.$t('homepage_settings'),
action: {
type: 'route',
value: 'AppIndex',
},
},
{
title: this.$t('environment_settings'),
action: {
type: 'route',
value: 'AppEnvironment',
},
},
{
title: this.$t('server_settings'),
action: {
type: 'route',
value: 'AppServer',
},
},
]
let fileLocations = [

View File

@@ -3,51 +3,51 @@
<div v-if="app" class="card shadow-card">
<FormLabel>
{{ $t('Upload Settings') }}
{{ $t('upload_settings') }}
</FormLabel>
<AppInputText
:title="$t('admin_settings.others.upload_limit')"
:description="$t('admin_settings.others.upload_limit_help')"
:title="$t('admin_settings.others.upload_limit')"
>
<input
@input="$updateText('/admin/settings', 'upload_limit', app.uploadLimit, true)"
v-model="app.uploadLimit"
:placeholder="$t('admin_settings.others.upload_limit_plac')"
type="number"
class="focus-border-theme input-dark"
min="0"
step="1"
class="focus-border-theme input-dark"
type="number"
@input="$updateText('/admin/settings', 'upload_limit', app.uploadLimit, true)"
/>
</AppInputText>
<AppInputText
:title="$t('File Chunk Size (in MB)')"
:description="$t('When you upload file on the server, your file will be sliced into many chunks in this size. Small size of the chunk can prevent many limits you can suffer from your server or provider. Default value is 64MB if is not set.')"
:title="$t('File Chunk Size (in MB)')"
>
<input
@input="$updateText('/admin/settings', 'chunk_size', app.chunkSize, true)"
v-model="app.chunkSize"
:placeholder="$t('Type the chunk size in MB')"
type="number"
class="focus-border-theme input-dark"
min="0"
step="1"
class="focus-border-theme input-dark"
type="number"
@input="$updateText('/admin/settings', 'chunk_size', app.chunkSize, true)"
/>
</AppInputText>
<AppInputText
:title="$t('admin_settings.others.mimetypes_blacklist')"
:description="$t('admin_settings.others.mimetypes_blacklist_help')"
:is-last="true"
:title="$t('admin_settings.others.mimetypes_blacklist')"
>
<textarea
rows="2"
@input="$updateText('/admin/settings', 'mimetypes_blacklist', app.mimetypesBlacklist, true)"
v-model="app.mimetypesBlacklist"
:placeholder="$t('admin_settings.others.mimetypes_blacklist_plac')"
type="text"
class="focus-border-theme input-dark"
rows="2"
type="text"
@input="$updateText('/admin/settings', 'mimetypes_blacklist', app.mimetypesBlacklist, true)"
/>
</AppInputText>
</div>
@@ -55,45 +55,45 @@
<!--Store & Upload-->
<div v-if="app" class="card shadow-card">
<FormLabel>
{{ $t('User Features') }}
{{ $t('user_features') }}
</FormLabel>
<!--Available only when is not metered billing-->
<div v-if="config.subscriptionType !== 'metered'">
<AppInputSwitch
:title="$t('admin_settings.others.storage_limit')"
:description="$t('admin_settings.others.storage_limit_help')"
:title="$t('admin_settings.others.storage_limit')"
>
<SwitchInput
@input="$updateText('/admin/settings', 'storage_limitation', app.storageLimitation)"
v-model="app.storageLimitation"
:state="app.storageLimitation"
class="switch"
@input="$updateText('/admin/settings', 'storage_limitation', app.storageLimitation)"
/>
</AppInputSwitch>
<AppInputText v-if="app.storageLimitation" :title="$t('admin_settings.others.default_storage')">
<input
@input="$updateText('/admin/settings', 'default_max_storage_amount', app.defaultStorage)"
v-model="app.defaultStorage"
min="1"
max="999999999"
:placeholder="$t('admin_settings.others.default_storage_plac')"
type="number"
class="focus-border-theme input-dark"
max="999999999"
min="1"
type="number"
@input="$updateText('/admin/settings', 'default_max_storage_amount', app.defaultStorage)"
/>
</AppInputText>
</div>
<AppInputText :title="$t('max_team_members')" :description="$t('zero_for_unlimited_members')" :is-last="true">
<AppInputText :description="$t('zero_for_unlimited_members')" :is-last="true" :title="$t('max_team_members')">
<input
@input="$updateText('/admin/settings', 'default_max_team_member', app.teamsDefaultMembers)"
v-model="app.teamsDefaultMembers"
min="1"
max="999999999"
:placeholder="$t('admin_settings.others.default_storage_plac')"
type="number"
class="focus-border-theme input-dark"
max="999999999"
min="1"
type="number"
@input="$updateText('/admin/settings', 'default_max_team_member', app.teamsDefaultMembers)"
/>
</AppInputText>
</div>
@@ -105,61 +105,61 @@
</FormLabel>
<AppInputSwitch
:title="$t('allow_recaptcha')"
:description="$t('allow_recaptcha_note')"
:is-last="!recaptcha.allowedService"
:title="$t('allow_recaptcha')"
>
<SwitchInput
@input="$updateText('/admin/settings', 'allowed_recaptcha', recaptcha.allowedService)"
v-model="recaptcha.allowedService"
class="switch"
:state="recaptcha.allowedService"
class="switch"
@input="$updateText('/admin/settings', 'allowed_recaptcha', recaptcha.allowedService)"
/>
</AppInputSwitch>
<div
v-if="config.isRecaptchaConfigured && recaptcha.allowedService"
@click="recaptcha.isVisibleCredentialsForm = !recaptcha.isVisibleCredentialsForm"
class="flex cursor-pointer items-center"
:class="{ 'mb-4': recaptcha.isVisibleCredentialsForm }"
class="flex cursor-pointer items-center"
@click="recaptcha.isVisibleCredentialsForm = !recaptcha.isVisibleCredentialsForm"
>
<edit2-icon size="12" class="vue-feather text-theme mr-2" />
<edit2-icon class="vue-feather text-theme mr-2" size="12" />
<b class="text-xs">{{ $t('update_your_credentials') }}</b>
</div>
<!--Set up recaptcha credentials-->
<ValidationObserver
v-if="(!config.isRecaptchaConfigured || recaptcha.isVisibleCredentialsForm) && recaptcha.allowedService"
@submit.prevent="storeCredentials('recaptcha')"
ref="credentialsForm"
v-slot="{ invalid }"
tag="form"
class="rounded-xl p-5 shadow-lg"
tag="form"
@submit.prevent="storeCredentials('recaptcha')"
>
<FormLabel v-if="!config.isRecaptchaConfigured" icon="shield">
{{ $t('configure_your_credentials') }}
</FormLabel>
<ValidationProvider tag="div" mode="passive" name="Site Key" rules="required" v-slot="{ errors }">
<AppInputText :title="$t('Site Key')" :error="errors[0]">
<ValidationProvider v-slot="{ errors }" mode="passive" name="Site Key" rules="required" tag="div">
<AppInputText :error="errors[0]" :title="$t('Site Key')">
<input
v-model="recaptcha.credentials.client_id"
:placeholder="$t('Paste your Site Key here')"
type="text"
:class="{ '!border-rose-600': errors[0] }"
:placeholder="$t('Paste your Site Key here')"
class="focus-border-theme input-dark"
type="text"
/>
</AppInputText>
</ValidationProvider>
<ValidationProvider tag="div" mode="passive" name="Secret key" rules="required" v-slot="{ errors }">
<AppInputText :title="$t('Secret Key')" :error="errors[0]">
<ValidationProvider v-slot="{ errors }" mode="passive" name="Secret key" rules="required" tag="div">
<AppInputText :error="errors[0]" :title="$t('Secret Key')">
<input
v-model="recaptcha.credentials.client_secret"
:placeholder="$t('Paste your Secret key here')"
type="text"
:class="{ '!border-rose-600': errors[0] }"
:placeholder="$t('Paste your Secret key here')"
class="focus-border-theme input-dark"
type="text"
/>
</AppInputText>
</ValidationProvider>
@@ -168,8 +168,8 @@
:disabled="isLoading"
:loading="isLoading"
button-style="theme"
type="submit"
class="w-full"
type="submit"
>
{{ $t('store_credentials') }}
</ButtonBase>
@@ -183,15 +183,15 @@
</FormLabel>
<AppInputButton
:title="$t('cache')"
:description="$t('cache_note')"
:title="$t('cache')"
>
<ButtonBase
@click.native="flushCache"
:loading="isFlushingCache"
:disabled="isFlushingCache"
class="w-full sm:w-auto"
:loading="isFlushingCache"
button-style="theme"
class="w-full sm:w-auto"
@click.native="flushCache"
>
{{ $t('clear_cache') }}
</ButtonBase>
@@ -199,21 +199,21 @@
<AppInputText :title="$t('admin_settings.others.contact_email')">
<input
class="focus-border-theme input-dark"
@input="$updateText('/admin/settings', 'contact_email', app.contactMail)"
v-model="app.contactMail"
:placeholder="$t('admin_settings.others.contact_email_plac')"
class="focus-border-theme input-dark"
type="email"
@input="$updateText('/admin/settings', 'contact_email', app.contactMail)"
/>
</AppInputText>
<AppInputText :title="$t('admin_settings.others.google_analytics')" :is-last="true">
<AppInputText :is-last="true" :title="$t('admin_settings.others.google_analytics')">
<input
@input="$updateText('/admin/settings', 'google_analytics', app.googleAnalytics, true)"
v-model="app.googleAnalytics"
:placeholder="$t('admin_settings.others.google_analytics_plac')"
type="text"
class="focus-border-theme input-dark"
type="text"
@input="$updateText('/admin/settings', 'google_analytics', app.googleAnalytics, true)"
/>
</AppInputText>
</div>
@@ -226,17 +226,17 @@
<ValidationObserver
ref="upgradeLicense"
@submit.prevent="upgradeLicense"
v-slot="{ invalid }"
tag="form"
class="mt-6"
tag="form"
@submit.prevent="upgradeLicense"
>
<ValidationProvider
tag="div"
v-slot="{ errors }"
mode="passive"
name="Purchase Code"
rules="required"
tag="div"
>
<AppInputText
:error="errors[0]"
@@ -245,12 +245,12 @@
<div class="space-y-4 sm:flex sm:space-x-4 sm:space-y-0">
<input
v-model="purchaseCode"
:placeholder="$t('Paste your Purchase code here...')"
type="text"
class="focus-border-theme input-dark"
:class="{ '!border-rose-600': errors[0] }"
:placeholder="$t('Paste your Purchase code here...')"
class="focus-border-theme input-dark"
type="text"
/>
<ButtonBase type="submit" button-style="theme" :loading="isLoadingUpgradingButton" class="w-full sm:w-auto">
<ButtonBase :loading="isLoadingUpgradingButton" button-style="theme" class="w-full sm:w-auto" type="submit">
{{ $t('Upgrade') }}
</ButtonBase>
</div>
@@ -265,12 +265,12 @@
{{ $t('subscription') }}
</FormLabel>
<AppInputText :title="$t('subscription_type')" :description="$t('subscription_type_note')" :is-last="true">
<AppInputText :description="$t('subscription_type_note')" :is-last="true" :title="$t('subscription_type')">
<SelectInput
@change="subscriptionTypeChange"
:default="app.subscriptionType"
:options="subscriptionTypes"
:placeholder="$t('select_subscription_type')"
@change="subscriptionTypeChange"
/>
</AppInputText>
</div>
@@ -338,36 +338,36 @@ export default {
if (!isValid) return
axios.post('/api/admin/upgrade-license', {
purchaseCode: this.purchaseCode
})
.then((response) => {
this.$store.dispatch('getLanguageTranslations', this.config.locale)
this.$store.commit('REPLACE_CONFIG_VALUE', {
key: 'isSaaS',
value: true,
purchaseCode: this.purchaseCode
})
.then((response) => {
this.$store.dispatch('getLanguageTranslations', this.config.locale)
events.$emit('toaster', {
type: 'success',
message: this.$t('Your license was successfully upgraded'),
this.$store.commit('REPLACE_CONFIG_VALUE', {
key: 'isSaaS',
value: true,
})
events.$emit('toaster', {
type: 'success',
message: this.$t('Your license was successfully upgraded'),
})
})
.catch((error) => {
if (error.response.status === 400) {
events.$emit('alert:open', {
title: this.$t('Purchase code is invalid or is not Extended License'),
})
} else {
events.$emit('alert:open', {
title: this.$t('popup_error.title'),
message: this.$t('popup_error.message'),
})
}
})
.finally(() => {
this.isLoadingUpgradingButton = false
})
})
.catch((error) => {
if (error.response.status === 400) {
events.$emit('alert:open', {
title: this.$t('Purchase code is invalid or is not Extended License'),
})
} else {
events.$emit('alert:open', {
title: this.$t('popup_error.title'),
message: this.$t('popup_error.message'),
})
}
})
.finally(() => {
this.isLoadingUpgradingButton = false
})
},
subscriptionTypeChange(type) {
events.$emit('confirm:open', {