src/EventSubscriber/CustomFeeSubscriber.php line 77

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Entity\FormCustomField;
  4. use App\Entity\Municipality;
  5. use App\Event\AppEvents;
  6. use App\Event\CustomFeeEvent;
  7. use Doctrine\ORM\EntityManagerInterface;
  8. use App\Entity\CustomField;
  9. use App\Entity\MunicipalityFormCustomField;
  10. use App\ValueObject\FormTypes;
  11. use App\ValueObject\SearchCriteria\FormCustomFieldSearchCriteria;
  12. use App\ValueObject\SearchCriteria\MunicipalityFormCustomFieldSearchCriteria;
  13. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  14. /**
  15.  * Class CustomFeeSubscriber
  16.  * @package App\EventSubscriber
  17.  */
  18. class CustomFeeSubscriber implements EventSubscriberInterface
  19. {
  20.     /**
  21.      * @var EntityManagerInterface
  22.      */
  23.     private $em;
  24.     /**
  25.      * CustomFeeSubscriber constructor.
  26.      *
  27.      * @param EntityManagerInterface $em
  28.      */
  29.     public function __construct(
  30.         EntityManagerInterface $em
  31.     ) {
  32.         $this->em $em;
  33.     }
  34.     /**
  35.      * {@inheritdoc}
  36.      */
  37.     public static function getSubscribedEvents()
  38.     {
  39.         return [
  40.             AppEvents::CUSTOM_FIELD_TO_DEFAULT => 'addNewDefaultField',
  41.             AppEvents::CUSTOM_FIELD_DELETED => 'removeFormField'
  42.         ];
  43.     }
  44.     /**
  45.      * Remove municipality fields that depends on the item.
  46.      * @param CustomFeeEvent $event
  47.      */
  48.     public function removeMunicipalityField($event)
  49.     {
  50.         $em $this->em;
  51.         /** @var CustomField $customField */
  52.         $customField $event->getCustomField();
  53.         $criteria = new MunicipalityFormCustomFieldSearchCriteria();
  54.         $criteria->customField $customField;
  55.         $fields $this->em->getRepository(MunicipalityFormCustomField::class)->search($criteria);
  56.         foreach ($fields as $field) {
  57.             $em->remove($field);
  58.         }
  59.         try {
  60.             $em->flush();
  61.         } catch (\Exception $e) {
  62.         }
  63.     }
  64.     /**
  65.      * Remove answers on forms that depends on the item.
  66.      * @param CustomFeeEvent $event
  67.      */
  68.     public function removeFormField($event)
  69.     {
  70.         $this->removeMunicipalityField($event);
  71.         $em $this->em;
  72.         /** @var CustomField $customField */
  73.         $customField $event->getCustomField();
  74.         $criteria = new FormCustomFieldSearchCriteria();
  75.         $criteria->customField $customField;
  76.         $fields $this->em->getRepository(FormCustomField::class)->search($criteria);
  77.         foreach ($fields as $field) {
  78.             $em->remove($field);
  79.         }
  80.         try {
  81.             $em->flush();
  82.         } catch (\Exception $e) {
  83.         }
  84.     }
  85.     /**
  86.      * Generate default form items for each form.
  87.      * @param CustomFeeEvent $event
  88.      */
  89.     public function addNewDefaultField($event)
  90.     {
  91.         $em $this->em;
  92.         /** @var CustomField $customField */
  93.         $customField $event->getCustomField();
  94.         if ($customField->isRegistrationForm()) {
  95.             $type FormTypes::REGISTRATION;
  96.         } elseif ($customField->isRenewalForm()) {
  97.             $type FormTypes::RENEWAL;
  98.         } elseif ($customField->isDeregistrationForm()) {
  99.             $type FormTypes::DEREGISTRATION;
  100.         } else {
  101.             $type FormTypes::INSPECTION;
  102.         }
  103.         $municipalitiesIds $this->em->getRepository(MunicipalityFormCustomField::class)->findMunicipalitiesWithDefaultField($customField);
  104.         $municipalities $this->em->getRepository(Municipality::class)->findMunicipalitiesWithoutDefaultField($municipalitiesIds);
  105.         if ($customField->isRegistrationForm() ||
  106.             $customField->isRenewalForm() ||
  107.             $customField->isDeregistrationForm() ||
  108.             $customField->isInspectionForm()) {
  109.             //Check if the field is assigned to any form.
  110.             foreach ($municipalities as $municipality) {
  111.                 $criteria = new MunicipalityFormCustomFieldSearchCriteria();
  112.                 $criteria->municipality $municipality;
  113.                 $criteria->type $type;
  114.                 $pos $this->em->getRepository(MunicipalityFormCustomField::class)->countByCriteria($criteria);
  115.                 $formField = new MunicipalityFormCustomField($type$municipality$pos 1);
  116.                 $formField->setCustomField($customField);
  117.                 $em->persist($formField);
  118.             }
  119.             $this->em->flush();
  120.         }
  121.     }
  122. }