vendor/ibexa/page-builder/src/lib/Event/Subscriber/ContextAwareBlockResponseSubscriber.php line 62

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\FieldTypePage\Event\BlockResponseEvent;
  9. use Ibexa\FieldTypePage\Event\BlockResponseEvents;
  10. use Ibexa\FieldTypePage\Event\Subscriber\BlockResponseSubscriber;
  11. use Ibexa\FieldTypePage\FieldType\Page\Service\BlockService;
  12. use Ibexa\PageBuilder\Block\Context\ContentCreateBlockContext;
  13. use Ibexa\PageBuilder\Block\Context\ContentEditBlockContext;
  14. use Ibexa\PageBuilder\Block\Context\ContentTranslateBlockContext;
  15. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  16. use Twig\Environment;
  17. class ContextAwareBlockResponseSubscriber implements EventSubscriberInterface
  18. {
  19. /** @var \Ibexa\FieldTypePage\Event\Subscriber\BlockResponseSubscriber */
  20. protected $blockResponseSubscriber;
  21. /** @var \Ibexa\FieldTypePage\FieldType\Page\Service\BlockService */
  22. private $blockService;
  23. /** @var \Twig\Environment */
  24. private $templating;
  25. /**
  26. * @param \Ibexa\FieldTypePage\Event\Subscriber\BlockResponseSubscriber
  27. * @param \Ibexa\FieldTypePage\FieldType\Page\Service\BlockService $blockService
  28. * @param \Twig\Environment $templating
  29. */
  30. public function __construct(
  31. BlockResponseSubscriber $blockResponseSubscriber,
  32. BlockService $blockService,
  33. Environment $templating
  34. ) {
  35. $this->blockResponseSubscriber = $blockResponseSubscriber;
  36. $this->blockService = $blockService;
  37. $this->templating = $templating;
  38. }
  39. /**
  40. * {@inheritdoc}
  41. */
  42. public static function getSubscribedEvents()
  43. {
  44. return [
  45. BlockResponseEvents::BLOCK_RESPONSE => ['onBlockResponse', 255],
  46. ];
  47. }
  48. /**
  49. * @param \Ibexa\FieldTypePage\Event\BlockResponseEvent $event
  50. *
  51. * @throws \Exception
  52. */
  53. public function onBlockResponse(BlockResponseEvent $event): void
  54. {
  55. $response = $event->getResponse();
  56. $blockContext = $event->getBlockContext();
  57. $isEditorialContext = $blockContext instanceof ContentEditBlockContext
  58. || $blockContext instanceof ContentTranslateBlockContext
  59. || $blockContext instanceof ContentCreateBlockContext;
  60. if (!$isEditorialContext) {
  61. $this->blockResponseSubscriber->onBlockResponse($event);
  62. return;
  63. }
  64. try {
  65. $blockContent = $this->blockService->render($blockContext, $event->getBlockValue());
  66. } catch (\Exception $e) {
  67. $blockContent = $this->templating->render(
  68. '@IbexaPageBuilder/page_builder/block/error_handling/general.html.twig',
  69. [
  70. 'context' => $blockContext,
  71. 'block' => $event->getBlockValue(),
  72. ]
  73. );
  74. }
  75. $response->setContent($blockContent);
  76. }
  77. }
  78. class_alias(ContextAwareBlockResponseSubscriber::class, 'EzSystems\EzPlatformPageBuilder\Event\Subscriber\ContextAwareBlockResponseSubscriber');