<?php namespace SGalinski\SgMail\Service; use SGalinski\SgMail\Domain\Model\Mail; use SGalinski\SgMail\Domain\Repository\MailRepository; use TYPO3\CMS\Core\Mail\MailMessage; use TYPO3\CMS\Core\Utility\GeneralUtility; use TYPO3\CMS\Extbase\Object\ObjectManager; use TYPO3\CMS\Fluid\View\StandaloneView; /*************************************************************** * Copyright notice * * (c) sgalinski Internet Services (https://www.sgalinski.de) * * All rights reserved * * This script is part of the TYPO3 project. The TYPO3 project is * free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * The GNU General Public License can be found at * http://www.gnu.org/copyleft/gpl.html. * * This script is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * This copyright notice MUST APPEAR in all copies of the script! ***************************************************************/ /** * MailTemplateService */ class MailTemplateService { /** * @var array */ private static $registerArray = []; /** * @var array to */ private $to = []; /** * @var string from */ private $from; /** * @var string $cc */ private $cc; /** * @var string replyTo */ private $replyTo; /** * @var string language */ private $language = 'de'; /** * @var boolean ignoreMailQueue */ private $ignoreMailQueue = TRUE; /** * @var \TYPO3\CMS\Core\Mail\MailMessage $mailMessage */ private $mailMessage; /** * @var string templateName */ private $templateName; /** * @var string extensionKey */ private $extensionKey; /** * @var array content */ private $markers = []; /** * @var string subject */ private $subject; /** * MailTemplateService constructor. */ public function __construct() { $objectManager = GeneralUtility::makeInstance(ObjectManager::class); $this->mailMessage = $objectManager->get(MailMessage::class); } /** * register a template with sg_mail * * @param string $extension * @param string $templateName * @param string $templatePath * @param string $description * @param array $markers * @return string */ public static function registerTemplate($extension, $templateName, $templatePath, $description, array $markers) { MailTemplateService::$registerArray[$extension][$templateName] = [ 'templatePath' => $templatePath, 'description' => $description, 'marker' => $markers, 'extension' => $extension, 'templateName' => $templateName ]; } /** * Get all registered templates * * @return array */ public static function getRegisterArray() { return self::$registerArray; } /** * Send the Email */ public function sendEmail() { $registerArray = MailTemplateService::getRegisterArray(); $templateEntry = $registerArray[$this->extensionKey][$this->templateName]; $objectManager = GeneralUtility::makeInstance(ObjectManager::class); $emailView = $objectManager->get(StandaloneView::class); $emailView->setTemplatePathAndFilename( $templateEntry['templatePath'] . $this->language . '.sg_mail.locallang.html' ); $emailView->assignMultiple($this->markers); $emailBody = $emailView->render(); if ($this->ignoreMailQueue) { $this->mailMessage->setSubject($this->subject); $this->mailMessage->setBody($emailBody, 'text/html'); $this->mailMessage->send(); } else { $this->addMailToMailQueue($emailBody); } } /** * Adds a new mail to the mail queue. * * @param string $emailBody */ private function addMailToMailQueue($emailBody, $priority = Mail::PRIORITY_LOWEST, $pid = 0) { /** @var ObjectManager $objectManager */ $objectManager = GeneralUtility::makeInstance(ObjectManager::class); if ($pid <= 0 && isset($GLOBALS['TSFE'])) { $pid = (int) $GLOBALS['TSFE']->id; } $mail = $objectManager->get(Mail::class); $mail->setPid($pid); $mail->setFromAddress($this->from); $mail->setToAddress($this->to); $mail->setMailSubject($this->subject); $mail->setMailBody($emailBody); $mail->setPriority($priority); $mailRepository = $objectManager->get(MailRepository::class); $mailRepository->add($mail); } /** * @param array $registerArray * @return MailTemplateService */ public static function setRegisterArray(array $registerArray) { self::$registerArray = $registerArray; } /** * @param array | string $to * @return MailTemplateService */ public function setTo($to) { $this->to = $to; $this->mailMessage->setTo($to); return $this; } /** * @param array | string $from * @return MailTemplateService */ public function setFrom($from) { $this->from = $from; $this->mailMessage->setFrom($from); return $this; } /** * @param array | string $cc * @return MailTemplateService */ public function setCc($cc) { $this->cc = $cc; $this->mailMessage->setCc($cc); return $this; } /** * @param array | string $replyTo * @return MailTemplateService */ public function setReplyTo($replyTo) { $this->replyTo = $replyTo; $this->mailMessage->setReplyTo($replyTo); return $this; } /** * @param string $language * @return MailTemplateService */ public function setLanguage($language) { $this->language = $language; return $this; } /** * @param boolean $ignoreMailQueue * @return MailTemplateService */ public function setIgnoreMailQueue($ignoreMailQueue) { $this->ignoreMailQueue = $ignoreMailQueue; return $this; } /** * @param string $templateName * @return MailTemplateService */ public function setTemplateName($templateName) { $this->templateName = $templateName; return $this; } /** * @param string $extensionKey * @return MailTemplateService */ public function setExtensionKey($extensionKey) { $this->extensionKey = $extensionKey; return $this; } /** * @param string $subject * @return MailTemplateService */ public function setSubject($subject) { $this->subject = $subject; $this->mailMessage->setSubject($subject); return $this; } /** * @param array $markers * @return MailTemplateService */ public function setMarkers(array $markers) { $this->markers = $markers; return $this; } }