MailController.php 10.1 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php

namespace SGalinski\SgMail\Controller;

/***************************************************************
 *  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!
 ***************************************************************/

29
use SGalinski\SgMail\Domain\Model\Template;
30
use SGalinski\SgMail\Service\MailTemplateService;
31
use SGalinski\SgMail\Session\PhpSession;
32
use TYPO3\CMS\Core\Messaging\FlashMessage;
33
use TYPO3\CMS\Core\Utility\GeneralUtility;
34
use TYPO3\CMS\Extbase\Mvc\Controller\ActionController;
35
use TYPO3\CMS\Extbase\Object\ObjectManager;
36
use TYPO3\CMS\Extbase\Utility\LocalizationUtility;
37
38
39
40
41
42

/**
 * Controller for the mail templating service module
 */
class MailController extends ActionController {

43
44
45
46
47
48
	/**
	 * @var \TYPO3\CMS\Lang\Domain\Repository\LanguageRepository
	 * @inject
	 */
	protected $languageRepository = NULL;

49
50
51
52
53
54
	/**
	 * @var \SGalinski\SgMail\Domain\Repository\TemplateRepository
	 * @inject
	 */
	protected $templateRepository = NULL;

55
56
57
58
59
	/**
	 * @var \SGalinski\Lfeditor\Session\PhpSession
	 */
	protected $session;

60
	/**
61
	 * Show template Selection  and enable content input + mail preview
Fabian Galinski's avatar
Fabian Galinski committed
62
	 *
63
64
65
66
67
68
	 * @param string $selectedTemplate
	 * @param string $selectedExtension
	 * @param string $selectedLanguageLeft
	 * @param string $selectedLanguageRight
	 * @param string $selectedExtensionKey
	 * @param string $selectedTemplateKey
69
	 */
70
71
72
73
	public function indexAction(
		$selectedTemplate = NULL, $selectedExtension = NULL, $selectedLanguageLeft = NULL,
		$selectedLanguageRight = NULL, $selectedExtensionKey = NULL, $selectedTemplateKey = NULL
	) {
74
75
76
77
78
		if (!($this->session instanceof PhpSession)) {
			$this->session = $this->objectManager->get('SGalinski\SgMail\Session\PhpSession');
			$this->session->setSessionKey('sg_mail_controller_session');
		}

79
80
81
		$registerArray = MailTemplateService::getRegisterArray();
		reset(MailTemplateService::getRegisterArray());

82
83
84
85
		$activatedLanguages = $this->languageRepository->findSelected();
		$languages = ['en'];
		foreach ($activatedLanguages as $language) {
			$languages[] = $language->getLocale();
86
87
		}

88
		$this->view->assign('languages', $languages);
89
		$this->view->assign('templates', MailTemplateService::getRegisterArray());
90

91
92
93
94
95
		// get last selected languages
		if ($selectedLanguageLeft === NULL) {
			$selectedLanguageLeft = $this->session->getDataByKey('selectedLanguageLeft');
			if ($selectedLanguageLeft === '') {
				$selectedLanguageLeft = $languages[0];
96
			}
97
		}
Torsten Oppermann's avatar
Torsten Oppermann committed
98

99
100
101
102
103
104
105
		if ($selectedLanguageRight === NULL) {
			$selectedLanguageRight = $this->session->getDataByKey('selectedLanguageRight');
			if ($selectedLanguageRight === '') {
				if (isset($languages[1])) {
					$selectedLanguageRight = $languages[1];
				} else {
					$selectedLanguageRight = $languages[0];
106
107
				}
			}
108
		}
109

110
111
112
113
114
		if ($selectedTemplate !== NULL) {
			$selectedExtension = key(MailTemplateService::getRegisterArray());
			$selectedTemplate = key(MailTemplateService::getRegisterArray()[$selectedExtension]);
		}
		$selectedTemplateArray = $registerArray[$selectedExtension][$selectedTemplate];
115

116
117
		$this->session->setDataByKey('selectedLanguageLeft', $selectedLanguageLeft);
		$this->session->setDataByKey('selectedLanguageRight', $selectedLanguageRight);
118

119
120
121
		$templateLeft = $this->templateRepository->findTemplate(
			$selectedExtension, $selectedTemplate, $selectedLanguageLeft
		)->getFirst();
122

123
124
125
		$templateRight = $this->templateRepository->findTemplate(
			$selectedExtensionKey, $selectedTemplateKey, $selectedLanguageRight
		)->getFirst();
126

127
128
		if ($templateLeft !== NULL) {
			$this->view->assign('contentLeft', $templateLeft->getContent());
129
		} else {
130
131
132
			$defaultTemplatePath = MailTemplateService::getRegisterArray()
			[$selectedExtension][$selectedTemplate]['templatePath'];
			$defaultTemplateFile = $defaultTemplatePath . $selectedLanguageLeft . '.' . 'template.html';
133

134
135
			if (file_exists($defaultTemplateFile)) {
				$this->view->assign('contentLeft', file_get_contents($defaultTemplateFile));
136
			}
137
		}
138

139
140
141
142
143
144
		if ($templateRight !== NULL) {
			$this->view->assign('contentRight', $templateRight->getContent());
		} else {
			$defaultTemplatePath = MailTemplateService::getRegisterArray()
			[$selectedExtension][$selectedTemplate]['templatePath'];
			$defaultTemplateFile = $defaultTemplatePath . $selectedLanguageRight . '.' . 'template.html';
Torsten Oppermann's avatar
Torsten Oppermann committed
145

146
147
148
149
			if (file_exists($defaultTemplateFile)) {
				$this->view->assign('contentRight', file_get_contents($defaultTemplateFile));
			}
		}
Fabian Galinski's avatar
Fabian Galinski committed
150

151
152
153
		$this->view->assign(
			'subjectLeft', $templateLeft !== NULL ? $templateLeft->getSubject() : ''
		);
154

155
156
157
		$this->view->assign(
			'subjectRight', $templateRight !== NULL ? $templateRight->getSubject() : ''
		);
158

159
160
161
162
163
		$this->view->assign('selectedTemplate', $selectedTemplateArray);
		$this->view->assign('selectedTemplateKey', $selectedTemplate);
		$this->view->assign('selectedExtensionKey', $selectedExtension);
		$this->view->assign('selectedLanguageLeft', $selectedLanguageLeft);
		$this->view->assign('selectedLanguageRight', $selectedLanguageRight);
164
165
	}

166
167
	/**
	 * Save content (left & right)
168
	 * if left & right is the same language, the right content will apply only if its another language
169
170
171
172
173
174
175
	 *
	 * @param string $contentLeft
	 * @param string $contentRight
	 * @param string $selectedExtension
	 * @param string $selectedTemplate
	 * @param string $selectedLanguageLeft
	 * @param string $selectedLanguageRight
176
177
	 * @param string $subjectLeft
	 * @param string $subjectRight
178
179
180
	 */
	public function saveAction(
		$contentLeft = NULL, $contentRight = NULL, $selectedExtension = NULL, $selectedTemplate = NULL,
181
		$selectedLanguageLeft = NULL, $selectedLanguageRight = NULL, $subjectLeft = NULL, $subjectRight = NULL
182
	) {
183
		$this->saveTemplate($selectedExtension, $selectedTemplate, $selectedLanguageLeft, $contentLeft, $subjectLeft);
184

185
186
187
188
189
		if ($selectedLanguageLeft !== $selectedLanguageRight) {
			$this->saveTemplate(
				$selectedExtension, $selectedTemplate, $selectedLanguageRight, $contentRight, $subjectRight
			);
		}
190

191
		$message = LocalizationUtility::translate('backend.success', 'sg_mail');
192
193
		$this->addFlashMessage($message, '', FlashMessage::OK);

194
		$arguments = $this->request->getArguments();
195
		$this->redirect('index', NULL, NULL, $arguments);
196
197
	}

198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
	/**
	 * Save or update the template in the DB, depending if it already exists or not
	 *
	 * @param string $selectedExtension
	 * @param string $selectedTemplate
	 * @param string $selectedLanguage
	 * @param string $selectedContent
	 * @param string $selectedSubject
	 * @return Template $template
	 */
	private function saveTemplate(
		$selectedExtension, $selectedTemplate, $selectedLanguage, $selectedContent, $selectedSubject
	) {
		/** @var Template $template */
		$template = $this->templateRepository->findTemplate(
			$selectedExtension, $selectedTemplate, $selectedLanguage
		)->getFirst();

		$templateAlreadyExists = TRUE;
		$objectManager = GeneralUtility::makeInstance(ObjectManager::class);
		if ($template === NULL) {
			$templateAlreadyExists = FALSE;
			$template = $objectManager->get(Template::class);
		}

		$template->setExtensionKey($selectedExtension);
		$template->setTemplateName($selectedTemplate);
		$template->setLanguage($selectedLanguage);
		$template->setContent($selectedContent);
		$template->setSubject($selectedSubject);

		if ($templateAlreadyExists) {
			$this->templateRepository->update($template);
		} else {
			$this->templateRepository->add($template);
		}

		return $template;
	}

238
239
240
241
242
	/**
	 * send a test email to a given address
	 * redirect to index action
	 *
	 * @param string $emailAddress
243
244
245
	 * @param string $selectedTemplateKey
	 * @param string $selectedExtensionKey
	 * @param string $selectedLanguageLeft
246
	 * @param string $selectedLanguageRight
247
248
	 */
	public function sendTestMailAction(
Torsten Oppermann's avatar
Torsten Oppermann committed
249
		$emailAddress, $selectedExtensionKey, $selectedTemplateKey, $selectedLanguageLeft, $selectedLanguageRight
250
	) {
251
252
253
254
255
		$objectManager = GeneralUtility::makeInstance(ObjectManager::class);
		/** @var \SGalinski\SgMail\Service\MailTemplateService $mailTemplateService */
		$mailTemplateService = $objectManager->get(MailTemplateService::class);
		$mailTemplateService->setLanguage($selectedLanguageLeft);
		$mailTemplateService->setToAddresses($emailAddress);
256
		$mailTemplateService->setFromAddress('noreply@example.org');
257
258
		$mailTemplateService->setTemplateName($selectedTemplateKey);
		$mailTemplateService->setExtensionKey($selectedExtensionKey);
Torsten Oppermann's avatar
Torsten Oppermann committed
259
		$mailIsSend = $mailTemplateService->sendEmail($this->settings['mail']['test']['subject'], TRUE);
260
261
262
263
264
265

		if ($selectedLanguageRight !== $selectedLanguageLeft) {
			/** @var \SGalinski\SgMail\Service\MailTemplateService $mailTemplateService */
			$mailTemplateService = $objectManager->get(MailTemplateService::class);
			$mailTemplateService->setLanguage($selectedLanguageRight);
			$mailTemplateService->setToAddresses($emailAddress);
266
			$mailTemplateService->setFromAddress('noreply@example.org');
267
268
			$mailTemplateService->setTemplateName($selectedTemplateKey);
			$mailTemplateService->setExtensionKey($selectedExtensionKey);
Torsten Oppermann's avatar
Torsten Oppermann committed
269
			$mailIsSend = $mailTemplateService->sendEmail($this->settings['mail']['test']['subject'], TRUE);
270
		}
271

272
		if ($mailIsSend) {
273
274
275
276
277
278
			$message = LocalizationUtility::translate('backend.success_mail', 'sg_mail');
			$this->addFlashMessage($message, '', FlashMessage::OK);
		} else {
			$message = LocalizationUtility::translate('backend.failure_mail', 'sg_mail');
			$this->addFlashMessage($message, '', FlashMessage::ERROR);
		}
279
280
281
282

		$arguments = $this->request->getArguments();
		$this->redirect('index', NULL, NULL, $arguments);
	}
283
}