ds-site/Classes/EventListener/PageLayoutHeader.php
2024-02-08 08:04:56 +01:00

99 lines
3.4 KiB
PHP

<?php
declare(strict_types=1);
/*
* Copyright (C) 2019 Daniel Siepmann <coding@daniel-siepmann.de>
*
* This program 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 2
* of the License, or (at your option) any later version.
*
* This program 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.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301, USA.
*/
namespace DanielSiepmann\DsSite\EventListener;
use TYPO3\CMS\Backend\Controller\Event\ModifyPageLayoutContentEvent;
use TYPO3\CMS\Backend\Utility\BackendUtility;
use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Fluid\View\StandaloneView;
use TYPO3\CMS\Frontend\Resource\FileCollector;
class PageLayoutHeader
{
private function getView(): StandaloneView
{
return GeneralUtility::makeInstance(StandaloneView::class);
}
private function resolvePageMedia(int $pageUid): array
{
$files = GeneralUtility::makeInstance(FileCollector::class);
$files->addFilesFromRelation('pages', 'media', ['uid' => $pageUid]);
return $files->getFiles();
}
public function __invoke(ModifyPageLayoutContentEvent $event): void
{
$request = $event->getRequest();
$pageinfo = BackendUtility::readPageAccess(
(int) ($request->getParsedBody()['id'] ?? $request->getQueryParams()['id'] ?? 0),
''
);
// TODO: Check whether two levels up is uid 2, which holds all blog posts
// To prevent rendering on non blog posts
// Maybe we have rootline ?
$view = $this->getView();
$view->setRequest($request);
$view->assignMultiple([
'record' => $pageinfo,
'metaInfo' => [
[
'label' => 'meta-description',
'value' => $pageinfo['description'] ?? '',
'field' => 'description',
'type' => 'string',
],
[
'label' => 'introduction',
'value' => $pageinfo['abstract'] ?? '',
'field' => 'abstract',
'type' => 'string',
],
[
'label' => 'published',
'value' => $pageinfo['lastUpdated'] ?? '',
'field' => 'lastUpdated',
'type' => 'date',
],
[
'label' => 'updated',
'value' => $pageinfo['SYS_LASTCHANGED'] ?? '',
'type' => 'date',
],
[
'label' => 'media',
'value' => $this->resolvePageMedia((int) $pageinfo['uid']),
'field' => 'media',
'type' => 'files',
],
],
]);
$view->setTemplatePathAndFilename('EXT:ds_site/Resources/Private/Templates/Backend/Page/MetaInfo.html');
$event->addHeaderContent($view->render());
}
}