vendor/ibexa/dashboard/src/bundle/EventSubscriber/PageBuilder/IbexaNewsBlockSubscriber.php line 40

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\Bundle\Dashboard\EventSubscriber\PageBuilder;
  8. use Ibexa\Dashboard\News\FeedException;
  9. use Ibexa\Dashboard\News\FeedInterface;
  10. use Ibexa\FieldTypePage\FieldType\Page\Block\Renderer\BlockRenderEvents;
  11. use Ibexa\FieldTypePage\FieldType\Page\Block\Renderer\Event\PreRenderEvent;
  12. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  13. final class IbexaNewsBlockSubscriber implements EventSubscriberInterface
  14. {
  15. private const BLOCK_IDENTIFIER = 'ibexa_news';
  16. private FeedInterface $feed;
  17. private string $url;
  18. public function __construct(
  19. FeedInterface $feed,
  20. string $url
  21. ) {
  22. $this->feed = $feed;
  23. $this->url = $url;
  24. }
  25. public static function getSubscribedEvents(): array
  26. {
  27. return [
  28. BlockRenderEvents::getBlockPreRenderEventName(self::BLOCK_IDENTIFIER) => 'onBlockPreRender',
  29. ];
  30. }
  31. public function onBlockPreRender(PreRenderEvent $event): void
  32. {
  33. $ibexaNews = [];
  34. /** @var \Ibexa\FieldTypePage\FieldType\Page\Block\Renderer\Twig\TwigRenderRequest $request */
  35. $request = $event->getRenderRequest();
  36. $request->addParameter('block_name', $event->getBlockValue()->getName());
  37. try {
  38. $ibexaNews = $this->feed->fetch(
  39. $this->url,
  40. (int)$request->getParameters()['limit'],
  41. );
  42. } catch (FeedException $e) {
  43. /** @var \Ibexa\FieldTypePage\FieldType\Page\Block\Renderer\Twig\TwigRenderRequest $renderRequest */
  44. $renderRequest = $event->getRenderRequest();
  45. $renderRequest->setTemplate(
  46. '@ibexadesign/ui/page_builder/blocks/ibexa_news_unable_to_fetch.html.twig'
  47. );
  48. }
  49. $request->addParameter(
  50. 'ibexa_news',
  51. $ibexaNews
  52. );
  53. }
  54. }