From 12706eb355d5382727363663fecfc11025575428 Mon Sep 17 00:00:00 2001 From: Torsten Oppermann <torsten@sgalinski.de> Date: Mon, 17 Jul 2017 10:00:20 +0200 Subject: [PATCH] [TASK] Moving logic from mail controller to service class --- Classes/Controller/MailController.php | 100 ++++++++++---------------- Classes/Service/BackendService.php | 76 ++++++++++++++++++++ 2 files changed, 114 insertions(+), 62 deletions(-) diff --git a/Classes/Controller/MailController.php b/Classes/Controller/MailController.php index 735dfaa0..8c20c858 100644 --- a/Classes/Controller/MailController.php +++ b/Classes/Controller/MailController.php @@ -99,69 +99,45 @@ class MailController extends ActionController { $this->view->assign('languages', $languages); $this->view->assign('templates', MailTemplateService::getRegisterArray()); - // get last selected languages - if ($selectedLanguageLeft === NULL) { - $selectedLanguageLeftFromSession = $this->session->getDataByKey('selectedLanguageLeft'); - if ($selectedLanguageLeftFromSession !== NULL) { - $selectedLanguageLeft = $selectedLanguageLeftFromSession; - } else { - $selectedLanguageLeft = $languages[0]; - } - } - - if ($selectedLanguageRight === NULL) { - $selectedLanguageRightFromSession = $this->session->getDataByKey('selectedLanguageRight'); - if ($selectedLanguageRightFromSession === NULL) { - if (isset($languages[1])) { - $selectedLanguageRight = $languages[1]; - } else { - $selectedLanguageRight = $languages[0]; - } - } else { - $selectedLanguageRight = $selectedLanguageRightFromSession; - } - } + // get language selection or read from cache or get default + $selectedLanguages = BackendService::getSelectedLanguages( + $selectedLanguageLeft, $selectedLanguageRight, $this->session, $languages + ); if ($selectedTemplate === NULL || $selectedTemplate === '') { $selectedExtension = key($registerArray); $selectedTemplate = key($registerArray[$selectedExtension]); } - $selectedTemplateArray = $registerArray[$selectedExtension][$selectedTemplate]; - $this->session->setDataByKey('selectedLanguageLeft', $selectedLanguageLeft); - $this->session->setDataByKey('selectedLanguageRight', $selectedLanguageRight); - $templateLeft = $this->templateRepository->findOneByTemplate( - $selectedExtension, $selectedTemplate, $selectedLanguageLeft, $siteRootId - ); - $templateRight = $this->templateRepository->findOneByTemplate( - $selectedExtension, $selectedTemplate, $selectedLanguageRight, $siteRootId + $selectedTemplates = BackendService::getSelectedTemplates( + $selectedExtension, $selectedTemplate, $selectedLanguages, $this->session, $siteRootId ); - if ($templateLeft !== NULL) { - $this->view->assign('contentLeft', $templateLeft->getContent()); - $this->view->assign('fromNameLeft', $templateLeft->getFromName()); - $this->view->assign('fromMailLeft', $templateLeft->getFromMail()); - $this->view->assign('ccLeft', $templateLeft->getCc()); - $this->view->assign('bccLeft', $templateLeft->getBcc()); - $this->view->assign('replyToLeft', $templateLeft->getReplyTo()); + 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[$selectedExtension][$selectedTemplate]['templatePath']; - $defaultTemplateFile = $defaultTemplatePath . $selectedLanguageLeft . '.' . 'template.html'; + $defaultTemplateFile = $defaultTemplatePath . $selectedLanguages['left'] . '.' . 'template.html'; if (file_exists($defaultTemplateFile)) { $this->view->assign('contentLeft', file_get_contents($defaultTemplateFile)); } } - if ($templateRight !== NULL) { - $this->view->assign('contentRight', $templateRight->getContent()); - $this->view->assign('fromNameRight', $templateRight->getFromName()); - $this->view->assign('fromMailRight', $templateRight->getFromMail()); - $this->view->assign('ccRight', $templateRight->getCc()); - $this->view->assign('bccRight', $templateRight->getBcc()); - $this->view->assign('replyToRight', $templateRight->getReplyTo()); + 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[$selectedExtension][$selectedTemplate]['templatePath']; - $defaultTemplateFile = $defaultTemplatePath . $selectedLanguageRight . '.' . 'template.html'; + $defaultTemplateFile = $defaultTemplatePath . $selectedLanguages['right'] . '.' . 'template.html'; if (file_exists($defaultTemplateFile)) { $this->view->assign('contentRight', file_get_contents($defaultTemplateFile)); } @@ -171,47 +147,47 @@ class MailController extends ActionController { if (is_array($subject)) { $this->view->assign( - 'subjectLeft', $templateLeft !== NULL ? $templateLeft->getSubject() : - $registerArray[$selectedExtension][$selectedTemplate]['subject'][$selectedLanguageLeft] + 'subjectLeft', $selectedTemplates['left'] !== NULL ? $selectedTemplates['left']->getSubject() : + $registerArray[$selectedExtension][$selectedTemplate]['subject'][$selectedLanguages['left']] ); $this->view->assign( - 'subjectRight', $templateRight !== NULL ? $templateRight->getSubject() : - $registerArray[$selectedExtension][$selectedTemplate]['subject'][$selectedLanguageRight] + 'subjectRight', $selectedTemplates['right'] !== NULL ? $selectedTemplates['right']->getSubject() : + $registerArray[$selectedExtension][$selectedTemplate]['subject'][$selectedLanguages['right']] ); } else { $langFile = GeneralUtility::readLLfile( - 'EXT:' . $selectedExtension . '/Resources/Private/Language/locallang.xlf', $selectedLanguageLeft + 'EXT:' . $selectedExtension . '/Resources/Private/Language/locallang.xlf', $selectedLanguages['left'] ); $translatedSubject = $langFile['default'][$subject][0]['target']; - if ($langFile[$selectedLanguageLeft][$subject][0]) { - $translatedSubject = $langFile[$selectedLanguageLeft][$subject][0]['target']; + if ($langFile[$selectedLanguages['left']][$subject][0]) { + $translatedSubject = $langFile[$selectedLanguages['left']][$subject][0]['target']; } $this->view->assign( - 'subjectLeft', $templateLeft !== NULL ? $templateLeft->getSubject() : + 'subjectLeft', $selectedTemplates['left'] !== NULL ? $selectedTemplates['left']->getSubject() : $translatedSubject ); $langFile = GeneralUtility::readLLfile( - 'EXT:' . $selectedExtension . '/Resources/Private/Language/locallang.xlf', $selectedLanguageRight + 'EXT:' . $selectedExtension . '/Resources/Private/Language/locallang.xlf', $selectedLanguages['right'] ); $translatedSubject = $langFile['default'][$subject][0]['target']; - if ($langFile[$selectedLanguageLeft][$subject][0][$subject]) { - $translatedSubject = $langFile[$selectedLanguageRight][$subject][0]['target']; + if ($langFile[$selectedLanguages['left']][$subject][0][$subject]) { + $translatedSubject = $langFile[$selectedLanguages['right']][$subject][0]['target']; } $this->view->assign( - 'subjectRight', $templateRight !== NULL ? $templateRight->getSubject() : + 'subjectRight', $selectedTemplates['right'] !== NULL ? $selectedTemplates['right']->getSubject() : $translatedSubject ); } $templateDescription = $registerArray[$selectedExtension][$selectedTemplate]['description']; if (is_array($templateDescription)) { - $templateDescription = $templateDescription[$selectedLanguageLeft]; + $templateDescription = $templateDescription[$selectedLanguages['left']]; } else { $templateDescription = LocalizationUtility::translate( $templateDescription, $selectedExtension @@ -229,11 +205,11 @@ class MailController extends ActionController { $this->view->assign('docHeader', $this->docHeaderComponent->docHeaderContent()); $this->view->assign('templateDescription', $templateDescription); - $this->view->assign('selectedTemplate', $selectedTemplateArray); + $this->view->assign('selectedTemplate', $registerArray[$selectedExtension][$selectedTemplate]); $this->view->assign('selectedTemplateKey', $selectedTemplate); $this->view->assign('selectedExtensionKey', $selectedExtension); - $this->view->assign('selectedLanguageLeft', $selectedLanguageLeft); - $this->view->assign('selectedLanguageRight', $selectedLanguageRight); + $this->view->assign('selectedLanguageLeft', $selectedLanguages['left']); + $this->view->assign('selectedLanguageRight', $selectedLanguages['right']); $this->view->assign('mode', 'editor'); } else { $this->view->assign('noPage', '1'); diff --git a/Classes/Service/BackendService.php b/Classes/Service/BackendService.php index d21bf08d..b8a7790f 100644 --- a/Classes/Service/BackendService.php +++ b/Classes/Service/BackendService.php @@ -26,6 +26,7 @@ namespace SGalinski\SgMail\Service; * This copyright notice MUST APPEAR in all copies of the script! ***************************************************************/ +use SGalinski\SgMail\Domain\Repository\TemplateRepository; use TYPO3\CMS\Backend\Template\Components\ButtonBar; use TYPO3\CMS\Backend\Template\Components\DocHeaderComponent; use TYPO3\CMS\Backend\Utility\BackendUtility; @@ -42,6 +43,7 @@ use TYPO3\CMS\Lang\Domain\Repository\LanguageRepository; * Backend Service class */ class BackendService { + /** * Get all pages the be user has access to * @@ -136,4 +138,78 @@ class BackendService { return $languages; } + + /** + * Get the previous selected languages, the actual selection or the default + * format ['left' => languagecode, 'right' => ...] + * + * @param string $selectedLanguageLeft + * @param string $selectedLanguageRight + * @param \SGalinski\SgMail\Session\PhpSession $session + * @param array $languages + * @return array + */ + public static function getSelectedLanguages( + $selectedLanguageLeft, $selectedLanguageRight, $session, array $languages + ) { + $selectedLanguages = [ + 'left' => $selectedLanguageLeft, + 'right' => $selectedLanguageRight + ]; + + if ($selectedLanguageLeft === NULL) { + $selectedLanguageLeftFromSession = $session->getDataByKey('selectedLanguageLeft'); + if ($selectedLanguageLeftFromSession !== NULL) { + $selectedLanguages['left'] = $selectedLanguageLeftFromSession; + } else { + $selectedLanguages['left'] = $languages[0]; + } + } + + if ($selectedLanguageRight === NULL) { + $selectedLanguageRightFromSession = $session->getDataByKey('selectedLanguageRight'); + if ($selectedLanguageRightFromSession === NULL) { + if (isset($languages[1])) { + $selectedLanguages['right'] = $languages[1]; + } else { + $selectedLanguages['right'] = $languages[0]; + } + } else { + $selectedLanguages['right'] = $selectedLanguageRightFromSession; + } + } + return $selectedLanguages; + } + + /** + * Get the selected templates for the selected language + * + * @param string $selectedExtension + * @param string $selectedTemplate + * @param array $selectedLanguages + * @param \SGalinski\SgMail\Session\PhpSession $session + * @param int $siteRootId + * @return array + * @throws \InvalidArgumentException + */ + public static function getSelectedTemplates( + $selectedExtension, $selectedTemplate, array $selectedLanguages, &$session, $siteRootId + ) { + $selectedTemplates = []; + + $objectManager = GeneralUtility::makeInstance(ObjectManager::class); + /** @var LanguageRepository $languageRepository */ + $templateRepository = $objectManager->get(TemplateRepository::class); + + $session->setDataByKey('selectedLanguageLeft', $selectedLanguages['left']); + $session->setDataByKey('selectedLanguageRight', $selectedLanguages['right']); + $selectedTemplates['left'] = $templateRepository->findOneByTemplate( + $selectedExtension, $selectedTemplate, $selectedLanguages['left'], $siteRootId + ); + $selectedTemplates['right'] = $templateRepository->findOneByTemplate( + $selectedExtension, $selectedTemplate, $selectedLanguages['right'], $siteRootId + ); + + return $selectedTemplates; + } } -- GitLab