diff --git a/app/Http/Controllers/Import/BankController.php b/app/Http/Controllers/Import/BankController.php index 125f8968d3..1b9358eed9 100644 --- a/app/Http/Controllers/Import/BankController.php +++ b/app/Http/Controllers/Import/BankController.php @@ -50,80 +50,16 @@ class BankController extends Controller if (!class_exists($class)) { throw new FireflyException(sprintf('Cannot find class %s', $class)); } - $importJob = $repository->create($bank); + $importJob = $repository->create($bank); + $config = $importJob->configuration; + $config['has-config-file'] = false; + $config['auto-start'] = true; + $importJob->configuration = $config; + $importJob->save(); return redirect(route('import.file.configure', [$importJob->key])); } - /** - * This method processes the prerequisites the user has entered in the previous step. - * - * Whatever storePrerequisites does, it should make sure that the system is ready to continue immediately. So - * no extra calls or stuff, except maybe to open a session - * - * @see PrerequisitesInterface::storePrerequisites - * - * @param Request $request - * @param string $bank - * - * @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector - * @throws FireflyException - */ - public function postPrerequisites(Request $request, string $bank) - { - Log::debug(sprintf('Now in postPrerequisites for %s', $bank)); - $class = config(sprintf('firefly.import_pre.%s', $bank)); - if (!class_exists($class)) { - throw new FireflyException(sprintf('Cannot find class %s', $class)); - } - /** @var PrerequisitesInterface $object */ - $object = app($class); - $object->setUser(auth()->user()); - if (!$object->hasPrerequisites()) { - Log::debug(sprintf('No more prerequisites for %s, move to form.', $bank)); - return redirect(route('import.bank.create-job', [$bank])); - } - Log::debug('Going to store entered preprerequisites.'); - // store post data - $result = $object->storePrerequisites($request); - if ($result->count() > 0) { - Session::flash('error', $result->first()); - - return redirect(route('import.bank.prerequisites', [$bank])); - } - - return redirect(route('import.bank.create-job', [$bank])); - } - - /** - * This method shows you, if necessary, a form that allows you to enter any required values, such as API keys, - * login passwords or other values. - * - * @param string $bank - * - * @return \Illuminate\Contracts\View\Factory|\Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector|\Illuminate\View\View - * @throws FireflyException - */ - public function prerequisites(string $bank) - { - $class = config(sprintf('firefly.import_pre.%s', $bank)); - if (!class_exists($class)) { - throw new FireflyException(sprintf('Cannot find class %s', $class)); - } - /** @var PrerequisitesInterface $object */ - $object = app($class); - $object->setUser(auth()->user()); - - if ($object->hasPrerequisites()) { - $view = $object->getView(); - $parameters = ['title' => strval(trans('firefly.import_index_title')), 'mainTitleIcon' => 'fa-archive']; - $parameters = $object->getViewParameters() + $parameters; - - return view($view, $parameters); - } - - return redirect(route('import.bank.create-job', [$bank])); - } } diff --git a/app/Http/Controllers/Import/ConfigurationController.php b/app/Http/Controllers/Import/ConfigurationController.php new file mode 100644 index 0000000000..79ea3ae368 --- /dev/null +++ b/app/Http/Controllers/Import/ConfigurationController.php @@ -0,0 +1,87 @@ +middleware( + function ($request, $next) { + app('view')->share('mainTitleIcon', 'fa-archive'); + app('view')->share('title', trans('firefly.import_index_title')); + $this->repository = app(ImportJobRepositoryInterface::class); + + return $next($request); + } + ); + } + + /** + * Configure the job. This method is returned to until job is deemed "configured". + * + * @param ImportJob $job + * + * @return \Illuminate\Contracts\View\Factory|\Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector|\Illuminate\View\View + * @throws FireflyException + */ + public function index(ImportJob $job) + { + // create configuration class: + $configurator = $this->makeConfigurator($job); + + // is the job already configured? + if ($configurator->isJobConfigured()) { + $this->repository->updateStatus($job, 'configured'); + + return redirect(route('import.file.status', [$job->key])); + } + $view = $configurator->getNextView(); + $data = $configurator->getNextData(); + $subTitle = trans('firefly.import_config_bread_crumb'); + $subTitleIcon = 'fa-wrench'; + + return view($view, compact('data', 'job', 'subTitle', 'subTitleIcon')); + } + + /** + * @param ImportJob $job + * + * @return ConfiguratorInterface + * + * @throws FireflyException + */ + private function makeConfigurator(ImportJob $job): ConfiguratorInterface + { + $type = $job->file_type; + $key = sprintf('import.configuration.%s', $type); + $className = config($key); + if (null === $className || !class_exists($className)) { + throw new FireflyException(sprintf('Cannot find configurator class for job of type "%s".',$type)); // @codeCoverageIgnore + } + /** @var ConfiguratorInterface $configurator */ + $configurator = app($className); + $configurator->setJob($job); + + return $configurator; + } +} \ No newline at end of file diff --git a/app/Http/Controllers/Import/FileController.php b/app/Http/Controllers/Import/FileController.php index ff6c86b48c..575c47ae1f 100644 --- a/app/Http/Controllers/Import/FileController.php +++ b/app/Http/Controllers/Import/FileController.php @@ -54,8 +54,8 @@ class FileController extends Controller $this->middleware( function ($request, $next) { - View::share('mainTitleIcon', 'fa-archive'); - View::share('title', trans('firefly.import_index_title')); + app('view')->share('mainTitleIcon', 'fa-archive'); + app('view')->share('title', trans('firefly.import_index_title')); $this->repository = app(ImportJobRepositoryInterface::class); return $next($request); @@ -107,6 +107,7 @@ class FileController extends Controller $config['column-roles-complete'] = false; $config['column-mapping-complete'] = false; $config['initial-config-complete'] = false; + $config['has-file-upload'] = false; $config['delimiter'] = "\t" === $config['delimiter'] ? 'tab' : $config['delimiter']; $result = json_encode($config, JSON_PRETTY_PRINT); diff --git a/app/Http/Controllers/Import/IndexController.php b/app/Http/Controllers/Import/IndexController.php new file mode 100644 index 0000000000..efaf516f35 --- /dev/null +++ b/app/Http/Controllers/Import/IndexController.php @@ -0,0 +1,72 @@ +middleware( + function ($request, $next) { + app('view')->share('mainTitleIcon', 'fa-archive'); + app('view')->share('title', trans('firefly.import_index_title')); + $this->repository = app(ImportJobRepositoryInterface::class); + + return $next($request); + } + ); + } + + /** + * Creates a new import job for $bank with the default (global) job configuration. + * + * @param string $bank + * + * @throws FireflyException + */ + public function create(string $bank) + { + if (!(config(sprintf('import.enabled.%s', $bank))) === true) { + throw new FireflyException(sprintf('Cannot import from "%s" at this time.', $bank)); + } + + $importJob = $this->repository->create($bank); + + // from here, always go to configure step. + return redirect(route('import.configure', [$importJob->key])); + + } + + /** + * General import index. + * + * @return View + */ + public function index() + { + $subTitle = trans('firefly.import_index_sub_title'); + $subTitleIcon = 'fa-home'; + $routines = config('import.enabled'); + + return view('import.index', compact('subTitle', 'subTitleIcon', 'routines')); + } + +} \ No newline at end of file diff --git a/app/Http/Controllers/Import/PrerequisitesController.php b/app/Http/Controllers/Import/PrerequisitesController.php new file mode 100644 index 0000000000..3f475d4d8e --- /dev/null +++ b/app/Http/Controllers/Import/PrerequisitesController.php @@ -0,0 +1,97 @@ +setUser(auth()->user()); + + if ($object->hasPrerequisites()) { + $view = $object->getView(); + $parameters = ['title' => strval(trans('firefly.import_index_title')), 'mainTitleIcon' => 'fa-archive']; + $parameters = $object->getViewParameters() + $parameters; + + return view($view, $parameters); + } + + // if no (more) prerequisites, return to create a job: + return redirect(route('import.create-job', [$bank])); + } + + /** + * This method processes the prerequisites the user has entered in the previous step. + * + * Whatever storePrerequisites does, it should make sure that the system is ready to continue immediately. So + * no extra calls or stuff, except maybe to open a session + * + * @see PrerequisitesInterface::storePrerequisites + * + * @param Request $request + * @param string $bank + * + * @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector + * @throws FireflyException + */ + public function postPrerequisites(Request $request, string $bank) + { + Log::debug(sprintf('Now in postPrerequisites for %s', $bank)); + $class = config(sprintf('firefly.import_pre.%s', $bank)); + if (!class_exists($class)) { + throw new FireflyException(sprintf('Cannot find class %s', $class)); + } + /** @var PrerequisitesInterface $object */ + $object = app($class); + $object->setUser(auth()->user()); + if (!$object->hasPrerequisites()) { + Log::debug(sprintf('No more prerequisites for %s, move to form.', $bank)); + + return redirect(route('import.create-job', [$bank])); + } + Log::debug('Going to store entered prerequisites.'); + // store post data + $result = $object->storePrerequisites($request); + + if ($result->count() > 0) { + $request->session()->flash('error', $result->first()); + + return redirect(route('import.prerequisites', [$bank])); + } + + return redirect(route('import.create-job', [$bank])); + } + + +} \ No newline at end of file diff --git a/app/Http/Controllers/ImportController.php b/app/Http/Controllers/ImportController.php deleted file mode 100644 index 8d513b1e91..0000000000 --- a/app/Http/Controllers/ImportController.php +++ /dev/null @@ -1,72 +0,0 @@ -. - */ -declare(strict_types=1); - -namespace FireflyIII\Http\Controllers; - -use FireflyIII\Repositories\ImportJob\ImportJobRepositoryInterface; -use View; - -/** - * Class ImportController. - */ -class ImportController extends Controller -{ - /** @var ImportJobRepositoryInterface */ - public $repository; - - /** - * - */ - public function __construct() - { - parent::__construct(); - - $this->middleware( - function ($request, $next) { - View::share('mainTitleIcon', 'fa-archive'); - View::share('title', trans('firefly.import_index_title')); - $this->repository = app(ImportJobRepositoryInterface::class); - - return $next($request); - } - ); - } - - /** - * General import index. - * - * @return View - */ - public function index() - { - $subTitle = trans('firefly.import_index_sub_title'); - $subTitleIcon = 'fa-home'; - $importFileTypes = []; - $defaultImportType = config('firefly.default_import_format'); - - foreach (array_keys(config('firefly.import_formats')) as $type) { - $importFileTypes[$type] = trans('firefly.import_file_type_' . $type); - } - - return view('import.index', compact('subTitle', 'subTitleIcon', 'importFileTypes', 'defaultImportType')); - } -} diff --git a/app/Import/Configurator/ConfiguratorInterface.php b/app/Import/Configuration/ConfiguratorInterface.php similarity index 97% rename from app/Import/Configurator/ConfiguratorInterface.php rename to app/Import/Configuration/ConfiguratorInterface.php index a6781310c7..3e5ad71f30 100644 --- a/app/Import/Configurator/ConfiguratorInterface.php +++ b/app/Import/Configuration/ConfiguratorInterface.php @@ -20,7 +20,7 @@ */ declare(strict_types=1); -namespace FireflyIII\Import\Configurator; +namespace FireflyIII\Import\Configuration; use FireflyIII\Models\ImportJob; diff --git a/app/Import/Configurator/CsvConfigurator.php b/app/Import/Configuration/FileConfigurator.php similarity index 82% rename from app/Import/Configurator/CsvConfigurator.php rename to app/Import/Configuration/FileConfigurator.php index 79593ca556..1638f017c8 100644 --- a/app/Import/Configurator/CsvConfigurator.php +++ b/app/Import/Configuration/FileConfigurator.php @@ -1,6 +1,6 @@ job->configuration['has-file-upload']) { + return 'import.file.upload'; + } if (!$this->job->configuration['initial-config-complete']) { - return 'import.csv.initial'; + return 'import.file.initial'; } if (!$this->job->configuration['column-roles-complete']) { - return 'import.csv.roles'; + return 'import.file.roles'; } if (!$this->job->configuration['column-mapping-complete']) { - return 'import.csv.map'; + return 'import.file.map'; } throw new FireflyException('No view for state'); @@ -124,15 +128,17 @@ class CsvConfigurator implements ConfiguratorInterface public function isJobConfigured(): bool { $config = $this->job->configuration; + $config['has-file-upload'] = $config['has-file-upload'] ?? false; $config['initial-config-complete'] = $config['initial-config-complete'] ?? false; $config['column-roles-complete'] = $config['column-roles-complete'] ?? false; $config['column-mapping-complete'] = $config['column-mapping-complete'] ?? false; $this->job->configuration = $config; $this->job->save(); - if ($this->job->configuration['initial-config-complete'] - && $this->job->configuration['column-roles-complete'] - && $this->job->configuration['column-mapping-complete'] + if ($config['initial-config-complete'] + && $config['column-roles-complete'] + && $config['column-mapping-complete'] + && $config['has-file-upload'] ) { return true; } @@ -162,6 +168,9 @@ class CsvConfigurator implements ConfiguratorInterface { $class = false; switch (true) { + case !$this->job->configuration['has-file-upload']: + $class = Upload::class; + break; case !$this->job->configuration['initial-config-complete']: $class = Initial::class; break; diff --git a/app/Import/Configurator/SpectreConfigurator.php b/app/Import/Configuration/SpectreConfigurator.php similarity index 88% rename from app/Import/Configurator/SpectreConfigurator.php rename to app/Import/Configuration/SpectreConfigurator.php index da118f8363..d2cb4a6a33 100644 --- a/app/Import/Configurator/SpectreConfigurator.php +++ b/app/Import/Configuration/SpectreConfigurator.php @@ -20,14 +20,14 @@ */ declare(strict_types=1); -namespace FireflyIII\Import\Configurator; +namespace FireflyIII\Import\Configuration; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Models\ImportJob; use FireflyIII\Support\Import\Configuration\ConfigurationInterface; -use FireflyIII\Support\Import\Configuration\Spectre\SelectProvider; use FireflyIII\Support\Import\Configuration\Spectre\InputMandatory; use FireflyIII\Support\Import\Configuration\Spectre\SelectCountry; +use FireflyIII\Support\Import\Configuration\Spectre\SelectProvider; use Log; /** @@ -123,14 +123,16 @@ class SpectreConfigurator implements ConfiguratorInterface */ public function isJobConfigured(): bool { - $config = $this->job->configuration; - $config['selected-country'] = $config['selected-country'] ?? false; - $config['selected-provider'] = $config['selected-provider'] ?? false; - $config['has-input-mandatory'] = $config['has-input-mandatory'] ?? false; - $this->job->configuration = $config; + $config = $this->job->configuration; + $config['selected-country'] = $config['selected-country'] ?? false; + $config['selected-provider'] = $config['selected-provider'] ?? false; + $config['has-input-mandatory'] = $config['has-input-mandatory'] ?? false; + $config['has-input-interactive'] = $config['has-input-interactive'] ?? true; // defaults to true. + $this->job->configuration = $config; $this->job->save(); - if ($config['selected-country'] && $config['selected-provider'] && $config['has-input-mandatory'] && false) { + if ($config['selected-country'] && $config['selected-provider'] && $config['has-input-mandatory'] && $config['has-input-interactive']) { + // give job another status return true; } diff --git a/app/Support/Import/Prerequisites/BunqPrerequisites.php b/app/Import/Prerequisites/BunqPrerequisites.php similarity index 99% rename from app/Support/Import/Prerequisites/BunqPrerequisites.php rename to app/Import/Prerequisites/BunqPrerequisites.php index 75614b3762..b2ec238eb4 100644 --- a/app/Support/Import/Prerequisites/BunqPrerequisites.php +++ b/app/Import/Prerequisites/BunqPrerequisites.php @@ -20,7 +20,7 @@ */ declare(strict_types=1); -namespace FireflyIII\Support\Import\Prerequisites; +namespace FireflyIII\Import\Prerequisites; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Services\Bunq\Id\DeviceServerId; @@ -332,4 +332,4 @@ class BunqPrerequisites implements PrerequisitesInterface return $deviceServerId; } -} +} \ No newline at end of file diff --git a/app/Import/Prerequisites/FilePrerequisites.php b/app/Import/Prerequisites/FilePrerequisites.php new file mode 100644 index 0000000000..8456cbc457 --- /dev/null +++ b/app/Import/Prerequisites/FilePrerequisites.php @@ -0,0 +1,96 @@ +. + */ +declare(strict_types=1); + +namespace FireflyIII\Import\Prerequisites; + +use FireflyIII\User; +use Illuminate\Http\Request; +use Illuminate\Support\MessageBag; + +/** + * This class contains all the routines necessary to import from a file. Hint: there are none. + */ +class FilePrerequisites implements PrerequisitesInterface +{ + /** @var User */ + private $user; + + /** + * Returns view name that allows user to fill in prerequisites. Currently asks for the API key. + * + * @return string + */ + public function getView(): string + { + return ''; + } + + /** + * Returns any values required for the prerequisites-view. + * + * @return array + */ + public function getViewParameters(): array + { + return []; + } + + /** + * Returns if this import method has any special prerequisites such as config + * variables or other things. The only thing we verify is the presence of the API key. Everything else + * tumbles into place: no installation token? Will be requested. No device server? Will be created. Etc. + * + * True if prerequisites. False if not. + * + * @return bool + */ + public function hasPrerequisites(): bool + { + return false; + } + + /** + * Set the user for this Prerequisites-routine. Class is expected to implement and save this. + * + * @param User $user + */ + public function setUser(User $user): void + { + $this->user = $user; + + return; + } + + /** + * This method responds to the user's submission of an API key. It tries to register this instance as a new Firefly III device. + * If this fails, the error is returned in a message bag and the user is notified (this is fairly friendly). + * + * @param Request $request + * + * @return MessageBag + */ + public function storePrerequisites(Request $request): MessageBag + { + return new MessageBag; + } + +} diff --git a/app/Support/Import/Prerequisites/PrerequisitesInterface.php b/app/Import/Prerequisites/PrerequisitesInterface.php similarity index 97% rename from app/Support/Import/Prerequisites/PrerequisitesInterface.php rename to app/Import/Prerequisites/PrerequisitesInterface.php index e52fad7d61..0423f696e0 100644 --- a/app/Support/Import/Prerequisites/PrerequisitesInterface.php +++ b/app/Import/Prerequisites/PrerequisitesInterface.php @@ -20,7 +20,7 @@ */ declare(strict_types=1); -namespace FireflyIII\Support\Import\Prerequisites; +namespace FireflyIII\Import\Prerequisites; use FireflyIII\User; use Illuminate\Http\Request; diff --git a/app/Support/Import/Prerequisites/SpectrePrerequisites.php b/app/Import/Prerequisites/SpectrePrerequisites.php similarity index 99% rename from app/Support/Import/Prerequisites/SpectrePrerequisites.php rename to app/Import/Prerequisites/SpectrePrerequisites.php index d67960b139..3e6fae0b0a 100644 --- a/app/Support/Import/Prerequisites/SpectrePrerequisites.php +++ b/app/Import/Prerequisites/SpectrePrerequisites.php @@ -20,7 +20,7 @@ */ declare(strict_types=1); -namespace FireflyIII\Support\Import\Prerequisites; +namespace FireflyIII\Import\Prerequisites; use FireflyIII\Jobs\GetSpectreProviders; use FireflyIII\Models\Preference; diff --git a/app/Repositories/ImportJob/ImportJobRepository.php b/app/Repositories/ImportJob/ImportJobRepository.php index c3bef54aee..c2e3bd81d6 100644 --- a/app/Repositories/ImportJob/ImportJobRepository.php +++ b/app/Repositories/ImportJob/ImportJobRepository.php @@ -42,20 +42,16 @@ class ImportJobRepository implements ImportJobRepositoryInterface private $user; /** - * @param string $fileType + * @param string $type * * @return ImportJob * * @throws FireflyException */ - public function create(string $fileType): ImportJob + public function create(string $type): ImportJob { - $count = 0; - $fileType = strtolower($fileType); - $keys = array_keys(config('firefly.import_formats')); - if (!in_array($fileType, $keys)) { - throw new FireflyException(sprintf('Cannot use type "%s" for import job.', $fileType)); - } + $count = 0; + $type = strtolower($type); while ($count < 30) { $key = Str::random(12); @@ -63,10 +59,10 @@ class ImportJobRepository implements ImportJobRepositoryInterface if (null === $existing->id) { $importJob = new ImportJob; $importJob->user()->associate($this->user); - $importJob->file_type = $fileType; + $importJob->file_type = $type; $importJob->key = Str::random(12); $importJob->status = 'new'; - $importJob->configuration = []; + $importJob->configuration = config(sprintf('import.default_config.%s', $type)) ?? []; $importJob->extended_status = [ 'steps' => 0, 'done' => 0, @@ -80,8 +76,7 @@ class ImportJobRepository implements ImportJobRepositoryInterface } ++$count; } - - return new ImportJob; + throw new FireflyException('Could not create an import job with a unique key after 30 tries.'); } /** diff --git a/app/Repositories/ImportJob/ImportJobRepositoryInterface.php b/app/Repositories/ImportJob/ImportJobRepositoryInterface.php index ad74c4e021..a2a9869eaf 100644 --- a/app/Repositories/ImportJob/ImportJobRepositoryInterface.php +++ b/app/Repositories/ImportJob/ImportJobRepositoryInterface.php @@ -32,11 +32,11 @@ use Symfony\Component\HttpFoundation\File\UploadedFile; interface ImportJobRepositoryInterface { /** - * @param string $fileType + * @param string $type * * @return ImportJob */ - public function create(string $fileType): ImportJob; + public function create(string $type): ImportJob; /** * @param string $key diff --git a/app/Support/Import/Configuration/Csv/Initial.php b/app/Support/Import/Configuration/File/Initial.php similarity index 98% rename from app/Support/Import/Configuration/Csv/Initial.php rename to app/Support/Import/Configuration/File/Initial.php index 88a3ca00e2..0e5e903ec8 100644 --- a/app/Support/Import/Configuration/Csv/Initial.php +++ b/app/Support/Import/Configuration/File/Initial.php @@ -20,7 +20,7 @@ */ declare(strict_types=1); -namespace FireflyIII\Support\Import\Configuration\Csv; +namespace FireflyIII\Support\Import\Configuration\File; use ExpandedForm; use FireflyIII\Models\AccountType; diff --git a/app/Support/Import/Configuration/Csv/Map.php b/app/Support/Import/Configuration/File/Map.php similarity index 99% rename from app/Support/Import/Configuration/Csv/Map.php rename to app/Support/Import/Configuration/File/Map.php index 449124bbb8..fa7b7428e2 100644 --- a/app/Support/Import/Configuration/Csv/Map.php +++ b/app/Support/Import/Configuration/File/Map.php @@ -20,7 +20,7 @@ */ declare(strict_types=1); -namespace FireflyIII\Support\Import\Configuration\Csv; +namespace FireflyIII\Support\Import\Configuration\File; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Import\Mapper\MapperInterface; diff --git a/app/Support/Import/Configuration/Csv/Roles.php b/app/Support/Import/Configuration/File/Roles.php similarity index 99% rename from app/Support/Import/Configuration/Csv/Roles.php rename to app/Support/Import/Configuration/File/Roles.php index f0d1f206c5..f39f698d2b 100644 --- a/app/Support/Import/Configuration/Csv/Roles.php +++ b/app/Support/Import/Configuration/File/Roles.php @@ -20,7 +20,7 @@ */ declare(strict_types=1); -namespace FireflyIII\Support\Import\Configuration\Csv; +namespace FireflyIII\Support\Import\Configuration\File; use FireflyIII\Import\Specifics\SpecificInterface; use FireflyIII\Models\ImportJob; diff --git a/app/Support/Import/Configuration/File/Upload.php b/app/Support/Import/Configuration/File/Upload.php new file mode 100644 index 0000000000..b31e2915b9 --- /dev/null +++ b/app/Support/Import/Configuration/File/Upload.php @@ -0,0 +1,89 @@ +. + */ +declare(strict_types=1); + +namespace FireflyIII\Support\Import\Configuration\File; + +use FireflyIII\Import\Specifics\SpecificInterface; +use FireflyIII\Models\ImportJob; +use FireflyIII\Support\Import\Configuration\ConfigurationInterface; +use League\Csv\Reader; +use League\Csv\Statement; +use Log; + +/** + * Class Upload. + */ +class Upload implements ConfigurationInterface +{ + /** @var ImportJob */ + private $job; + + /** @var string */ + private $warning = ''; + + /** + * Get the data necessary to show the configuration screen. + * + * @return array + */ + public function getData(): array + { + return []; + } + + /** + * Return possible warning to user. + * + * @return string + */ + public function getWarningMessage(): string + { + return $this->warning; + } + + /** + * @param ImportJob $job + * + * @return ConfigurationInterface + */ + public function setJob(ImportJob $job): ConfigurationInterface + { + $this->job = $job; + + return $this; + } + + /** + * Store the result. + * + * @param array $data + * + * @return bool + */ + public function storeConfiguration(array $data): bool + { + echo 'do something with data.'; + exit; + return true; + } + +} diff --git a/config/firefly.php b/config/firefly.php index 3552a917ee..e389c8bc5d 100644 --- a/config/firefly.php +++ b/config/firefly.php @@ -44,18 +44,9 @@ return [ 'csv' => 'FireflyIII\Import\Configurator\CsvConfigurator', 'spectre' => '', ], - 'import_configurators' => [ - 'csv' => 'FireflyIII\Import\Configurator\CsvConfigurator', - 'spectre' => 'FireflyIII\Import\Configurator\SpectreConfigurator', - ], 'import_processors' => [ 'csv' => 'FireflyIII\Import\FileProcessor\CsvProcessor', ], - 'import_pre' => [ - 'bunq' => 'FireflyIII\Support\Import\Prerequisites\BunqPrerequisites', - 'spectre' => 'FireflyIII\Support\Import\Prerequisites\SpectrePrerequisites', - 'plaid' => 'FireflyIII\Support\Import\Prerequisites\PlaidPrerequisites', - ], 'import_info' => [ 'bunq' => 'FireflyIII\Support\Import\Information\BunqInformation', 'spectre' => 'FireflyIII\Support\Import\Information\SpectreInformation', diff --git a/config/import.php b/config/import.php new file mode 100644 index 0000000000..ad8a9d1ff3 --- /dev/null +++ b/config/import.php @@ -0,0 +1,42 @@ + [ + 'file' => true, + 'bunq' => true, + 'spectre' => true, + 'plaid' => true, + ], + 'prerequisites' => [ + 'file' => 'FireflyIII\Import\Prerequisites\FilePrerequisites', + 'bunq' => 'FireflyIII\Import\Prerequisites\BunqPrerequisites', + 'spectre' => 'FireflyIII\Import\Prerequisites\SpectrePrerequisites', + 'plaid' => 'FireflyIII\Import\Prerequisites\PlaidPrerequisites', + + ], + 'configuration' => [ + 'file' => 'FireflyIII\Import\Configuration\FileConfigurator', + 'bunq' => 'FireflyIII\Import\Configuration\BunqConfigurator', + 'spectre' => 'FireflyIII\Import\Configuration\SpectreConfigurator', + 'plaid' => 'FireflyIII\Import\Configuration\PlaidConfigurator', + ], + 'default_config' => [ + 'file' => [ + 'has-config-file' => true, + 'auto-start' => false, + ], + 'bunq' => [ + 'has-config-file' => false, + 'auto-start' => true, + ], + 'spectre' => [ + 'has-config-file' => false, + 'auto-start' => true, + ], + 'plaid' => [ + 'has-config-file' => false, + 'auto-start' => true, + ], + ], +]; \ No newline at end of file diff --git a/public/images/logos/file.png b/public/images/logos/file.png new file mode 100644 index 0000000000..0024f8af41 Binary files /dev/null and b/public/images/logos/file.png differ diff --git a/public/js/ff/import/status.js b/public/js/ff/import/status.js index 09a1aaeae3..02c3bbd073 100644 --- a/public/js/ff/import/status.js +++ b/public/js/ff/import/status.js @@ -36,6 +36,9 @@ $(function () { "use strict"; timeOutId = setTimeout(checkImportStatus, startInterval); $('.start-job').click(startJob); + if(autoStart) { + startJob(); + } }); /** diff --git a/resources/lang/en_US/firefly.php b/resources/lang/en_US/firefly.php index bf9fb278a4..2e0cda0d22 100644 --- a/resources/lang/en_US/firefly.php +++ b/resources/lang/en_US/firefly.php @@ -1079,7 +1079,7 @@ return [ 'import_index_title' => 'Import data into Firefly III', 'import_index_sub_title' => 'Index', 'import_general_index_intro' => 'Welcome to Firefly\'s import routine. There are a few ways of importing data into Firefly III, displayed here as buttons.', - 'import_general_index_csv_file' => 'Import a (CSV) file', + 'import_general_index_file' => 'Import a file', 'import_index_intro' => 'This routine will help you import files from your bank into Firefly III. Please check out the help pages in the top right corner.', 'import_index_file' => 'Select your file', 'import_index_config' => 'If you have previously imported data into Firefly III, you may have a configuration file, which will pre-set configuration values for you. For some banks, other users have kindly provided their configuration file.', diff --git a/resources/views/import/csv/initial.twig b/resources/views/import/file/initial.twig similarity index 97% rename from resources/views/import/csv/initial.twig rename to resources/views/import/file/initial.twig index dce077adea..fbefb1b37c 100644 --- a/resources/views/import/csv/initial.twig +++ b/resources/views/import/file/initial.twig @@ -22,7 +22,7 @@ -