-
Torsten Oppermann authoredTorsten Oppermann authored
BackendService.php 7.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\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 {
/**
* 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 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 $selectedLanguages
* @param \SGalinski\SgMail\Session\PhpSession $session
* @param int $siteRootId
* @return array
* @throws \InvalidArgumentException
*/
public static function getSelectedTemplates(
$selectedExtension, $selectedTemplate, array $selectedLanguages, &$session, $siteRootId
) {
$selectedTemplates = [];
$objectManager = GeneralUtility::makeInstance(ObjectManager::class);
/** @var TemplateRepository $templateRepository */
$templateRepository = $objectManager->get(TemplateRepository::class);
$session->setDataByKey('selectedLanguageLeft', $selectedLanguages['left']);
$session->setDataByKey('selectedLanguageRight', $selectedLanguages['right']);
$selectedTemplates['left'] = $templateRepository->findOneByTemplate(
$selectedExtension, $selectedTemplate, $selectedLanguages['left'], $siteRootId
);
$selectedTemplates['right'] = $templateRepository->findOneByTemplate(
$selectedExtension, $selectedTemplate, $selectedLanguages['right'], $siteRootId
);
return $selectedTemplates;
}
/**
* Get the translated subjects for the selected mail templates
*
* @param $subject
* @param $selectedExtension
* @param $selectedLanguages
* @return array
*/
public static function getTranslatedTemplateSubject($subject, $selectedExtension, $selectedLanguages) {
$translatedSubjects = [];
$langFile = GeneralUtility::readLLfile(
'EXT:' . $selectedExtension . '/Resources/Private/Language/locallang.xlf', $selectedLanguages['left']
);
$translatedSubjectLeft = $langFile['default'][$subject][0]['target'];
if ($langFile[$selectedLanguages['left']][$subject][0]) {
$translatedSubjectLeft = $langFile[$selectedLanguages['left']][$subject][0]['target'];
}
$translatedSubjects['left'] = $translatedSubjectLeft;
$langFile = GeneralUtility::readLLfile(
'EXT:' . $selectedExtension . '/Resources/Private/Language/locallang.xlf', $selectedLanguages['right']
);
$translatedSubjectRight = $langFile['default'][$subject][0]['target'];
if ($langFile[$selectedLanguages['right']][$subject][0]) {
$translatedSubjectRight = $langFile[$selectedLanguages['right']][$subject][0]['target'];
}
$translatedSubjects['right'] = $translatedSubjectRight;
return $translatedSubjects;
}
}