<?php
/**
* @copyright Copyright (C) Ibexa AS. All rights reserved.
* @license For full copyright and license information view LICENSE file distributed with this source code.
*/
declare(strict_types=1);
namespace Ibexa\Bundle\Storefront\EventSubscriber;
use Ibexa\Contracts\Core\SiteAccess\ConfigResolverInterface;
use Ibexa\Core\MVC\Symfony\Event\PreContentViewEvent;
use Ibexa\Core\MVC\Symfony\MVCEvents;
use Ibexa\Storefront\View;
use Ibexa\Storefront\View\Order\DetailView;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
final class ViewTemplatesSubscriber implements EventSubscriberInterface
{
private ConfigResolverInterface $configResolver;
public function __construct(
ConfigResolverInterface $configResolver
) {
$this->configResolver = $configResolver;
}
public static function getSubscribedEvents(): array
{
return [
MVCEvents::PRE_CONTENT_VIEW => 'onPreContentView',
];
}
public function onPreContentView(PreContentViewEvent $event): void
{
$view = $event->getContentView();
$pageLayout = $this->configResolver->getParameter('page_layout');
if (in_array(get_class($view), $this->getTemplatesMap(), true)) {
$view->addParameters(['page_layout' => $pageLayout]);
}
}
/**
* @phpstan-return class-string[]
*/
private function getTemplatesMap(): array
{
return [
View\Order\ListView::class,
DetailView::class,
];
}
}