vendor/ibexa/scheduler/src/lib/Event/Subscriber/PageBuilderTemplatesSubscriber.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\Scheduler\Event\Subscriber;
  8. use Ibexa\Contracts\Core\Repository\Values\Content\Content;
  9. use Ibexa\Contracts\Scheduler\Repository\DateBasedPublishServiceInterface;
  10. use Ibexa\Core\MVC\Symfony\Event\PreContentViewEvent;
  11. use Ibexa\Core\MVC\Symfony\MVCEvents;
  12. use Ibexa\PageBuilder\View\PageView;
  13. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  14. /**
  15.  * Adds future publication event to PageBuilder Timeline.
  16.  */
  17. class PageBuilderTemplatesSubscriber implements EventSubscriberInterface
  18. {
  19.     /** @var \Ibexa\Contracts\Scheduler\Repository\DateBasedPublishServiceInterface */
  20.     private $dateBasedPublisherService;
  21.     /**
  22.      * @param \Ibexa\Contracts\Scheduler\Repository\DateBasedPublishServiceInterface $dateBasedPublisherService
  23.      */
  24.     public function __construct(
  25.         DateBasedPublishServiceInterface $dateBasedPublisherService
  26.     ) {
  27.         $this->dateBasedPublisherService $dateBasedPublisherService;
  28.     }
  29.     /**
  30.      * {@inheritdoc}
  31.      */
  32.     public static function getSubscribedEvents(): array
  33.     {
  34.         return [
  35.             MVCEvents::PRE_CONTENT_VIEW => [
  36.                 ['onPrePageView'0],
  37.             ],
  38.         ];
  39.     }
  40.     /**
  41.      * @param \Ibexa\Core\MVC\Symfony\Event\PreContentViewEvent $event
  42.      *
  43.      * @throws \Ibexa\Core\Base\Exceptions\InvalidArgumentType
  44.      * @throws \Exception
  45.      */
  46.     public function onPrePageView(PreContentViewEvent $event): void
  47.     {
  48.         $view $event->getContentView();
  49.         if (!$view instanceof PageView) {
  50.             return;
  51.         }
  52.         if (!$view->hasParameter('content')) {
  53.             return;
  54.         }
  55.         $view->setTemplateIdentifier(
  56.             '@IbexaScheduler/overrides/ibexa_page_builder/page_builder/preview.html.twig'
  57.         );
  58.         /** @var \Ibexa\Contracts\Core\Repository\Values\Content\Content $content */
  59.         $content $view->getParameter('content');
  60.         $view->addParameters([
  61.             'future_versions' => $this->getFutureVersions($content),
  62.         ]);
  63.     }
  64.     /**
  65.      * @param \Ibexa\Contracts\Core\Repository\Values\Content\Content $content
  66.      *
  67.      * @return int[]
  68.      */
  69.     private function getFutureVersions(Content $content): array
  70.     {
  71.         $scheduledContentVersions $this->dateBasedPublisherService->getVersionsEntriesForContent($content->contentInfo->id);
  72.         $versionNumbers = [];
  73.         foreach ($scheduledContentVersions as $scheduledVersion) {
  74.             $versionNumbers[] = $scheduledVersion->versionInfo->versionNo;
  75.         }
  76.         return $versionNumbers;
  77.     }
  78. }
  79. class_alias(PageBuilderTemplatesSubscriber::class, 'EzSystems\DateBasedPublisher\Core\Event\Subscriber\PageBuilderTemplatesSubscriber');