vendor/contao/news-bundle/src/EventListener/PreviewUrlConvertListener.php line 36

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. /*
  4. * This file is part of Contao.
  5. *
  6. * (c) Leo Feyer
  7. *
  8. * @license LGPL-3.0-or-later
  9. */
  10. namespace Contao\NewsBundle\EventListener;
  11. use Contao\CoreBundle\Event\PreviewUrlConvertEvent;
  12. use Contao\CoreBundle\Framework\ContaoFramework;
  13. use Contao\News;
  14. use Contao\NewsModel;
  15. use Symfony\Component\HttpFoundation\Request;
  16. /**
  17. * @internal
  18. */
  19. class PreviewUrlConvertListener
  20. {
  21. private ContaoFramework $framework;
  22. public function __construct(ContaoFramework $framework)
  23. {
  24. $this->framework = $framework;
  25. }
  26. /**
  27. * Adds the front end preview URL to the event.
  28. */
  29. public function __invoke(PreviewUrlConvertEvent $event): void
  30. {
  31. if (!$this->framework->isInitialized()) {
  32. return;
  33. }
  34. if (null === ($news = $this->getNewsModel($event->getRequest()))) {
  35. return;
  36. }
  37. $event->setUrl($this->framework->getAdapter(News::class)->generateNewsUrl($news, false, true));
  38. }
  39. private function getNewsModel(Request $request): ?NewsModel
  40. {
  41. if (!$request->query->has('news')) {
  42. return null;
  43. }
  44. return $this->framework->getAdapter(NewsModel::class)->findByPk($request->query->get('news'));
  45. }
  46. }