From 485b08dfc82ab261de7e10c5aeed42d48413abd7 Mon Sep 17 00:00:00 2001
From: Torsten Oppermann <torsten@sgalinski.de>
Date: Wed, 2 Aug 2017 16:46:24 +0200
Subject: [PATCH] [TASK] Refactoring languages WIP

---
 Classes/Controller/MailController.php       | 117 +++++++---------
 Classes/Service/BackendService.php          |  29 ++--
 Resources/Private/Templates/Mail/Index.html | 144 +++++---------------
 3 files changed, 98 insertions(+), 192 deletions(-)

diff --git a/Classes/Controller/MailController.php b/Classes/Controller/MailController.php
index 4fb901b8..0f7e6f03 100644
--- a/Classes/Controller/MailController.php
+++ b/Classes/Controller/MailController.php
@@ -90,92 +90,66 @@ class MailController extends ActionController {
 			$this->redirect('empty');
 		}
 
-		$languages = BackendService::getLanguages();
-
-		$this->view->assign('languages', $languages);
-		$this->view->assign('templates', MailTemplateService::getRegisterArray());
-
-		// get language selection or read from cache or get default
-		$selectedLanguages = BackendService::getSelectedLanguages(
-			$parameters['selectedLanguageLeft'], $parameters['selectedLanguageRight'], $this->session, $languages
-		);
-
 		if ($parameters['selectedTemplate'] === NULL || $parameters['selectedTemplate'] === '') {
 			$parameters['selectedExtension'] = key($registerArray);
 			$parameters['selectedTemplate'] = key($registerArray[$parameters['selectedExtension']]);
 		}
 
