src/EventListener/FrontendMapperListener.php line 31

Open in your IDE?
  1. <?php
  2. /**
  3.  * This file is part of the Pimcore X Installation by
  4.  * ercas GmbH & CO. KG <https://www.ercasdieagentur.de>
  5.  *
  6.  *  @license GPLv3
  7.  */
  8. namespace App\EventListener;
  9. use Pimcore\Http\Request\Resolver\SiteResolver;
  10. use Pimcore\Model\Document;
  11. use Pimcore\Model\Document\Service;
  12. use Symfony\Component\HttpFoundation\RedirectResponse;
  13. use Symfony\Component\HttpFoundation\Response;
  14. use Symfony\Component\HttpKernel\Event\RequestEvent;
  15. class FrontendMapperListener
  16. {
  17.     protected SiteResolver $siteResolver;
  18.     protected Service $documentService;
  19.     public function __construct(SiteResolver $siteResolver)
  20.     {
  21.         $this->siteResolver $siteResolver;
  22.         $this->documentService = new Service();
  23.     }
  24.     public function onKernelRequest(RequestEvent $event): void
  25.     {
  26.         if (is_null($event?->getRequest()?->get('routeDocument'))) {
  27.             return;
  28.         }
  29.         if ($target $event?->getRequest()?->get('contentDocument')) {
  30.             if ($event->getRequest()->get('_pimcore_frontend_request') && $redirectPage $target->getProperty('front_page_map')) {
  31.                 $translations $this->documentService->getTranslations($redirectPage);
  32.                 $preferredRequestLanguage $event->getRequest()->getPreferredLanguage(array_keys($translations));
  33.                 if ($redirectPage->getProperty('language') !== $preferredRequestLanguage) {
  34.                     $redirectPage Document::getById($translations[$preferredRequestLanguage]);
  35.                 }
  36.                 if ($event->getRequest()->get('pimcore_editmode')) {
  37.                     $html '<center style="font: 400 13px/20px \'Open Sans\', \'Helvetica Neue\', helvetica, arial, verdana, sans-serif;">
  38.                                 <img src="/bundles/pimcoreadmin/img/flat-color-icons/link.svg" id="admin-redirect-icon">
  39.                                 <p>This page is a hard redirect to</p>
  40.                                 <strong>%s</strong>
  41.                                 <p>and can not be displayed!</p>
  42.                             </center>';
  43.                     $css '<style>
  44.                         #admin-redirect-icon {
  45.                             width: 96px;
  46.                             height: 96px;
  47.                             padding: 20px;
  48.                             border: 3px solid #f24337;
  49.                             border-radius: 50%;
  50.                             box-sizing: border-box;
  51.                             margin-top: 128px;
  52.                             animation: rotate infinite 10s;
  53.                         }
  54.                         @keyframes rotate {
  55.                             0% { transform: rotate(0); }
  56.                             90% { transform: rotate(0); }
  57.                             100% { transform: rotate(360deg); }
  58.                         }
  59.                     </style>';
  60.                     $response = new Response(sprintf($html$redirectPage->getFullPath()).$css);
  61.                     $event->setResponse($response);
  62.                 } else {
  63.                     $response = new RedirectResponse($redirectPage->getFullPath());
  64.                     $event->setResponse($response);
  65.                 }
  66.             }
  67.         }
  68.     }
  69. }