Newer
Older
<?php
/*
* 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!
*/
namespace SGalinski\SgNews\Backend;
use SGalinski\SgNews\Domain\Model\Category;
use SGalinski\SgNews\Domain\Model\News;
use TYPO3\CMS\Backend\Controller\PageLayoutController;
use TYPO3\CMS\Core\Database\Connection;
use TYPO3\CMS\Core\Database\ConnectionPool;
use TYPO3\CMS\Core\Localization\LanguageService;
use TYPO3\CMS\Core\Messaging\AbstractMessage;
use TYPO3\CMS\Core\Messaging\FlashMessage;
use TYPO3\CMS\Core\Messaging\FlashMessageRendererResolver;
use TYPO3\CMS\Core\Utility\GeneralUtility;
/**
* This class handles a warning message if the news is not located in a news category. It is implmeneted as a hook for
* $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['cms/layout/db_layout.php']['drawHeaderHook'] in ext_localconf.php
*/
class CategoryWarningDrawer {
/**
* Renders the error message, if the given $parentObj is a news page and has no category as parent page
*
* @param array|NULL $params
* @param PageLayoutController|NULL $parentObj
* @return string
* @throws \Doctrine\DBAL\Driver\Exception|\Doctrine\DBAL\DBALException
public function render(array $params = NULL, PageLayoutController $parentObj = NULL): string {
if (!$parentObj || $parentObj->pageinfo['doktype'] !== News::DOK_TYPE_NEWS) {
return '';
}
$parentPage = $parentObj->pageinfo['pid'];
$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)
->getQueryBuilderForTable('pages');
$parentDoktype = $queryBuilder->select('doktype')
->from('pages')
->where(
$queryBuilder->expr()->eq(
'uid',
$queryBuilder->createNamedParameter($parentPage, Connection::PARAM_INT)
)
)->execute()
->fetchOne();
if ($parentDoktype === Category::DOK_TYPE_CATEGORY) {
return '';
}
$languageService = GeneralUtility::makeInstance(LanguageService::class);
$message = GeneralUtility::makeInstance(
FlashMessage::class,
$languageService->sL(
'LLL:EXT:sg_news/Resources/Private/Language/locallang_backend.xlf:categoryErrorMessage'
),
$languageService->sL(
'LLL:EXT:sg_news/Resources/Private/Language/locallang_backend.xlf:categoryErrorMessageHeader'
),
AbstractMessage::ERROR,
);
return GeneralUtility::makeInstance(FlashMessageRendererResolver::class)