-
Torsten Oppermann authoredTorsten Oppermann authored
BackendService.php 9.96 KiB
<?php
namespace SGalinski\SgMail\Service;
/***************************************************************
* 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\Domain\Model\Template;
use SGalinski\SgMail\Domain\Repository\TemplateRepository;
use TYPO3\CMS\Backend\Template\Components\ButtonBar;
use TYPO3\CMS\Backend\Template\Components\DocHeaderComponent;
use TYPO3\CMS\Backend\Utility\BackendUtility;
use TYPO3\CMS\Core\Database\DatabaseConnection;
use TYPO3\CMS\Core\Imaging\Icon;
use TYPO3\CMS\Core\Imaging\IconFactory;
use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Extbase\Mvc\Request;
use TYPO3\CMS\Extbase\Object\ObjectManager;
use TYPO3\CMS\Extbase\Utility\LocalizationUtility;
use TYPO3\CMS\Lang\Domain\Repository\LanguageRepository;
/**
* Backend Service class
*/
class BackendService {
// options for the queue search filter
const SENDER_FILTER_OPTION = 0;
const RECIPIENT_FILTER_OPTION = 1;
const SUBJECT_FILTER_OPTION = 2;
const MAILTEXT_FILTER_OPTION = 3;
const CC_FILTER_OPTION = 4;
const BCC_FILTER_OPTION = 5;
const FROM_NAME_FILTER_OPTION = 6;
const REPLY_TO_NAME_FILTER_OPTION = 7;
/**
* Get all pages the be user has access to
*
* @return array
* @throws \InvalidArgumentException
*/
public static function getPages() {
$out = [];
/** @var $databaseConnection DatabaseConnection */
$databaseConnection = $GLOBALS['TYPO3_DB'];
$rows = $databaseConnection->exec_SELECTgetRows(
'*',
'pages',
'deleted = 0 AND is_siteroot = 1'
);
foreach ($rows as $row) {
$pageInfo = BackendUtility::readPageAccess($row['uid'], $GLOBALS['BE_USER']->getPagePermsClause(1));
if ($pageInfo) {
$out[] = $pageInfo;
}
}
return $out;
}
/**
* create buttons for the backend module header
*
* @param DocHeaderComponent $docHeaderComponent
* @param Request $request
* @throws \InvalidArgumentException
* @throws \UnexpectedValueException
*/
public static function makeButtons($docHeaderComponent, $request) {
/** @var ButtonBar $buttonBar */
$buttonBar = $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($request->getPluginName())
->setGetVariables(
[
'id',
'M'
]
)
->setSetVariables([]);
$buttonBar->addButton($shortcutButton, ButtonBar::BUTTON_POSITION_RIGHT);
$docHeaderComponent->getButtonBar();
}
/**
* Retrieves the next site root in the page hierarchy from the current page
*
* @param int $currentPid
* @return int
*/
public static function getSiteRoot($currentPid) {
$rootLine = BackendUtility::BEgetRootLine((int) $currentPid);
$siteRoot = ['uid' => 0];
foreach ($rootLine as $page) {
if ($page['is_siteroot'] === '1') {
$siteRoot = $page;
break;
}
}
return $siteRoot['uid'];
}
/**
* get an array of all the locales for the activated languages
*
* @return array
* @throws \InvalidArgumentException
*/
public static function getLanguages() {
$objectManager = GeneralUtility::makeInstance(ObjectManager::class);
/** @var LanguageRepository $languageRepository */
$languageRepository = $objectManager->get(LanguageRepository::class);
$activatedLanguages = $languageRepository->findSelected();
$languages = ['en'];
foreach ($activatedLanguages as $language) {
$languages[] = $language->getLocale();
}
return $languages;
}
/**
* get an array of all the labels for the activated languages
*
* @return array
* @throws \InvalidArgumentException
*/
public static function getLanguageLabels() {
$objectManager = GeneralUtility::makeInstance(ObjectManager::class);
/** @var LanguageRepository $languageRepository */
$languageRepository = $objectManager->get(LanguageRepository::class);
$activatedLanguages = $languageRepository->findSelected();
$languages = [];
$languages['en'] = LocalizationUtility::translate('backend.language_default', 'SgMail');
foreach ($activatedLanguages as $language) {
$languages[$language->getLocale()] = $language->getLabel();
}
return $languages;
}
/**
* Get the previous selected languages, the actual selection or the default
* format ['left' => languagecode, 'right' => ...]
*
* @param string $selectedLanguageLeft
* @param string $selectedLanguageRight
* @param \SGalinski\SgMail\Session\PhpSession $session
* @param array $languages
* @return array
*/
public static function getSelectedLanguages(
$selectedLanguageLeft, $selectedLanguageRight, $session, array $languages
) {
$selectedLanguages = [
'left' => $selectedLanguageLeft,
'right' => $selectedLanguageRight
];
if ($selectedLanguageLeft === NULL) {
$selectedLanguageLeftFromSession = $session->getDataByKey('selectedLanguageLeft');
if ($selectedLanguageLeftFromSession !== NULL) {
$selectedLanguages['left'] = $selectedLanguageLeftFromSession;
} else {
$selectedLanguages['left'] = $languages[0];
}
}
if ($selectedLanguageRight === NULL) {
$selectedLanguageRightFromSession = $session->getDataByKey('selectedLanguageRight');
if ($selectedLanguageRightFromSession === NULL) {
if (isset($languages[1])) {
$selectedLanguages['right'] = $languages[1];
} else {
$selectedLanguages['right'] = $languages[0];
}
} else {
$selectedLanguages['right'] = $selectedLanguageRightFromSession;
}
}
return $selectedLanguages;
}
/**
* Get the selected templates for the selected language
*
* @param string $selectedExtension
* @param string $selectedTemplate
* @param array $languages
* @param int $pid
* @return array
* @throws \InvalidArgumentException
*/
public static function getSelectedTemplates(
$selectedExtension, $selectedTemplate, array $languages, $pid
) {
$selectedTemplates = [];
$objectManager = GeneralUtility::makeInstance(ObjectManager::class);
/** @var TemplateRepository $templateRepository */
$templateRepository = $objectManager->get(TemplateRepository::class);
foreach ($languages as $language) {
$selectedTemplates[$language] = $templateRepository->findOneByTemplate(
$selectedExtension, $selectedTemplate, $language, $pid
);
}
return $selectedTemplates;
}
/**
* Get the languages in an array suitable for filtering
*
* @return array
* @throws \InvalidArgumentException
*/
public static function getLanguagesForFilter() {
$languages = self::getLanguages();
array_unshift($languages, '');
$filterLanguages = [];
foreach ($languages as $key => $value) {
$filterLanguages[$value] = $value;
}
return $filterLanguages;
}
/**
* Get the template keys in an array suitable for filtering
*
* @return array
*/
public static function getTemplatesForFilter() {
$registerArray = MailTemplateService::getRegisterArray();
$templates = [];
foreach ($registerArray as $extensions) {
foreach ($extensions as $template => $key) {
$templates[$key['extension']][] = $key['templateName'];
}
}
array_unshift($templates, '');
return $templates;
}
/**
* Save or update the template in the DB, depending if it already exists or not
*
* @param int $pid
* @param string $selectedExtension
* @param string $selectedTemplate
* @param string $language
* @param array $templateData
* @return Template $template
* @throws \InvalidArgumentException
* @throws \TYPO3\CMS\Extbase\Persistence\Exception\IllegalObjectTypeException
* @throws \TYPO3\CMS\Extbase\Persistence\Exception\UnknownObjectException
*/
public static function saveTemplate($pid, $selectedExtension, $selectedTemplate, $language, $templateData) {
$objectManager = GeneralUtility::makeInstance(ObjectManager::class);
/** @var TemplateRepository $templateRepository */
$templateRepository = $objectManager->get(TemplateRepository::class);
/** @var Template $template */
$template = $templateRepository->findOneByTemplate(
$selectedExtension, $selectedTemplate, $language, $pid
);
$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($language);
$template->setContent($templateData['content']);
$template->setSubject($templateData['subject']);
$template->setFromName($templateData['fromName']);
$template->setFromMail($templateData['fromMail']);
$template->setCc($templateData['cc']);
$template->setBcc($templateData['bcc']);
$template->setReplyTo($templateData['replyTo']);
if ($templateAlreadyExists) {
$templateRepository->update($template);
} else {
$templateRepository->add($template);
}
return $template;
}
}