<?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, TRUE ); return GeneralUtility::makeInstance(FlashMessageRendererResolver::class) ->resolve() ->render([$message]); } }