From 8657ce1dffdb0d53d15bac49cdf9f29c23dbae0e Mon Sep 17 00:00:00 2001 From: Torsten Oppermann <torsten@sgalinski.de> Date: Tue, 4 Sep 2018 10:14:10 +0200 Subject: [PATCH] [TASK] Adding possibility to register multiple templates via single file + refactored some code --- Classes/Service/MailTemplateService.php | 109 ++++++++++++++++++------ 1 file changed, 84 insertions(+), 25 deletions(-) diff --git a/Classes/Service/MailTemplateService.php b/Classes/Service/MailTemplateService.php index 55a74fc0..4bd6084e 100644 --- a/Classes/Service/MailTemplateService.php +++ b/Classes/Service/MailTemplateService.php @@ -59,6 +59,8 @@ class MailTemplateService { const DEFAULT_TEMPLATE_PATH = 'Resources/Private/Templates/SgMail/'; const CACHE_NAME = 'sg_mail_registerArrayCache'; const CACHE_LIFETIME_IN_SECONDS = 86400; + const REGISTER_FILE = 'Register.php'; + const CONFIG_PATH = 'Configuration/MailTemplates'; /** * @var array $toAddresses @@ -788,7 +790,7 @@ class MailTemplateService { foreach ($extensionList as $extensionName) { $extensionConfigDirectory = ExtensionManagementUtility::extPath($extensionName); - $extensionConfigDirectory .= '/Configuration/MailTemplates'; + $extensionConfigDirectory .= '/' . self::CONFIG_PATH; $configFiles = GeneralUtility::getFilesInDir($extensionConfigDirectory); foreach ($configFiles as $configFile) { @@ -796,36 +798,93 @@ class MailTemplateService { $extensionKey = $configArray['extension_key']; $templateKey = $configArray['template_key']; - // transform template directory name: your_templates => YourTemplates/ - $templateDirectoryParts = GeneralUtility::trimExplode('_', $configArray['template_key']); - $templateDirectory = ''; - foreach ($templateDirectoryParts as $part) { - $templateDirectory .= ucfirst($part); + if ($extensionKey === NULL || $templateKey === NULL) { + continue; } - $templateDirectory .= '/'; - $templatePath = ExtensionManagementUtility::extPath( - $extensionName - ) . self::DEFAULT_TEMPLATE_PATH . $templateDirectory; - if ($configArray['template_path']) { - $templatePath = $configArray['template_key']; - } + $registerArray = self::writeRegisterArrayEntry( + $registerArray, $extensionName, $extensionKey, $templateKey, $configArray + ); + } + } - $description = $configArray['description']; - $subject = $configArray['subject']; - $marker = $configArray['markers']; - - $registerArray[$extensionKey][$templateKey] = [ - 'templatePath' => $templatePath, - 'description' => $description, - 'marker' => $marker, - 'extension' => $extensionKey, - 'templateName' => $templateKey, - 'subject' => $subject - ]; + // now check for registration files with multiple templates registered + $registerArray = self::registerFromSingleFile($registerArray); + return $registerArray; + } + + /** + * Find Register.php files in all installed extensions and register the templates + * These files can contain multiple template registrations and are structured as multi-dimensional arrays + * + * @param array $registerArray + * @return array + */ + private static function registerFromSingleFile(array $registerArray) { + $extensionList = ExtensionManagementUtility::getLoadedExtensionListArray(); + + foreach ($extensionList as $extension) { + $extensionConfigDirectory = ExtensionManagementUtility::extPath($extension); + $extensionConfigDirectory .= self::CONFIG_PATH; + + if (!\is_dir($extensionConfigDirectory)) { + continue; } + + $configArray = (include $extensionConfigDirectory . '/' . self::REGISTER_FILE); + + if ($configArray) { + foreach ($configArray as $config) { + $registerArray = self::writeRegisterArrayEntry($registerArray, $config['extension_key'], $config['extension_key'], $config['template_key'], $config); + } + } + + } + + return $registerArray; + } + + /** + * writes a single entry into the register array + * + * @param array $registerArray + * @param string $extensionName + * @param string $extensionKey + * @param string $templateKey + * @param array $configArray + * @return array + */ + private static function writeRegisterArrayEntry( + array $registerArray, $extensionName, $extensionKey, $templateKey, array $configArray + ) { + // transform template directory name: your_templates => YourTemplates/ + $templateDirectoryParts = GeneralUtility::trimExplode('_', $configArray['template_key']); + $templateDirectory = ''; + foreach ($templateDirectoryParts as $part) { + $templateDirectory .= ucfirst($part); + } + $templateDirectory .= '/'; + $templatePath = ExtensionManagementUtility::extPath( + $extensionName + ) . self::DEFAULT_TEMPLATE_PATH . $templateDirectory; + + if ($configArray['template_path']) { + $templatePath = $configArray['template_key']; } + $description = $configArray['description']; + $subject = $configArray['subject']; + $marker = $configArray['markers']; + + $registerArray[$extensionKey][$templateKey] = [ + 'templatePath' => $templatePath, + 'description' => $description, + 'marker' => $marker, + 'extension' => $extensionKey, + 'templateName' => $templateKey, + 'subject' => $subject + ]; + return $registerArray; } -- GitLab