argument('file'); $configuration = $this->argument('configuration'); $user = $userRepository->find(intval($this->option('user'))); $cwd = getcwd(); $type = strtolower($this->option('type')); if (!$this->validArguments()) { return; } // try to parse configuration data: $configurationData = json_decode(file_get_contents($configuration)); if (is_null($configurationData)) { $this->error(sprintf('Firefly III cannot read the contents of configuration file "%s" (working directory: "%s").', $configuration, $cwd)); return; } $this->info(sprintf('Going to create a job to import file: %s', $file)); $this->info(sprintf('Using configuration file: %s', $configuration)); $this->info(sprintf('Import into user: #%d (%s)', $user->id, $user->email)); $this->info(sprintf('Type of import: %s', $type)); /** @var ImportJobRepositoryInterface $jobRepository */ $jobRepository = app(ImportJobRepositoryInterface::class, [$user]); $job = $jobRepository->create($type); $this->line(sprintf('Created job "%s"...', $job->key)); // put the file in the proper place: Artisan::call('firefly:encrypt', ['file' => $file, 'key' => $job->key]); $this->line('Stored import data...'); // store the configuration in the job: $job->configuration = $configurationData; $job->status = 'settings_complete'; $job->save(); $this->line('Stored configuration...'); // if user wants to run it, do! if ($this->option('start') === true) { $this->line('The import will start in a moment. This process is not visible...'); Log::debug('Go for import!'); Artisan::call('firefly:start-import', ['key' => $job->key]); $this->line('Done!'); } return; } /** * @return bool */ private function validArguments(): bool { // find the file /** @var UserRepositoryInterface $userRepository */ $userRepository = app(UserRepositoryInterface::class); $file = $this->argument('file'); $configuration = $this->argument('configuration'); $user = $userRepository->find(intval($this->option('user'))); $cwd = getcwd(); $validTypes = array_keys(config('firefly.import_formats')); $type = strtolower($this->option('type')); if (is_null($user->id)) { $this->error(sprintf('There is no user with ID %d.', $this->option('user'))); return false; } if (!in_array($type, $validTypes)) { $this->error(sprintf('Cannot import file of type "%s"', $type)); return false; } if (!file_exists($file)) { $this->error(sprintf('Firefly III cannot find file "%s" (working directory: "%s").', $file, $cwd)); return false; } if (!file_exists($configuration)) { $this->error(sprintf('Firefly III cannot find configuration file "%s" (working directory: "%s").', $configuration, $cwd)); return false; } return true; } }