From c2d4f310a35c32bd612e3aa6affe3b614438e1eb Mon Sep 17 00:00:00 2001
From: Kevin von Spiczak <kevin.spiczak@sgalinski.de>
Date: Tue, 13 Dec 2022 17:59:21 +0100
Subject: [PATCH] [TASK] automatically create JobApplication & temp folder,
 refactor

---
 Classes/Controller/Ajax/UploadController.php | 49 +++++++++++++-------
 Classes/Controller/JoblistController.php     |  9 ++--
 2 files changed, 38 insertions(+), 20 deletions(-)

diff --git a/Classes/Controller/Ajax/UploadController.php b/Classes/Controller/Ajax/UploadController.php
index ce76fa08..424f0fe4 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 648f9d5a..a16af657 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
-- 
GitLab