MailTemplateService.php 7.51 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
		if ($this->ignoreMailQueue) {
170
171
172
			// insert <br /> tags, but replace every instance of three or more successive breaks with just two.
			$emailBody = nl2br($emailBody);
			$emailBody = preg_replace('/(<br[\s]?[\/]?>[\s]*){3,}/', '<br /><br />', $emailBody);
173
174

			$this->mailMessage->setSubject($this->subject);
175
			$this->mailMessage->setBody($emailBody, 'text/html');
176
			$this->mailMessage->send();
177
		} else {
178
			$this->addMailToMailQueue($emailBody);
179
		}
180
181
182
	}

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

		$mailRepository = $objectManager->get(MailRepository::class);
		$mailRepository->add($mail);
207
	}
208
209
210
211
212

	/**
	 * @param array $registerArray
	 * @return MailTemplateService
	 */
213
	public static function setRegisterArray(array $registerArray) {
214
215
216
217
		self::$registerArray = $registerArray;
	}

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

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

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

	/**
248
	 * @param array|string $replyToAddress
249
250
	 * @return MailTemplateService
	 */
251
	public function setReplyToAddress($replyToAddress) {
252
		$this->replyToAddress = $replyToAddress;
253
		$this->mailMessage->setReplyTo($replyToAddress);
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
299
300
301
		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;
	}
302
303

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

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


323
}