vendor/contao/core-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\CoreBundle\EventListener;
  11. use Contao\ArticleModel;
  12. use Contao\CoreBundle\Event\PreviewUrlConvertEvent;
  13. use Contao\CoreBundle\Framework\ContaoFramework;
  14. use Contao\PageModel;
  15. use Symfony\Component\HttpFoundation\Request;
  16. /**
  17.  * @internal
  18.  */
  19. class PreviewUrlConvertListener
  20. {
  21.     /**
  22.      * @var ContaoFramework
  23.      */
  24.     private $framework;
  25.     public function __construct(ContaoFramework $framework)
  26.     {
  27.         $this->framework $framework;
  28.     }
  29.     public function __invoke(PreviewUrlConvertEvent $event): void
  30.     {
  31.         if (!$this->framework->isInitialized()) {
  32.             return;
  33.         }
  34.         $request $event->getRequest();
  35.         if ($request->query->has('url')) {
  36.             $event->setUrl($request->getBaseUrl().'/'.$request->query->get('url'));
  37.             return;
  38.         }
  39.         if ($request->query->has('page')) {
  40.             /** @var PageModel $pageAdapter */
  41.             $pageAdapter $this->framework->getAdapter(PageModel::class);
  42.             if (!$page $pageAdapter->findWithDetails($request->query->get('page'))) {
  43.                 return;
  44.             }
  45.             $event->setUrl($page->getPreviewUrl($this->getParams($request)));
  46.         }
  47.     }
  48.     private function getParams(Request $request): ?string
  49.     {
  50.         if (!$request->query->has('article')) {
  51.             return null;
  52.         }
  53.         /** @var ArticleModel $articleAdapter */
  54.         $articleAdapter $this->framework->getAdapter(ArticleModel::class);
  55.         if (!$article $articleAdapter->findByAlias($request->query->get('article'))) {
  56.             return null;
  57.         }
  58.         // Add the /article/ fragment (see contao/core-bundle#673)
  59.         return sprintf('/articles/%s%s''main' !== $article->inColumn $article->inColumn.':' ''$article->alias);
  60.     }
  61. }