From 3e25617720112d3ad171051fbe94a863fcd82ddb Mon Sep 17 00:00:00 2001
From: Paul Ilea <paul@sgalinski.de>
Date: Mon, 16 Oct 2017 16:13:35 +0300
Subject: [PATCH] [FEATURE] Configrable Excluded Templates from BE Module

---
 Classes/Controller/MailController.php       | 23 ++++++++++++++++++++-
 Resources/Private/Language/de.locallang.xlf |  4 ++++
 Resources/Private/Language/locallang.xlf    |  3 +++
 ext_conf_template.txt                       |  2 ++
 4 files changed, 31 insertions(+), 1 deletion(-)
 create mode 100644 ext_conf_template.txt

diff --git a/Classes/Controller/MailController.php b/Classes/Controller/MailController.php
index 25a45cc0..0ecd8156 100644
--- a/Classes/Controller/MailController.php
+++ b/Classes/Controller/MailController.php
@@ -87,6 +87,27 @@ class MailController extends ActionController {
 		}
 
 		$registerArray = MailTemplateService::getRegisterArray();
+		$extensionConfiguration = unserialize($GLOBALS['TYPO3_CONF_VARS']['EXT']['extConf']['sg_mail'], [FALSE]);
+		if (isset($extensionConfiguration['excludeTemplates']) && $extensionConfiguration['excludeTemplates'] !== '') {
+			$excludedTemplates = GeneralUtility::trimExplode(',', $extensionConfiguration['excludeTemplates'], TRUE);
+			if ($excludedTemplates && count($excludedTemplates)) {
+				foreach ($excludedTemplates as $excludedTemplate) {
+					list($extensionKey, $templateName) = GeneralUtility::trimExplode('.', $excludedTemplate);
+					if ($extensionKey && $templateName && isset($registerArray[$extensionKey][$templateName])) {
+						unset($registerArray[$extensionKey][$templateName]);
+					}
+				}
+			}
+		}
+		$removeExtensionKeys = [];
+		foreach($registerArray as $extensionKey => $extensionTemplates) {
+			if (count($extensionTemplates) === 0) {
+				$removeExtensionKeys[] = $extensionKey;
+			}
+		}
+		foreach($removeExtensionKeys as $extensionKey) {
+			unset($registerArray[$extensionKey]);
+		}
 
 		// if no extensions are registered, redirect to empty action
 		if (empty($registerArray)) {
@@ -148,7 +169,7 @@ class MailController extends ActionController {
 		$this->view->assign('colspace', $colspace);
 		$this->view->assign('languageTemplates', $templates);
 		$this->view->assign('languageLabels', BackendService::getLanguageLabels($languages));
-		$this->view->assign('templates', MailTemplateService::getRegisterArray());
+		$this->view->assign('templates', $registerArray);
 
 		$templateDescription = $registerArray[$parameters['selectedExtension']][$parameters['selectedTemplate']]['description'];
 
diff --git a/Resources/Private/Language/de.locallang.xlf b/Resources/Private/Language/de.locallang.xlf
index 3e6a366e..9cf5de26 100644
--- a/Resources/Private/Language/de.locallang.xlf
+++ b/Resources/Private/Language/de.locallang.xlf
@@ -309,6 +309,10 @@
 			<source>Example</source>
 			<target>Beispiel</target>
 		</trans-unit>
+		<trans-unit id="configuration.excludeTemplates">
+			<source>Exclude Mail Templates:Comma-separated list of {extension_key}.{template_name}</source>
+			<target>Mail-Templates ausschließen:Kommagetrennte Liste von {extension_key}.{template_name}</target>
+		</trans-unit>
 		<trans-unit id="mlang_labels_tabdescr" approved="yes">
 			<source>Mail Templates</source>
 			<target>Mail-Templates</target>
diff --git a/Resources/Private/Language/locallang.xlf b/Resources/Private/Language/locallang.xlf
index a981af7e..61ea244b 100644
--- a/Resources/Private/Language/locallang.xlf
+++ b/Resources/Private/Language/locallang.xlf
@@ -234,6 +234,9 @@
 		<trans-unit id="backend.value">
 			<source>Example</source>
 		</trans-unit>
+		<trans-unit id="configuration.excludeTemplates">
+			<source>Exclude Mail Templates:Comma-separated list of {extension_key}.{template_name}</source>
+		</trans-unit>
 		<trans-unit id="mlang_labels_tabdescr">
 			<source>Mail Templates</source>
 		</trans-unit>
diff --git a/ext_conf_template.txt b/ext_conf_template.txt
new file mode 100644
index 00000000..5eee4dc1
--- /dev/null
+++ b/ext_conf_template.txt
@@ -0,0 +1,2 @@
+# cat=general; type=string; label=LLL:EXT:sg_mail/Resources/Private/Language/locallang.xlf:configuration.excludeTemplates
+excludeTemplates =
-- 
GitLab