src/EventSubscriber/FormSubscriber.php line 50

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Entity\DeregistrationFormReview;
  4. use App\Entity\Form;
  5. use App\Entity\FormSupportTicket;
  6. use App\Entity\InspectionFormReview;
  7. use App\Entity\RegistrationFormReview;
  8. use App\Entity\RenewalFormReview;
  9. use App\Entity\SupportTicket;
  10. use App\Event\AppEvents;
  11. use App\Event\FormEvent;
  12. use App\Event\FormsDeletedEvent;
  13. use App\Event\PropertyEvent;
  14. use Doctrine\ORM\EntityManagerInterface;
  15. use Symfony\Component\EventDispatcher\EventDispatcherInterface;
  16. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  17. class FormSubscriber implements EventSubscriberInterface
  18. {
  19.     /**
  20.      * @var EventDispatcherInterface
  21.      */
  22.     private $eventDispatcher;
  23.     /**
  24.      * @var EntityManagerInterface
  25.      */
  26.     private $entityManager;
  27.     public function __construct(
  28.         EntityManagerInterface $entityManager,
  29.         EventDispatcherInterface $eventDispatcher
  30.     ) {
  31.         $this->eventDispatcher $eventDispatcher;
  32.         $this->entityManager $entityManager;
  33.     }
  34.     /**
  35.      * {@inheritdoc}
  36.      */
  37.     public static function getSubscribedEvents()
  38.     {
  39.         return [
  40.             AppEvents::PROPERTY_DELETED => ['onPropertyDeleted'],
  41.             AppEvents::FORM_DELETED => ['onFormDeleted']
  42.         ];
  43.     }
  44.     public function onFormDeleted(FormEvent $event)
  45.     {
  46.         $form $event->getForm();
  47.         $this->deleteFormsRelation([$form->getId()]);
  48.     }
  49.     /**
  50.      * @param PropertyEvent $event
  51.      */
  52.     public function onPropertyDeleted(PropertyEvent $event)
  53.     {
  54.         $property $event->getProperty();
  55.         $id $property->getId();
  56.         //Delete Forms from this property.
  57.         $formIds $this->entityManager->getRepository(Form::class)->deleteByProperty($id);
  58.         if (count($formIds)) {
  59.             $this->deleteFormsRelation($formIds);
  60.         }
  61.     }
  62.     /**
  63.      * @param $formIds
  64.      */
  65.     private function deleteFormsRelation($formIds)
  66.     {
  67.         //Delete Forms Reviews.
  68.         $this->entityManager->getRepository(DeregistrationFormReview::class)->deleteInIds($formIds);
  69.         $this->entityManager->getRepository(InspectionFormReview::class)->deleteInIds($formIds);
  70.         $this->entityManager->getRepository(RegistrationFormReview::class)->deleteInIds($formIds);
  71.         $this->entityManager->getRepository(RenewalFormReview::class)->deleteInIds($formIds);
  72.         //Delete Forms Dispute and Support.
  73.         $formTicketIds $this->entityManager->getRepository(FormSupportTicket::class)->getTicketsInIds($formIds);
  74.         if (count($formTicketIds)) {
  75.             $this->entityManager->getRepository(SupportTicket::class)->deleteInIds($formTicketIds);
  76.         }
  77.         $this->eventDispatcher->dispatch(new FormsDeletedEvent($formIds), AppEvents::FORMS_DELETED);
  78.     }
  79. }