mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2025-11-17 15:18:05 +00:00
First code for file import.
This commit is contained in:
@@ -30,7 +30,7 @@ use Illuminate\Support\MessageBag;
|
||||
/**
|
||||
* Class FakeJobConfiguration
|
||||
*/
|
||||
class FakeJobConfiguration implements JobConfiguratorInterface
|
||||
class FakeJobConfiguration implements JobConfigurationInterface
|
||||
{
|
||||
/** @var ImportJob */
|
||||
private $job;
|
||||
@@ -60,7 +60,8 @@ class FakeJobConfiguration implements JobConfiguratorInterface
|
||||
$config = $this->job->configuration;
|
||||
if ($this->job->stage === 'new') {
|
||||
return (isset($config['artist']) && 'david bowie' === strtolower($config['artist']))
|
||||
&& (isset($config['song']) && 'golden years' === strtolower($config['song']));
|
||||
&& (isset($config['song']) && 'golden years' === strtolower($config['song']))
|
||||
&& isset($config['apply-rules']);
|
||||
}
|
||||
|
||||
return isset($config['album']) && 'station to station' === strtolower($config['album']);
|
||||
@@ -80,6 +81,7 @@ class FakeJobConfiguration implements JobConfiguratorInterface
|
||||
$artist = strtolower($data['artist'] ?? '');
|
||||
$song = strtolower($data['song'] ?? '');
|
||||
$album = strtolower($data['album'] ?? '');
|
||||
$applyRules = isset($data['apply-rules']) ? (int)$data['apply-rules'] === 1 : null;
|
||||
$configuration = $this->job->configuration;
|
||||
if ($artist === 'david bowie') {
|
||||
// store artist
|
||||
@@ -91,17 +93,20 @@ class FakeJobConfiguration implements JobConfiguratorInterface
|
||||
$configuration['song'] = $song;
|
||||
}
|
||||
|
||||
if ($album=== 'station to station') {
|
||||
if ($album === 'station to station') {
|
||||
// store album
|
||||
$configuration['album'] = $album;
|
||||
}
|
||||
if (null !== $applyRules) {
|
||||
$configuration['apply-rules'] = $applyRules;
|
||||
}
|
||||
|
||||
$this->repository->setConfiguration($this->job, $configuration);
|
||||
$messages = new MessageBag();
|
||||
|
||||
if (\count($configuration) !== 2) {
|
||||
if (\count($configuration) !== 3) {
|
||||
|
||||
$messages->add('some_key', 'Ignore this error');
|
||||
$messages->add('some_key', 'Ignore this error: ' . \count($configuration));
|
||||
}
|
||||
|
||||
return $messages;
|
||||
@@ -128,7 +133,11 @@ class FakeJobConfiguration implements JobConfiguratorInterface
|
||||
$config = $this->job->configuration;
|
||||
$artist = $config['artist'] ?? '';
|
||||
$song = $config['song'] ?? '';
|
||||
$album = $config['album'] ?? '';
|
||||
$album = $config['album'] ?? '';
|
||||
$applyRules = $config['apply-rules'] ?? null;
|
||||
if (null === $applyRules) {
|
||||
return 'import.fake.apply-rules';
|
||||
}
|
||||
if (strtolower($artist) !== 'david bowie') {
|
||||
return 'import.fake.enter-artist';
|
||||
}
|
||||
|
||||
157
app/Import/JobConfiguration/FileJobConfiguration.php
Normal file
157
app/Import/JobConfiguration/FileJobConfiguration.php
Normal file
@@ -0,0 +1,157 @@
|
||||
<?php
|
||||
|
||||
namespace FireflyIII\Import\JobConfiguration;
|
||||
|
||||
|
||||
use FireflyIII\Exceptions\FireflyException;
|
||||
use FireflyIII\Models\ImportJob;
|
||||
use FireflyIII\Repositories\ImportJob\ImportJobRepositoryInterface;
|
||||
use FireflyIII\Support\Import\Configuration\ConfigurationInterface;
|
||||
use FireflyIII\Support\Import\Configuration\File\Initial;
|
||||
use FireflyIII\Support\Import\Configuration\File\Map;
|
||||
use FireflyIII\Support\Import\Configuration\File\Roles;
|
||||
use FireflyIII\Support\Import\Configuration\File\UploadConfig;
|
||||
use Illuminate\Support\MessageBag;
|
||||
use Log;
|
||||
|
||||
/**
|
||||
* Class FileJobConfiguration
|
||||
*
|
||||
* @package FireflyIII\Import\JobConfiguration
|
||||
*/
|
||||
class FileJobConfiguration implements JobConfigurationInterface
|
||||
{
|
||||
/** @var ImportJob */
|
||||
private $job;
|
||||
|
||||
/** @var ImportJobRepositoryInterface */
|
||||
private $repository;
|
||||
|
||||
/**
|
||||
* ConfiguratorInterface constructor.
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
$this->repository = app(ImportJobRepositoryInterface::class);
|
||||
}
|
||||
|
||||
/**
|
||||
* Store any data from the $data array into the job. Anything in the message bag will be flashed
|
||||
* as an error to the user, regardless of its content.
|
||||
*
|
||||
* @param array $data
|
||||
*
|
||||
* @return MessageBag
|
||||
* @throws FireflyException
|
||||
*/
|
||||
public function configureJob(array $data): MessageBag
|
||||
{
|
||||
/** @var ConfigurationInterface $object */
|
||||
$object = app($this->getConfigurationClass());
|
||||
$object->setJob($this->job);
|
||||
$result = $object->storeConfiguration($data);
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the data required for the next step in the job configuration.
|
||||
*
|
||||
* @return array
|
||||
* @throws FireflyException
|
||||
*/
|
||||
public function getNextData(): array
|
||||
{
|
||||
/** @var ConfigurationInterface $object */
|
||||
$object = app($this->getConfigurationClass());
|
||||
$object->setJob($this->job);
|
||||
|
||||
return $object->getData();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the view of the next step in the job configuration.
|
||||
*
|
||||
* @return string
|
||||
* @throws FireflyException
|
||||
*/
|
||||
public function getNextView(): string
|
||||
{
|
||||
switch ($this->job->stage) {
|
||||
case 'new': // has nothing, no file upload or anything.
|
||||
return 'import.file.new';
|
||||
case 'upload-config': // has file, needs file config.
|
||||
return 'import.file.upload-config';
|
||||
case 'roles': // has configured file, needs roles.
|
||||
return 'import.file.roles';
|
||||
case 'map': // has roles, needs mapping.
|
||||
return 'import.file.map';
|
||||
}
|
||||
throw new FireflyException(sprintf('No view for stage "%s"', $this->job->stage));
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true when the initial configuration for this job is complete.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function configurationComplete(): bool
|
||||
{
|
||||
if ('ready' === $this->job->stage) {
|
||||
Log::debug('isJobConfigured returns true');
|
||||
|
||||
return true;
|
||||
}
|
||||
Log::debug('isJobConfigured returns false');
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param ImportJob $job
|
||||
*/
|
||||
public function setJob(ImportJob $job): void
|
||||
{
|
||||
$this->job = $job;
|
||||
$this->repository->setUser($job->user);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*
|
||||
* @throws FireflyException
|
||||
*/
|
||||
private function getConfigurationClass(): string
|
||||
{
|
||||
$class = false;
|
||||
Log::debug(sprintf('Now in getConfigurationClass() for stage "%s"', $this->job->stage));
|
||||
|
||||
switch ($this->job->stage) {
|
||||
case 'new': // has nothing, no file upload or anything.
|
||||
$class = Initial::class;
|
||||
break;
|
||||
case 'upload-config': // has file, needs file config.
|
||||
$class = UploadConfig::class;
|
||||
break;
|
||||
case 'roles': // has configured file, needs roles.
|
||||
$class = Roles::class;
|
||||
break;
|
||||
case 'map': // has roles, needs mapping.
|
||||
$class = Map::class;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (false === $class || 0 === \strlen($class)) {
|
||||
throw new FireflyException(sprintf('Cannot handle job stage "%s" in getConfigurationClass().', $this->job->stage));
|
||||
}
|
||||
if (!class_exists($class)) {
|
||||
throw new FireflyException(sprintf('Class %s does not exist in getConfigurationClass().', $class)); // @codeCoverageIgnore
|
||||
}
|
||||
Log::debug(sprintf('Configuration class is "%s"', $class));
|
||||
|
||||
return $class;
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
<?php
|
||||
/**
|
||||
* JobConfiguratorInterface.php
|
||||
* JobConfigurationInterface.php
|
||||
* Copyright (c) 2018 thegrumpydictator@gmail.com
|
||||
*
|
||||
* This file is part of Firefly III.
|
||||
@@ -26,9 +26,9 @@ use FireflyIII\Models\ImportJob;
|
||||
use Illuminate\Support\MessageBag;
|
||||
|
||||
/**
|
||||
* Interface JobConfiguratorInterface.
|
||||
* Interface JobConfigurationInterface.
|
||||
*/
|
||||
interface JobConfiguratorInterface
|
||||
interface JobConfigurationInterface
|
||||
{
|
||||
/**
|
||||
* ConfiguratorInterface constructor.
|
||||
Reference in New Issue
Block a user