| 
									
										
										
										
											2018-05-05 16:51:32 +02:00
										 |  |  | <?php | 
					
						
							|  |  |  | declare(strict_types=1); | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * FileJobConfiguration.php | 
					
						
							|  |  |  |  * Copyright (c) 2018 thegrumpydictator@gmail.com | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * This file is part of Firefly III. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Firefly III is free software: you can redistribute it and/or modify | 
					
						
							|  |  |  |  * it under the terms of the GNU General Public License as published by | 
					
						
							|  |  |  |  * the Free Software Foundation, either version 3 of the License, or | 
					
						
							|  |  |  |  * (at your option) any later version. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Firefly III is distributed in the hope that it will be useful, | 
					
						
							|  |  |  |  * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
					
						
							|  |  |  |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
					
						
							|  |  |  |  * GNU General Public License for more details. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * You should have received a copy of the GNU General Public License | 
					
						
							|  |  |  |  * along with Firefly III. If not, see <http://www.gnu.org/licenses/>. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | namespace FireflyIII\Import\JobConfiguration; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-06 07:09:08 +02:00
										 |  |  | use FireflyIII\Exceptions\FireflyException; | 
					
						
							| 
									
										
										
										
											2018-05-05 16:51:32 +02:00
										 |  |  | use FireflyIII\Models\ImportJob; | 
					
						
							| 
									
										
										
										
											2018-05-06 07:09:08 +02:00
										 |  |  | use FireflyIII\Repositories\ImportJob\ImportJobRepositoryInterface; | 
					
						
							|  |  |  | use FireflyIII\Support\Import\Configuration\File\ConfigurationInterface; | 
					
						
							|  |  |  | use FireflyIII\Support\Import\Configuration\File\ConfigureUploadHandler; | 
					
						
							|  |  |  | use FireflyIII\Support\Import\Configuration\File\NewFileJobHandler; | 
					
						
							| 
									
										
										
										
											2018-05-05 16:51:32 +02:00
										 |  |  | use Illuminate\Support\MessageBag; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class FileJobConfiguration implements JobConfigurationInterface | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2018-05-06 07:09:08 +02:00
										 |  |  |     /** @var ImportJob */ | 
					
						
							|  |  |  |     private $importJob; | 
					
						
							|  |  |  |     /** @var ImportJobRepositoryInterface */ | 
					
						
							|  |  |  |     private $repository; | 
					
						
							| 
									
										
										
										
											2018-05-05 16:51:32 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * ConfiguratorInterface constructor. | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     public function __construct() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * 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 | 
					
						
							| 
									
										
										
										
											2018-05-06 07:09:08 +02:00
										 |  |  |      * @throws FireflyException | 
					
						
							| 
									
										
										
										
											2018-05-05 16:51:32 +02:00
										 |  |  |      */ | 
					
						
							|  |  |  |     public function configureJob(array $data): MessageBag | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2018-05-06 07:09:08 +02:00
										 |  |  |         $configurator = $this->getConfigurationObject(); | 
					
						
							|  |  |  |         $configurator->setJob($this->importJob); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return $configurator->configureJob($data); | 
					
						
							| 
									
										
										
										
											2018-05-05 16:51:32 +02:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Return the data required for the next step in the job configuration. | 
					
						
							|  |  |  |      * | 
					
						
							| 
									
										
										
										
											2018-05-06 07:09:08 +02:00
										 |  |  |      * @throws FireflyException | 
					
						
							| 
									
										
										
										
											2018-05-05 16:51:32 +02:00
										 |  |  |      * @return array | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     public function getNextData(): array | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2018-05-06 07:09:08 +02:00
										 |  |  |         $configurator = $this->getConfigurationObject(); | 
					
						
							|  |  |  |         $configurator->setJob($this->importJob); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return $configurator->getNextData(); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Get the configuration handler for this specific stage. | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return ConfigurationInterface | 
					
						
							|  |  |  |      * @throws FireflyException | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     private function getConfigurationObject(): ConfigurationInterface | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $class = 'DoNotExist'; | 
					
						
							|  |  |  |         switch ($this->importJob->stage) { | 
					
						
							|  |  |  |             case 'new': // has nothing, no file upload or anything.
 | 
					
						
							|  |  |  |                 $class = NewFileJobHandler::class; | 
					
						
							|  |  |  |                 break; | 
					
						
							|  |  |  |             case 'configure-upload': | 
					
						
							|  |  |  |                 $class = ConfigureUploadHandler::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 (!class_exists($class)) { | 
					
						
							|  |  |  |             throw new FireflyException(sprintf('Class %s does not exist in getConfigurationClass().', $class)); // @codeCoverageIgnore
 | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return app($class); | 
					
						
							| 
									
										
										
										
											2018-05-05 16:51:32 +02:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Returns the view of the next step in the job configuration. | 
					
						
							|  |  |  |      * | 
					
						
							| 
									
										
										
										
											2018-05-06 07:09:08 +02:00
										 |  |  |      * @throws FireflyException | 
					
						
							| 
									
										
										
										
											2018-05-05 16:51:32 +02:00
										 |  |  |      * @return string | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     public function getNextView(): string | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2018-05-06 07:09:08 +02:00
										 |  |  |         switch ($this->importJob->stage) { | 
					
						
							|  |  |  |             case 'new': | 
					
						
							|  |  |  |                 return 'import.file.new'; | 
					
						
							|  |  |  |             case 'configure-upload': | 
					
						
							|  |  |  |                 return 'import.file.configure-upload'; | 
					
						
							|  |  |  |                 break; | 
					
						
							|  |  |  |             default: | 
					
						
							|  |  |  |                 // @codeCoverageIgnoreStart
 | 
					
						
							|  |  |  |                 throw new FireflyException( | 
					
						
							|  |  |  |                     sprintf('FileJobConfiguration::getNextView() cannot handle stage "%s"', $this->importJob->stage) | 
					
						
							|  |  |  |                 ); | 
					
						
							|  |  |  |             // @codeCoverageIgnoreEnd
 | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2018-05-05 16:51:32 +02:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Returns true when the initial configuration for this job is complete. | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return bool | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     public function configurationComplete(): bool | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2018-05-06 07:09:08 +02:00
										 |  |  |         if ($this->importJob->stage === 'ready_to run') { | 
					
						
							|  |  |  |             return true; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return false; | 
					
						
							| 
									
										
										
										
											2018-05-05 16:51:32 +02:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * @param ImportJob $job | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     public function setJob(ImportJob $job): void | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2018-05-06 07:09:08 +02:00
										 |  |  |         $this->importJob  = $job; | 
					
						
							|  |  |  |         $this->repository = app(ImportJobRepositoryInterface::class); | 
					
						
							|  |  |  |         $this->repository->setUser($job->user); | 
					
						
							| 
									
										
										
										
											2018-05-05 16:51:32 +02:00
										 |  |  |     } | 
					
						
							|  |  |  | } |