diff --git a/Classes/Controller/JoblistController.php b/Classes/Controller/JoblistController.php index 28ddd74ecbd92e7e2884a89c87753421cec397f6..f971c6d811ebde918604d34e15cab83814e0ac28 100644 --- a/Classes/Controller/JoblistController.php +++ b/Classes/Controller/JoblistController.php @@ -33,6 +33,7 @@ use SGalinski\SgJobs\Property\TypeConverter\UploadedFileReferenceConverter; use SGalinski\SgJobs\Service\FrontendFilterService; use SGalinski\SgMail\Service\MailTemplateService; use SJBR\StaticInfoTables\Domain\Repository\CountryRepository; +use TYPO3\CMS\Core\Resource\Exception\FolderDoesNotExistException; use TYPO3\CMS\Core\Resource\FileReference; use TYPO3\CMS\Core\Resource\ResourceFactory; use TYPO3\CMS\Core\Utility\GeneralUtility; @@ -222,19 +223,19 @@ class JoblistController extends ActionController { $typeConverter1 = $this->objectManager->get(UploadedFileReferenceConverter::class); $typeConverter1->setAllowedFileExtensions($this->settings['allowedFileExtensions']); - $typeConverter1->setUploadFolder('1:/JobApplication/' . $uniqueFolderName); + $typeConverter1->setUploadFolder('1:/JobApplication/temp/' . $uniqueFolderName); $typeConverter1->setTargetUploadFileName('coverLetter'); $propertyMappingConfiguration->forProperty('coverLetter')->setTypeConverter($typeConverter1); $typeConverter2 = $this->objectManager->get(UploadedFileReferenceConverter::class); $typeConverter2->setAllowedFileExtensions($this->settings['allowedFileExtensions']); - $typeConverter2->setUploadFolder('1:/JobApplication/' . $uniqueFolderName); + $typeConverter2->setUploadFolder('1:/JobApplication/temp/' . $uniqueFolderName); $typeConverter2->setTargetUploadFileName('cv'); $propertyMappingConfiguration->forProperty('cv')->setTypeConverter($typeConverter2); $typeConverter3 = $this->objectManager->get(UploadedFileReferenceConverter::class); $typeConverter3->setAllowedFileExtensions($this->settings['allowedFileExtensions']); - $typeConverter3->setUploadFolder('1:/JobApplication/' . $uniqueFolderName); + $typeConverter3->setUploadFolder('1:/JobApplication/temp/' . $uniqueFolderName); $typeConverter3->setTargetUploadFileName('certificate'); $propertyMappingConfiguration->forProperty('certificate')->setTypeConverter($typeConverter3); } @@ -255,7 +256,8 @@ class JoblistController extends ActionController { $newName = date('Ymd-His') . '_' . $applicationData->getJobId() . '-' . $applicationData->getFirstName() . '-' . $applicationData->getLastName(); $storage = $resourceFactory->getStorageObject(1); - $applicationFilePath = PATH_site . $storage->getConfiguration()['basePath'] . 'JobApplication/' . $folderName . + $applicationFilePath = PATH_site . $storage->getConfiguration( + )['basePath'] . 'JobApplication/temp/' . $folderName . '/' . $newName . '.csv'; $this->writeApplicationFile($applicationData, $applicationFilePath); } @@ -278,7 +280,8 @@ class JoblistController extends ActionController { $job = $applyData->getJob(); // look for a configured default job, in case of unsolicited application - if (($job === '' || $job === NULL || $applyData->getJobId() === NULL) && $applyData->getCompany() !== NULL) { + if (($job === '' || $job === NULL || $applyData->getJobId() === NULL) && $applyData->getCompany( + ) !== NULL) { $applyData->setJobId($applyData->getCompany()->getJobId()); } @@ -344,6 +347,14 @@ class JoblistController extends ActionController { $mailService->sendEmail(); + // Move uploaded files & csv fo real folder and delete the tmp folder + /** @var ResourceFactory $resourceFactory */ + $resourceFactory = $this->objectManager->get(ResourceFactory::class); + $storage = $resourceFactory->getStorageObject(1); + $tempFolder = $storage->getFolder('/JobApplication/temp/' . $folderName); + $storage->copyFolder($tempFolder, $storage->getFolder('/JobApplication/')); + $this->deleteTmpFolder($folderName); + $redirectPageUid = (int) $this->settings['redirectPage']; if ($redirectPageUid) { $url = $this->configurationManager->getContentObject()->getTypoLink_URL($redirectPageUid); @@ -353,6 +364,7 @@ class JoblistController extends ActionController { $this->redirect('applyForm'); } catch (\Exception $exception) { + $this->deleteTmpFolder($folderName); $job = $applyData->getJob(); $jobId = $job !== NULL ? $job->getUid() : NULL; $this->request->setArgument('folderName', $folderName); @@ -496,4 +508,35 @@ class JoblistController extends ActionController { return TRUE; } + + /** + * Delete uploaded files in tmp folder + * + * @param string $folderName + */ + private function deleteTmpFolder($folderName) { + /** @var ResourceFactory $resourceFactory */ + $resourceFactory = $this->objectManager->get(ResourceFactory::class); + $storage = $resourceFactory->getStorageObject(1); + try { + $tempFolder = $storage->getFolder('/JobApplication/temp/' . $folderName); + $storage->deleteFolder($tempFolder, TRUE); + } catch (FolderDoesNotExistException $exception) { + // folder is already deleted for some reason + } + } + + /** + * If for any reason something goes wrong, delete the tmp upload folder + * + * @return string|void + */ + public function errorAction() { + if ($this->request->hasArgument('folderName')) { + $folderName = $this->request->getArgument('folderName'); + $this->deleteTmpFolder($folderName); + } + + parent::errorAction(); + } }