MailTemplateService.php 7.3 KB
Newer Older
1
2
3
4
<?php

namespace SGalinski\SgMail\Service;

5
6
use SGalinski\SgMail\Domain\Model\Mail;
use SGalinski\SgMail\Domain\Repository\MailRepository;
7
use TYPO3\CMS\Core\Mail\MailMessage;
8
use TYPO3\CMS\Core\Utility\GeneralUtility;
Torsten Oppermann's avatar
Torsten Oppermann committed
9
use TYPO3\CMS\Extbase\Object\ObjectManager;
10
use TYPO3\CMS\Fluid\View\StandaloneView;
11

12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/***************************************************************
 *  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!
 ***************************************************************/
35
36
37
38

/**
 * MailTemplateService
 */
39
class MailTemplateService {
40

41
	/**
42
	 * @var array $registerArray
43
	 */
44
	private static $registerArray = [];
45

46
	/**
47
	 * @var array $toAddresses
48
	 */
49
	private $toAddresses = [];
50
51

	/**
52
	 * @var string $fromAddress
53
	 */
54
	private $fromAddress;
55
56

	/**
57
	 * @var array $ccAddresses
58
	 */
59
	private $ccAddresses = [];
60
61

	/**
62
	 * @var string $replyToAddress
63
	 */
64
	private $replyToAddress;
65
66

	/**
67
	 * @var string $language
68
	 */
69
	private $language;
70
71

	/**
72
	 * @var boolean $ignoreMailQueue
73
74
75
76
77
78
79
80
81
	 */
	private $ignoreMailQueue = TRUE;

	/**
	 * @var \TYPO3\CMS\Core\Mail\MailMessage $mailMessage
	 */
	private $mailMessage;

	/**
82
	 * @var string $templateName
83
84
85
86
	 */
	private $templateName;

	/**
87
	 * @var string $extensionKey
88
89
90
91
	 */
	private $extensionKey;

	/**
92
	 * @var array $markers
93
	 */
94
	private $markers = [];
95
96

	/**
97
	 * @var string $subject
98
99
100
	 */
	private $subject;

101
102
103
	/**
	 * holds the TypoScript configuration for sg_mail
	 *
104
	 * @var array $tsSettings
105
106
107
	 */
	private $tsSettings = [];

108
109
110
111
112
	/**
	 * @var array $bccAddresses
	 */
	private $bccAddresses = [];

113
114
115
116
117
118
	/**
	 * MailTemplateService constructor.
	 */
	public function __construct() {
		$objectManager = GeneralUtility::makeInstance(ObjectManager::class);
		$this->mailMessage = $objectManager->get(MailMessage::class);
119
120
121
122

		$typoScriptSettingsService = $objectManager->get(TypoScriptSettingsService::class);
		$this->tsSettings = $typoScriptSettingsService->getSettings(0, 'tx_sgmail');
		$this->language = $this->tsSettings['templateDefaultLanguage'];
123
124
	}

Torsten Oppermann's avatar
Torsten Oppermann committed
125
	/**
Torsten Oppermann's avatar
Torsten Oppermann committed
126
	 * register a template with sg_mail
Fabian Galinski's avatar
Fabian Galinski committed
127
	 *
128
	 * @param string $extension
Torsten Oppermann's avatar
Torsten Oppermann committed
129
130
131
	 * @param string $templateName
	 * @param string $templatePath
	 * @param string $description
132
	 * @param array $markers
133
	 * @return string
Torsten Oppermann's avatar
Torsten Oppermann committed
134
	 */
135
	public static function registerTemplate($extension, $templateName, $templatePath, $description, array $markers) {
136

137
		MailTemplateService::$registerArray[$extension][$templateName] = [
138
			'templatePath' => $templatePath,
139
			'description' => $description,
140
			'marker' => $markers,
141
142
			'extension' => $extension,
			'templateName' => $templateName
143
144
		];
	}
145
146

