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