custom/plugins/KmPitchPrint/src/ExceptionListener/ExceptionSubscriber.php line 32

Open in your IDE?
  1. <?php
  2. namespace KmPitchPrint\ExceptionListener;
  3. use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
  4. use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsFilter;
  5. use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\SuffixFilter;
  6. use Shopware\Core\Framework\DataAbstractionLayer\Search\Grouping\FieldGrouping;
  7. use Symfony\Component\HttpFoundation\Response;
  8. use Symfony\Component\HttpKernel\Event\ExceptionEvent;
  9. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  10. use Symfony\Component\HttpFoundation\RedirectResponse;
  11. use Shopware\Core\Framework\DataAbstractionLayer\EntityRepositoryInterface;
  12. use Shopware\Core\Framework\Context;
  13. use \LogicException;
  14. class ExceptionSubscriber
  15. {
  16.     const URL 'https://www.kartenmachen.de/';
  17.     /**
  18.      * @var $seoUrlRepository EntityRepositoryInterface
  19.      */
  20.     private EntityRepositoryInterface $seoUrlRepository;
  21.     public function __construct(
  22.         EntityRepositoryInterface $seoUrlRepository
  23.     ){
  24.         $this->seoUrlRepository $seoUrlRepository;
  25.     }
  26.     public function __invoke(ExceptionEvent $event): void
  27.     {
  28.         // You get the exception object from the received event
  29.         $exception $event->getThrowable();
  30.         if($exception instanceof LogicException  ){
  31.             if(strstr($event->getRequest()->getRequestUri(),'account/order')){
  32.                 $response = new RedirectResponse(self::URL.'/account/order');
  33.                 $event->setResponse($response);
  34.             }
  35.         }
  36.         if($exception instanceof NotFoundHttpException ){
  37.             $response false;
  38.             $hardCodedMap = [
  39.                 '/geburtstagskarten/einladungskarten-geburtstag.html'=>'Geburtstag/Einladungskarten-Geburtstag/',
  40.                 '/geburtstagskarten/einladungskarten-geburtstag/witzig.html'=>'Geburtstag/Einladungskarten-Geburtstag/Witzige-Einladungen/',
  41.                 '/anlaesse/einschulung/einladungskarten-einschulung.html'=>'Andere-Anlaesse/Einschulung/Einladungskarten-Einschulung/',
  42.                 '/anlaesse/jugendweihekarten/einladungskarten-jugendweihe.html'=>'Andere-Anlaesse/Jugendweihe/Jugendweihe-Einladungen/',
  43.                 '/geburtstagskarten/einladungskarten-geburtstag/mottoparty.html'=>'Geburtstag/Einladungskarten-Geburtstag/Mottoparty-Einladung/',
  44.                 '/buecher/gaestebuch/hochzeit-gaestebuch.html'=>'Buecher/Gaestebuch/Hochzeit-Gaestebuch/',
  45.                 '/anlaesse/konfirmationskarten/einladungskarten-konfirmation.html'=>'Andere-Anlaesse/Konfirmation/Konfirmationseinladungen/',
  46.                 '/geburtstag-einladungskarten-zum-brunch.html'=>'Geburtstag-Einladungskarten-zum-Brunch/EGD100185S',
  47.                 '/geburtstagskarten/einladungskarten-geburtstag/eintrittskarten.html'=>'Geburtstag/Einladungskarten-Geburtstag/Geburtstag-Eintrittskarten/',
  48.                 '/anlaesse/jugendweihekarten.html'=>'Andere-Anlaesse/Jugendweihe/',
  49.                 '/anlaesse/kommunionskarten/einladungskarten-kommunion.html'=>'Andere-Anlaesse/Kommunion/Kommunionseinladungen/',
  50.                 '/geburtstag-einladungskarten-fotogruss-mit-postkarte.html'=>'Geburtstag-Einladungskarten-Fotogruss-mit-Postkarte/EGD100151S',
  51.                 '/geburtstagskarten/einladungskarten-geburtstag/party-einladung.html'=>'Geburtstag/Einladungskarten-Geburtstag/Party-Einladungen/',
  52.                 '/einladungskarte-als-rezept-rosa.html'=>'Einladungskarte-als-Rezept-Rosa/EGD100004S-ROSA',
  53.                 '/einladungskarten-als-krankschreibung-gelb.html'=>'Einladungskarte-als-Krankschreibung-Gelb/EGD100004S-GELB',
  54.                 '/geburtstag-partyeinladungen-uberraschungsparty.html'=>'Geburtstag-Partyeinladungen-UEberraschungsparty/EGD100065S',
  55.                 '/geburtstagskarten/tischkarten-geburtstag.html'=>'Geburtstag/Tischkarten-Geburtstag/',
  56.             ];
  57.             $requestUri $event->getRequest()->getRequestUri();
  58.             //find matches in the hardCodedMap first
  59.             foreach ($hardCodedMap as $key =>$val){
  60.                 if($requestUri == $key){
  61.                     $response = new RedirectResponse(self::URL.
  62.                         $valResponse::HTTP_MOVED_PERMANENTLY);
  63.                     $event->setResponse($response);
  64.                     break;
  65.                 }
  66.             }
  67.             //in no matches in hardCodedMap, compare the seo urls from Database
  68.             if (!$response){
  69.                 $pattern str_replace('.html',''$requestUri);
  70.                 $offset strripos($pattern'/') + 1;
  71.                 $pattern substr($pattern,  $offset);
  72.                 $context Context::createDefaultContext();
  73.                 $criteria = new Criteria();
  74.                 $criteria->addFilter(new SuffixFilter('seoPathInfo',$pattern.'/'));
  75.                 $criteria->addFilter(new EqualsFilter('routeName','frontend.navigation.page'));
  76.                 $criteria->addGroupField(new FieldGrouping('seoPathInfo'));
  77.                 $urlResult $this->seoUrlRepository->search($criteria$context);
  78.                 if($urlResult->getTotal() > 0){
  79.                     $response = new RedirectResponse(self::URL.
  80.                         $urlResult->first()->getSeoPathInfo(), Response::HTTP_MOVED_PERMANENTLY);
  81.                     $event->setResponse($response);
  82.                 }
  83.             }
  84.         }
  85.     }
  86. }