	/**
Torsten Oppermann's avatar
Torsten Oppermann committed
147
	 * Get all registered templates
Fabian Galinski's avatar
Fabian Galinski committed
148
	 *
149
	 * @return array
150
	 */
151
152
	public static function getRegisterArray() {
		return self::$registerArray;
153
	}
154
155

	/**
156
	 * Send the Email
157
	 */
158
	public function sendEmail() {
159
		$templateEntry = self::$registerArray[$this->extensionKey][$this->templateName];
160

161
		$objectManager = GeneralUtility::makeInstance(ObjectManager::class);
Torsten Oppermann's avatar
Torsten Oppermann committed
162
		$emailView = $objectManager->get(StandaloneView::class);
163
164
165
		$emailView->setTemplatePathAndFilename(
			$templateEntry['templatePath'] . $this->language . '.sg_mail.locallang.html'
		);
166
		$emailView->assignMultiple($this->markers);
167
		$emailBody = $emailView->render();
168

169
170
171
		if ($this->ignoreMailQueue) {

			$this->mailMessage->setSubject($this->subject);
172
			$this->mailMessage->setBody(nl2br($emailBody), 'text/html');
173
			$this->mailMessage->send();
174
		} else {
175
			$this->addMailToMailQueue($emailBody);
176
		}
177
178
179
	}

	/**
180
	 * Adds a new mail to the mail queue.
181
	 *
182
	 * @param string $emailBody
183
184
	 * @param int $priority
	 * @param int $pid
185
186
	 */
	private function addMailToMailQueue($emailBody, $priority = Mail::PRIORITY_LOWEST, $pid = 0) {
187
188
189
190
191
192
193
194
195
		/** @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);
196
197
		$mail->setFromAddress($this->fromAddress);
		$mail->setToAddress($this->toAddresses);
198
199
		$mail->setMailSubject($this->subject);
		$mail->setMailBody($emailBody);
200
201
202
203
		$mail->setPriority($priority);

		$mailRepository = $objectManager->get(MailRepository::class);
		$mailRepository->add($mail);
204
	}
205
206
207
208
209

	/**
	 * @param array $registerArray
	 * @return MailTemplateService
	 */
210
	public static function setRegisterArray(array $registerArray) {
211
212
213
214
		self::$registerArray = $registerArray;
	}

	/**
215
	 * @param array|string $toAddresses
216
217
	 * @return MailTemplateService
	 */
218
219
220
	public function setToAddresses($toAddresses) {
		$this->toAddresses = $toAddresses;
		$this->mailMessage->setTo($toAddresses);
221
222
223
224
		return $this;
	}

	/**
225
	 * @param array|string $fromAddress
226
227
	 * @return MailTemplateService
	 */
228
	public function setFromAddress($fromAddress) {
229
230
		$this->fromAddress = $fromAddress;
		$this->mailMessage->setFrom($fromAddress);
231
232
233
234
		return $this;
	}

	/**
235
	 * @param array|string $ccAddresses
236
237
	 * @return MailTemplateService
	 */
238
239
240
	public function setCcAddresses($ccAddresses) {
		$this->ccAddresses = $ccAddresses;
		$this->mailMessage->setCc($ccAddresses);
241
242
243
244
		return $this;
	}

	/**
245
	 * @param array|string $replyToAddress
246
247
	 * @return MailTemplateService
	 */
248
	public function setReplyToAddress($replyToAddress) {
249
		$this->replyToAddress = $replyToAddress;
250
		$this->mailMessage->setReplyTo($replyToAddress);
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
		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;
	}
299
300

	/**
301
	 * @param array $markers
302
303
	 * @return MailTemplateService
	 */
304
305
	public function setMarkers(array $markers) {
		$this->markers = $markers;
306
307
		return $this;
	}
308
309
310
311
312
313
314
315
316
317
318
319

	/**
	 * @param array $bccAddresses
	 * @return MailTemplateService
	 */
	public function setBccAddresses(array $bccAddresses) {
		$this->bccAddresses = $bccAddresses;
		$this->mailMessage->setBcc($bccAddresses);
		return $this;
	}


320
}