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