<?phpdeclare(strict_types=1);namespace App\Form\EventSubscriber;use App\Entity\Lot\Lot;use App\Entity\Program\Program;use App\Service\Lot\LotOptionManager;use App\Service\Program\ProgramMailSender;use Exception;use Symfony\Component\EventDispatcher\EventSubscriberInterface;use Symfony\Component\Form\FormEvent;use Symfony\Component\Form\FormEvents;use Symfony\Component\Form\FormInterface;use Symfony\Contracts\Translation\TranslatorInterface;use Twig\Error\LoaderError;use Twig\Error\RuntimeError;use Twig\Error\SyntaxError;class ProgramFormSubscriber implements EventSubscriberInterface{ /** * @var LotOptionManager */ private $lotOptionManager; /** * @var TranslatorInterface */ private $translator; /** * @var ProgramMailSender */ private $programMailSender; public function __construct( LotOptionManager $lotOptionManager, ProgramMailSender $programMailSender, TranslatorInterface $translator ) { $this->lotOptionManager = $lotOptionManager; $this->programMailSender = $programMailSender; $this->translator = $translator; } /** * {@inheritdoc} */ public static function getSubscribedEvents(): array { return [ FormEvents::POST_SET_DATA => 'onPostSetData', FormEvents::PRE_SUBMIT => 'onPreSubmit', FormEvents::POST_SUBMIT => 'onPostSubmit', ]; } /** * @param FormEvent $event * * @throws Exception */ public function onPostSetData(FormEvent $event) { $rawData = $event->getData(); /** @var FormInterface $form */ $form = $event->getForm(); /** @var Lot $lot */ foreach ($form->get('lots') as $lot) { $state = ($this->lotOptionManager->lotIsAvailable($lot->getData())) ? $this->translator->trans('app.lot.no_optioned', [], 'lot') : $lot->getData()->getOptionedDate()->format('d-m-Y H:i:s'); $lot->get('isOptioned')->setData($state); } } /** * @param FormEvent $event */ public function onPreSubmit(FormEvent $event): void { /** @var Program $program */ $program = $event->getForm()->getData(); $rawData = $event->getData(); if (null !== $program->getId()) { $rawData['isNew'] = 'false'; $event->setData($rawData); } else { $rawData['isNew'] = 'true'; $event->setData($rawData); } } /** * @param FormEvent $event * @throws LoaderError * @throws RuntimeError * @throws SyntaxError */ public function onPostSubmit(FormEvent $event): void { $program = $event->getData(); if ('false' === $program->getIsNew()) { $this->programMailSender->sendMailForUpdate($program); }// elseif ('true' === $program->getIsNew()) {// $this->programMailSender->sendMailForNewProgram($program);// } }}