88 lines
3.0 KiB
PHP
88 lines
3.0 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
/*
|
|
* This file is developed by evoWeb.
|
|
*
|
|
* It is free software; you can redistribute it and/or modify it under
|
|
* the terms of the GNU General Public License, either version 2
|
|
* of the License, or any later version.
|
|
*
|
|
* For the full copyright and license information, please read the
|
|
* LICENSE.txt file that was distributed with this source code.
|
|
*/
|
|
|
|
namespace Evoweb\EwBloggy\Backend\View;
|
|
|
|
use Evoweb\EwBloggy\Constants;
|
|
use Evoweb\EwBloggy\Domain\Model\Post;
|
|
use Evoweb\EwBloggy\Domain\Repository\PostRepository;
|
|
use Psr\Http\Message\ServerRequestInterface;
|
|
use TYPO3\CMS\Backend\Utility\BackendUtility;
|
|
use TYPO3\CMS\Core\Authentication\BackendUserAuthentication;
|
|
use TYPO3\CMS\Core\Type\Bitmask\Permission;
|
|
use TYPO3\CMS\Core\View\ViewFactoryData;
|
|
use TYPO3\CMS\Core\View\ViewFactoryInterface;
|
|
use TYPO3\CMS\Fluid\View\FluidViewAdapter;
|
|
|
|
readonly class PostHeaderRenderer
|
|
{
|
|
public function __construct(
|
|
private ViewFactoryInterface $viewFactory,
|
|
private PostRepository $postRepository,
|
|
) {
|
|
}
|
|
|
|
public function render(ServerRequestInterface $request): string
|
|
{
|
|
$pageUid = (int)($request->getParsedBody()['id'] ?? $request->getQueryParams()['id'] ?? 0);
|
|
$pageInfo = $this->getPageRecord($pageUid);
|
|
if ($pageInfo === null || $pageInfo['doktype'] !== Constants::DOKTYPE_BLOG_POST) {
|
|
return '';
|
|
}
|
|
|
|
$post = $this->getPostByUid($pageUid);
|
|
$view = $this->getView($request);
|
|
$view->assign('post', $post);
|
|
|
|
return $view->render();
|
|
}
|
|
|
|
protected function getPostByUid(int $pageUid): Post
|
|
{
|
|
$query = $this->postRepository->createQuery();
|
|
$querySettings = $query->getQuerySettings();
|
|
$querySettings->setIgnoreEnableFields(true);
|
|
$querySettings->setRespectStoragePage(false);
|
|
$this->postRepository->setDefaultQuerySettings($querySettings);
|
|
return $this->postRepository->findOneBy(['uid' => $pageUid]);
|
|
}
|
|
|
|
protected function getPageRecord(int $pageUid): ?array
|
|
{
|
|
$pagePermsClause = $this->getBackendUser()?->getPagePermsClause(Permission::PAGE_SHOW) ?? '';
|
|
return BackendUtility::getRecord('pages', $pageUid, 'doktype', $pagePermsClause);
|
|
}
|
|
|
|
protected function getView(ServerRequestInterface $request): FluidViewAdapter
|
|
{
|
|
$viewFactoryData = new ViewFactoryData(
|
|
['EXT:ew_bloggy/Resources/Private/Templates'],
|
|
['EXT:ew_bloggy/Resources/Private/Partials'],
|
|
['EXT:ew_bloggy/Resources/Private/Layouts'],
|
|
request: $request,
|
|
);
|
|
/** @var FluidViewAdapter $view */
|
|
$view = $this->viewFactory->create($viewFactoryData);
|
|
$view->getRenderingContext()->setControllerName('PageLayout');
|
|
$view->getRenderingContext()->setControllerAction('Header');
|
|
return $view;
|
|
}
|
|
|
|
protected function getBackendUser(): ?BackendUserAuthentication
|
|
{
|
|
return $GLOBALS['BE_USER'] ?? null;
|
|
}
|
|
}
|