vendor/ibexa/page-builder/src/lib/Event/Subscriber/BlockPreviewSubscriber.php line 50

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 DateTime;
  9. use Ibexa\FieldTypePage\FieldType\Page\Service\BlockService;
  10. use Ibexa\PageBuilder\Event\BlockPreviewEvents;
  11. use Ibexa\PageBuilder\Event\BlockPreviewResponseEvent;
  12. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  13. class BlockPreviewSubscriber implements EventSubscriberInterface
  14. {
  15.     /** @var \Ibexa\FieldTypePage\FieldType\Page\Service\BlockService */
  16.     private $blockService;
  17.     /**
  18.      * @param \Ibexa\FieldTypePage\FieldType\Page\Service\BlockService $blockService
  19.      */
  20.     public function __construct(BlockService $blockService)
  21.     {
  22.         $this->blockService $blockService;
  23.     }
  24.     /**
  25.      * Returns an array of event names this subscriber wants to listen to.
  26.      *
  27.      * @return array The event names to listen to
  28.      */
  29.     public static function getSubscribedEvents(): array
  30.     {
  31.         return [
  32.             BlockPreviewEvents::RESPONSE => [
  33.                 ['renderBlock', -200],
  34.                 ['addVisibilityData', -200],
  35.             ],
  36.         ];
  37.     }
  38.     /**
  39.      * @param \Ibexa\PageBuilder\Event\BlockPreviewResponseEvent $event
  40.      *
  41.      * @throws \Exception
  42.      */
  43.     public function renderBlock(BlockPreviewResponseEvent $event): void
  44.     {
  45.         $renderedBlockData = [
  46.             'html' => $this->blockService->render($event->getBlockContext(), $event->getBlockValue()),
  47.         ];
  48.         $event->setResponseData(array_merge($event->getResponseData(), $renderedBlockData));
  49.     }
  50.     /**
  51.      * @param \Ibexa\PageBuilder\Event\BlockPreviewResponseEvent $event
  52.      *
  53.      * @throws \Exception
  54.      */
  55.     public function addVisibilityData(BlockPreviewResponseEvent $event): void
  56.     {
  57.         $pagePreviewParameters $event->getPagePreviewParameters();
  58.         $referenceDateTime = isset($pagePreviewParameters['referenceTimestamp'])
  59.             ? DateTime::createFromFormat('U'$pagePreviewParameters['referenceTimestamp'])
  60.             : null;
  61.         $responseData = [
  62.             'data' => [
  63.                 'visible' => $event->getBlockValue()->isVisible($referenceDateTime),
  64.             ],
  65.         ];
  66.         $event->setResponseData(array_merge_recursive($event->getResponseData(), $responseData));
  67.     }
  68. }
  69. class_alias(BlockPreviewSubscriber::class, 'EzSystems\EzPlatformPageBuilder\Event\Subscriber\BlockPreviewSubscriber');