Skip to content
Snippets Groups Projects
QueueController.php 4.89 KiB
Newer Older
<?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!
 ***************************************************************/
use SGalinski\SgMail\Service\BackendService;
use SGalinski\SgMail\Service\MailTemplateService;
use TYPO3\CMS\Backend\Template\Components\ButtonBar;
use TYPO3\CMS\Backend\Template\Components\DocHeaderComponent;
use TYPO3\CMS\Backend\Utility\BackendUtility;
use TYPO3\CMS\Core\Imaging\Icon;
use TYPO3\CMS\Core\Imaging\IconFactory;
use TYPO3\CMS\Core\Messaging\FlashMessage;
use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Extbase\Mvc\Controller\ActionController;
use TYPO3\CMS\Extbase\Utility\LocalizationUtility;

/**
 * Controller for the mail templating service module
 */
class QueueController extends ActionController {
	/**
	 * DocHeaderComponent
	 *
	 * @var DocHeaderComponent
	 */
	protected $docHeaderComponent;

	/**
	 * @var \SGalinski\SgMail\Domain\Repository\MailRepository
	 * @inject
	 */
	protected $mailRepository;

	/**
	 * @var \SGalinski\SgMail\Session\PhpSession
	 */
	protected $session;

	/**
	 * @param string $selectedTemplate
	 * @param string $selectedExtension
	 * @throws \InvalidArgumentException
	 * @throws \UnexpectedValueException
	 */
	public function indexAction($selectedTemplate = NULL, $selectedExtension = NULL) {
		$registerArray = MailTemplateService::getRegisterArray();

		if ($selectedTemplate === NULL || $selectedTemplate === '') {
			$selectedExtension = key($registerArray);
			$selectedTemplate = key($registerArray[$selectedExtension]);
		}
		$siterootPageUid = BackendService::getSiteRoot((int) GeneralUtility::_GP('id'));
		$siteRootId = BackendService::getSiteRoot($siterootPageUid);
		$queue = $this->mailRepository->findAllEntries($selectedExtension, $selectedTemplate, $siteRootId);

		// create doc header component
		$pageInfo = BackendUtility::readPageAccess($pageUid, $GLOBALS['BE_USER']->getPagePermsClause(1));

		if ($pageInfo) {
			$this->docHeaderComponent = GeneralUtility::makeInstance(DocHeaderComponent::class);
			$this->docHeaderComponent->setMetaInformation($pageInfo);
			$this->view->assign('docHeader', $this->docHeaderComponent->docHeaderContent());
			BackendService::makeButtons($this->docHeaderComponent, $this->request);

			$this->view->assign('selectedTemplateKey', $selectedTemplate);
			$this->view->assign('selectedExtensionKey', $selectedExtension);
			$this->view->assign('templates', $registerArray);
			$this->view->assign('queue', $queue);
			$this->view->assign('mode', 'queue');
		}

	/**
	 * send or resend a mail in the queue
	 *
	 * @param int $uid
	 * @param string $selectedExtension
	 * @param string $selectedTemplate
	public function sendMailAction($uid, $selectedExtension, $selectedTemplate) {
		$mailService = new MailTemplateService();
		$mailService->sendMailFromQueue($uid);

		$message = LocalizationUtility::translate('backend.success_mail_queue', 'sg_mail');
		$this->addFlashMessage($message, '', FlashMessage::OK);
		$arguments = $this->request->getArguments();
		$this->redirect('index', NULL, NULL, $arguments);
	}

	/**
	 * create buttons for the backend module header
	 */
	private function makeButtons() {
		/** @var ButtonBar $buttonBar */
		$buttonBar = $this->docHeaderComponent->getButtonBar();

		/** @var IconFactory $iconFactory */
		$iconFactory = GeneralUtility::makeInstance(IconFactory::class);

		// Refresh
		$refreshButton = $buttonBar->makeLinkButton()
			->setHref(GeneralUtility::getIndpEnv('REQUEST_URI'))
			->setTitle(LocalizationUtility::translate('LLL:EXT:lang/locallang_core.xlf:labels.reload', ''))
			->setIcon($iconFactory->getIcon('actions-refresh', Icon::SIZE_SMALL));
		$buttonBar->addButton($refreshButton, ButtonBar::BUTTON_POSITION_RIGHT);

		// shortcut button
		$shortcutButton = $buttonBar->makeShortcutButton()
			->setModuleName($this->request->getPluginName())
			->setGetVariables(
				[
					'id',
					'M'
				]
			)
			->setSetVariables([]);

		$buttonBar->addButton($shortcutButton, ButtonBar::BUTTON_POSITION_RIGHT);
		$this->docHeaderComponent->getButtonBar();
	}