Skip to content
Snippets Groups Projects
BackendService.php 6.57 KiB
Newer Older
<?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\Lang\Domain\Repository\LanguageRepository;
	/**
	 * Get all pages the be user has access to
	 *
	 * @return array
	 * @throws \InvalidArgumentException
	 */
	public static function getPages() {
		/** @var $databaseConnection DatabaseConnection */
		$databaseConnection = $GLOBALS['TYPO3_DB'];
		$rows = $databaseConnection->exec_SELECTgetRows(
			'deleted = 0 AND is_siteroot = 1'
	}

	/**
	 * 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 $currentPid
	 */
	public static function getSiteRoot($currentPid) {
		$rootLine = BackendUtility::BEgetRootLine((int) GeneralUtility::_GP('id'));
		$siteRoot = [];
		foreach ($rootLine as $page) {
			if ($page['is_siteroot'] === '1') {
				$siteRoot = $page;
				break;
			}
		}


	/**
	 * 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 LanguageRepository $languageRepository */
		$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;
	}