src/EventListener/AdminResourceListener.php line 135

Open in your IDE?
  1. <?php
  2. namespace App\EventListener;
  3. use Sylius\Bundle\ResourceBundle\Event\ResourceControllerEvent;
  4. use Symfony\Bundle\FrameworkBundle\Console\Application;
  5. use Symfony\Component\HttpKernel\KernelInterface;
  6. use Symfony\Component\Console\Input\ArrayInput;
  7. use Symfony\Component\Console\Output\NullOutput;
  8. use Doctrine\ORM\EntityManagerInterface;
  9. use App\Entity\SiteSacZipSelection;
  10. /**
  11.  * Empêche la suppression depuis l'admin des éléments suivants :
  12.  * - Promotion "FREE_DELIVERY" sinon l'intégration est cassé
  13.  * - Page CMS "Les marchés" sinon l'intégration de la page "Boutiques" est cassé
  14.  * - Suppression de produits, déclinaisons, clients, méthode de paiement et modes de livraisons
  15.  * - Suppression d'une combinaison Sac&Zip qui possède la coche "par défaut"
  16.  * 
  17.  * Empêche aussi des cas qui casse le site :
  18.  * - Retirer la coche "par défaut" quand il reste que 1 combinaison Sac&Zip 
  19.  * 
  20.  * Déclenche des éléments quand on modifie des choses :
  21.  * - Quand on modifie un filtre à facettes, on met à jour l'ensemble de l'index de recherche
  22.  */
  23. class AdminResourceListener
  24. {
  25.     public const PAGE_CMS_LES_MARCHE_ID 9;
  26.     private $em;
  27.     private $kernel;
  28.     public function __construct(EntityManagerInterface $emKernelInterface $kernel)
  29.     {
  30.         $this->em $em;
  31.         $this->kernel $kernel;
  32.     }
  33.     public function onPromotionPreDelete(ResourceControllerEvent $event)
  34.     {
  35.         if ($event->getSubject()->getCode() === 'FREE_DELIVERY') {
  36.             $event->stop(
  37.                 "Vous ne pouvez pas supprimer cette promotion, elle est indispensable au bon fonctionnement du site.",
  38.                 ResourceControllerEvent::TYPE_ERROR
  39.             );
  40.         }
  41.     }
  42.     public function onPageCMSPreDelete(ResourceControllerEvent $event)
  43.     {
  44.         if ($event->getSubject()->getId() === self::PAGE_CMS_LES_MARCHE_ID) {
  45.             $event->stop(
  46.                 "Vous ne pouvez pas supprimer cette page, elle est utilisée dans 'Nos boutiques'.",
  47.                 ResourceControllerEvent::TYPE_ERROR
  48.             );
  49.         }
  50.     }
  51.     public function onSacZipSelectionPreUpdate(ResourceControllerEvent $event)
  52.     {
  53.         if ($event->getSubject()->getDefault() == false) {
  54.             $qb $this->em->getRepository(SiteSacZipSelection::class)->createQueryBuilder('s');
  55.             $count $qb->select($qb->expr()->count('s'))
  56.             ->getQuery()
  57.             ->getSingleScalarResult();
  58.             if ($count == 1) {
  59.                 $event->stop(
  60.                     "Vous ne pouvez pas retirer la coche 'combinaison par défaut' quand il y a que 1 combinaison.",
  61.                     ResourceControllerEvent::TYPE_ERROR
  62.                 );
  63.             }
  64.         }
  65.         if ($event->getSubject()->getEnabled() == false) {
  66.             if ($event->getSubject()->getDefault() == true) {
  67.                 $event->stop(
  68.                     "Vous ne pouvez pas désactiver la combinaison par défaut.",
  69.                     ResourceControllerEvent::TYPE_ERROR
  70.                 );
  71.             }
  72.         }
  73.     }
  74.     public function onSacZipSelectionPreDelete(ResourceControllerEvent $event)
  75.     {
  76.         if ($event->getSubject()->getDefault() == true) {
  77.             $event->stop(
  78.                 "Vous ne pouvez pas supprimer la combinaison par défaut.",
  79.                 ResourceControllerEvent::TYPE_ERROR
  80.             );
  81.         }
  82.     }
  83.     public function onProductOrVariantOrCustomerPreDelete(ResourceControllerEvent $event)
  84.     {        
  85.         $event->stop(
  86.             "Vous ne pouvez pas supprimer ces éléments depuis l'admin. Utilisez 'Panda' pour le faire.",
  87.             ResourceControllerEvent::TYPE_ERROR
  88.         );
  89.     }
  90.     public function onPaymentMethodPreDelete(ResourceControllerEvent $event)
  91.     {
  92.         $event->stop(
  93.             "Vous ne pouvez pas supprimer de moyens de paiements tant qu'il y aura des flux avec 'Panda'.",
  94.             ResourceControllerEvent::TYPE_ERROR
  95.         );
  96.     }
  97.     public function onShippingMethodPreDelete(ResourceControllerEvent $event)
  98.     {
  99.         $event->stop(
  100.             "Vous ne pouvez pas supprimer de modes de livraisons tant qu'il y aura des flux avec 'Panda'.",
  101.             ResourceControllerEvent::TYPE_ERROR
  102.         );
  103.     }
  104.     public function onPaymentMethodPreCreate(ResourceControllerEvent $event)
  105.     {
  106.         $event->stop(
  107.             "Vous ne pouvez pas créer de moyens de paiements tant qu'il y aura des flux avec 'Panda'.",
  108.             ResourceControllerEvent::TYPE_ERROR
  109.         );
  110.     }
  111.     public function onShippingMethodPreCreate(ResourceControllerEvent $event)
  112.     {
  113.         $event->stop(
  114.             "Vous ne pouvez pas créer de modes de livraisons tant qu'il y aura des flux avec 'Panda'.",
  115.             ResourceControllerEvent::TYPE_ERROR
  116.         );
  117.     }
  118.     public function onFilterFacetPostCreate(ResourceControllerEvent $event)
  119.     {
  120.         $application = new Application($this->kernel);
  121.         $application->setAutoExit(false);
  122.         $application->run(new ArrayInput([
  123.             'command' => 'ppmc:search-indexer'
  124.         ]), new NullOutput());
  125.     }
  126.     public function onFilterFacetPostUpdate(ResourceControllerEvent $event)
  127.     {
  128.         $application = new Application($this->kernel);
  129.         $application->setAutoExit(false);
  130.         $application->run(new ArrayInput([
  131.             'command' => 'ppmc:search-indexer'
  132.         ]), new NullOutput());
  133.     }
  134. }