src/Form/EventSubscriber/ProgramFormSubscriber.php line 105

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Form\EventSubscriber;
  4. use App\Entity\Lot\Lot;
  5. use App\Entity\Program\Program;
  6. use App\Service\Lot\LotOptionManager;
  7. use App\Service\Program\ProgramMailSender;
  8. use Exception;
  9. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  10. use Symfony\Component\Form\FormEvent;
  11. use Symfony\Component\Form\FormEvents;
  12. use Symfony\Component\Form\FormInterface;
  13. use Symfony\Contracts\Translation\TranslatorInterface;
  14. use Twig\Error\LoaderError;
  15. use Twig\Error\RuntimeError;
  16. use Twig\Error\SyntaxError;
  17. class ProgramFormSubscriber implements EventSubscriberInterface
  18. {
  19.     /**
  20.      * @var LotOptionManager
  21.      */
  22.     private $lotOptionManager;
  23.     /**
  24.      * @var TranslatorInterface
  25.      */
  26.     private $translator;
  27.     /**
  28.      * @var ProgramMailSender
  29.      */
  30.     private $programMailSender;
  31.     public function __construct(
  32.         LotOptionManager $lotOptionManager,
  33.         ProgramMailSender $programMailSender,
  34.         TranslatorInterface $translator
  35.     )
  36.     {
  37.         $this->lotOptionManager $lotOptionManager;
  38.         $this->programMailSender $programMailSender;
  39.         $this->translator $translator;
  40.     }
  41.     /**
  42.      * {@inheritdoc}
  43.      */
  44.     public static function getSubscribedEvents(): array
  45.     {
  46.         return [
  47.             FormEvents::POST_SET_DATA => 'onPostSetData',
  48.             FormEvents::PRE_SUBMIT => 'onPreSubmit',
  49.             FormEvents::POST_SUBMIT => 'onPostSubmit',
  50.         ];
  51.     }
  52.     /**
  53.      * @param FormEvent $event
  54.      *
  55.      * @throws Exception
  56.      */
  57.     public function onPostSetData(FormEvent $event)
  58.     {
  59.         $rawData $event->getData();
  60.         /** @var FormInterface $form */
  61.         $form $event->getForm();
  62.         /** @var Lot $lot */
  63.         foreach ($form->get('lots') as $lot) {
  64.             $state = ($this->lotOptionManager->lotIsAvailable($lot->getData()))
  65.                 ? $this->translator->trans('app.lot.no_optioned', [], 'lot')
  66.                 : $lot->getData()->getOptionedDate()->format('d-m-Y H:i:s');
  67.             $lot->get('isOptioned')->setData($state);
  68.         }
  69.     }
  70.     /**
  71.      * @param FormEvent $event
  72.      */
  73.     public function onPreSubmit(FormEvent $event): void
  74.     {
  75.         /** @var Program $program */
  76.         $program $event->getForm()->getData();
  77.         $rawData $event->getData();
  78.         if (null !== $program->getId()) {
  79.             $rawData['isNew'] = 'false';
  80.             $event->setData($rawData);
  81.         } else {
  82.             $rawData['isNew'] = 'true';
  83.             $event->setData($rawData);
  84.         }
  85.     }
  86.     /**
  87.      * @param FormEvent $event
  88.      * @throws LoaderError
  89.      * @throws RuntimeError
  90.      * @throws SyntaxError
  91.      */
  92.     public function onPostSubmit(FormEvent $event): void
  93.     {
  94.         $program $event->getData();
  95.         if ('false' === $program->getIsNew()) {
  96.             $this->programMailSender->sendMailForUpdate($program);
  97.         }
  98. //        elseif ('true' === $program->getIsNew()) {
  99. //            $this->programMailSender->sendMailForNewProgram($program);
  100. //        }
  101.     }
  102. }