From c9d300769c5da6e26b08861daa7f67746f05e06c Mon Sep 17 00:00:00 2001 From: carodej Date: Tue, 14 Jul 2020 10:34:42 +0200 Subject: [PATCH] bugfixes --- .env.dev | 67 -- .env.example | 3 +- .gitignore | 1 + app/FileManagerFile.php | 15 +- .../Controllers/AppFunctionsController.php | 2 +- app/Http/Controllers/Auth/AuthController.php | 5 +- .../General/SetupWizardController.php | 125 ++-- app/Http/Helpers/helpers.php | 8 +- .../SetupWizard/StoreAppSetupRequest.php | 4 +- app/Services/StripeService.php | 22 +- config/app.php | 2 +- database/seeds/ContentSeeder.php | 2 +- database/seeds/PageSeeder.php | 2 +- public/assets/images/default-avatar.png | Bin 7311 -> 6372 bytes .../images/vuefilemanager-horizontal-logo.svg | 10 +- .../images/vuefilemanager-logo-icon.svg | 4 +- public/css/app.css | 1 + public/js/main.js | 2 +- public/mix-manifest.json | 308 +++----- resources/babel.babel | 571 +++++++++++++++ resources/js/App.vue | 4 +- .../components/Index/IndexPricingTables.vue | 4 +- .../js/components/Others/EmptyPageContent.vue | 10 +- .../js/components/Others/Forms/InfoBox.vue | 4 + resources/js/components/Others/MoveItem.vue | 3 +- resources/js/components/Others/TreeMenu.vue | 20 +- .../js/components/Others/UserImageInput.vue | 2 +- resources/js/i18n/index.js | 2 +- resources/js/i18n/lang/cn.json | 38 +- resources/js/i18n/lang/en.json | 38 +- resources/js/i18n/lang/sk.json | 40 +- resources/js/store/modules/app.js | 6 + .../views/Admin/AppSettings/AppSettings.vue | 2 +- .../AppSettings/AppSettingsTabs/Payments.vue | 665 +++++++++++++++++- resources/js/views/Admin/Dashboard.vue | 41 +- resources/js/views/Admin/Invoices.vue | 39 +- resources/js/views/Admin/Plans.vue | 39 +- .../views/Admin/Users/UserTabs/UserDetail.vue | 4 +- .../Admin/Users/UserTabs/UserStorage.vue | 1 - resources/js/views/Auth/SignUp.vue | 14 +- resources/js/views/Index/ContactUs.vue | 30 +- .../js/views/SetupWIzard/AdminAccount.vue | 12 +- resources/js/views/SetupWIzard/AppSetup.vue | 22 +- .../js/views/SetupWIzard/EnvironmentSetup.vue | 12 +- .../js/views/SetupWIzard/PurchaseCode.vue | 2 +- .../views/SetupWIzard/StripeCredentials.vue | 7 +- resources/views/index.blade.php | 2 +- .../00317b5e81771fa2c4f1ccbe161dfb1c492dde59 | 2 +- .../3a9055585a042324f4c9de4b2836d979bd8e3fa9 | 1 - .../44d142505dd1a3b497197e2f459d2aec779e9ed6 | 1 - .../94239ca49856ec24cf53caa1d9a5bb8c48da953f | Bin 5716 -> 5667 bytes .../b172d2349fbf57eb748881b118e0a736bf7498ec | Bin 6780 -> 6695 bytes .../c24f92750673b2169c8cb7bfbc999cfa8457dc7c | 1 - .../d85bb00307d094959d235062c0de9784a8d8dfee | Bin 5677 -> 16 bytes webpack.mix.js | 6 - 55 files changed, 1747 insertions(+), 481 deletions(-) delete mode 100644 .env.dev create mode 100644 public/css/app.css delete mode 100644 storage/framework/cache/data/3a/90/3a9055585a042324f4c9de4b2836d979bd8e3fa9 delete mode 100644 storage/framework/cache/data/44/d1/44d142505dd1a3b497197e2f459d2aec779e9ed6 delete mode 100644 storage/framework/cache/data/c2/4f/c24f92750673b2169c8cb7bfbc999cfa8457dc7c diff --git a/.env.dev b/.env.dev deleted file mode 100644 index 92afc86a..00000000 --- a/.env.dev +++ /dev/null @@ -1,67 +0,0 @@ -APP_NAME=VueFileManager -APP_ENV=local -APP_KEY=base64:EYM98pyseC/frZhW30ifeJqpOP3UmmLj1fMahrDN3zw= -APP_DEBUG=true -APP_URL=http://localhost -APP_DEMO=false - -LOG_CHANNEL=stack -SCOUT_DRIVER=tntsearch -FILESYSTEM_DRIVER=local - -DB_CONNECTION=mysql -DB_HOST=127.0.0.1 -DB_PORT=8889 -DB_DATABASE=file-manager -DB_USERNAME=root -DB_PASSWORD=root - -BROADCAST_DRIVER=log -CACHE_DRIVER=file -QUEUE_CONNECTION=sync -SESSION_DRIVER=file -SESSION_LIFETIME=120 - -MAIL_DRIVER=smtp -MAIL_HOST=smtp.websupport.sk -MAIL_PORT=25 -MAIL_USERNAME=vuefilemanager@hi5ve.digital -MAIL_PASSWORD=Yl2d]kET>) -MAIL_ENCRYPTION=tls -MAIL_FROM_ADDRESS="${MAIL_USERNAME}" -MAIL_FROM_NAME="${APP_NAME}" - -AWS_ACCESS_KEY_ID=AKIA3UOZZXPUGKQ3BLMZ -AWS_SECRET_ACCESS_KEY=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 -AWS_DEFAULT_REGION=eu-central-1 -AWS_BUCKET=vuefilemanager-frankfurt - -DO_SPACES_KEY=FSUHFOF5DMZCEWXVNPTI -DO_SPACES_SECRET=2t87Ugz/JoIjT1dIdTjnnKQ4t74Yfe665KBjCRc0yDk -DO_SPACES_ENDPOINT=https://fra1.digitaloceanspaces.com -DO_SPACES_REGION=fra1 -DO_SPACES_BUCKET=vuefilemanager - -WASABI_KEY= -WASABI_SECRET= -WASABI_ENDPOINT= -WASABI_REGION= -WASABI_BUCKET= - -BACKBLAZE_KEY= -BACKBLAZE_SECRET= -BACKBLAZE_ENDPOINT= -BACKBLAZE_REGION= -BACKBLAZE_BUCKET= - -PASSPORT_CLIENT_ID=1 -PASSPORT_CLIENT_SECRET=kZevoWiMjuoxlfO0N0Ezq2oo6ukvX27VPEEJlQUD - -APP_DEPLOY_SECRET=5603148y60eew0q5fw46 -APP_DEPLOY_BRANCH=dev - -CASHIER_LOGGER=stack -CASHIER_CURRENCY=usd -STRIPE_KEY=pk_test_51GsACaCBETHMUxzVsYkeApHtqb85paMuye7G77PDDQ28kXqDJ5HTmqLi13aM6xee81OQK1fhkTZ7vmDiWLStU9160061Yb2MtL -STRIPE_SECRET=sk_test_51GsACaCBETHMUxzVviYCrv0CeZMyWAOfBPe4uH5rkKJcJxrXhIciWQTr7UB1sgw9geoJMkNDVSWBQW36tuAsVznd00zhNHXhok -STRIPE_WEBHOOK_SECRET=whsec_5aM5emy4U9AzPLFxOPyBSyI0QGyI1MZW diff --git a/.env.example b/.env.example index 44c0354e..ccbed93d 100644 --- a/.env.example +++ b/.env.example @@ -3,10 +3,11 @@ APP_ENV=local APP_KEY=base64:sB1YuKsbWv7MdWugb9ZsYBqv2QZJ+QOuHZHEddOsUuo= APP_DEBUG=true APP_URL=http://localhost +APP_DEMO=false LOG_CHANNEL=stack SCOUT_DRIVER=tntsearch -FILESYSTEM_DRIVER=local +FILESYSTEM_DRIVER= DB_CONNECTION=mysql DB_HOST=127.0.0.1 diff --git a/.gitignore b/.gitignore index 9184766f..43041172 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,7 @@ /public/storage /storage/*.key /storage/*.index +/storage/framework/cache /vendor .idea .env diff --git a/app/FileManagerFile.php b/app/FileManagerFile.php index ab6f47b4..5bd052e4 100644 --- a/app/FileManagerFile.php +++ b/app/FileManagerFile.php @@ -123,7 +123,7 @@ class FileManagerFile extends Model } // Get thumbnail from local storage - if ($this->attributes['thumbnail'] && is_storage_driver('local')) { + if ($this->attributes['thumbnail']) { // Thumbnail route $route = route('thumbnail', ['name' => $this->attributes['thumbnail']]); @@ -160,16 +160,13 @@ class FileManagerFile extends Model } // Get thumbnail from local storage - if (is_storage_driver('local')) { + $route = route('file', ['name' => $this->attributes['basename']]); - $route = route('file', ['name' => $this->attributes['basename']]); - - if ($this->public_access) { - return $route . '/public/' . $this->public_access; - } - - return $route; + if ($this->public_access) { + return $route . '/public/' . $this->public_access; } + + return $route; } /** diff --git a/app/Http/Controllers/AppFunctionsController.php b/app/Http/Controllers/AppFunctionsController.php index 94303136..018e4963 100644 --- a/app/Http/Controllers/AppFunctionsController.php +++ b/app/Http/Controllers/AppFunctionsController.php @@ -67,7 +67,7 @@ class AppFunctionsController extends Controller return view("index") ->with('settings', $settings) - ->with('legal', $legal) + ->with('legal', isset($legal) ? $legal : null) ->with('installation', $connection); } diff --git a/app/Http/Controllers/Auth/AuthController.php b/app/Http/Controllers/Auth/AuthController.php index 772970f8..240c630c 100644 --- a/app/Http/Controllers/Auth/AuthController.php +++ b/app/Http/Controllers/Auth/AuthController.php @@ -23,7 +23,6 @@ class AuthController extends Controller */ public function check_account(CheckAccountRequest $request) { - // Get User $user = User::where('email', $request->input('email'))->select(['name', 'avatar'])->first(); @@ -84,10 +83,8 @@ class AuthController extends Controller 'password' => Hash::make($request->password), ]); - $default_storage = Setting::where('name', 'storage_default')->first(); - // Create settings - $settings = UserSettings::create([ + UserSettings::forceCreate([ 'user_id' => $user->id, 'storage_capacity' => $settings['storage_default'], ]); diff --git a/app/Http/Controllers/General/SetupWizardController.php b/app/Http/Controllers/General/SetupWizardController.php index f39e42ac..07623717 100644 --- a/app/Http/Controllers/General/SetupWizardController.php +++ b/app/Http/Controllers/General/SetupWizardController.php @@ -126,47 +126,11 @@ class SetupWizardController extends Controller 'value' => 1, ]); - return response('Done', 200); - } - - /** - * Migrate database and generate necessary things - */ - private function set_up_application() - { - // Generate app key - Artisan::call('key:generate'); - - // Migrate database - Artisan::call('migrate:fresh'); - - // Create Passport Keys - Artisan::call('passport:keys', [ - '--force' => true - ]); - - // Create Password grant client - Artisan::call('passport:client', [ - '--password' => true, - '--name' => 'vuefilemanager', - ]); - - // Create Personal access client - Artisan::call('passport:client', [ - '--personal' => true, - '--name' => 'shared', - ]); - - // Get generated client - $client = \DB::table('oauth_clients')->where('name', '=', 'vuefilemanager')->first(); - - // Set passport client to .env - setEnvironmentValue('PASSPORT_CLIENT_ID', $client->id); - setEnvironmentValue('PASSPORT_CLIENT_SECRET', $client->secret); - // Clear cache - Artisan::call('config:clear'); - //Artisan::call('config:cache'); + //Artisan::call('config:clear'); + Artisan::call('config:cache'); + + return response('Done', 200); } /** @@ -203,6 +167,11 @@ class SetupWizardController extends Controller ], ]); + // Store options + $settings->each(function ($col) { + Setting::updateOrCreate(['name' => $col['name']], $col); + }); + // Set stripe credentials to .env setEnvironmentValue('CASHIER_CURRENCY', $request->currency); setEnvironmentValue('STRIPE_KEY', $request->key); @@ -210,7 +179,7 @@ class SetupWizardController extends Controller setEnvironmentValue('STRIPE_WEBHOOK_SECRET', $request->webhookSecret); // Clear cache - Artisan::call('config:clear'); + Artisan::call('config:cache'); return response('Done', 200); } @@ -265,8 +234,8 @@ class SetupWizardController extends Controller }); // Clear cache - Artisan::call('config:clear'); - //Artisan::call('config:cache'); + //Artisan::call('config:clear'); + Artisan::call('config:cache'); return response('Done', 200); } @@ -302,7 +271,9 @@ class SetupWizardController extends Controller ], ]); - } else if ($storage_driver === 's3') { + } + + if ($storage_driver === 's3') { $storage = collect([ [ @@ -327,7 +298,9 @@ class SetupWizardController extends Controller ], ]); - } else if ($storage_driver === 'spaces') { + } + + if ($storage_driver === 'spaces') { $storage = collect([ [ @@ -356,7 +329,9 @@ class SetupWizardController extends Controller ], ]); - } else if ($storage_driver === 'wasabi') { + } + + if ($storage_driver === 'wasabi') { $storage = collect([ [ @@ -385,7 +360,9 @@ class SetupWizardController extends Controller ], ]); - } else if ($storage_driver === 'backblaze') { + } + + if ($storage_driver === 'backblaze') { $storage = collect([ [ @@ -415,7 +392,7 @@ class SetupWizardController extends Controller ]); } - // Store storage driver options + // Store storage options $storage->each(function ($col) { setEnvironmentValue($col['name'], $col['value']); }); @@ -454,7 +431,7 @@ class SetupWizardController extends Controller }); // Clear cache - Artisan::call('config:clear'); + Artisan::call('config:cache'); return response('Done', 200); } @@ -517,11 +494,11 @@ class SetupWizardController extends Controller ], [ 'name' => 'storage_limitation', - 'value' => $request->storageLimitation ? $request->storageLimitation : 5, + 'value' => $request->storageLimitation, ], [ 'name' => 'storage_default', - 'value' => $request->defaultStorage, + 'value' => $request->defaultStorage ? $request->defaultStorage : 5, ], ]); @@ -557,7 +534,7 @@ class SetupWizardController extends Controller } // Create user - $user = User::create([ + $user = User::forceCreate([ 'avatar' => $request->hasFile('avatar') ? $avatar : null, 'name' => $request->name, 'role' => 'admin', @@ -575,20 +552,20 @@ class SetupWizardController extends Controller ]); // Store setup wizard progress - Setting::create([ + Setting::updateOrCreate([ 'name' => 'setup_wizard_success', 'value' => 1, ]); // Store License - Setting::create([ + Setting::updateOrCreate([ 'name' => 'license', 'value' => $request->license, ]); // Store Purchase Code - Setting::create([ - 'name' => 'license', + Setting::updateOrCreate([ + 'name' => 'purchase_code', 'value' => $request->purchase_code, ]); @@ -612,6 +589,42 @@ class SetupWizardController extends Controller return $response; } + /** + * Migrate database and generate necessary things + */ + private function set_up_application() + { + // Generate app key + Artisan::call('key:generate'); + + // Migrate database + Artisan::call('migrate:fresh'); + + // Create Passport Keys + Artisan::call('passport:keys', [ + '--force' => true + ]); + + // Create Password grant client + Artisan::call('passport:client', [ + '--password' => true, + '--name' => 'vuefilemanager', + ]); + + // Create Personal access client + Artisan::call('passport:client', [ + '--personal' => true, + '--name' => 'shared', + ]); + + // Get generated client + $client = \DB::table('oauth_clients')->where('name', '=', 'vuefilemanager')->first(); + + // Set passport client to .env + setEnvironmentValue('PASSPORT_CLIENT_ID', $client->id); + setEnvironmentValue('PASSPORT_CLIENT_SECRET', $client->secret); + } + /** * Make login request for get access token * diff --git a/app/Http/Helpers/helpers.php b/app/Http/Helpers/helpers.php index cb02d126..2f35b78b 100644 --- a/app/Http/Helpers/helpers.php +++ b/app/Http/Helpers/helpers.php @@ -11,7 +11,8 @@ use Illuminate\Support\Facades\Storage; use Illuminate\Support\Str; use Intervention\Image\ImageManagerStatic as Image; -function get_setting($setting) { +function get_setting($setting) +{ return Setting::where('name', $setting)->first()->value; } @@ -123,12 +124,11 @@ function get_storage() */ function is_storage_driver($driver) { - if (is_array($driver)) { - return in_array(env('FILESYSTEM_DRIVER'), $driver); + return in_array(config('filesystem.default'), $driver); } - return env('FILESYSTEM_DRIVER') === $driver; + return config('filesystem.default') === $driver; } /** diff --git a/app/Http/Requests/SetupWizard/StoreAppSetupRequest.php b/app/Http/Requests/SetupWizard/StoreAppSetupRequest.php index f298a5ef..02e9c1d2 100644 --- a/app/Http/Requests/SetupWizard/StoreAppSetupRequest.php +++ b/app/Http/Requests/SetupWizard/StoreAppSetupRequest.php @@ -29,8 +29,8 @@ class StoreAppSetupRequest extends FormRequest 'logo' => 'sometimes|file', 'favicon' => 'sometimes|file', 'contactMail' => 'required|email', - 'googleAnalytics' => 'required|string', - 'defaultStorage' => 'required|digits_between:1,9', + 'googleAnalytics' => 'sometimes|string', + 'defaultStorage' => 'sometimes|digits_between:1,9', 'userRegistration' => 'required|boolean', 'storageLimitation' => 'required|boolean', ]; diff --git a/app/Services/StripeService.php b/app/Services/StripeService.php index 75261559..c641ee13 100644 --- a/app/Services/StripeService.php +++ b/app/Services/StripeService.php @@ -157,10 +157,12 @@ class StripeService $product = $this->stripe->products()->find($plan['product']); // Push data to $plan container - array_push($plans, [ - 'plan' => $plan, - 'product' => $product, - ]); + if ($product['active']) { + array_push($plans, [ + 'plan' => $plan, + 'product' => $product, + ]); + } } return $plans; @@ -187,10 +189,12 @@ class StripeService $product = $this->stripe->products()->find($plan['product']); // Push data to $plan container - array_push($plans, [ - 'plan' => $plan, - 'product' => $product, - ]); + if ($product['active']) { + array_push($plans, [ + 'plan' => $plan, + 'product' => $product, + ]); + } } } @@ -246,7 +250,7 @@ class StripeService $plan = $this->stripe->plans()->create([ 'id' => Str::slug($plan['name']), 'amount' => $plan['price'], - 'currency' => 'USD', + 'currency' => config('cashier.currency'), 'interval' => 'month', 'product' => $product['id'], ]); diff --git a/config/app.php b/config/app.php index bdce5aa2..0ca539d8 100644 --- a/config/app.php +++ b/config/app.php @@ -80,7 +80,7 @@ return [ | */ - 'locale' => 'sk', + 'locale' => 'en', /* |-------------------------------------------------------------------------- diff --git a/database/seeds/ContentSeeder.php b/database/seeds/ContentSeeder.php index 49bc5821..cc1bd5f8 100644 --- a/database/seeds/ContentSeeder.php +++ b/database/seeds/ContentSeeder.php @@ -92,7 +92,7 @@ class ContentSeeder extends Seeder ]); $columns->each(function ($content) { - Setting::create($content); + Setting::updateOrCreate($content); }); } } diff --git a/database/seeds/PageSeeder.php b/database/seeds/PageSeeder.php index bee675a8..3a043a1b 100644 --- a/database/seeds/PageSeeder.php +++ b/database/seeds/PageSeeder.php @@ -34,7 +34,7 @@ class PageSeeder extends Seeder ]); $columns->each(function ($page) { - Page::create($page); + Page::updateOrCreate($page); }); } } diff --git a/public/assets/images/default-avatar.png b/public/assets/images/default-avatar.png index 7354e00fc07e2c12e55714620425ddbb84813b2b..329514693df74154d50085d1b2f7bb36c211727c 100644 GIT binary patch literal 6372 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 H?cV$sIMPcw diff --git a/public/assets/images/vuefilemanager-horizontal-logo.svg b/public/assets/images/vuefilemanager-horizontal-logo.svg index 7682e715..0bfc47df 100644 --- a/public/assets/images/vuefilemanager-horizontal-logo.svg +++ b/public/assets/images/vuefilemanager-horizontal-logo.svg @@ -4,14 +4,14 @@ vuefilemanager-horizontal-logo Created with Sketch.