-		$selectedTemplates = BackendService::getSelectedTemplates(
-			$parameters['selectedExtension'], $parameters['selectedTemplate'], $selectedLanguages, $this->session,
+		$languages = BackendService::getLanguages();
+		$templates = BackendService::getSelectedTemplates(
+			$parameters['selectedExtension'], $parameters['selectedTemplate'], $languages,
 			$pid
 		);
 
-		if ($selectedTemplates['left'] instanceof Template) {
-			$this->view->assign('contentLeft', $selectedTemplates['left']->getContent());
-			$this->view->assign('fromNameLeft', $selectedTemplates['left']->getFromName());
-			$this->view->assign('fromMailLeft', $selectedTemplates['left']->getFromMail());
-			$this->view->assign('ccLeft', $selectedTemplates['left']->getCc());
-			$this->view->assign('bccLeft', $selectedTemplates['left']->getBcc());
-			$this->view->assign('replyToLeft', $selectedTemplates['left']->getReplyTo());
-		} else {
-			$defaultTemplatePath = $registerArray[$parameters['selectedExtension']][$parameters['selectedTemplate']]['templatePath'];
-			$defaultTemplateFile = $defaultTemplatePath . $selectedLanguages['left'] . '.' . 'template.html';
-			if (file_exists($defaultTemplateFile)) {
-				$this->view->assign('contentLeft', file_get_contents($defaultTemplateFile));
-			}
+		// calculating optimal column width for the view
+		$colspace = 3;
+		$templateCount = count($templates);
+		if ($templateCount % 2 === 0 && $templateCount <= 4) {
+			$colspace = 6;
+		} elseif ($templateCount === 1) {
+			$colspace = 12;
 		}
 
-		if ($selectedTemplates['right'] instanceof Template) {
-			$this->view->assign('contentRight', $selectedTemplates['right']->getContent());
-			$this->view->assign('fromNameRight', $selectedTemplates['right']->getFromName());
-			$this->view->assign('fromMailRight', $selectedTemplates['right']->getFromMail());
-			$this->view->assign('ccRight', $selectedTemplates['right']->getCc());
-			$this->view->assign('bccRight', $selectedTemplates['right']->getBcc());
-			$this->view->assign('replyToRight', $selectedTemplates['right']->getReplyTo());
-		} else {
-			$defaultTemplatePath = $registerArray[$parameters['selectedExtension']][$parameters['selectedTemplate']]['templatePath'];
-			$defaultTemplateFile = $defaultTemplatePath . $selectedLanguages['right'] . '.' . 'template.html';
-			if (file_exists($defaultTemplateFile)) {
-				$this->view->assign('contentRight', file_get_contents($defaultTemplateFile));
-			}
-		}
+		$this->view->assign('colspace', $colspace);
+		$this->view->assign('languageTemplates', $templates);
+		$this->view->assign('templates', MailTemplateService::getRegisterArray());
 
 		$subject = $registerArray[$parameters['selectedExtension']][$parameters['selectedTemplate']]['subject'];
 
 		if (is_array($subject)) {
-			$this->view->assign(
-				'subjectLeft', $selectedTemplates['left'] !== NULL ? $selectedTemplates['left']->getSubject() :
-				$registerArray[$parameters['selectedExtension']][$parameters['selectedTemplate']]['subject'][$selectedLanguages['left']]
-			);
-
-			$this->view->assign(
-				'subjectRight', $selectedTemplates['right'] !== NULL ? $selectedTemplates['right']->getSubject() :
-				$registerArray[$parameters['selectedExtension']][$parameters['selectedTemplate']]['subject'][$selectedLanguages['right']]
-			);
-		} else {
-			$translatedSubjects = BackendService::getTranslatedTemplateSubject(
-				$subject, $parameters['selectedExtension'], $selectedLanguages
-			);
-
-			$this->view->assign(
-				'subjectLeft', $selectedTemplates['left'] !== NULL ? $selectedTemplates['left']->getSubject() :
-				$translatedSubjects['left']
-			);
-
-			$this->view->assign(
-				'subjectRight', $selectedTemplates['right'] !== NULL ? $selectedTemplates['right']->getSubject() :
-				$translatedSubjects['right']
-			);
+//			$this->view->assign(
+//				'subjectLeft', $selectedTemplates['left'] !== NULL ? $selectedTemplates['left']->getSubject() :
+//				$registerArray[$parameters['selectedExtension']][$parameters['selectedTemplate']]['subject'][$selectedLanguages['left']]
+//			);
+//
+//			$this->view->assign(
+//				'subjectRight', $selectedTemplates['right'] !== NULL ? $selectedTemplates['right']->getSubject() :
+//				$registerArray[$parameters['selectedExtension']][$parameters['selectedTemplate']]['subject'][$selectedLanguages['right']]
+//			);
+//		} else {
+//			$translatedSubjects = BackendService::getTranslatedTemplateSubject(
+//				$subject, $parameters['selectedExtension'], $selectedLanguages
+//			);
+//
+//			$this->view->assign(
+//				'subjectLeft', $selectedTemplates['left'] !== NULL ? $selectedTemplates['left']->getSubject() :
+//				$translatedSubjects['left']
+//			);
+//
+//			$this->view->assign(
+//				'subjectRight', $selectedTemplates['right'] !== NULL ? $selectedTemplates['right']->getSubject() :
+//				$translatedSubjects['right']
+//			);
 		}
 
 		$templateDescription = $registerArray[$parameters['selectedExtension']][$parameters['selectedTemplate']]['description'];
-		if (is_array($templateDescription)) {
-			$templateDescription = $templateDescription[$selectedLanguages['left']];
-		} else {
-			$templateDescription = LocalizationUtility::translate(
-				$templateDescription, $parameters['selectedExtension']
-			);
-		}
+//		if (is_array($templateDescription)) {
+//			$templateDescription = $templateDescription[$selectedLanguages['left']];
+//		} else {
+//			$templateDescription = LocalizationUtility::translate(
+//				$templateDescription, $parameters['selectedExtension']
+//			);
+//		}
 
 		// create doc header component
 		$pageUid = (int) GeneralUtility::_GP('id');
@@ -189,8 +163,6 @@ class MailController extends ActionController {
 			);
 			$this->view->assign('selectedTemplateKey', $parameters['selectedTemplate']);
 			$this->view->assign('selectedExtensionKey', $parameters['selectedExtension']);
-			$this->view->assign('selectedLanguageLeft', $selectedLanguages['left']);
-			$this->view->assign('selectedLanguageRight', $selectedLanguages['right']);
 			$this->view->assign('mode', 'editor');
 		} else {
 			$this->view->assign('pages', BackendService::getPages());
@@ -273,6 +245,9 @@ class MailController extends ActionController {
 	 * @throws \TYPO3\CMS\Extbase\Persistence\Exception\UnknownObjectException
 	 */
 	public function sendTestMailAction(array $parameters = []) {
+		debug($parameters);
+		die();
+
 		$this->saveTemplate(
 			$parameters['selectedExtension'], $parameters['selectedTemplate'], $parameters['selectedLanguageLeft'],
 			$parameters['contentLeft'], $parameters['subjectLeft'],
diff --git a/Classes/Service/BackendService.php b/Classes/Service/BackendService.php
index 0c5ada3f..3bc2d794 100644
--- a/Classes/Service/BackendService.php
+++ b/Classes/Service/BackendService.php
@@ -202,14 +202,13 @@ class BackendService {
 	 *
 	 * @param string $selectedExtension
 	 * @param string $selectedTemplate
-	 * @param array $selectedLanguages
-	 * @param \SGalinski\SgMail\Session\PhpSession $session
+	 * @param array $languages
 	 * @param int $pid
 	 * @return array
 	 * @throws \InvalidArgumentException
 	 */
 	public static function getSelectedTemplates(
-		$selectedExtension, $selectedTemplate, array $selectedLanguages, &$session, $pid
+		$selectedExtension, $selectedTemplate, array $languages, $pid
 	) {
 		$selectedTemplates = [];
 
@@ -217,15 +216,21 @@ class BackendService {
 		/** @var TemplateRepository $templateRepository */
 		$templateRepository = $objectManager->get(TemplateRepository::class);
 
-		$session->setDataByKey('selectedLanguageLeft', $selectedLanguages['left']);
-		$session->setDataByKey('selectedLanguageRight', $selectedLanguages['right']);
+		foreach ($languages as $language) {
+			$selectedTemplates[$language] = $templateRepository->findOneByTemplate(
+				$selectedExtension, $selectedTemplate, $language, $pid
+			);
+		}
 
-		$selectedTemplates['left'] = $templateRepository->findOneByTemplate(
-			$selectedExtension, $selectedTemplate, $selectedLanguages['left'], $pid
-		);
-		$selectedTemplates['right'] = $templateRepository->findOneByTemplate(
-			$selectedExtension, $selectedTemplate, $selectedLanguages['right'], $pid
-		);
+//		$session->setDataByKey('selectedLanguageLeft', $selectedLanguages['left']);
+//		$session->setDataByKey('selectedLanguageRight', $selectedLanguages['right']);
+//
+//		$selectedTemplates['left'] = $templateRepository->findOneByTemplate(
+//			$selectedExtension, $selectedTemplate, $selectedLanguages['left'], $pid
+//		);
+//		$selectedTemplates['right'] = $templateRepository->findOneByTemplate(
+//			$selectedExtension, $selectedTemplate, $selectedLanguages['right'], $pid
+//		);
 
 		return $selectedTemplates;
 	}
@@ -280,7 +285,7 @@ class BackendService {
 	}
 
 	/**
-	 *	Get the template keys in an array suitable for filtering
+	 *    Get the template keys in an array suitable for filtering
 	 *
 	 * @return array
 	 */
diff --git a/Resources/Private/Templates/Mail/Index.html b/Resources/Private/Templates/Mail/Index.html
index af29857b..361bf313 100644
--- a/Resources/Private/Templates/Mail/Index.html
+++ b/Resources/Private/Templates/Mail/Index.html
@@ -75,126 +75,52 @@
 					</div>
 				</div>
 			</div>
-			<div class="row col-md-12">
+			<div class="row col-md-12 form-group">
 				<f:form method="post" controller="Mail" action="sendTestMail">
 					<div class="col-md-12 form-group">
 						<f:form.submit class="btn-primary btn form-group" value="{f:translate(key:'backend.send_test')}" />
 						<f:form.textfield name="parameters[emailAddress]" type="email" required="TRUE" class="email-input form-group" value="{beUserMail}" />
-						<f:form.hidden name="parameters[selectedLanguageLeft]" value="{selectedLanguageLeft}" />
-						<f:form.hidden name="parameters[selectedLanguageRight]" value="{selectedLanguageRight}" />
 						<f:form.hidden name="parameters[selectedTemplate]" value="{selectedTemplateKey}" />
 						<f:form.hidden name="parameters[selectedExtensionKey]" value="{selectedTemplate.extension}" />
 						<f:form.hidden name="parameters[selectedExtension]" value="{selectedTemplate.extension}" />
 						<f:form.hidden name="parameters[selectedTemplateKey]" value="{selectedTemplateKey}" />
 					</div>
-					<div class="col-md-6">
-						<div class="form-group">
-							<label class="">{f:translate(key:'backend.select_language')}</label>
-							<f:be.menus.actionMenu>
-								<f:for each="{languages}" as="language">
-									<sgm:extendedIf condition="{language} == {selectedLanguageLeft}">
-										<f:then>
-											<sgm:be.menus.actionMenuItem label="{language}"
-												controller="Mail"
-												action="index"
-												arguments="{selectedLanguageLeft: language, selectedLanguageRight: selectedLanguageRight, selectedTemplate: selectedTemplateKey, selectedExtensionKey: selectedTemplate.extension, selectedExtension: selectedTemplate.extension, selectedTemplateKey: selectedTemplateKey}"
-												additionalAttributes="{selected: 'selected'}" />
-										</f:then>
-										<f:else>
-											<sgm:be.menus.actionMenuItem label="{language}"
-												controller="Mail"
-												action="index"
-												arguments="{selectedLanguageLeft: language, selectedLanguageRight: selectedLanguageRight, selectedTemplate: selectedTemplateKey, selectedExtensionKey: selectedTemplate.extension, selectedExtension: selectedTemplate.extension, selectedTemplateKey: selectedTemplateKey}" />
-										</f:else>
-									</sgm:extendedIf>
-								</f:for>
-							</f:be.menus.actionMenu>
-						</div>
-						<div class="form-group">
-							<label for="parameters[fromNameLeft]" class="">{f:translate(key:'backend.fromName')}</label>
-							<f:form.textfield type="text" class="form-control" value="{fromNameLeft}" name="parameters[fromNameLeft]" />
-						</div>
-						<div class="form-group">
-							<label for="parameters[fromMailLeft]" class="">{f:translate(key:'backend.fromMail')}</label>
-							<f:form.textfield type="email" class="form-control" value="{fromMailLeft}" name="parameters[fromMailLeft]" />
-						</div>
-						<div class="form-group">
-							<label for="parameters[ccLeft]" class="">{f:translate(key:'backend.cc')}</label>
-							<f:form.textfield type="text" class="form-control" value="{ccLeft}" name="parameters[ccLeft]" />
-						</div>
-						<div class="form-group">
-							<label for="parameters[bccLeft]" class="">{f:translate(key:'backend.bcc')}</label>
-							<f:form.textfield type="text" class="form-control" value="{bccLeft}" name="parameters[bccLeft]" />
-						</div>
-						<div class="form-group">
-							<label for="parameters[replyToLeft]" class="">{f:translate(key:'backend.replyTo')}</label>
-							<f:form.textfield type="text" class="form-control" value="{replyToLeft}" name="parameters[replyToLeft]" />
-						</div>
-						<div class="form-group">
-							<label for="parameters[subjectLeft]" class="">{f:translate(key:'backend.subject')}</label>
-							<f:form.textfield type="text" class="form-control" value="{subjectLeft}" name="parameters[subjectLeft]" />
-						</div>
-						<label for="parameters[contentLeft]" class="">{f:translate(key:'backend.content')}</label>
-						<f:form.textarea class="form-control" rows="25" name="parameters[contentLeft]" value="{contentLeft}" />
-					</div>
-
-					<div class="col-md-6">
-						<div class="form-group">
-							<label class="">{f:translate(key:'backend.select_language')}</label>
-							<f:be.menus.actionMenu>
-								<f:for each="{languages}" as="language">
-									<sgm:extendedIf condition="{language} == {selectedLanguageRight}">
-										<f:then>
-											<sgm:be.menus.actionMenuItem label="{language}"
-												controller="Mail"
-												action="index"
-												arguments="{parmselectedLanguageLeft: selectedLanguageLeft, selectedLanguageRight: language, selectedTemplate: selectedTemplateKey, selectedExtensionKey: selectedTemplate.extension, selectedExtension: selectedTemplate.extension, selectedTemplateKey: selectedTemplateKey}"
-												additionalAttributes="{selected: 'selected'}" />
-										</f:then>
-										<f:else>
-											<sgm:be.menus.actionMenuItem label="{language}"
-												controller="Mail"
-												action="index"
-												arguments="{parameters: {selectedLanguageLeft: selectedLanguageLeft, selectedLanguageRight: language, selectedTemplate: selectedTemplateKey, selectedExtensionKey: selectedTemplate.extension, selectedExtension: selectedTemplate.extension, selectedTemplateKey: selectedTemplateKey}}" />
 
-												arguments="{selectedLanguageLeft: selectedLanguageLeft, selectedLanguageRight: language, selectedTemplate: selectedTemplateKey, selectedExtensionKey: selectedTemplate.extension, selectedExtension: selectedTemplate.extension, selectedTemplateKey: selectedTemplateKey}" />
-										</f:else>
-									</sgm:extendedIf>
-								</f:for>
-							</f:be.menus.actionMenu>
+					<f:for each="{languageTemplates}" as="languageTemplate" key="key">
+						<div class="col-md-{colspace}" style="border: 1px solid;">
+							<h3>{key}</h3>
+							<div class="col-md-12">
+								<div class="row form-group">
+									<label for="parameters[{key}][fromName]" class="">{f:translate(key:'backend.fromName')}</label>
+									<f:form.textfield type="text" class="form-control" value="{languageTemplate.fromName}" name="parameters[{key}][fromName]" />
+								</div>
+								<div class="row form-group">
+									<label for="parameters[{key}][fromMail]" class="">{f:translate(key:'backend.fromMail')}</label>
+									<f:form.textfield type="email" class="form-control" value="{languageTemplate.fromMail}" name="parameters[{key}][fromMail]" />
+								</div>
+								<div class="row form-group">
+									<label for="parameters[{key}][cc]" class="">{f:translate(key:'backend.cc')}</label>
+									<f:form.textfield type="text" class="form-control" value="{languageTemplate.cc}" name="parameters[{key}][cc]" />
+								</div>
+								<div class="row form-group">
+									<label for="parameters[{key}][bcc]" class="">{f:translate(key:'backend.bcc')}</label>
+									<f:form.textfield type="text" class="form-control" value="{languageTemplate.bcc}" name="parameters[{key}][bcc]" />
+								</div>
+								<div class="row form-group">
+									<label for="parameters[{key}][replyTo]" class="">{f:translate(key:'backend.replyTo')}</label>
+									<f:form.textfield type="text" class="form-control" value="{languageTemplate.replyToLeft}" name="parameters[{key}][replyTo]" />
+								</div>
+								<div class="row form-group">
+									<label for="parameters[{key}][subject]" class="">{f:translate(key:'backend.subject')}</label>
+									<f:form.textfield type="text" class="form-control" value="{languageTemplate.subjectLeft}" name="parameters[{key}][subject]" />
+								</div>
+								<div class="row form-group">
+									<label for="parameters[{key}][content]" class="">{f:translate(key:'backend.content')}</label>
+									<f:form.textarea class="form-control" rows="15" name="parameters[{key}][content]" value="{languageTemplate.content}" />
+								</div>
+							</div>
 						</div>
-						<div class="form-group">
-							<label for="parameters[fromNameRight]" class="">{f:translate(key:'backend.fromName')}</label>
-							<f:form.textfield type="text" class="form-control" value="{fromNameRight}" name="parameters[fromNameRight]" />
-						</div>
-						<div class="form-group">
-							<label for="parameters[fromMailRight]" class="">{f:translate(key:'backend.fromMail')}</label>
-							<f:form.textfield type="email" class="form-control" value="{fromMailRight}" name="parameters[fromMailRight]" />
-						</div>
-						<div class="form-group">
-							<label for="parameters[ccRight]" class="">{f:translate(key:'backend.cc')}</label>
-							<f:form.textfield type="text" class="form-control" value="{ccRight}" name="parameters[ccRight]" />
-						</div>
-						<div class="form-group">
-							<label for="parameters[bccRight]" class="">{f:translate(key:'backend.bcc')}</label>
-							<f:form.textfield type="text" class="form-control" value="{bccRight}" name="parameters[bccRight]" />
-						</div>
-						<div class="form-group">
-							<label for="parameters[replyToRight]" class="">{f:translate(key:'backend.replyTo')}</label>
-							<f:form.textfield type="text" class="form-control" value="{replyToRight}" name="parameters[replyToRight]" />
-						</div>
-						<div class="form-group">
-							<label for="parameters[subjectRight]" class="">{f:translate(key:'backend.subject')}</label>
-							<f:form.textfield type="text" class=" form-control" value="{subjectRight}" name="parameters[subjectRight]" />
-						</div>
-						<label for="parameters[contentRight]" class="">{f:translate(key:'backend.content')}</label>
-						<f:form.textarea class="form-control" rows="25" name="parameters[contentRight]" value="{contentRight}" />
-					</div>
-					<div class="col-md-2">
-						<div class="form-group">
-							<f:form.submit class="btn-primary btn form-group btn-save-backend " value="{f:translate(key:'backend.send_test')}" />
-						</div>
-					</div>
+					</f:for>
 				</f:form>
 			</div>
 		</f:then>
-- 
GitLab