extended license restrictions removed

This commit is contained in:
Čarodej
2022-08-05 15:24:06 +02:00
parent d1ecd33838
commit 7db1c7926f
23 changed files with 219 additions and 403 deletions

View File

@@ -1,6 +1,6 @@
APP_NAME=Laravel APP_NAME=Laravel
APP_ENV=local APP_ENV=local
APP_KEY=base64:O1wLTTsyz5AfTUJyILnDxLMiiiFaYXiwfajtBuFyWS0= APP_KEY=base64:loZzMlfoaLRn2ASLI94No42c7aUvmhXkoU/I2ljmxQI=
APP_DEBUG=true APP_DEBUG=true
APP_URL=http://localhost APP_URL=http://localhost
APP_DEMO=false APP_DEMO=false

View File

@@ -1,7 +1,7 @@
<?php <?php
return [ return [
'version' => '2.2.2', 'version' => '2.2.3',
'is_demo' => env('APP_DEMO', false), 'is_demo' => env('APP_DEMO', false),
@@ -78,5 +78,6 @@ return [
'2_2_0_13', '2_2_0_13',
'2_2_1', '2_2_1',
'2_2_2', '2_2_2',
'2_2_3',
], ],
]; ];

View File

@@ -1,76 +1,76 @@
{ {
"/js/main.js": "/js/main.js", "/js/main.js": "/js/main.js",
"/chunks/request.js": "/chunks/request.js?id=20ebb21e134700e4", "/chunks/request.js": "/chunks/request.js?id=22d937ec994df102",
"/chunks/request-upload.js": "/chunks/request-upload.js?id=f76b221beaf6440b", "/chunks/request-upload.js": "/chunks/request-upload.js?id=ec1b08db039dd789",
"/chunks/setup-wizard.js": "/chunks/setup-wizard.js?id=6122cca2fca4f02b", "/chunks/setup-wizard.js": "/chunks/setup-wizard.js?id=19a0784e59d768ec",
"/chunks/status-check.js": "/chunks/status-check.js?id=1f8c33af0e532582", "/chunks/status-check.js": "/chunks/status-check.js?id=37bc98acd7ead7fd",
"/chunks/purchase-code.js": "/chunks/purchase-code.js?id=ff951e86f15f71ae", "/chunks/purchase-code.js": "/chunks/purchase-code.js?id=e153c4e933c899fd",
"/chunks/database.js": "/chunks/database.js?id=15105175c99fcb46", "/chunks/database.js": "/chunks/database.js?id=b884b991d47c42cf",
"/chunks/environment.js": "/chunks/environment.js?id=12e7ceac54c77dd5", "/chunks/environment.js": "/chunks/environment.js?id=54c035b387c89b6f",
"/chunks/app-setup.js": "/chunks/app-setup.js?id=3b1c0f1bdedcc613", "/chunks/app-setup.js": "/chunks/app-setup.js?id=cfcb80c0e5d1af04",
"/chunks/admin-account.js": "/chunks/admin-account.js?id=049ae73dfc365a44", "/chunks/admin-account.js": "/chunks/admin-account.js?id=c04781f1fd5170cf",
"/chunks/shared.js": "/chunks/shared.js?id=6a301afc0e280d72", "/chunks/shared.js": "/chunks/shared.js?id=e9d2c2972b62138a",
"/chunks/shared/browser.js": "/chunks/shared/browser.js?id=2bacd8aa31df621f", "/chunks/shared/browser.js": "/chunks/shared/browser.js?id=bb36c28b1e2191a4",
"/chunks/shared/single-file.js": "/chunks/shared/single-file.js?id=e8d41e256380519c", "/chunks/shared/single-file.js": "/chunks/shared/single-file.js?id=90e78ba83c719591",
"/chunks/shared/authenticate.js": "/chunks/shared/authenticate.js?id=4d66b8a277a638a7", "/chunks/shared/authenticate.js": "/chunks/shared/authenticate.js?id=b0299d25bfaacea2",
"/chunks/not-found.js": "/chunks/not-found.js?id=901e26fdc77de6e0", "/chunks/not-found.js": "/chunks/not-found.js?id=945e89891ea3a0c8",
"/chunks/temporary-unavailable.js": "/chunks/temporary-unavailable.js?id=c3a4f158b971145f", "/chunks/temporary-unavailable.js": "/chunks/temporary-unavailable.js?id=4d46688b815d1165",
"/chunks/admin.js": "/chunks/admin.js?id=730ebd7488ed7ea1", "/chunks/admin.js": "/chunks/admin.js?id=e451fc09f0a8e0b3",
"/chunks/dashboard.js": "/chunks/dashboard.js?id=b8b0690a26f5dfe5", "/chunks/dashboard.js": "/chunks/dashboard.js?id=a3b22e7f5dab8989",
"/chunks/invoices.js": "/chunks/invoices.js?id=c40b8b7925003659", "/chunks/invoices.js": "/chunks/invoices.js?id=799928609f57ca10",
"/chunks/subscriptions.js": "/chunks/subscriptions.js?id=1d72d33f4d3e9355", "/chunks/subscriptions.js": "/chunks/subscriptions.js?id=9784c1597a5d7e57",
"/chunks/pages.js": "/chunks/pages.js?id=15ab720d05126115", "/chunks/pages.js": "/chunks/pages.js?id=bb5cc8327ca846a3",
"/chunks/page-edit.js": "/chunks/page-edit.js?id=651cd395d5a24dbc", "/chunks/page-edit.js": "/chunks/page-edit.js?id=0bdc8a5935fd2197",
"/chunks/plans.js": "/chunks/plans.js?id=89b35f8720666147", "/chunks/plans.js": "/chunks/plans.js?id=d4e39044c5fc0ad4",
"/chunks/users.js": "/chunks/users.js?id=a340a505a2329b33", "/chunks/users.js": "/chunks/users.js?id=b6629338e26b8313",
"/chunks/user-create.js": "/chunks/user-create.js?id=3c6fdff76fe051ab", "/chunks/user-create.js": "/chunks/user-create.js?id=40254ae98547761e",
"/chunks/plan-create/fixed.js": "/chunks/plan-create/fixed.js?id=73888464bb69d554", "/chunks/plan-create/fixed.js": "/chunks/plan-create/fixed.js?id=549867504d6e4e4e",
"/chunks/plan-create/metered.js": "/chunks/plan-create/metered.js?id=01ea01e6b79e1127", "/chunks/plan-create/metered.js": "/chunks/plan-create/metered.js?id=6ab9a127099b3293",
"/chunks/user.js": "/chunks/user.js?id=85aee36020612960", "/chunks/user.js": "/chunks/user.js?id=cf9a2a0d8c1fa1d9",
"/chunks/user-detail.js": "/chunks/user-detail.js?id=454ea88c61de9866", "/chunks/user-detail.js": "/chunks/user-detail.js?id=ff6c1fc63a372d96",
"/chunks/user-storage.js": "/chunks/user-storage.js?id=5bf9038a2328dc1d", "/chunks/user-storage.js": "/chunks/user-storage.js?id=0e26321285c15e1a",
"/chunks/user-subscription.js": "/chunks/user-subscription.js?id=d793e5bf87fe65a1", "/chunks/user-subscription.js": "/chunks/user-subscription.js?id=67993bd6abb6fa9c",
"/chunks/user-password.js": "/chunks/user-password.js?id=984b7a3e1c377303", "/chunks/user-password.js": "/chunks/user-password.js?id=900ae71c3d4199ea",
"/chunks/user-delete.js": "/chunks/user-delete.js?id=50314acbbfccabd1", "/chunks/user-delete.js": "/chunks/user-delete.js?id=c88872f2ff8c4df2",
"/chunks/plan.js": "/chunks/plan.js?id=4a082719fc5ce20a", "/chunks/plan.js": "/chunks/plan.js?id=3e7b0b34c2247e6c",
"/chunks/plan-subscribers.js": "/chunks/plan-subscribers.js?id=3f87f55441ea6acb", "/chunks/plan-subscribers.js": "/chunks/plan-subscribers.js?id=36d925def6a82cb2",
"/chunks/plan-settings.js": "/chunks/plan-settings.js?id=59aa29c4d81f665e", "/chunks/plan-settings.js": "/chunks/plan-settings.js?id=ee4100b0eff32f36",
"/chunks/plan-delete.js": "/chunks/plan-delete.js?id=627e6562f74ae332", "/chunks/plan-delete.js": "/chunks/plan-delete.js?id=630deb1fc4e17ed9",
"/chunks/payments.js": "/chunks/payments.js?id=22e84a36acc89129", "/chunks/payments.js": "/chunks/payments.js?id=d59a2a18b680d65c",
"/chunks/payments/billings.js": "/chunks/payments/billings.js?id=ced5adcb7cf4c6c9", "/chunks/payments/billings.js": "/chunks/payments/billings.js?id=27d6c1b58dbd1e6c",
"/chunks/payments/settings.js": "/chunks/payments/settings.js?id=218a17fe40922c5c", "/chunks/payments/settings.js": "/chunks/payments/settings.js?id=5ebb1c970a407198",
"/chunks/app-settings.js": "/chunks/app-settings.js?id=5de958be12ca920f", "/chunks/app-settings.js": "/chunks/app-settings.js?id=b0d1082fdcbbd17c",
"/chunks/app-appearance.js": "/chunks/app-appearance.js?id=6851c76bf345605f", "/chunks/app-appearance.js": "/chunks/app-appearance.js?id=8ba3feb2cc81a2c3",
"/chunks/app-index.js": "/chunks/app-index.js?id=f914fa6136ff18e1", "/chunks/app-index.js": "/chunks/app-index.js?id=db4ad4671280c74a",
"/chunks/app-environment.js": "/chunks/app-environment.js?id=037f1adeccd04620", "/chunks/app-environment.js": "/chunks/app-environment.js?id=e8c421cddbaa4851",
"/chunks/app-others.js": "/chunks/app-others.js?id=c0ccc32c1eee6162", "/chunks/app-others.js": "/chunks/app-others.js?id=ada6e9106c6019e0",
"/chunks/app-sign-in-out.js": "/chunks/app-sign-in-out.js?id=580f3b376cfc93e4", "/chunks/app-sign-in-out.js": "/chunks/app-sign-in-out.js?id=77ac953ce49b5b55",
"/chunks/app-adsense.js": "/chunks/app-adsense.js?id=304eefb5acbe5d93", "/chunks/app-adsense.js": "/chunks/app-adsense.js?id=cf62f3636ad85aab",
"/chunks/app-server.js": "/chunks/app-server.js?id=02bf261940010e9f", "/chunks/app-server.js": "/chunks/app-server.js?id=29dfec5388977be5",
"/chunks/app-language.js": "/chunks/app-language.js?id=33e69eb36f8578be", "/chunks/app-language.js": "/chunks/app-language.js?id=f5cfbac7969ddd9e",
"/chunks/homepage.js": "/chunks/homepage.js?id=612d0b10b26b580c", "/chunks/homepage.js": "/chunks/homepage.js?id=f3f4ec3a8469ede8",
"/chunks/dynamic-page.js": "/chunks/dynamic-page.js?id=13d00de1153769c5", "/chunks/dynamic-page.js": "/chunks/dynamic-page.js?id=9553d7a2912cb901",
"/chunks/contact-us.js": "/chunks/contact-us.js?id=5573693525bfcb27", "/chunks/contact-us.js": "/chunks/contact-us.js?id=f35cb6592fcd71c7",
"/chunks/demo.js": "/chunks/demo.js?id=aebe316fa638bbb5", "/chunks/demo.js": "/chunks/demo.js?id=7e21d033be8313af",
"/chunks/successfully-email-verified.js": "/chunks/successfully-email-verified.js?id=62ed454569571e25", "/chunks/successfully-email-verified.js": "/chunks/successfully-email-verified.js?id=e78db2b09e8f07ee",
"/chunks/successfully-email-send.js": "/chunks/successfully-email-send.js?id=d99d1e9adb974ae7", "/chunks/successfully-email-send.js": "/chunks/successfully-email-send.js?id=940d68f421576013",
"/chunks/sign-in.js": "/chunks/sign-in.js?id=6280ef0a858522c8", "/chunks/sign-in.js": "/chunks/sign-in.js?id=44800b83e3cc169c",
"/chunks/sign-up.js": "/chunks/sign-up.js?id=8ca080b244f1647f", "/chunks/sign-up.js": "/chunks/sign-up.js?id=913e87bca913f106",
"/chunks/forgotten-password.js": "/chunks/forgotten-password.js?id=b06174390d32669c", "/chunks/forgotten-password.js": "/chunks/forgotten-password.js?id=c1b4a00fb0061371",
"/chunks/create-new-password.js": "/chunks/create-new-password.js?id=3fe56e872c74d485", "/chunks/create-new-password.js": "/chunks/create-new-password.js?id=3ebf7212f7c549c8",
"/chunks/settings.js": "/chunks/settings.js?id=1e1cf11282e05e75", "/chunks/settings.js": "/chunks/settings.js?id=f2af0f3d8d336b03",
"/chunks/profile.js": "/chunks/profile.js?id=87ac69edc17d9245", "/chunks/profile.js": "/chunks/profile.js?id=3e24bb5e1f52d4bb",
"/chunks/settings-password.js": "/chunks/settings-password.js?id=6ee89249d080df79", "/chunks/settings-password.js": "/chunks/settings-password.js?id=1cf499fe8326b3c4",
"/chunks/settings-storage.js": "/chunks/settings-storage.js?id=a9e2543c5362e459", "/chunks/settings-storage.js": "/chunks/settings-storage.js?id=ecfee7f7e98204f8",
"/chunks/billing.js": "/chunks/billing.js?id=073f5b46e2ef61bf", "/chunks/billing.js": "/chunks/billing.js?id=f016e8454a346fc6",
"/chunks/platform.js": "/chunks/platform.js?id=76688d62f15361cc", "/chunks/platform.js": "/chunks/platform.js?id=b480b70c132c9260",
"/chunks/files.js": "/chunks/files.js?id=f55e9f88919e0925", "/chunks/files.js": "/chunks/files.js?id=8d14cc22bf819ba4",
"/chunks/recent-uploads.js": "/chunks/recent-uploads.js?id=847e1649fa88b1fc", "/chunks/recent-uploads.js": "/chunks/recent-uploads.js?id=0096eda68e467f70",
"/chunks/my-shared-items.js": "/chunks/my-shared-items.js?id=f36265974d8237cd", "/chunks/my-shared-items.js": "/chunks/my-shared-items.js?id=3c2f20fe42bd9099",
"/chunks/trash.js": "/chunks/trash.js?id=07d9deb9d1ff75b5", "/chunks/trash.js": "/chunks/trash.js?id=7e1bcf559eee02b9",
"/chunks/team-folders.js": "/chunks/team-folders.js?id=10215d85d3d37932", "/chunks/team-folders.js": "/chunks/team-folders.js?id=3a44cea9e32dd13c",
"/chunks/shared-with-me.js": "/chunks/shared-with-me.js?id=cfe08cfe150cd917", "/chunks/shared-with-me.js": "/chunks/shared-with-me.js?id=da2de82e20a002df",
"/chunks/invitation.js": "/chunks/invitation.js?id=dd7d9c7bb0f39eff", "/chunks/invitation.js": "/chunks/invitation.js?id=21b5bc5ac116c97e",
"/css/tailwind.css": "/css/tailwind.css", "/css/tailwind.css": "/css/tailwind.css",
"/css/app.css": "/css/app.css" "/css/app.css": "/css/app.css"
} }

