vendor/ibexa/dashboard/src/lib/EventSubscriber/PageBuilderViewParameters/BaseDashboardViewParametersSubscriber.php line 53

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\Dashboard\EventSubscriber\PageBuilderViewParameters;
  8. use Ibexa\Contracts\Core\Repository\Values\ContentType\ContentType;
  9. use Ibexa\Contracts\Core\SiteAccess\ConfigResolverInterface;
  10. use Ibexa\Core\MVC\Symfony\View\Event\FilterViewParametersEvent;
  11. use Ibexa\Core\MVC\Symfony\View\View;
  12. use Ibexa\Core\MVC\Symfony\View\ViewEvents;
  13. use Ibexa\Dashboard\Specification\IsDashboardContentType;
  14. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  15. /**
  16.  * @internal
  17.  */
  18. abstract class BaseDashboardViewParametersSubscriber implements EventSubscriberInterface
  19. {
  20.     private ConfigResolverInterface $configResolver;
  21.     /** @var array<string, mixed> */
  22.     private array $pageBuilderConfig;
  23.     abstract protected function getContentTypeFromView(View $view): ?ContentType;
  24.     /**
  25.      * @param array<string, mixed> $pageBuilderConfig
  26.      */
  27.     public function __construct(ConfigResolverInterface $configResolver, array $pageBuilderConfig)
  28.     {
  29.         $this->configResolver $configResolver;
  30.         $this->pageBuilderConfig $pageBuilderConfig;
  31.     }
  32.     /**
  33.      * @return array<string, array{string, int}>
  34.      */
  35.     final public static function getSubscribedEvents(): array
  36.     {
  37.         return [
  38.             ViewEvents::FILTER_VIEW_PARAMETERS => ['onFilterViewParameters', -100],
  39.         ];
  40.     }
  41.     /**
  42.      * @throws \Ibexa\Contracts\Core\Repository\Exceptions\InvalidArgumentException
  43.      */
  44.     final public function onFilterViewParameters(FilterViewParametersEvent $event): void
  45.     {
  46.         $contentType $this->getContentTypeFromView($event->getView());
  47.         if (null === $contentType) {
  48.             return;
  49.         }
  50.         if ((new IsDashboardContentType($this->configResolver))->isSatisfiedBy($contentType)) {
  51.             $parameterBag $event->getParameterBag();
  52.             $pageBuilderConfig $parameterBag->get('page_builder_config', []);
  53.             // merge any pre-existing configuration, making it a priority over dashboard one
  54.             $parameterBag->add(
  55.                 [
  56.                     'page_builder_config' => array_merge($this->pageBuilderConfig$pageBuilderConfig),
  57.                 ]
  58.             );
  59.         }
  60.     }
  61. }