From ad8783cfdc9061584b7007b2f08cdc1126b36f8d Mon Sep 17 00:00:00 2001
From: Stefan Galinski <stefan@sgalinski.de>
Date: Tue, 6 Nov 2018 20:32:41 +0100
Subject: [PATCH] [BUGFIX] Mail templates in forms can't be registerd if
 user_uploads is selected

---
 Classes/XClass/Form/FormEditorController.php | 17 ++++++++++++++++-
 1 file changed, 16 insertions(+), 1 deletion(-)

diff --git a/Classes/XClass/Form/FormEditorController.php b/Classes/XClass/Form/FormEditorController.php
index 6ba14632..a70a1d04 100644
--- a/Classes/XClass/Form/FormEditorController.php
+++ b/Classes/XClass/Form/FormEditorController.php
@@ -31,6 +31,8 @@ use SGalinski\SgMail\Service\TypoScriptSettingsService;
 use Symfony\Component\Yaml\Yaml;
 use TYPO3\CMS\Core\Cache\CacheManager;
 use TYPO3\CMS\Core\Cache\Frontend\FrontendInterface;
+use TYPO3\CMS\Core\Resource\ResourceStorage;
+use TYPO3\CMS\Core\Resource\StorageRepository;
 use TYPO3\CMS\Core\Utility\GeneralUtility;
 use TYPO3\CMS\Extbase\Object\ObjectManager;
 use TYPO3\CMS\Form\Type\FormDefinitionArray;
@@ -108,7 +110,20 @@ class FormEditorController extends \TYPO3\CMS\Form\Controller\FormEditorControll
 			}
 
 			// parse yaml for form fields
-			$absoluteFilePath = GeneralUtility::getFileAbsFileName($formPersistenceIdentifier);
+			if (strpos($formPersistenceIdentifier, 'EXT:') === 0) {
+				$absoluteFilePath = GeneralUtility::getFileAbsFileName($formPersistenceIdentifier);
+			} else {
+				list($storageUid, $fileIdentifier) = explode(':', $formPersistenceIdentifier, 2);
+				$storageRepository = $this->objectManager->get(StorageRepository::class);
+				$storage = $storageRepository->findByUid($storageUid);
+				if (!$storage instanceof ResourceStorage || !$storage->isBrowsable()) {
+					throw new \InvalidArgumentException(
+						sprintf('Could not access storage with uid "%d".', $storageUid)
+					);
+				}
+				$absoluteFilePath = $storage->getFile($fileIdentifier);
+			}
+
 			$parsedYaml = Yaml::parse(file_get_contents($absoluteFilePath));
 
 			$renderables = [];
-- 
GitLab