mirror of
https://github.com/VueFileManager/vuefilemanager.git
synced 2026-04-05 18:23:48 +00:00
v1.7 beta.3
This commit is contained in:
@@ -64,10 +64,10 @@ class AppFunctionsController extends Controller
|
||||
}
|
||||
|
||||
// Get settings
|
||||
$setup_wizard_success = Setting::where('name', 'setup_wizard_success')->first();
|
||||
$upgraded = Setting::where('name', 'latest_upgrade')->first();
|
||||
|
||||
// Get connection string
|
||||
if (! $setup_wizard_success) {
|
||||
if ($upgraded && $upgraded->value !== '1.7') {
|
||||
$connection = 'quiet-update';
|
||||
} else {
|
||||
$connection = $this->get_setup_status();
|
||||
|
||||
@@ -10,6 +10,7 @@ use App\Http\Requests\SetupWizard\StoreEnvironmentSetupRequest;
|
||||
use App\Http\Requests\SetupWizard\StoreStripeBillingRequest;
|
||||
use App\Http\Requests\SetupWizard\StoreStripeCredentialsRequest;
|
||||
use App\Http\Requests\SetupWizard\StoreStripePlansRequest;
|
||||
use App\Page;
|
||||
use App\Services\StripeService;
|
||||
use App\Setting;
|
||||
use App\User;
|
||||
@@ -19,9 +20,11 @@ use Cartalyst\Stripe\Exception\UnauthorizedException;
|
||||
use Doctrine\DBAL\Driver\PDOException;
|
||||
use Illuminate\Contracts\Routing\ResponseFactory;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
use Illuminate\Support\Facades\Http;
|
||||
use Illuminate\Support\Facades\Route;
|
||||
use Schema;
|
||||
use Stripe;
|
||||
use Symfony\Component\HttpKernel\Exception\HttpException;
|
||||
|
||||
@@ -33,7 +36,6 @@ class SetupWizardController extends Controller
|
||||
public function __construct(StripeService $stripe)
|
||||
{
|
||||
$this->stripe = $stripe;
|
||||
$this->setup_done = Setting::where('name', 'setup_wizard_success')->first();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -45,7 +47,7 @@ class SetupWizardController extends Controller
|
||||
public function verify_purchase_code(Request $request)
|
||||
{
|
||||
// Check setup status
|
||||
if ($this->setup_done) abort(410, 'Gone');
|
||||
if ($this->get_setup_status()) abort(410, 'Gone');
|
||||
|
||||
// Verify purchase code
|
||||
$response = Http::get('https://verify.vuefilemanager.com/api/verify-code/' . $request->purchaseCode);
|
||||
@@ -66,7 +68,7 @@ class SetupWizardController extends Controller
|
||||
public function setup_database(StoreDatabaseCredentialsRequest $request)
|
||||
{
|
||||
// Check setup status
|
||||
if ($this->setup_done) abort(410, 'Gone');
|
||||
if ($this->get_setup_status()) abort(410, 'Gone');
|
||||
|
||||
try {
|
||||
// Set temporary database connection
|
||||
@@ -117,7 +119,6 @@ class SetupWizardController extends Controller
|
||||
});
|
||||
|
||||
// Clear cache
|
||||
//Artisan::call('config:clear');
|
||||
Artisan::call('config:cache');
|
||||
|
||||
// Set up application
|
||||
@@ -141,7 +142,7 @@ class SetupWizardController extends Controller
|
||||
public function store_stripe_credentials(StoreStripeCredentialsRequest $request)
|
||||
{
|
||||
// Check setup status
|
||||
if ($this->setup_done) abort(410, 'Gone');
|
||||
if ($this->get_setup_status()) abort(410, 'Gone');
|
||||
|
||||
// Create stripe instance
|
||||
$stripe = Stripe::make($request->secret, '2020-03-02');
|
||||
@@ -195,7 +196,7 @@ class SetupWizardController extends Controller
|
||||
public function store_stripe_billings(StoreStripeBillingRequest $request)
|
||||
{
|
||||
// Check setup status
|
||||
if ($this->setup_done) abort(410, 'Gone');
|
||||
if ($this->get_setup_status()) abort(410, 'Gone');
|
||||
|
||||
// Get options
|
||||
$settings = collect([
|
||||
@@ -239,7 +240,6 @@ class SetupWizardController extends Controller
|
||||
});
|
||||
|
||||
// Clear cache
|
||||
//Artisan::call('config:clear');
|
||||
Artisan::call('config:cache');
|
||||
|
||||
return response('Done', 200);
|
||||
@@ -253,7 +253,7 @@ class SetupWizardController extends Controller
|
||||
public function store_stripe_plans(StoreStripePlansRequest $request)
|
||||
{
|
||||
// Check setup status
|
||||
if ($this->setup_done) abort(410, 'Gone');
|
||||
if ($this->get_setup_status()) abort(410, 'Gone');
|
||||
|
||||
foreach ($request->input('plans') as $plan) {
|
||||
$this->stripe->createPlan($plan);
|
||||
@@ -269,7 +269,7 @@ class SetupWizardController extends Controller
|
||||
public function store_environment_setup(StoreEnvironmentSetupRequest $request)
|
||||
{
|
||||
// Check setup status
|
||||
if ($this->setup_done) abort(410, 'Gone');
|
||||
if ($this->get_setup_status()) abort(410, 'Gone');
|
||||
|
||||
$storage_driver = $request->input('storage.driver');
|
||||
|
||||
@@ -455,7 +455,7 @@ class SetupWizardController extends Controller
|
||||
public function store_app_settings(StoreAppSetupRequest $request)
|
||||
{
|
||||
// Check setup status
|
||||
if ($this->setup_done) abort(410, 'Gone');
|
||||
if ($this->get_setup_status()) abort(410, 'Gone');
|
||||
|
||||
// Store Logo
|
||||
if ($request->hasFile('logo')) {
|
||||
@@ -533,7 +533,7 @@ class SetupWizardController extends Controller
|
||||
public function create_admin_account(Request $request)
|
||||
{
|
||||
// Check setup status
|
||||
if ($this->setup_done) abort(410, 'Gone');
|
||||
if ($this->get_setup_status()) abort(410, 'Gone');
|
||||
|
||||
// Validate request
|
||||
$request->validate([
|
||||
@@ -589,13 +589,16 @@ class SetupWizardController extends Controller
|
||||
// Create legal pages and index content
|
||||
if ($request->license === 'Extended') {
|
||||
|
||||
Artisan::call('db:seed --class=PageSeeder', [
|
||||
'--force' => true
|
||||
]);
|
||||
$pages = collect(config('vuefilemanager.pages'));
|
||||
$content = collect(config('vuefilemanager.content'));
|
||||
|
||||
Artisan::call('db:seed --class=ContentSeeder', [
|
||||
'--force' => true
|
||||
]);
|
||||
$content->each(function ($content) {
|
||||
Setting::updateOrCreate($content);
|
||||
});
|
||||
|
||||
$pages->each(function ($page) {
|
||||
Page::updateOrCreate($page);
|
||||
});
|
||||
}
|
||||
|
||||
// Retrieve access token
|
||||
@@ -618,7 +621,9 @@ class SetupWizardController extends Controller
|
||||
private function set_up_application()
|
||||
{
|
||||
// Generate app key
|
||||
Artisan::call('key:generate');
|
||||
Artisan::call('key:generate', [
|
||||
'--force' => true
|
||||
]);
|
||||
|
||||
// Migrate database
|
||||
Artisan::call('migrate:fresh', [
|
||||
@@ -669,4 +674,24 @@ class SetupWizardController extends Controller
|
||||
|
||||
return Request::create(url('/oauth/token'), 'POST', $request->all());
|
||||
}
|
||||
|
||||
/**
|
||||
* Get setup wizard status
|
||||
*
|
||||
* @return |null
|
||||
*/
|
||||
private function get_setup_status()
|
||||
{
|
||||
try {
|
||||
// Check database connections
|
||||
DB::getPdo();
|
||||
|
||||
// Get setup_wizard status
|
||||
return Schema::hasTable('settings') ? Setting::where('name', 'setup_wizard_success')->first() : false;
|
||||
|
||||
} catch (PDOException $e) {
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
namespace App\Http\Controllers\General;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Page;
|
||||
use App\Setting;
|
||||
use Artisan;
|
||||
use Illuminate\Http\Request;
|
||||
@@ -24,13 +25,16 @@ class UpgradeAppController extends Controller
|
||||
// Create legal pages and index content
|
||||
if ($request->license === 'Extended') {
|
||||
|
||||
Artisan::call('db:seed --class=PageSeeder', [
|
||||
'--force' => true
|
||||
]);
|
||||
$pages = collect(config('vuefilemanager.pages'));
|
||||
$content = collect(config('vuefilemanager.content'));
|
||||
|
||||
Artisan::call('db:seed --class=ContentSeeder', [
|
||||
'--force' => true
|
||||
]);
|
||||
$content->each(function ($content) {
|
||||
Setting::updateOrCreate($content);
|
||||
});
|
||||
|
||||
$pages->each(function ($page) {
|
||||
Page::updateOrCreate($page);
|
||||
});
|
||||
}
|
||||
|
||||
// Store Logo
|
||||
|
||||
@@ -3,4 +3,104 @@
|
||||
return [
|
||||
|
||||
'version' => '1.7',
|
||||
|
||||
'pages' => [
|
||||
[
|
||||
'visibility' => 1,
|
||||
'title' => 'Terms of Service',
|
||||
'slug' => 'terms-of-service',
|
||||
'content' => 'Laoreet cum hendrerit iaculis arcu phasellus congue et elementum, pharetra risus imperdiet aptent posuere rutrum parturient blandit, dapibus tellus ridiculus potenti aliquam sociis turpis. Nullam commodo eget laoreet risus cursus vel placerat, in dapibus sociis gravida faucibus sodales, fringilla potenti elit semper iaculis ullamcorper. Dignissim vulputate pretium montes pellentesque mollis, consectetur adipiscing curabitur semper sem rhoncus, litora viverra curae proin.',
|
||||
],
|
||||
[
|
||||
'visibility' => 1,
|
||||
'title' => 'Privacy Policy',
|
||||
'slug' => 'privacy-policy',
|
||||
'content' => 'Sit orci justo augue maecenas laoreet consectetur natoque magnis in viverra sagittis, himenaeos urna facilisis mus proin primis diam accumsan tristique inceptos. Primis quisque posuere sit praesent lobortis feugiat semper convallis facilisis, vivamus gravida ligula nostra curae eu donec duis parturient senectus, arcu dolor viverra penatibus natoque cum nisi commodo. Litora sociis mauris justo nullam suspendisse mattis maecenas nascetur congue phasellus cras ultricies posuere donec, dapibus egestas diam lacus ornare montes senectus tincidunt eu taciti sed consequat.',
|
||||
],
|
||||
[
|
||||
'visibility' => 1,
|
||||
'title' => 'Cookie Policy',
|
||||
'slug' => 'cookie-policy',
|
||||
'content' => 'Metus penatibus ligula dolor natoque non habitasse laoreet facilisis, libero vivamus eget semper vulputate interdum integer, phasellus lorem enim blandit consectetur nullam sollicitudin. Hendrerit interdum luctus ut in molestie himenaeos eros cum laoreet parturient est, eu lectus hac et netus viverra dictumst congue elit sem senectus litora, fames scelerisque adipiscing inceptos fringilla montes sociosqu suscipit auctor potenti. Elementum lacus vulputate viverra ac morbi ligula ipsum facilisi, sit eu imperdiet lacinia congue dis vitae.',
|
||||
],
|
||||
],
|
||||
|
||||
'content' => [
|
||||
[
|
||||
'name' => 'section_features',
|
||||
'value' => '1',
|
||||
],
|
||||
[
|
||||
'name' => 'section_feature_boxes',
|
||||
'value' => '1',
|
||||
],
|
||||
[
|
||||
'name' => 'section_pricing_content',
|
||||
'value' => '1',
|
||||
],
|
||||
[
|
||||
'name' => 'section_get_started',
|
||||
'value' => '1',
|
||||
],
|
||||
[
|
||||
'name' => 'header_title',
|
||||
'value' => 'Simple <span style="color: #41B883">&</span> Powerfull Personal Cloud Storage',
|
||||
],
|
||||
[
|
||||
'name' => 'header_description',
|
||||
'value' => 'Your private cloud storage software build on Laravel & Vue.js. No limits & no monthly fees. Trully freedom.',
|
||||
],
|
||||
[
|
||||
'name' => 'features_title',
|
||||
'value' => 'The Fastest Growing <span style="color: #41B883">File Manager</span> on the CodeCanyon Market',
|
||||
],
|
||||
[
|
||||
'name' => 'features_description',
|
||||
'value' => 'Your private cloud storage software build on Laravel & Vue.js. No limits & no monthly fees. Trully freedom.',
|
||||
],
|
||||
[
|
||||
'name' => 'feature_title_1',
|
||||
'value' => 'Truly Freedom',
|
||||
],
|
||||
[
|
||||
'name' => 'feature_description_1',
|
||||
'value' => 'You have full control over VueFileManager, no third authorities will control your service or usage, only you.',
|
||||
],
|
||||
[
|
||||
'name' => 'feature_title_2',
|
||||
'value' => 'The Sky is the Limit',
|
||||
],
|
||||
[
|
||||
'name' => 'feature_description_2',
|
||||
'value' => 'VueFileManager is cloud storage software. You have to install and running application on your own server hosting.',
|
||||
],
|
||||
[
|
||||
'name' => 'feature_title_3',
|
||||
'value' => 'No Monthly Fees',
|
||||
],
|
||||
[
|
||||
'name' => 'feature_description_3',
|
||||
'value' => 'When you running VueFileManager on your own server hosting, anybody can\'t control your content or resell your user data. Your data is safe.',
|
||||
],
|
||||
[
|
||||
'name' => 'pricing_title',
|
||||
'value' => 'Pick the <span style="color: #41B883;">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. Trully freedom.',
|
||||
],
|
||||
[
|
||||
'name' => 'get_started_title',
|
||||
'value' => 'Ready to Get <span style="color: #41B883">Started</span><br> With Us?',
|
||||
],
|
||||
[
|
||||
'name' => 'get_started_description',
|
||||
'value' => 'Your private cloud storage software build on Laravel & Vue.js. No limits & no monthly fees. Trully freedom.',
|
||||
],
|
||||
[
|
||||
'name' => 'footer_content',
|
||||
'value' => '© 2020 Simple & Powerfull Personal Cloud Storage. Developed by <a href="https://hi5ve.digital" target="_blank">Hi5Ve.Digital</a>',
|
||||
],
|
||||
],
|
||||
];
|
||||
2
public/js/main.js
vendored
2
public/js/main.js
vendored
File diff suppressed because one or more lines are too long
@@ -59,6 +59,12 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group" v-if="isError">
|
||||
<InfoBox type="error" style="margin-top: 40px">
|
||||
<p>{{ errorMessage }}</p>
|
||||
</InfoBox>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<ButtonBase :disabled="isLoading" :loading="isLoading" button-style="theme" type="submit">
|
||||
{{ $t('admin_page_plans.create_plan_button') }}
|
||||
@@ -79,6 +85,7 @@
|
||||
import SectionTitle from '@/components/Others/SectionTitle'
|
||||
import ButtonBase from '@/components/FilesView/ButtonBase'
|
||||
import PageHeader from '@/components/Others/PageHeader'
|
||||
import InfoBox from '@/components/Others/Forms/InfoBox'
|
||||
import {required} from 'vee-validate/dist/rules'
|
||||
import {mapGetters} from 'vuex'
|
||||
import {events} from "@/bus"
|
||||
@@ -97,10 +104,13 @@
|
||||
PageHeader,
|
||||
FormLabel,
|
||||
required,
|
||||
InfoBox,
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
isLoading: false,
|
||||
errorMessage: '',
|
||||
isError: false,
|
||||
plan: {
|
||||
name: '',
|
||||
price: '',
|
||||
@@ -141,20 +151,16 @@
|
||||
// Validation errors
|
||||
if (error.response.status == 422) {
|
||||
|
||||
// Password validation error
|
||||
if (error.response.data.errors['storage_capacity']) {
|
||||
|
||||
this.$refs.createPlan.setErrors({
|
||||
'storage capacity': this.$t('errors.capacity_digit')
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
events.$emit('alert:open', {
|
||||
title: this.$t('popup_error.title'),
|
||||
message: this.$t('popup_error.message'),
|
||||
})
|
||||
if (error.response.status == 500) {
|
||||
this.isError = true
|
||||
this.errorMessage = error.response.data.message
|
||||
}
|
||||
|
||||
}).finally(() => {
|
||||
|
||||
@@ -156,7 +156,6 @@
|
||||
})
|
||||
.catch(error => {
|
||||
|
||||
|
||||
if (error.response.status == 401) {
|
||||
|
||||
if (error.response.data.error === 'invalid_client') {
|
||||
|
||||
@@ -74,11 +74,14 @@
|
||||
</ButtonBase>
|
||||
</div>
|
||||
|
||||
<InfoBox v-if="isError" type="error" style="margin-top: 40px">
|
||||
<p>{{ errorMessage }}</p>
|
||||
</InfoBox>
|
||||
|
||||
<div class="submit-wrapper">
|
||||
<AuthButton icon="chevron-right" :text="submitButtonText" :loading="isLoading"
|
||||
:disabled="isLoading"/>
|
||||
</div>
|
||||
|
||||
</ValidationObserver>
|
||||
</AuthContent>
|
||||
</AuthContentWrapper>
|
||||
@@ -123,6 +126,8 @@
|
||||
data() {
|
||||
return {
|
||||
isLoading: false,
|
||||
isError: false,
|
||||
errorMessage: '',
|
||||
subscriptionPlans: [
|
||||
{
|
||||
id: 1,
|
||||
@@ -147,23 +152,27 @@
|
||||
|
||||
// Start loading
|
||||
this.isLoading = true
|
||||
this.isError = false
|
||||
|
||||
// Send request to get verify account
|
||||
axios
|
||||
.post('/api/setup/stripe-plans', {
|
||||
plans: this.subscriptionPlans
|
||||
})
|
||||
.then(response => {
|
||||
|
||||
// End loading
|
||||
this.isLoading = false
|
||||
.then(() => {
|
||||
|
||||
// Redirect to next step
|
||||
this.$router.push({name: 'EnvironmentSetup'})
|
||||
})
|
||||
.catch(error => {
|
||||
|
||||
// End loading
|
||||
if (error.response.status = 500) {
|
||||
this.isError = true
|
||||
this.errorMessage = error.response.data.message
|
||||
}
|
||||
|
||||
})
|
||||
.finally(() => {
|
||||
this.isLoading = false
|
||||
})
|
||||
},
|
||||
|
||||
@@ -11,8 +11,8 @@
|
||||
...mapGetters(['config']),
|
||||
},
|
||||
mounted() {
|
||||
if (this.config.installation === 'setup-done' || this.config.installation === 'quiet-update')
|
||||
this.$router.push({name: 'SignIn'})
|
||||
//if (this.config.installation === 'setup-done' || this.config.installation === 'quiet-update')
|
||||
//this.$router.push({name: 'SignIn'})
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
9999999999a:2:{i:0;a:2:{s:4:"plan";a:20:{s:2:"id";s:17:"professional-pack";s:6:"object";s:4:"plan";s:6:"active";b:1;s:15:"aggregate_usage";N;s:6:"amount";i:1499;s:14:"amount_decimal";s:4:"1499";s:14:"billing_scheme";s:8:"per_unit";s:7:"created";i:1594824464;s:8:"currency";s:3:"gbp";s:8:"interval";s:3:"day";s:14:"interval_count";i:1;s:8:"livemode";b:0;s:8:"metadata";a:0:{}s:8:"nickname";N;s:7:"product";s:19:"prod_HeUtX49eUU2mjk";s:5:"tiers";N;s:10:"tiers_mode";N;s:15:"transform_usage";N;s:17:"trial_period_days";N;s:10:"usage_type";s:8:"licensed";}s:7:"product";a:14:{s:2:"id";s:19:"prod_HeUtX49eUU2mjk";s:6:"object";s:7:"product";s:6:"active";b:1;s:10:"attributes";a:0:{}s:7:"created";i:1594824463;s:11:"description";s:26:"The best for professionals";s:6:"images";a:0:{}s:8:"livemode";b:0;s:8:"metadata";a:1:{s:8:"capacity";s:3:"500";}s:4:"name";s:17:"Professional Pack";s:20:"statement_descriptor";N;s:4:"type";s:7:"service";s:10:"unit_label";N;s:7:"updated";i:1594824464;}}i:1;a:2:{s:4:"plan";a:20:{s:2:"id";s:12:"starter-pack";s:6:"object";s:4:"plan";s:6:"active";b:1;s:15:"aggregate_usage";N;s:6:"amount";i:999;s:14:"amount_decimal";s:3:"999";s:14:"billing_scheme";s:8:"per_unit";s:7:"created";i:1594824411;s:8:"currency";s:3:"gbp";s:8:"interval";s:3:"day";s:14:"interval_count";i:1;s:8:"livemode";b:0;s:8:"metadata";a:0:{}s:8:"nickname";N;s:7:"product";s:19:"prod_HeUsSOeOkv4nE9";s:5:"tiers";N;s:10:"tiers_mode";N;s:15:"transform_usage";N;s:17:"trial_period_days";N;s:10:"usage_type";s:8:"licensed";}s:7:"product";a:14:{s:2:"id";s:19:"prod_HeUsSOeOkv4nE9";s:6:"object";s:7:"product";s:6:"active";b:1;s:10:"attributes";a:0:{}s:7:"created";i:1594824410;s:11:"description";s:18:"the best for start";s:6:"images";a:0:{}s:8:"livemode";b:0;s:8:"metadata";a:1:{s:8:"capacity";s:3:"200";}s:4:"name";s:12:"Starter Pack";s:20:"statement_descriptor";N;s:4:"type";s:7:"service";s:10:"unit_label";N;s:7:"updated";i:1594824516;}}}
|
||||
Binary file not shown.
Reference in New Issue
Block a user