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');