From 4234fdce1b9ef6282a35b43ab6c16f04b549e50d Mon Sep 17 00:00:00 2001
From: Kevin von Spiczak <kevin.spiczak@sgalinski.de>
Date: Wed, 25 Oct 2023 13:18:11 +0200
Subject: [PATCH] [BUGFIX] fix exception on TYPO3 10, where Folder does not
 have a getFile() method yet

---
 Classes/Controller/JoblistController.php | 31 +++++++++++++++++++++---
 1 file changed, 28 insertions(+), 3 deletions(-)

diff --git a/Classes/Controller/JoblistController.php b/Classes/Controller/JoblistController.php
index 17a949e1..8c21425c 100644
--- a/Classes/Controller/JoblistController.php
+++ b/Classes/Controller/JoblistController.php
@@ -51,7 +51,11 @@ use TYPO3\CMS\Core\Resource\Exception\ExistingTargetFolderException;
 use TYPO3\CMS\Core\Resource\Exception\InsufficientFolderAccessPermissionsException;
 use TYPO3\CMS\Core\Resource\Exception\InsufficientFolderReadPermissionsException;
 use TYPO3\CMS\Core\Resource\Exception\InsufficientFolderWritePermissionsException;
+use TYPO3\CMS\Core\Resource\File;
+use TYPO3\CMS\Core\Resource\Folder;
+use TYPO3\CMS\Core\Resource\ProcessedFile;
 use TYPO3\CMS\Core\Resource\ResourceFactory;
+use TYPO3\CMS\Core\Resource\ResourceStorage;
 use TYPO3\CMS\Core\Site\SiteFinder;
 use TYPO3\CMS\Core\Utility\ExtensionManagementUtility;
 use TYPO3\CMS\Core\Utility\GeneralUtility;
@@ -776,8 +780,9 @@ class JoblistController extends ActionController {
 			$newFilename = strtolower($singleFilePostKey) . '.' . strtolower($filePathInfo['extension']);
 			if (array_key_exists($singleUploadedFile, $uploadedFiles)) {
 				// the same file was uploaded for different sources
-				$usableFile = $newFolder->getFile(
-					$uploadedFiles[$singleUploadedFile] . '.' . strtolower($filePathInfo['extension'])
+				$usableFile = $this->getFileInFolder(
+					$uploadedFiles[$singleUploadedFile] . '.' . strtolower($filePathInfo['extension']),
+					$newFolder
 				);
 				if (!$usableFile) {
 					throw new \RuntimeException('File not found (' . $singleFilePostKey . ')!');
@@ -790,7 +795,7 @@ class JoblistController extends ActionController {
 				$usableFile = $storage->moveFile($singleFileToMove, $newFolder, $newFilename);
 			} else {
 				/** @noinspection PhpUnreachableStatementInspection */
-				$usableFile = $newFolder->getFile($newFilename);
+				$usableFile = $this->getFileInFolder($newFilename, $newFolder);
 			}
 			$fileReference = $this->fileAndFolderService->createFileReferenceFromFalFileObject($usableFile);
 
@@ -810,6 +815,26 @@ class JoblistController extends ActionController {
 		}
 	}
 
+	/**
+	 * Gets a file in a folder.
+	 * (Backwards compatible with TYPO3 10, where the Folder did not have a getFile() method yet).
+	 *
+	 * @param string $fileName
+	 * @param Folder $folder
+	 * @return null|File|ProcessedFile
+	 */
+	protected function getFileInFolder(string $fileName, Folder $folder): ?File {
+		if (version_compare(VersionNumberUtility::getCurrentTypo3Version(), '11.0.0', '>=')) {
+			return $folder->getFile($fileName);
+		}
+
+		if ($folder->getStorage()->hasFileInFolder($fileName, $folder)) {
+			return $folder->getStorage()->getFileInFolder($fileName, $folder);
+		}
+
+		return NULL;
+	}
+
 	/**
 	 * Returns currently set allowedFiles
 	 *
-- 
GitLab