vendor/ibexa/page-builder/src/lib/Event/Subscriber/BlockContextSubscriber.php line 64

Open in your IDE?
  1. <?php
  2. /**
  3.  * @copyright Copyright (C) Ibexa AS. All rights reserved.
  4.  * @license For full copyright and license information view LICENSE file distributed with this source code.
  5.  */
  6. declare(strict_types=1);
  7. namespace Ibexa\PageBuilder\Event\Subscriber;
  8. use Ibexa\Bundle\PageBuilder\Controller\PreviewController;
  9. use Ibexa\FieldTypePage\Event\BlockContextEvent;
  10. use Ibexa\FieldTypePage\Event\BlockContextEvents;
  11. use Ibexa\FieldTypePage\FieldType\LandingPage\Type;
  12. use Ibexa\PageBuilder\Block\Context\BlockContextFactory;
  13. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  14. use Symfony\Component\HttpKernel\Controller\ControllerResolverInterface;
  15. class BlockContextSubscriber implements EventSubscriberInterface
  16. {
  17.     /** @var \Ibexa\PageBuilder\Block\Context\BlockContextFactory */
  18.     private $blockContextFactory;
  19.     /** @var \Symfony\Component\HttpKernel\Controller\ControllerResolverInterface */
  20.     private $controllerResolver;
  21.     /** @var \Ibexa\FieldTypePage\FieldType\LandingPage\Type */
  22.     private $pageFieldType;
  23.     /**
  24.      * @param \Ibexa\PageBuilder\Block\Context\BlockContextFactory $blockContextFactory
  25.      * @param \Symfony\Component\HttpKernel\Controller\ControllerResolverInterface $controllerResolver
  26.      * @param \Ibexa\FieldTypePage\FieldType\LandingPage\Type $pageFieldType
  27.      */
  28.     public function __construct(
  29.         BlockContextFactory $blockContextFactory,
  30.         ControllerResolverInterface $controllerResolver,
  31.         Type $pageFieldType
  32.     ) {
  33.         $this->blockContextFactory $blockContextFactory;
  34.         $this->controllerResolver $controllerResolver;
  35.         $this->pageFieldType $pageFieldType;
  36.     }
  37.     /**
  38.      * {@inheritdoc}
  39.      */
  40.     public static function getSubscribedEvents(): array
  41.     {
  42.         return [
  43.             BlockContextEvents::CREATE => [
  44.                 ['createBlockContext', -100],
  45.             ],
  46.         ];
  47.     }
  48.     /**
  49.      * @param \Ibexa\FieldTypePage\Event\BlockContextEvent $event
  50.      *
  51.      * @throws \Ibexa\Contracts\Core\Repository\Exceptions\InvalidArgumentException
  52.      * @throws \Ibexa\Contracts\Core\Repository\Exceptions\NotFoundException
  53.      * @throws \Ibexa\Contracts\Core\Repository\Exceptions\UnauthorizedException
  54.      */
  55.     public function createBlockContext(BlockContextEvent $event): void
  56.     {
  57.         $request $event->getRequest();
  58.         $controller $this->controllerResolver->getController($request);
  59.         if (!is_array($controller) || !$controller[0] instanceof PreviewController || $controller[1] !== 'blockPreviewAction') {
  60.             return;
  61.         }
  62.         $intent $request->request->get('intent');
  63.         if (null === $intent) {
  64.             return;
  65.         }
  66.         $pageHash $request->request->get('page');
  67.         $value $this->pageFieldType->acceptValue($pageHash);
  68.         $page $value->getPage();
  69.         $parameters $request->request->get('parameters', []);
  70.         $intentParameters $parameters['intentParameters'];
  71.         $intentParameters array_merge($intentParameters, ['page' => $page]);
  72.         $event->setBlockContext($this->blockContextFactory->build($intent$intentParameters));
  73.     }
  74. }
  75. class_alias(BlockContextSubscriber::class, 'EzSystems\EzPlatformPageBuilder\Event\Subscriber\BlockContextSubscriber');