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