From 3935079288413ab1e4292305d2156eb4ffee2898 Mon Sep 17 00:00:00 2001
From: Stefan Galinski <stefan@sgalinski.de>
Date: Tue, 6 Nov 2018 21:46:51 +0100
Subject: [PATCH] [BUGFIX] Fix wrong registration and deprecation view

---
 Classes/Controller/MailController.php   | 46 ++++++++++-----------
 Classes/Service/MailTemplateService.php | 28 ++++++++-----
 Classes/Service/RegisterService.php     | 55 +++++++++++--------------
 ext_localconf.php                       |  1 -
 4 files changed, 64 insertions(+), 66 deletions(-)

diff --git a/Classes/Controller/MailController.php b/Classes/Controller/MailController.php
index c065a584..da2e2e84 100644
--- a/Classes/Controller/MailController.php
+++ b/Classes/Controller/MailController.php
@@ -26,7 +26,6 @@ namespace SGalinski\SgMail\Controller;
  *  This copyright notice MUST APPEAR in all copies of the script!
  ***************************************************************/
 
-use function Composer\Autoload\includeFile;
 use SGalinski\SgMail\Domain\Model\Template;
 use SGalinski\SgMail\Service\BackendService;
 use SGalinski\SgMail\Service\MailTemplateService;
@@ -368,35 +367,36 @@ class MailController extends ActionController {
 	 * @return array
 	 */
 	private function getDeprecationWarnings(): array {
-		$deprecationWarnings = [];
+		debug($GLOBALS['sg_mail']);
 
+		$deprecationWarnings = [];
 		$extensionList = ExtensionManagementUtility::getLoadedExtensionListArray();
 		foreach ($extensionList as $extensionName) {
-			$extensionConfigDirectory = ExtensionManagementUtility::extPath($extensionName);
-			$extensionConfigDirectory .= MailTemplateService::CONFIG_PATH;
-
-			if (\is_dir($extensionConfigDirectory)) {
-				$configFiles = GeneralUtility::getFilesInDir($extensionConfigDirectory);
-				foreach ($configFiles as $configFile) {
-					$pathToRegistrationFile = $extensionConfigDirectory . '/' . $configFile;
+			$extensionConfigDirectory = ExtensionManagementUtility::extPath($extensionName) .
+				MailTemplateService::CONFIG_PATH;
+			if (!\is_dir($extensionConfigDirectory)) {
+				continue;
+			}
 
-					if (!\file_exists($pathToRegistrationFile)) {
-						continue;
-					}
+			$configFiles = GeneralUtility::getFilesInDir($extensionConfigDirectory);
+			foreach ($configFiles as $configFile) {
+				$pathToRegistrationFile = $extensionConfigDirectory . '/' . $configFile;
+				if (!\is_file($pathToRegistrationFile)) {
+					continue;
+				}
 
-					$registrationArray = include $pathToRegistrationFile;
-					$templateKey = $registrationArray['template_key'];
-					$extensionKey = $registrationArray['extension_key'];
+				// already registered in the new way?
+				if (!isset($GLOBALS['sg_mail'][$extensionName][$configFile])) {
+					continue;
+				}
 
-					// provide code example on how to register correctly
-					$code = '$GLOBALS[\'sg_mail\'][\'' . $extensionKey . '\'][\''
-						. $templateKey
-						. '\'] = \'EXT:' . $extensionName . '/' . MailTemplateService::CONFIG_PATH . '/' . $configFile . '\';';
+				$registrationArray = include $pathToRegistrationFile;
+				$templateKey = $registrationArray['template_key'];
 
-					$deprecationWarnings[] = [
-						'code' => $code
-					];
-				}
+				// provide code example on how to register correctly
+				$code = '$GLOBALS[\'sg_mail\'][\'' . $extensionName . '\'][\'' . $templateKey . '\'] = \'EXT:' .
+					$extensionName . '/' . MailTemplateService::CONFIG_PATH . '/' . $configFile . '\';';
+				$deprecationWarnings[] = ['code' => $code];
 			}
 		}
 
diff --git a/Classes/Service/MailTemplateService.php b/Classes/Service/MailTemplateService.php
index f49ddbb5..234d1a4c 100644
--- a/Classes/Service/MailTemplateService.php
+++ b/Classes/Service/MailTemplateService.php
@@ -812,27 +812,35 @@ class MailTemplateService {
 		self::logDeprecation('registerExtensions');
 
 		$extensionList = ExtensionManagementUtility::getLoadedExtensionListArray();
-
 		foreach ($extensionList as $extensionName) {
 			$extensionConfigDirectory = ExtensionManagementUtility::extPath($extensionName);
 			$extensionConfigDirectory .= self::CONFIG_PATH;
 
-			if (\is_dir($extensionConfigDirectory)) {
-				$configFiles = GeneralUtility::getFilesInDir($extensionConfigDirectory);
-				foreach ($configFiles as $configFile) {
-					$pathToRegistrationFile = $extensionConfigDirectory . '/' . $configFile;
+			if (!\is_dir($extensionConfigDirectory)) {
+				continue;
+			}
 
-					if (!\file_exists($pathToRegistrationFile)) {
-						continue;
-					}
-					$GLOBALS['sg_mail']['sg_mail'][$configFile] = $pathToRegistrationFile;
+			$configFiles = GeneralUtility::getFilesInDir($extensionConfigDirectory);
+			foreach ($configFiles as $configFile) {
+				$pathToRegistrationFile = $extensionConfigDirectory . '/' . $configFile;
+				if (!\is_file($pathToRegistrationFile)) {
+					continue;
 				}
+
+				// already registered in the new way?
+				$configFileTest = str_replace('.php', '', $configFile);
+				$configFileTest = GeneralUtility::camelCaseToLowerCaseUnderscored($configFileTest);
+				if (isset($GLOBALS['sg_mail'][$extensionName][$configFileTest])) {
+					continue;
+				}
+
+				$GLOBALS['sg_mail'][$extensionName][$configFile] = $pathToRegistrationFile;
 			}
 		}
 	}
 
 	/**
-	 * Checks if a template is blacklisted for a given siterootId
+	 * Checks if a template is blacklisted for a given siteroot id
 	 *
 	 * @param string $extensionKey
 	 * @param string $templateName
diff --git a/Classes/Service/RegisterService.php b/Classes/Service/RegisterService.php
index 6b8f07e8..55064aa6 100644
--- a/Classes/Service/RegisterService.php
+++ b/Classes/Service/RegisterService.php
@@ -84,43 +84,32 @@ class RegisterService implements \TYPO3\CMS\Core\SingletonInterface {
 	private function registerExtensions(): array {
 		$this->registerArray = [];
 
-		$extensionConfiguration = unserialize($GLOBALS['TYPO3_CONF_VARS']['EXT']['extConf']['sg_mail'], ['array']);
-
-		// @TODO remove in version 5.0.0
-		if (((int) $extensionConfiguration['supportOldRegistrations']) === 0) {
-			MailTemplateService::registerExtensions();
-		}
-
 		foreach ($GLOBALS['sg_mail'] as $extension) {
 			foreach ($extension as $key => $registerFile) {
-				if (\is_file($registerFile)) {
-					$configArray = (include $registerFile);
-
-					$extensionKey = $configArray['extension_key'];
-					$templateKey = $configArray['template_key'];
-
-					if ($extensionKey === NULL || $templateKey === NULL) {
-						continue;
-					}
+				$registerFile = GeneralUtility::getFileAbsFileName($registerFile);
+				if (!\is_file($registerFile)) {
+					continue;
+				}
 
-					$this->writeRegisterArrayEntry(
-						$extensionKey, $templateKey, $configArray
-					);
+				$configArray = (include $registerFile);
+				$extensionKey = $configArray['extension_key'];
+				$templateKey = $configArray['template_key'];
+				if ($extensionKey === NULL || $templateKey === NULL) {
+					continue;
 				}
+
+				$this->writeRegisterArrayEntry($extensionKey, $templateKey, $configArray);
 			}
 		}
 
 		// read automatically created extension registrations and write the entries
 		$configurationLocation = $this->getRegistrationPath();
-		$registerFolder = GeneralUtility::getFileAbsFileName(
-			$configurationLocation
-		);
+		$registerFolder = GeneralUtility::getFileAbsFileName($configurationLocation);
 		if (\is_dir($registerFolder)) {
 			$configFiles = GeneralUtility::getFilesInDir($registerFolder);
 			foreach ($configFiles as $configFile) {
 				$pathToRegistrationFile = $registerFolder . '/' . $configFile;
-
-				if (!\file_exists($pathToRegistrationFile)) {
+				if (!\is_file($pathToRegistrationFile)) {
 					continue;
 				}
 
@@ -129,26 +118,28 @@ class RegisterService implements \TYPO3\CMS\Core\SingletonInterface {
 				$filename = $pathAsArray[\count($pathAsArray) - 1];
 				$filenameWithoutHash = GeneralUtility::trimExplode('_', $filename)[1];
 				$hash = md5($GLOBALS['TYPO3_CONF_VARS']['SYS']['encryptionKey'] . '|' . $filenameWithoutHash);
-				// if the filename doesnt start with the hash value, ignore it
+				// if the filename doesn't start with the hash value, ignore it
 				if (strpos($filename, $hash) !== 0) {
 					continue;
 				}
 
 				$configArray = (include $pathToRegistrationFile);
-
 				$extensionKey = $configArray['extension_key'];
 				$templateKey = $configArray['template_key'];
-
 				if ($extensionKey === NULL || $templateKey === NULL) {
 					continue;
 				}
 
-				$this->writeRegisterArrayEntry(
-					$extensionKey, $templateKey, $configArray
-				);
+				$this->writeRegisterArrayEntry($extensionKey, $templateKey, $configArray);
 			}
 		}
 
+		// @TODO remove in version 5.0.0
+		$extensionConfiguration = unserialize($GLOBALS['TYPO3_CONF_VARS']['EXT']['extConf']['sg_mail'], ['array']);
+		if (((int) $extensionConfiguration['supportOldRegistrations']) === 0) {
+			MailTemplateService::registerExtensions();
+		}
+
 		return $this->registerArray;
 	}
 
@@ -184,8 +175,8 @@ class RegisterService implements \TYPO3\CMS\Core\SingletonInterface {
 		}
 
 		$templateDirectory .= '/';
-		$templatePath = ExtensionManagementUtility::extPath($storeTemplateExtension) . self::DEFAULT_TEMPLATE_PATH
-			. $templateDirectory;
+		$templatePath = ExtensionManagementUtility::extPath($storeTemplateExtension) .
+			self::DEFAULT_TEMPLATE_PATH . $templateDirectory;
 
 		if ($configArray['template_path']) {
 			$templatePath = $configArray[$templateKey];
diff --git a/ext_localconf.php b/ext_localconf.php
index 703efd90..18cd1ee1 100644
--- a/ext_localconf.php
+++ b/ext_localconf.php
@@ -67,4 +67,3 @@ if (!isset($TYPO3_CONF_VARS['SYS']['caching']['cacheConfigurations'][$cacheName]
 		'citypower'
 	];
 }
-
-- 
GitLab