diff --git a/Classes/Controller/Ajax/UploadController.php b/Classes/Controller/Ajax/UploadController.php index ce76fa08e09e1d46265a7c0f144554fa3064c2f4..424f0fe43a0fe013058c88333b54ecdbeaea8edc 100644 --- a/Classes/Controller/Ajax/UploadController.php +++ b/Classes/Controller/Ajax/UploadController.php @@ -4,7 +4,9 @@ namespace SGalinski\SgJobs\Controller\Ajax; use SGalinski\SgAjax\Controller\Ajax\AbstractAjaxController; use SGalinski\SgJobs\Service\FileAndFolderService; +use TusPhp\File; use TYPO3\CMS\Core\Core\Environment; +use TYPO3\CMS\Core\Resource\Exception\InsufficientFolderAccessPermissionsException; use TYPO3\CMS\Core\Utility\GeneralUtility; /*************************************************************** @@ -35,7 +37,21 @@ use TYPO3\CMS\Core\Utility\GeneralUtility; * Uploads for the applicationForm */ class UploadController extends AbstractAjaxController { - public const TYPO3_TMP_FOLDER = '/JobApplication/temp/'; + public const JOB_APPLICATION_FOLDER = 'JobApplication'; + public const JOB_APPLICATION_TEMP_FOLDER = 'temp'; + + /** + * @var FileAndFolderService + */ + protected FileAndFolderService $fileAndFolderService; + + /** + * @param FileAndFolderService $fileAndFolderService + * @return void + */ + public function injectFileAndFolderService(FileAndFolderService $fileAndFolderService): void { + $this->fileAndFolderService = $fileAndFolderService; + } /** * Returns the calculated max file size. @@ -56,10 +72,8 @@ class UploadController extends AbstractAjaxController { * Uploads a new coverletter. * * @return void - * @throws \TYPO3\CMS\Core\Resource\Exception\ExistingTargetFileNameException - * @throws \InvalidArgumentException */ - public function uploadCoverletterAction() { + public function uploadCoverletterAction(): void { $this->handleAnyDropZoneUpload(); } @@ -67,10 +81,8 @@ class UploadController extends AbstractAjaxController { * Uploads a new cd. * * @return void - * @throws \TYPO3\CMS\Core\Resource\Exception\ExistingTargetFileNameException - * @throws \InvalidArgumentException */ - public function uploadCvAction() { + public function uploadCvAction(): void { $this->handleAnyDropZoneUpload(); } @@ -78,10 +90,8 @@ class UploadController extends AbstractAjaxController { * Uploads a new cd. * * @return void - * @throws \TYPO3\CMS\Core\Resource\Exception\ExistingTargetFileNameException - * @throws \InvalidArgumentException */ - public function uploadCertificateAction() { + public function uploadCertificateAction(): void { $this->handleAnyDropZoneUpload(); } @@ -90,26 +100,33 @@ class UploadController extends AbstractAjaxController { * * @return void */ - private function handleAnyDropZoneUpload() { + private function handleAnyDropZoneUpload(): void { $success = FALSE; $filePath = ''; + if (\count($_FILES) > 0) { $firstFile = current($_FILES); $pathInfo = pathinfo($firstFile['name']); - $fileAndFolderService = $this->objectManager->get(FileAndFolderService::class); - $storage = $fileAndFolderService->getStorage(); + $storage = $this->fileAndFolderService->getStorage(); $fileName = $storage->sanitizeFileName( strtolower( str_replace(' ', '_', trim($pathInfo['filename'] . '.' . strtolower($pathInfo['extension']))) ) ); - $folder = $storage->getFolder('JobApplication'); + // if job application folder is not existing, create it + if (!$storage->hasFolder(self::JOB_APPLICATION_FOLDER)) { + $folder = $storage->createFolder(self::JOB_APPLICATION_FOLDER); + } else { + $folder = $storage->getFolder(self::JOB_APPLICATION_FOLDER); + } // if temp folder is not existing, create one if (!$storage->hasFolderInFolder('temp', $folder)) { - $tempFolder = $storage->createFolder('temp', $folder); + $storage->createFolder('temp', $folder); } - $filePath = Environment::getPublicPath() . '/fileadmin/' . self::TYPO3_TMP_FOLDER . $fileName; + $filePath = Environment::getPublicPath() . '/fileadmin/' . + self::JOB_APPLICATION_FOLDER . DIRECTORY_SEPARATOR . + self::JOB_APPLICATION_TEMP_FOLDER . DIRECTORY_SEPARATOR . $fileName; $tempFilePath = $firstFile['tmp_name']; $success = GeneralUtility::upload_copy_move($tempFilePath, $filePath); } diff --git a/Classes/Controller/JoblistController.php b/Classes/Controller/JoblistController.php index 648f9d5abfcab394d87bd6b18de9b78cc7274ebd..a16af657e40bc9c12dfa5b95f103aaefb598322d 100644 --- a/Classes/Controller/JoblistController.php +++ b/Classes/Controller/JoblistController.php @@ -28,6 +28,7 @@ namespace SGalinski\SgJobs\Controller; use Psr\Http\Message\ResponseInterface; use SGalinski\ProjectBase\Domain\Repository\CountryRepository; +use SGalinski\SgJobs\Controller\Ajax\UploadController; use SGalinski\SgJobs\Domain\Model\Company; use SGalinski\SgJobs\Domain\Model\Job; use SGalinski\SgJobs\Domain\Model\JobApplication; @@ -700,16 +701,16 @@ class JoblistController extends ActionController { $allowedFileExtensions = $this->getAllowedFileExtensions(); /** @var ResourceFactory $resourceFactory */ - $resourceFactory = $this->objectManager->get(ResourceFactory::class); + $resourceFactory = GeneralUtility::makeInstance(ResourceFactory::class); $storage = $resourceFactory->getStorageObject(1); - $folder = $storage->getFolder('/JobApplication/'); + $folder = $storage->getFolder(UploadController::JOB_APPLICATION_FOLDER); - $tempFolder = $storage->getFolder('/JobApplication/temp'); + $tempFolder = $storage->getFolderInFolder(UploadController::JOB_APPLICATION_TEMP_FOLDER, $folder); if (!$storage->hasFolderInFolder($folderName, $folder)) { $newFolder = $storage->createFolder($folderName, $folder); } else { - $newFolder = $storage->getFolder('/JobApplication/' . $folderName); + $newFolder = $storage->getFolder(UploadController::JOB_APPLICATION_FOLDER . $folderName); } // Move uploaded files & csv fo real folder and delete the tmp folder