From 7e48985cf5d3b8d98d21a567d06819e4a3deb14a Mon Sep 17 00:00:00 2001
From: Torsten Oppermann <torsten@sgalinski.de>
Date: Tue, 1 Aug 2017 16:07:28 +0200
Subject: [PATCH] [TASK] Merging save & send preview button, Huge refactorings
 on handling parameters to the controller

---
 Classes/Controller/MailController.php       | 145 +++++++-------------
 Resources/Private/Language/de.locallang.xlf |   4 +-
 Resources/Private/Language/locallang.xlf    |   2 +-
 Resources/Private/Layouts/Default.html      |   8 +-
 Resources/Private/Layouts/Queue.html        |   8 +-
 Resources/Private/Templates/Mail/Index.html |  83 +++++------
 ext_tables.php                              |   2 +-
 7 files changed, 101 insertions(+), 151 deletions(-)

diff --git a/Classes/Controller/MailController.php b/Classes/Controller/MailController.php
index 2bc2344e..d85439e0 100644
--- a/Classes/Controller/MailController.php
+++ b/Classes/Controller/MailController.php
@@ -69,19 +69,13 @@ class MailController extends ActionController {
 	/**
 	 * Show template Selection and enable content input + mail preview
 	 *
-	 * @param string $selectedTemplate
-	 * @param string $selectedExtension
-	 * @param string $selectedLanguageLeft
-	 * @param string $selectedLanguageRight
+	 * @param array $parameters
 	 * @throws \InvalidArgumentException
 	 * @throws \UnexpectedValueException
 	 * @throws \TYPO3\CMS\Extbase\Mvc\Exception\StopActionException
 	 * @throws \TYPO3\CMS\Extbase\Mvc\Exception\UnsupportedRequestTypeException
 	 */
-	public function indexAction(
-		$selectedTemplate = NULL, $selectedExtension = NULL, $selectedLanguageLeft = NULL,
-		$selectedLanguageRight = NULL
-	) {
+	public function indexAction(array $parameters = []) {
 		$siteRootId = BackendService::getSiteRoot((int) GeneralUtility::_GP('id'));
 
 		if (!($this->session instanceof PhpSession)) {
@@ -103,16 +97,17 @@ class MailController extends ActionController {
 
 		// get language selection or read from cache or get default
 		$selectedLanguages = BackendService::getSelectedLanguages(
-			$selectedLanguageLeft, $selectedLanguageRight, $this->session, $languages
+			$parameters['selectedLanguageLeft'], $parameters['selectedLanguageRight'], $this->session, $languages
 		);
 
-		if ($selectedTemplate === NULL || $selectedTemplate === '') {
-			$selectedExtension = key($registerArray);
-			$selectedTemplate = key($registerArray[$selectedExtension]);
+		if ($parameters['selectedTemplate'] === NULL || $parameters['selectedTemplate'] === '') {
+			$parameters['selectedExtension'] = key($registerArray);
+			$parameters['selectedTemplate'] = key($registerArray[$parameters['selectedExtension']]);
 		}
 
 		$selectedTemplates = BackendService::getSelectedTemplates(
-			$selectedExtension, $selectedTemplate, $selectedLanguages, $this->session, $siteRootId
+			$parameters['selectedExtension'], $parameters['selectedTemplate'], $selectedLanguages, $this->session,
+			$siteRootId
 		);
 
 		if ($selectedTemplates['left'] instanceof Template) {
@@ -123,7 +118,7 @@ class MailController extends ActionController {
 			$this->view->assign('bccLeft', $selectedTemplates['left']->getBcc());
 			$this->view->assign('replyToLeft', $selectedTemplates['left']->getReplyTo());
 		} else {
-			$defaultTemplatePath = $registerArray[$selectedExtension][$selectedTemplate]['templatePath'];
+			$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));
@@ -138,28 +133,28 @@ class MailController extends ActionController {
 			$this->view->assign('bccRight', $selectedTemplates['right']->getBcc());
 			$this->view->assign('replyToRight', $selectedTemplates['right']->getReplyTo());
 		} else {
-			$defaultTemplatePath = $registerArray[$selectedExtension][$selectedTemplate]['templatePath'];
+			$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));
 			}
 		}
 
-		$subject = $registerArray[$selectedExtension][$selectedTemplate]['subject'];
+		$subject = $registerArray[$parameters['selectedExtension']][$parameters['selectedTemplate']]['subject'];
 
 		if (is_array($subject)) {
 			$this->view->assign(
 				'subjectLeft', $selectedTemplates['left'] !== NULL ? $selectedTemplates['left']->getSubject() :
-				$registerArray[$selectedExtension][$selectedTemplate]['subject'][$selectedLanguages['left']]
+				$registerArray[$parameters['selectedExtension']][$parameters['selectedTemplate']]['subject'][$selectedLanguages['left']]
 			);
 
 			$this->view->assign(
 				'subjectRight', $selectedTemplates['right'] !== NULL ? $selectedTemplates['right']->getSubject() :
-				$registerArray[$selectedExtension][$selectedTemplate]['subject'][$selectedLanguages['right']]
+				$registerArray[$parameters['selectedExtension']][$parameters['selectedTemplate']]['subject'][$selectedLanguages['right']]
 			);
 		} else {
 			$translatedSubjects = BackendService::getTranslatedTemplateSubject(
-				$subject, $selectedExtension, $selectedLanguages
+				$subject, $parameters['selectedExtension'], $selectedLanguages
 			);
 
 			$this->view->assign(
@@ -173,12 +168,12 @@ class MailController extends ActionController {
 			);
 		}
 
-		$templateDescription = $registerArray[$selectedExtension][$selectedTemplate]['description'];
+		$templateDescription = $registerArray[$parameters['selectedExtension']][$parameters['selectedTemplate']]['description'];
 		if (is_array($templateDescription)) {
 			$templateDescription = $templateDescription[$selectedLanguages['left']];
 		} else {
 			$templateDescription = LocalizationUtility::translate(
-				$templateDescription, $selectedExtension
+				$templateDescription, $parameters['selectedExtension']
 			);
 		}
 
@@ -189,9 +184,11 @@ class MailController extends ActionController {
 		if ($pageInfo && $pageInfo['is_siteroot'] === '1') {
 
 			$this->view->assign('templateDescription', $templateDescription);
-			$this->view->assign('selectedTemplate', $registerArray[$selectedExtension][$selectedTemplate]);
-			$this->view->assign('selectedTemplateKey', $selectedTemplate);
-			$this->view->assign('selectedExtensionKey', $selectedExtension);
+			$this->view->assign(
+				'selectedTemplate', $registerArray[$parameters['selectedExtension']][$parameters['selectedTemplate']]
+			);
+			$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');
@@ -205,58 +202,7 @@ class MailController extends ActionController {
 
 		$this->view->assign('docHeader', $this->docHeaderComponent->docHeaderContent());
 		$this->view->assign('typo3Version', VersionNumberUtility::convertVersionNumberToInteger(TYPO3_version));
-		$this->view->assign('beUserMail',  $GLOBALS['BE_USER']->user['email']);
-	}
-
-	/**
-	 * Save content (left & right)
-	 * if left & right is the same language, the right content will apply only if its another language
-	 *
-	 * @param string $contentLeft
-	 * @param string $contentRight
-	 * @param string $selectedExtension
-	 * @param string $selectedTemplate
-	 * @param string $selectedLanguageLeft
-	 * @param string $selectedLanguageRight
-	 * @param string $subjectLeft
-	 * @param string $subjectRight
-	 * @param string $fromNameLeft
-	 * @param string $fromMailLeft
-	 * @param string $ccLeft
-	 * @param string $bccLeft
-	 * @param string $replyToLeft
-	 * @param string $fromNameRight
-	 * @param string $fromMailRight
-	 * @param string $ccRight
-	 * @param string $bccRight
-	 * @param string $replyToRight
-	 * @throws \InvalidArgumentException
-	 * @throws \TYPO3\CMS\Extbase\Persistence\Exception\IllegalObjectTypeException
-	 * @throws \TYPO3\CMS\Extbase\Persistence\Exception\UnknownObjectException
-	 * @throws \TYPO3\CMS\Extbase\Mvc\Exception\StopActionException
-	 * @throws \TYPO3\CMS\Extbase\Mvc\Exception\UnsupportedRequestTypeException
-	 */
-	public function saveAction(
-		$contentLeft = NULL, $contentRight = NULL, $selectedExtension = NULL, $selectedTemplate = NULL,
-		$selectedLanguageLeft = NULL, $selectedLanguageRight = NULL, $subjectLeft = NULL, $subjectRight = NULL,
-		$fromNameLeft = NULL, $fromMailLeft = NULL, $ccLeft = NULL, $bccLeft = NULL, $replyToLeft = NULL,
-		$fromNameRight = NULL, $fromMailRight = NULL, $ccRight = NULL, $bccRight = NULL, $replyToRight = NULL
-	) {
-		$this->saveTemplate(
-			$selectedExtension, $selectedTemplate, $selectedLanguageLeft, $contentLeft, $subjectLeft,
-			$fromNameLeft, $fromMailLeft, $ccLeft, $bccLeft, $replyToLeft
-		);
-		if ($selectedLanguageLeft !== $selectedLanguageRight) {
-			$this->saveTemplate(
-				$selectedExtension, $selectedTemplate, $selectedLanguageRight, $contentRight, $subjectRight,
-				$fromNameRight, $fromMailRight, $ccRight, $bccRight, $replyToRight
-			);
-		}
-
-		$message = LocalizationUtility::translate('backend.success', 'sg_mail');
-		$this->addFlashMessage($message, '', FlashMessage::OK);
-		$arguments = $this->request->getArguments();
-		$this->redirect('index', NULL, NULL, $arguments);
+		$this->view->assign('beUserMail', $GLOBALS['BE_USER']->user['email']);
 	}
 
 	/**
@@ -320,37 +266,32 @@ class MailController extends ActionController {
 	 * send a test email to a given address
 	 * redirect to index action
 	 *
-	 * @param string $emailAddress
-	 * @param string $selectedTemplateKey
-	 * @param string $selectedExtensionKey
-	 * @param string $selectedLanguageLeft
-	 * @param string $selectedLanguageRight
+	 * @param array $parameters
 	 * @throws \InvalidArgumentException
 	 * @throws \TYPO3\CMS\Extbase\Persistence\Exception\IllegalObjectTypeException
 	 * @throws \TYPO3\CMS\Extbase\Mvc\Exception\StopActionException
 	 * @throws \TYPO3\CMS\Extbase\Mvc\Exception\UnsupportedRequestTypeException
+	 * @throws \TYPO3\CMS\Extbase\Persistence\Exception\UnknownObjectException
 	 */
-	public function sendTestMailAction(
-		$emailAddress, $selectedExtensionKey, $selectedTemplateKey, $selectedLanguageLeft, $selectedLanguageRight
-	) {
+	public function sendTestMailAction(array $parameters = []) {
 		$objectManager = GeneralUtility::makeInstance(ObjectManager::class);
 		/** @var \SGalinski\SgMail\Service\MailTemplateService $mailTemplateService */
 		$mailTemplateService = $objectManager->get(MailTemplateService::class);
-		$mailTemplateService->setLanguage($selectedLanguageLeft);
-		$mailTemplateService->setToAddresses($emailAddress);
+		$mailTemplateService->setLanguage($parameters['selectedLanguageLeft']);
+		$mailTemplateService->setToAddresses($parameters['emailAddress']);
 		$mailTemplateService->setFromAddress('noreply@example.org');
-		$mailTemplateService->setTemplateName($selectedTemplateKey);
-		$mailTemplateService->setExtensionKey($selectedExtensionKey);
+		$mailTemplateService->setTemplateName($parameters['selectedTemplate']);
+		$mailTemplateService->setExtensionKey($parameters['selectedExtension']);
 		$mailIsSend = $mailTemplateService->sendEmail(TRUE);
 
-		if ($selectedLanguageRight !== $selectedLanguageLeft) {
+		if ($parameters['selectedLanguageRight'] !== $parameters['selectedLanguageLeft']) {
 			/** @var \SGalinski\SgMail\Service\MailTemplateService $mailTemplateService */
 			$mailTemplateService = $objectManager->get(MailTemplateService::class);
-			$mailTemplateService->setLanguage($selectedLanguageRight);
-			$mailTemplateService->setToAddresses($emailAddress);
+			$mailTemplateService->setLanguage($parameters['selectedLanguageRight']);
+			$mailTemplateService->setToAddresses($parameters['emailAddress']);
 			$mailTemplateService->setFromAddress('noreply@example.org');
-			$mailTemplateService->setTemplateName($selectedTemplateKey);
-			$mailTemplateService->setExtensionKey($selectedExtensionKey);
+			$mailTemplateService->setTemplateName($parameters['selectedTemplate']);
+			$mailTemplateService->setExtensionKey($parameters['selectedExtension']);
 			$mailIsSend = $mailTemplateService->sendEmail(TRUE);
 		}
 
@@ -362,6 +303,24 @@ class MailController extends ActionController {
 			$this->addFlashMessage($message, '', FlashMessage::ERROR);
 		}
 
+		$this->saveTemplate(
+			$parameters['selectedExtension'], $parameters['selectedTemplate'], $parameters['selectedLanguageLeft'],
+			$parameters['contentLeft'], $parameters['subjectLeft'],
+			$parameters['fromNameLeft'], $parameters['fromMailLeft'], $parameters['ccLeft'], $parameters['bccLeft'],
+			$parameters['replyToLeft']
+		);
+		if ($parameters['selectedLanguageleft'] !== $parameters['selectedLanguageRight']) {
+			$this->saveTemplate(
+				$parameters['selectedExtension'], $parameters['selectedTemplate'], $parameters['selectedLanguageRight'],
+				$parameters['contentRight'], $parameters['subjectRight'],
+				$parameters['fromNameRight'], $parameters['fromMailRight'], $parameters['ccRight'],
+				$parameters['bccRight'], $parameters['replyToRight']
+			);
+		}
+
+		$message = LocalizationUtility::translate('backend.success', 'sg_mail');
+		$this->addFlashMessage($message, '', FlashMessage::OK);
+
 		$arguments = $this->request->getArguments();
 		$this->redirect('index', NULL, NULL, $arguments);
 	}
diff --git a/Resources/Private/Language/de.locallang.xlf b/Resources/Private/Language/de.locallang.xlf
index 7d5974bf..518e8c03 100644
--- a/Resources/Private/Language/de.locallang.xlf
+++ b/Resources/Private/Language/de.locallang.xlf
@@ -190,8 +190,8 @@
 			<target>Diese E-Mail jetzt versenden?</target>
 		</trans-unit>
 		<trans-unit id="backend.send_test" approved="yes">
-			<source>Send Preview Mail (Save First!)</source>
-			<target>Sende Vorschau-Mail (Bitte vorher speichern!)</target>
+			<source>Save and send preview</source>
+			<target>Speichern und Vorschau-Mail senden</target>
 		</trans-unit>
 		<trans-unit id="backend.sending_time" approved="yes">
 			<source>Sending Time</source>
diff --git a/Resources/Private/Language/locallang.xlf b/Resources/Private/Language/locallang.xlf
index 61527ce6..34a751ce 100644
--- a/Resources/Private/Language/locallang.xlf
+++ b/Resources/Private/Language/locallang.xlf
@@ -145,7 +145,7 @@
 			<source>Send this email now?</source>
 		</trans-unit>
 		<trans-unit id="backend.send_test">
-			<source>Send Preview Mail (Save First!)</source>
+			<source>Save and send preview</source>
 		</trans-unit>
 		<trans-unit id="backend.sending_time">
 			<source>Sending Time</source>
diff --git a/Resources/Private/Layouts/Default.html b/Resources/Private/Layouts/Default.html
index fc23003a..31f7f7e1 100644
--- a/Resources/Private/Layouts/Default.html
+++ b/Resources/Private/Layouts/Default.html
@@ -71,14 +71,14 @@
 																<sgm:be.menus.actionMenuItem label="{currentTemplate.templateName}"
 																	controller="Queue"
 																	action="index"
-																	arguments="{selectedTemplate: templateKey, selectedExtension: extensionKey}"
+																	arguments="{parameters: {selectedTemplate: templateKey, selectedExtension: extensionKey}}"
 																	additionalAttributes="{selected: 'selected'}" />
 															</f:then>
 															<f:else>
 																<sgm:be.menus.actionMenuItem label="{currentTemplate.templateName}"
 																	controller="Queue"
 																	action="index"
-																	arguments="{selectedTemplate: templateKey, selectedExtension: extensionKey}" />
+																	arguments="{parameters: {selectedTemplate: templateKey, selectedExtension: extensionKey}}" />
 															</f:else>
 														</sgm:extendedIf>
 													</f:for>
@@ -94,14 +94,14 @@
 																	<sgm:be.menus.actionMenuItem label="{currentTemplate.templateName}"
 																		controller="Mail"
 																		action="index"
-																		arguments="{selectedTemplate: templateKey, selectedExtension: extensionKey}"
+																		arguments="{parameters: {selectedTemplate: templateKey, selectedExtension: extensionKey}}"
 																		additionalAttributes="{selected: 'selected'}" />
 																</f:then>
 																<f:else>
 																	<sgm:be.menus.actionMenuItem label="{currentTemplate.templateName}"
 																		controller="Mail"
 																		action="index"
-																		arguments="{selectedTemplate: templateKey, selectedExtension: extensionKey}" />
+																		arguments="{parameters: {selectedTemplate: templateKey, selectedExtension: extensionKey}}" />
 																</f:else>
 															</sgm:extendedIf>
 														</f:for>
diff --git a/Resources/Private/Layouts/Queue.html b/Resources/Private/Layouts/Queue.html
index e24cc5d2..cac6d1e7 100644
--- a/Resources/Private/Layouts/Queue.html
+++ b/Resources/Private/Layouts/Queue.html
@@ -20,13 +20,13 @@
 											controller="Queue"
 											action="index"
 											additionalAttributes="{selected: 'selected'}"
-											arguments="{selectedTemplate: selectedTemplateKey, selectedExtension: selectedExtensionKey}" />
+											arguments="{parameters: {selectedTemplate: selectedTemplateKey, selectedExtension: selectedExtensionKey}}"  />
 									</f:then>
 									<f:else>
 										<sgm:be.menus.actionMenuItem label="{f:translate(key:'backend.mail_queue')}"
 											controller="Queue"
 											action="index"
-											arguments="{selectedTemplate: selectedTemplateKey, selectedExtension: selectedExtensionKey}" />
+											arguments="{parameters: {selectedTemplate: selectedTemplateKey, selectedExtension: selectedExtensionKey}}" />
 									</f:else>
 								</f:if>
 								<f:if condition="{mode} == 'editor'">
@@ -34,14 +34,14 @@
 										<sgm:be.menus.actionMenuItem label="{f:translate(key:'backend.template_editor')}"
 											controller="Mail"
 											action="index"
-											arguments="{selectedTemplate: selectedTemplateKey, selectedExtension: selectedExtensionKey}"
+											arguments="{parameters: {selectedTemplate: selectedTemplateKey, selectedExtension: selectedExtensionKey}}"
 											additionalAttributes="{selected: 'selected'}" />
 									</f:then>
 									<f:else>
 										<sgm:be.menus.actionMenuItem label="{f:translate(key:'backend.template_editor')}"
 											controller="Mail"
 											action="index"
-											arguments="{selectedTemplate: selectedTemplateKey, selectedExtension: selectedExtensionKey}" />
+											arguments="{parameters: {selectedTemplate: selectedTemplateKey, selectedExtension: selectedExtensionKey}}"  />
 									</f:else>
 								</f:if>
 							</f:be.menus.actionMenu>
diff --git a/Resources/Private/Templates/Mail/Index.html b/Resources/Private/Templates/Mail/Index.html
index 83d48e00..076d7754 100644
--- a/Resources/Private/Templates/Mail/Index.html
+++ b/Resources/Private/Templates/Mail/Index.html
@@ -69,18 +69,15 @@
 				</table>
 			</div>
 			<f:form class="col-md-12" method="post" controller="Mail" action="sendTestMail">
-				<f:form.submit class="btn-primary btn form-group" value="{f:translate(key:'backend.send_test')}" />
-				<f:form.textfield name="emailAddress" type="email" required="TRUE" class="email-input form-group" value="{beUserMail}" />
-				<f:form.hidden name="selectedLanguageLeft" value="{selectedLanguageLeft}" />
-				<f:form.hidden name="selectedLanguageRight" value="{selectedLanguageRight}" />
-				<f:form.hidden name="selectedTemplate" value="{selectedTemplateKey}" />
-				<f:form.hidden name="selectedExtensionKey" value="{selectedTemplate.extension}" />
-				<f:form.hidden name="selectedExtension" value="{selectedTemplate.extension}" />
-				<f:form.hidden name="selectedTemplateKey" value="{selectedTemplateKey}" />
-			</f:form>
-			<f:form method="post" controller="Mail" action="save">
 				<div class="col-md-12 form-group">
-					<f:form.submit class="btn-save-backend btn-success btn col-md-2 form-group" value="{f:translate(key:'backend.save')}" />
+					<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">
@@ -109,37 +106,31 @@
 						<f:link.action class="reset-btn btn-danger btn form-group" action="reset" arguments="{template: selectedTemplateKey, language: selectedLanguageLeft, extensionKey: selectedTemplate.extension}">{f:translate(key:'backend.button_reset')}</f:link.action>
 					</div>
 					<div class="form-group">
-						<label for="fromNameLeft" class="">{f:translate(key:'backend.fromName')}</label>
-						<f:form.textfield type="text" class="form-control" value="{fromNameLeft}" name="fromNameLeft" />
+						<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="fromMailLeft" class="">{f:translate(key:'backend.fromMail')}</label>
-						<f:form.textfield type="email" class="form-control" value="{fromMailLeft}" name="fromMailLeft" />
+						<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="ccLeft" class="">{f:translate(key:'backend.cc')}</label>
-						<f:form.textfield type="text" class="form-control" value="{ccLeft}" name="ccLeft" />
+						<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="bccLeft" class="">{f:translate(key:'backend.bcc')}</label>
-						<f:form.textfield type="text" class="form-control" value="{bccLeft}" name="bccLeft" />
+						<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="replyToLeft" class="">{f:translate(key:'backend.replyTo')}</label>
-						<f:form.textfield type="text" class="form-control" value="{replyToLeft}" name="replyToLeft" />
+						<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="subjectLeft" class="">{f:translate(key:'backend.subject')}</label>
-						<f:form.textfield type="text" class="form-control" value="{subjectLeft}" name="subjectLeft" />
+						<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="contentLeft" class="">{f:translate(key:'backend.content')}</label>
-					<f:form.textarea class="form-control" rows="25" name="contentLeft" value="{contentLeft}" />
-					<f:form.hidden name="selectedLanguageLeft" value="{selectedLanguageLeft}" />
-					<f:form.hidden name="selectedLanguageRight" value="{selectedLanguageRight}" />
-					<f:form.hidden name="selectedTemplate" value="{selectedTemplateKey}" />
-					<f:form.hidden name="selectedExtensionKey" value="{selectedTemplate.extension}" />
-					<f:form.hidden name="selectedExtension" value="{selectedTemplate.extension}" />
-					<f:form.hidden name="selectedTemplateKey" value="{selectedTemplateKey}" />
+					<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">
@@ -169,35 +160,35 @@
 						<f:link.action class="reset-btn btn-danger btn form-group" action="reset" arguments="{template: selectedTemplateKey, language: selectedLanguageRight, extensionKey: selectedTemplate.extension}">{f:translate(key:'backend.button_reset')}</f:link.action>
 					</div>
 					<div class="form-group">
-						<label for="fromNameRight" class="">{f:translate(key:'backend.fromName')}</label>
-						<f:form.textfield type="text" class="form-control" value="{fromNameRight}" name="fromNameRight" />
+						<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="fromMailRight" class="">{f:translate(key:'backend.fromMail')}</label>
-						<f:form.textfield type="email" class="form-control" value="{fromMailRight}" name="fromMailRight" />
+						<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="ccRight" class="">{f:translate(key:'backend.cc')}</label>
-						<f:form.textfield type="text" class="form-control" value="{ccRight}" name="ccRight" />
+						<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="bccRight" class="">{f:translate(key:'backend.bcc')}</label>
-						<f:form.textfield type="text" class="form-control" value="{bccRight}" name="bccRight" />
+						<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="replyToRight" class="">{f:translate(key:'backend.replyTo')}</label>
-						<f:form.textfield type="text" class="form-control" value="{replyToRight}" name="replyToRight" />
+						<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="subjectRight" class="">{f:translate(key:'backend.subject')}</label>
-						<f:form.textfield type="text" class=" form-control" value="{subjectRight}" name="subjectRight" />
+						<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="contentRight" class="">{f:translate(key:'backend.content')}</label>
-					<f:form.textarea class="form-control" rows="25" name="contentRight" value="{contentRight}" />
+					<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-save-backend btn-success btn form-control" value="{f:translate(key:'backend.save')}" />
+						<f:form.submit class="btn-primary btn form-group btn-save-backend " value="{f:translate(key:'backend.send_test')}" />
 					</div>
 				</div>
 			</f:form>
diff --git a/ext_tables.php b/ext_tables.php
index afd1c9f4..701eda23 100644
--- a/ext_tables.php
+++ b/ext_tables.php
@@ -10,7 +10,7 @@ if (!defined('TYPO3_MODE')) {
 	'Mail',
 	'',
 	[
-		'Mail' => 'index, save, sendTestMail, empty, reset',
+		'Mail' => 'index, sendTestMail, empty, reset',
 		'Queue' => 'index, sendMail',
 	],
 	[
-- 
GitLab