From 4af53922edf532656a542e19043e971b01d56035 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benjamin=20Beganovi=C4=87?= Date: Tue, 14 Apr 2020 00:20:54 +0200 Subject: [PATCH] Added new options for migrations (#3628) - New 'existing.blade' e-mail - Added .php_cs cache in .gitignore - Updated MigrationController with new options --- .gitignore | 2 + app/Http/Controllers/MigrationController.php | 52 ++++++++++++++++++- app/Mail/ExistingMigration.php | 33 ++++++++++++ .../views/email/migration/existing.blade.php | 31 +++++++++++ 4 files changed, 117 insertions(+), 1 deletion(-) create mode 100644 app/Mail/ExistingMigration.php create mode 100644 resources/views/email/migration/existing.blade.php diff --git a/.gitignore b/.gitignore index 7ae9ae8ccb31..2471b6f64436 100644 --- a/.gitignore +++ b/.gitignore @@ -27,3 +27,5 @@ local_version.txt storage/migrations nbproject /composer.lock + +.php_cs.cache \ No newline at end of file diff --git a/app/Http/Controllers/MigrationController.php b/app/Http/Controllers/MigrationController.php index b44de47fb23c..ee16d432708c 100644 --- a/app/Http/Controllers/MigrationController.php +++ b/app/Http/Controllers/MigrationController.php @@ -22,6 +22,7 @@ use App\Http\Requests\Account\CreateAccountRequest; use App\Http\Requests\Migration\UploadMigrationFileRequest; use App\Jobs\Account\CreateAccount; use App\Jobs\Util\StartMigration; +use App\Mail\ExistingMigration; use App\Mail\MigrationFailed; use App\Models\Account; use App\Models\Company; @@ -197,8 +198,45 @@ class MigrationController extends BaseController public function startMigration(Request $request, Company $company) { $user = auth()->user(); + $existing_company = Company::where('company_key', $request->company_key)->first(); + + info('Request key: ' . $request->company_key); + + if ($request->company_key !== $company->company_key) { + info('Migration type: Fresh migration with new company. MigrationController::203'); + + // If there's company with same 'company_key' as from request we would crash it + // to avoid duplicate 'company_key' insert error. This should never happen, but just in case to prevent it. + if ($existing_company) { + Mail::to($user)->send(new ExistingMigration()); + return; + } + + $account = (new ImportMigrations())->getAccount(); + $company = (new ImportMigrations())->getCompany($account); + + CompanyToken::create([ + 'user_id' => $user->id, + 'company_id' => $company->id, + 'account_id' => $account->id, + 'name' => $request->token_name ?? Str::random(12), + 'token' => $request->token ?? \Illuminate\Support\Str::random(64), + ]); + + $user->companies()->attach($company->id, [ + 'account_id' => $account->id, + 'is_owner' => 1, + 'is_admin' => 1, + 'is_locked' => 0, + 'notifications' => CompanySettings::notificationDefaults(), + 'permissions' => '', + 'settings' => null, + ]); + } + + if (($request->company_key == $company->company_key) && ($request->has('force') && !empty($request->force))) { + info('Migration type: Completely wipe company and start again. MigrationController::228'); - if ($request->has('force') && !empty($request->force)) { $this->purgeCompany($company); $account = (new ImportMigrations())->getAccount(); @@ -223,6 +261,18 @@ class MigrationController extends BaseController ]); } + if (($request->company_key == $company->company_key) && !$request->force) { + info('Migration type: Nothing, skip this since no "force" is provided.. MigrationController::255'); + + Mail::to($user)->send(new ExistingMigration()); + + return response()->json([ + '_id' => Str::uuid(), + 'method' => config('queue.default'), + 'started_at' => now(), + ], 200); + } + $migration_file = $request->file('migration') ->storeAs('migrations', $request->file('migration')->getClientOriginalName()); diff --git a/app/Mail/ExistingMigration.php b/app/Mail/ExistingMigration.php new file mode 100644 index 000000000000..e70e1cd98622 --- /dev/null +++ b/app/Mail/ExistingMigration.php @@ -0,0 +1,33 @@ +view('email.migration.existing'); + } +} diff --git a/resources/views/email/migration/existing.blade.php b/resources/views/email/migration/existing.blade.php new file mode 100644 index 000000000000..615e8c88e571 --- /dev/null +++ b/resources/views/email/migration/existing.blade.php @@ -0,0 +1,31 @@ +@component('email.template.master', ['design' => 'light']) + +@slot('header') + @component('email.components.header') + Migration already completed + @endcomponent +@endslot + +@slot('greeting') + Hello, +@endslot + +Looks like you already migrated your data to V2 version of the Invoice Ninja. In case you want to start over, you can 'force' migrate to wipe existing data. + +@component('email.components.button', ['url' => url('/')]) + Visit portal +@endcomponent + + +@slot('signature') +Thank you,
+Invoice Ninja +@endslot + +@slot('footer') + @component('email.components.footer', ['url' => 'https://invoiceninja.com', 'url_text' => '© InvoiceNinja']) + For any info, please visit InvoiceNinja. + @endcomponent +@endslot + +@endcomponent \ No newline at end of file