filepath = $filepath; $this->user = $user; $this->company = $company; } /** * Execute the job. * * @return bool */ public function handle() { set_time_limit(0); MultiDB::setDb($this->company->db); auth()->login($this->user, false); auth()->user()->setCompany($this->company); $this->company->is_disabled = true; $this->company->save(); $zip = new ZipArchive(); $archive = $zip->open($this->filepath); $filename = pathinfo($this->filepath, PATHINFO_FILENAME); try { if (! $archive) { throw new ProcessingMigrationArchiveFailed('Processing migration archive failed. Migration file is possibly corrupted.'); } $zip->extractTo(storage_path("migrations/{$filename}")); $zip->close(); if (app()->environment() == 'testing') { return true; } $file = storage_path("migrations/$filename/migration.json"); if (! file_exists($file)) { throw new NonExistingMigrationFile('Migration file does not exist, or it is corrupted.'); } $data = json_decode(file_get_contents($file), 1); Import::dispatchNow($data['data'], $this->company, $this->user); } catch (NonExistingMigrationFile | ProcessingMigrationArchiveFailed | ResourceNotAvailableForMigration | MigrationValidatorFailed | ResourceDependencyMissing $e) { Mail::to($this->user)->send(new MigrationFailed($e, $e->getMessage())); if (app()->environment() !== 'production') { info($e->getMessage()); } } //always make sure we unset the migration as running return true; } public function failed($exception = null) { info(print_r($exception->getMessage(),1)); } }