diff --git a/app/Jobs/Util/Import.php b/app/Jobs/Util/Import.php index cf94a277657c..381a657ff3c6 100644 --- a/app/Jobs/Util/Import.php +++ b/app/Jobs/Util/Import.php @@ -13,6 +13,7 @@ namespace App\Jobs\Util; use App\DataMapper\Analytics\MigrationFailure; use App\DataMapper\CompanySettings; +use App\Exceptions\ClientHostedMigrationException; use App\Exceptions\MigrationValidatorFailed; use App\Exceptions\ProcessingMigrationArchiveFailed; use App\Exceptions\ResourceDependencyMissing; @@ -582,18 +583,44 @@ class Import implements ShouldQueue $validator = null; } + private function testUserDbLocationSanity(array $data): bool + { + + if(Ninja::isSelfHost()) + return true; + + $current_db = config('database.default'); + + foreach (MultiDB::$dbs as $db) + { + + MultiDB::setDB($db); + + $db1_count = User::withTrashed()->whereIn('email', array_column($data, 'email'))->count(); + $db2_count = User::withTrashed()->whereIn('email', array_column($data, 'email'))->count(); + + } + + + MultiDB::setDb($current_db); + + return true; + } + /** * @param array $data * @throws Exception */ private function processUsers(array $data): void { + if(!$this->testUserDbLocationSanity()) + throw new ClientHostedMigrationException('You have multiple accounts registered in the system, please contact us to resolve.', 400); + User::unguard(); $rules = [ '*.first_name' => ['string'], '*.last_name' => ['string'], - //'*.email' => ['distinct'], '*.email' => ['distinct', 'email', new ValidUserForCompany()], ]; @@ -749,7 +776,7 @@ class Import implements ShouldQueue Client::reguard(); - Client::with('contacts')->where('company_id', $this->company->id)->cursor()->each(function ($client){ + Client::withTrashed()->with('contacts')->where('company_id', $this->company->id)->cursor()->each(function ($client){ $contact = $client->contacts->sortByDesc('is_primary')->first(); $contact->is_primary = true; diff --git a/app/Jobs/Util/StartMigration.php b/app/Jobs/Util/StartMigration.php index 4d5336bb5027..6d8cb956d2f4 100644 --- a/app/Jobs/Util/StartMigration.php +++ b/app/Jobs/Util/StartMigration.php @@ -11,6 +11,7 @@ namespace App\Jobs\Util; +use App\Exceptions\ClientHostedMigrationException; use App\Exceptions\MigrationValidatorFailed; use App\Exceptions\NonExistingMigrationFile; use App\Exceptions\ProcessingMigrationArchiveFailed; @@ -126,7 +127,7 @@ class StartMigration implements ShouldQueue App::forgetInstance('translator'); $t = app('translator'); $t->replace(Ninja::transformTranslations($this->company->settings)); - } catch (NonExistingMigrationFile | ProcessingMigrationArchiveFailed | ResourceNotAvailableForMigration | MigrationValidatorFailed | ResourceDependencyMissing | \Exception $e) { + } catch (ClientHostedMigrationException | NonExistingMigrationFile | ProcessingMigrationArchiveFailed | ResourceNotAvailableForMigration | MigrationValidatorFailed | ResourceDependencyMissing | \Exception $e) { $this->company->update_products = $update_product_flag; $this->company->save(); diff --git a/app/Mail/MigrationFailed.php b/app/Mail/MigrationFailed.php index 3932108ee4d8..af9fc209b125 100644 --- a/app/Mail/MigrationFailed.php +++ b/app/Mail/MigrationFailed.php @@ -42,6 +42,7 @@ class MigrationFailed extends Mailable ->from(config('mail.from.address'), config('mail.from.name')) ->text('email.migration.failed_text') ->view('email.migration.failed', [ + 'special_message' => '', 'logo' => $this->company->present()->logo(), 'settings' => $this->company->settings, 'is_system' => $this->is_system, diff --git a/resources/views/email/migration/failed.blade.php b/resources/views/email/migration/failed.blade.php index e13eca301a56..1f9c74d41e0c 100644 --- a/resources/views/email/migration/failed.blade.php +++ b/resources/views/email/migration/failed.blade.php @@ -8,6 +8,8 @@ {!! $exception->getMessage() !!} {!! $content !!} @else + @if($special_message) + @endif
Please contact us at contact@invoiceninja.com for more information on this error.
@endif diff --git a/tests/Feature/PurchaseOrderTest.php b/tests/Feature/PurchaseOrderTest.php index 19ce7455013a..323732774d8a 100644 --- a/tests/Feature/PurchaseOrderTest.php +++ b/tests/Feature/PurchaseOrderTest.php @@ -91,7 +91,7 @@ class PurchaseOrderTest extends TestCase $data = [ 'ids' =>[$this->purchase_order->hashed_id], - 'action' => 'email', + 'action' => 'download', ]; $response = $this->withHeaders([