View File

@@ -35,7 +35,7 @@
{{ data.app.license }} {{ data.app.license }}
</ColorLabel> </ColorLabel>
</a> </a>
<b v-if="data.app.license === 'extended'" class="mr-4 inline-block"> <b class="mr-4 inline-block">
<span class="text-sm font-bold"> {{ $t('subscription') }}: </span> <span class="text-sm font-bold"> {{ $t('subscription') }}: </span>
<ColorLabel color="purple"> <ColorLabel color="purple">
{{ config.subscriptionType }} {{ config.subscriptionType }}

View File

@@ -114,7 +114,7 @@
{{ $t(row.data.attributes.role) }} {{ $t(row.data.attributes.role) }}
</ColorLabel> </ColorLabel>
</td> </td>
<td class="px-3 md:px-1" v-if="config.isSaaS"> <td class="px-3 md:px-1" v-if="config.subscriptionType === 'fixed'">
<span class="text-sm font-bold"> <span class="text-sm font-bold">
{{ row.data.relationships.subscription ? $t('premium') : $t('free') }} {{ row.data.relationships.subscription ? $t('premium') : $t('free') }}
</span> </span>

View File

@@ -1,6 +1,22 @@
<template> <template>
<PageTab :is-loading="isLoading"> <PageTab :is-loading="isLoading">
<!-- Subscription -->
<div v-if="app" class="card shadow-card">
<FormLabel icon="credit-card">
{{ $t('subscription') }}
</FormLabel>
<AppInputText :description="$t('subscription_type_note')" :is-last="true" :title="$t('subscription_type')">
<SelectInput
:default="app.subscriptionType"
:options="subscriptionTypes"
:placeholder="$t('select_subscription_type')"
@change="subscriptionTypeChange"
/>
</AppInputText>
</div>
<div v-if="app" class="card shadow-card"> <div v-if="app" class="card shadow-card">
<FormLabel> <FormLabel>
{{ $t('upload_settings') }} {{ $t('upload_settings') }}
@@ -216,63 +232,6 @@
@input="$updateText('/admin/settings', 'google_analytics', app.googleAnalytics, true)" @input="$updateText('/admin/settings', 'google_analytics', app.googleAnalytics, true)"
/> />
</AppInputText> </AppInputText>
</div>
<!--Upgrade License-->
<div v-if="app && !config.isSaaS" class="card shadow-card">
<FormLabel icon="trending-up">
{{ $t('Upgrade your License') }}
</FormLabel>
<ValidationObserver
ref="upgradeLicense"
v-slot="{ invalid }"
class="mt-6"
tag="form"
@submit.prevent="upgradeLicense"
>
<ValidationProvider
v-slot="{ errors }"
mode="passive"
name="Purchase Code"
rules="required"
tag="div"
>
<AppInputText
:error="errors[0]"
:is-last="true"
>
<div class="space-y-4 sm:flex sm:space-x-4 sm:space-y-0">
<input
v-model="purchaseCode"
:class="{ '!border-rose-600': errors[0] }"
:placeholder="$t('Paste your Purchase code here...')"
class="focus-border-theme input-dark"
type="text"
/>
<ButtonBase :loading="isLoadingUpgradingButton" button-style="theme" class="w-full sm:w-auto" type="submit">
{{ $t('Upgrade') }}
</ButtonBase>
</div>
</AppInputText>
</ValidationProvider>
</ValidationObserver>
</div>
<!-- Subscription -->
<div v-if="app && config.isSaaS" class="card shadow-card">
<FormLabel icon="credit-card">
{{ $t('subscription') }}
</FormLabel>
<AppInputText :description="$t('subscription_type_note')" :is-last="true" :title="$t('subscription_type')">
<SelectInput
:default="app.subscriptionType"
:options="subscriptionTypes"
:placeholder="$t('select_subscription_type')"
@change="subscriptionTypeChange"
/>
</AppInputText>
</div> </div>
</PageTab> </PageTab>
</template> </template>
@@ -330,45 +289,6 @@ export default {
} }
}, },
methods: { methods: {
async upgradeLicense() {
this.isLoadingUpgradingButton = true
// Validate fields
const isValid = await this.$refs.upgradeLicense.validate()
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,
})
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
})
},
subscriptionTypeChange(type) { subscriptionTypeChange(type) {
events.$emit('confirm:open', { events.$emit('confirm:open', {
title: this.$t('subscription_type_change_warn'), title: this.$t('subscription_type_change_warn'),

View File

@@ -17,7 +17,7 @@
<MainFeatures /> <MainFeatures />
<!--Pricing Tables--> <!--Pricing Tables-->
<PricingTables v-if="config.isSaaS && config.subscriptionType === 'fixed'" /> <PricingTables v-if="config.subscriptionType === 'fixed'" />
<!--Get Started Call To Action--> <!--Get Started Call To Action-->
<GetStarted /> <GetStarted />

View File

@@ -194,7 +194,7 @@
</ValidationProvider> </ValidationProvider>
</div> </div>
<div v-if="isExtended" class="card text-left shadow-card"> <div class="card text-left shadow-card">
<FormLabel>Subscription</FormLabel> <FormLabel>Subscription</FormLabel>
<ValidationProvider <ValidationProvider
@@ -275,7 +275,6 @@ export default {
data() { data() {
return { return {
isLoading: false, isLoading: false,
isExtended: undefined,
app: { app: {
color: '#00BC7E', color: '#00BC7E',
subscriptionType: undefined, subscriptionType: undefined,
@@ -357,8 +356,6 @@ export default {
created() { created() {
this.$scrollTop() this.$scrollTop()
this.isExtended = localStorage.getItem('license') === 'Extended'
if (this.$root.$data.config.isSetupWizardDebug) { if (this.$root.$data.config.isSetupWizardDebug) {
this.app.subscriptionType = 'metered' this.app.subscriptionType = 'metered'
this.app.title = 'VueFileManager' this.app.title = 'VueFileManager'

View File

@@ -74,7 +74,6 @@
chunkSize: {{ $config->upload->chunkSize }}, chunkSize: {{ $config->upload->chunkSize }},
isAuthenticated: {{ $config->app->isAuthenticated }}, isAuthenticated: {{ $config->app->isAuthenticated }},
isSaaS: {{ $config->app->isSaaS }},
isDev: {{ $config->app->isDev }}, isDev: {{ $config->app->isDev }},
isDemo: {{ $config->app->isDemo }}, isDemo: {{ $config->app->isDemo }},

View File

@@ -68,5 +68,4 @@ Route::apiResource('/languages', LanguageController::class);
// Miscellaneous // Miscellaneous
Route::get('/status', GetServerStatusController::class); Route::get('/status', GetServerStatusController::class);
Route::post('/upgrade-license', UpgradeLicenseController::class);
Route::post('/test-websockets', TestWebsocketConnectionController::class); Route::post('/test-websockets', TestWebsocketConnectionController::class);

View File

@@ -25,7 +25,7 @@ class SetupDevEnvironment extends Command
/** /**
* The name and signature of the console command. * The name and signature of the console command.
*/ */
protected $signature = 'setup:dev {license=extended}'; protected $signature = 'setup:dev';
/** /**
* The console command description. * The console command description.
@@ -57,7 +57,7 @@ class SetupDevEnvironment extends Command
$this->info('Storing default settings and content...'); $this->info('Storing default settings and content...');
($this->seedDefaultPages)(); ($this->seedDefaultPages)();
($this->seedDefaultSettings)($this->argument('license')); ($this->seedDefaultSettings)();
($this->seedDefaultLanguage)(); ($this->seedDefaultLanguage)();
$this->store_default_settings(); $this->store_default_settings();
@@ -1476,7 +1476,7 @@ class SetupDevEnvironment extends Command
], ],
[ [
'name' => 'license', 'name' => 'license',
'value' => $this->argument('license'), 'value' => 'regular',
], ],
[ [
'name' => 'purchase_code', 'name' => 'purchase_code',
@@ -1555,6 +1555,18 @@ class SetupDevEnvironment extends Command
->each(function ($file) { ->each(function ($file) {
Storage::putFileAs('system', storage_path("demo/app/$file"), $file, 'private'); Storage::putFileAs('system', storage_path("demo/app/$file"), $file, 'private');
}); });
$choice = $this->choice('Choose subscription type', [
'metered' => 'Metered',
'fixed' => 'Fixed',
'none' => 'None',
]);
Setting::updateOrCreate([
'name' => 'subscription_type',
], [
'value' => $choice,
]);
} }
/** /**

View File

@@ -17,7 +17,7 @@ class SetupProdEnvironment extends Command
/** /**
* The name and signature of the console command. * The name and signature of the console command.
*/ */
protected $signature = 'setup:prod {license=extended}'; protected $signature = 'setup:prod';
/** /**
* The console command description. * The console command description.
@@ -55,7 +55,7 @@ class SetupProdEnvironment extends Command
$this->store_default_settings(); $this->store_default_settings();
($this->seedDefaultPages)(); ($this->seedDefaultPages)();
($this->seedDefaultSettings)($this->argument('license')); ($this->seedDefaultSettings)();
($this->seedDefaultLanguage)(); ($this->seedDefaultLanguage)();
$this->info('Creating default admin...'); $this->info('Creating default admin...');
@@ -155,7 +155,7 @@ class SetupProdEnvironment extends Command
], ],
[ [
'name' => 'license', 'name' => 'license',
'value' => $this->argument('license'), 'value' => 'regular',
], ],
[ [
'name' => 'purchase_code', 'name' => 'purchase_code',
@@ -204,19 +204,17 @@ class SetupProdEnvironment extends Command
]); ]);
}); });
if ($this->argument('license') === 'extended') { $choice = $this->choice('Choose subscription type', [
$choice = $this->choice('Choose subscription type', [ 'metered' => 'Metered',
'metered' => 'Metered', 'fixed' => 'Fixed',
'fixed' => 'Fixed', 'none' => 'None',
'none' => 'None', ]);
]);
Setting::updateOrCreate([ Setting::updateOrCreate([
'name' => 'subscription_type', 'name' => 'subscription_type',
], [ ], [
'value' => $choice, 'value' => $choice,
]); ]);
}
} }
/** /**

View File

@@ -6,7 +6,6 @@ use DB;
class SeedDefaultLanguageTranslationsAction class SeedDefaultLanguageTranslationsAction
{ {
public function __invoke( public function __invoke(
string $license,
string $locale string $locale
): void { ): void {
$translations = collect([ $translations = collect([

View File

@@ -21,23 +21,16 @@ class UpgradeLanguageTranslationsAction
$translations = LanguageTranslation::whereLang('en') $translations = LanguageTranslation::whereLang('en')
->get(); ->get();
$default_translations = [
'extended' => collect([
config('language-translations.extended'),
config('language-translations.regular'),
config('custom-language-translations'),
])->collapse(),
'regular' => collect([
config('language-translations.regular'),
config('custom-language-translations'),
])->collapse(),
];
$license = strtolower(get_settings('license'));
// Find new translations in default translations // Find new translations in default translations
$newbies = $default_translations[$license] $newbies = collect([
->diffKeys(map_language_translations($translations)); config('language-translations.extended'),
config('language-translations.regular'),
config('custom-language-translations'),
])
->collapse()
->diffKeys(
map_language_translations($translations)
);
// Store new translations for every language // Store new translations for every language
$locales->each(function ($locale) use ($newbies) { $locales->each(function ($locale) use ($newbies) {

View File

@@ -48,7 +48,6 @@ class Language extends Model
$language->id = Str::uuid(); $language->id = Str::uuid();
resolve(SeedDefaultLanguageTranslationsAction::class)( resolve(SeedDefaultLanguageTranslationsAction::class)(
license: get_settings('license') ?? 'extended',
locale: $language->locale locale: $language->locale
); );
}); });

View File

@@ -94,7 +94,6 @@ class GetConfigAction
'locale' => app()->getLocale(), 'locale' => app()->getLocale(),
'isDev' => is_dev() ? 1 : 0, 'isDev' => is_dev() ? 1 : 0,
'isDemo' => config('vuefilemanager.is_demo') ? 1 : 0, 'isDemo' => config('vuefilemanager.is_demo') ? 1 : 0,
'isSaaS' => $settings && optional($settings)->license === 'extended' ? 1 : 0,
'isAuthenticated' => $isUser ? 1 : 0, 'isAuthenticated' => $isUser ? 1 : 0,
'installation' => $setupStatus ?? 'initial', 'installation' => $setupStatus ?? 'initial',
'name' => $settings->app_title ?? 'VueFileManager', 'name' => $settings->app_title ?? 'VueFileManager',

View File

@@ -9,9 +9,8 @@ class SeedDefaultSettingsAction
/** /**
* Store default VueFileManager settings into database * Store default VueFileManager settings into database
*/ */
public function __invoke( public function __invoke(): void
string $license {
): void {
// Set default settings // Set default settings
collect( collect(
config('content.content') config('content.content')

View File

@@ -1,107 +0,0 @@
<?php
namespace Domain\Settings\Controllers;
use DB;
use Artisan;
use Illuminate\Http\JsonResponse;
use Domain\Settings\Models\Setting;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Http;
use Domain\Localization\Models\Language;
use Domain\Settings\Requests\UpgradeLicenseRequest;
class UpgradeLicenseController extends Controller
{
public function __invoke(
UpgradeLicenseRequest $request
): JsonResponse {
// Verify purchase code
$response = Http::get("https://verify.vuefilemanager.com/api/verify-code/{$request->input('purchaseCode')}");
if ($response->successful() && $response->body() === 'b6896a44017217c36f4a6fdc56699728') {
// Store default settings for extended version
collect([
[
'name' => 'license',
'value' => 'extended',
],
[
'name' => 'purchase_code',
'value' => $request->input('purchaseCode'),
],
[
'name' => 'section_pricing_content',
'value' => 1,
],
[
'name' => 'paypal_payment_description',
'value' => 'Available PayPal Credit, Debit or Credit Card.',
],
[
'name' => 'paystack_payment_description',
'value' => 'Available Bank Account, USSD, Mobile Money, Apple Pay.',
],
[
'name' => 'stripe_payment_description',
'value' => 'Available credit card or Apple Pay.',
],
[
'name' => 'allowed_registration_bonus',
'value' => 0,
],
[
'name' => 'registration_bonus_amount',
'value' => 0,
],
[
'name' => 'pricing_title',
'value' => 'Pick the <span class="text-theme">Best Plan</span> For Your Needs',
],
[
'name' => 'pricing_description',
'value' => 'Your private cloud storage software build on Laravel & Vue.js. No limits & no monthly fees. Truly freedom.',
],
])->each(function ($col) {
Setting::updateOrCreate([
'name' => $col['name'],
], [
'value' => $col['value'],
]);
});
// Seed translations for extended version
Language::all()
->each(function ($lang) {
$translations = collect(
config('language-translations.extended')
)
->map(fn ($value, $key) => [
'lang' => $lang->locale,
'value' => $value,
'key' => $key,
])->toArray();
$chunks = array_chunk($translations, 100);
foreach ($chunks as $chunk) {
DB::table('language_translations')
->insert($chunk);
}
});
// Clear config and cache
Artisan::call('config:clear');
Artisan::call('cache:clear');
return response()->json([
'status' => 'success',
'message' => 'Your license was successfully upgraded',
], 201);
}
return response()->json([
'status' => 'error',
'message' => 'Purchase code is invalid or is not Extended License.',
], 400);
}
}

View File

@@ -80,7 +80,7 @@ class CreateAdminAccountController extends Controller
// Set up application // Set up application
($this->seedDefaultPages)(); ($this->seedDefaultPages)();
($this->seedDefaultSettingsAction)($request->input('license')); ($this->seedDefaultSettingsAction)();
($this->seedDefaultLanguage)(); ($this->seedDefaultLanguage)();
return response('Registration was successful', 204); return response('Registration was successful', 204);

View File

@@ -57,19 +57,13 @@ class UpdateSystemAction extends UpgradingVersionsController
private function shouldUpdateTranslations(): bool private function shouldUpdateTranslations(): bool
{ {
$default_translations = [ $default_translations = collect([
'extended' => collect([ config('language-translations.extended'),
config('language-translations.extended'), config('language-translations.regular'),
config('language-translations.regular'), config('custom-language-translations'),
config('custom-language-translations'), ])->collapse();
])->collapse(),
'regular' => collect([
config('language-translations.regular'),
config('custom-language-translations'),
])->collapse(),
];
$originalTranslationCount = count($default_translations[get_settings('license')]); $originalTranslationCount = count($default_translations);
$activeTranslationsCount = DB::table('language_translations') $activeTranslationsCount = DB::table('language_translations')
->where('lang', 'en') ->where('lang', 'en')

View File

@@ -3,6 +3,8 @@ namespace Support\Upgrading\Controllers;
use DB; use DB;
use Artisan; use Artisan;
use Domain\Localization\Models\Language;
use Domain\Settings\Models\Setting;
use Storage; use Storage;
use App\Users\Models\User; use App\Users\Models\User;
use Illuminate\Support\Arr; use Illuminate\Support\Arr;
@@ -22,6 +24,80 @@ class UpgradingVersionsController
) { ) {
} }
public function upgrade_to_2_2_3(): void
{
($this->upgradeDatabase)();
// Apply only for regular licenses
if (get_settings('license') === 'regular') {
// Store default settings for extended version
collect([
[
'name' => 'section_pricing_content',
'value' => 1,
],
[
'name' => 'paypal_payment_description',
'value' => 'Available PayPal Credit, Debit or Credit Card.',
],
[
'name' => 'paystack_payment_description',
'value' => 'Available Bank Account, USSD, Mobile Money, Apple Pay.',
],
[
'name' => 'stripe_payment_description',
'value' => 'Available credit card or Apple Pay.',
],
[
'name' => 'allowed_registration_bonus',
'value' => 0,
],
[
'name' => 'registration_bonus_amount',
'value' => 0,
],
[
'name' => 'pricing_title',
'value' => 'Pick the <span class="text-theme">Best Plan</span> For Your Needs',
],
[
'name' => 'pricing_description',
'value' => 'Your private cloud storage software build on Laravel & Vue.js. No limits & no monthly fees. Truly freedom.',
],
])->each(function ($col) {
Setting::updateOrCreate([
'name' => $col['name'],
], [
'value' => $col['value'],
]);
});
// Seed translations for extended version
Language::all()
->each(function ($lang) {
$translations = collect(
config('language-translations.extended')
)
->map(fn ($value, $key) => [
'lang' => $lang->locale,
'value' => $value,
'key' => $key,
])->toArray();
$chunks = array_chunk($translations, 100);
foreach ($chunks as $chunk) {
DB::table('language_translations')
->insert($chunk);
}
});
// Clear config and cache
Artisan::call('config:clear');
Artisan::call('cache:clear');
}
}
public function upgrade_to_2_2_2(): void public function upgrade_to_2_2_2(): void
{ {
($this->upgradeDatabase)(); ($this->upgradeDatabase)();

View File

@@ -21,7 +21,7 @@ class HomepageTest extends TestCase
{ {
resolve(SeedDefaultPagesAction::class)(); resolve(SeedDefaultPagesAction::class)();
resolve(SeedDefaultSettingsAction::class)('Extended'); resolve(SeedDefaultSettingsAction::class)();
Setting::create([ Setting::create([
'name' => 'setup_wizard_success', 'name' => 'setup_wizard_success',

View File

@@ -6,9 +6,7 @@ use Tests\TestCase;
use App\Users\Models\User; use App\Users\Models\User;
use Illuminate\Http\UploadedFile; use Illuminate\Http\UploadedFile;
use Domain\Settings\Models\Setting; use Domain\Settings\Models\Setting;
use Illuminate\Support\Facades\Http;
use Domain\Settings\Actions\SeedDefaultSettingsAction; use Domain\Settings\Actions\SeedDefaultSettingsAction;
use Domain\Localization\Actions\SeedDefaultLanguageAction;
class SettingsTest extends TestCase class SettingsTest extends TestCase
{ {
@@ -40,7 +38,7 @@ class SettingsTest extends TestCase
*/ */
public function it_get_admin_settings() public function it_get_admin_settings()
{ {
resolve(SeedDefaultSettingsAction::class)('Extended'); resolve(SeedDefaultSettingsAction::class)();
$admin = User::factory() $admin = User::factory()
->create(['role' => 'admin']); ->create(['role' => 'admin']);
@@ -74,7 +72,7 @@ class SettingsTest extends TestCase
*/ */
public function it_update_settings() public function it_update_settings()
{ {
resolve(SeedDefaultSettingsAction::class)('Extended'); resolve(SeedDefaultSettingsAction::class)();
$admin = User::factory() $admin = User::factory()
->create(['role' => 'admin']); ->create(['role' => 'admin']);
@@ -243,64 +241,4 @@ class SettingsTest extends TestCase
'host' => null, 'host' => null,
])->assertStatus(200); ])->assertStatus(200);
} }
/**
* @test
*/
public function it_upgrade_license()
{
Http::fake([
'https://verify.vuefilemanager.com/api/verify-code/*' => Http::response('b6896a44017217c36f4a6fdc56699728'),
]);
collect([
[
'name' => 'license',
'value' => 'regular',
],
[
'name' => 'purchase_code',
'value' => '22b28b36-6d84-41b2-a920-a884b2bf63b6',
],
])->each(function ($col) {
Setting::updateOrCreate([
'name' => $col['name'],
], [
'value' => $col['value'],
]);
});
resolve(SeedDefaultLanguageAction::class)();
$admin = User::factory()
->create(['role' => 'admin']);
$this
->actingAs($admin)
->postJson('/api/admin/upgrade-license', [
'purchaseCode' => '6ab28b36-6d84-41b2-a920-a884b2bf63b6',
])->assertStatus(201);
collect([
[
'name' => 'license',
'value' => 'extended',
],
[
'name' => 'purchase_code',
'value' => '6ab28b36-6d84-41b2-a920-a884b2bf63b6',
],
])->each(function ($col) {
$this->assertDatabaseHas('settings', [
'name' => $col['name'],
'value' => $col['value'],
]);
});
$this->assertDatabaseHas('language_translations', [
'key' => 'go_to_subscription',
'value' => 'Go to Subscription',
'lang' => 'en',
]);
}
} }