src/EventListener/FormAnswerCreatedListener.php line 40

  1. <?php
  2. namespace App\EventListener;
  3. use App\Service\MailerService;
  4. use ApiPlatform\Core\EventListener\EventPriorities;
  5. use App\Entity\FormAnswer;
  6. use Doctrine\ORM\EntityManagerInterface;
  7. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  8. use Symfony\Component\HttpFoundation\Request;
  9. use Symfony\Component\HttpKernel\Event\ViewEvent;
  10. use Symfony\Component\HttpKernel\KernelEvents;
  11. use Symfony\Component\Validator\Validator\ValidatorInterface;
  12. use Symfony\Component\HttpKernel\Event\ControllerEvent;
  13. use Symfony\Component\HttpKernel\KernelInterface
  14. class FormAnswerCreatedListener implements EventSubscriberInterface
  15. {
  16.     private $mailerService;
  17.     private EntityManagerInterface $entityManager;
  18.     private $validator;
  19.     private $kernel;
  20.     public function __construct(MailerService $mailerServiceEntityManagerInterface $entityManagerValidatorInterface $validatorKernelInterface $kernel)
  21.     {
  22.         $this->mailerService $mailerService;
  23.         $this->entityManager $entityManager;
  24.         $this->validator $validator;
  25.         $this->kernel $kernel;
  26.     }
  27.     public static function getSubscribedEvents()
  28.     {
  29.         return [
  30.             KernelEvents::VIEW => ['saveFormAnswer'EventPriorities::POST_WRITE],
  31.         ];
  32.     }
  33.     public function saveFormAnswer(ViewEvent $event)
  34.     {
  35.         $mainFormAnswer $event->getControllerResult();
  36.         $method $event->getRequest()->getMethod();
  37.         if (!$mainFormAnswer instanceof FormAnswer) {
  38.             return;
  39.         }
  40.         $answerFields $mainFormAnswer->getFormAnswerFields();
  41.         $content "";
  42.         foreach($answerFields as $answerField){
  43.             $content .= $answerField->getFormField()->getLabel() . " - " $answerField->getValue() . "\n";
  44.         }
  45.         $recipientEmail $mainFormAnswer->getForm()->getSendMailAnswet();
  46.         $meiles explode(',',$recipientEmail);
  47.         $subject "Нова відповідь на форму - " $mainFormAnswer->getForm()->getName();
  48.         $media $mainFormAnswer->getMedia();
  49.         $attachmend false;
  50.         if(empty($mainFormAnswer->getStatus()) OR is_null($mainFormAnswer->getStatus())){
  51.             if(count($media) > 0){
  52.                 
  53.                 $newMdiaArr = [];
  54.                 foreach($media as $val){
  55.                     $newMdiaArr[] = $this->kernel->getProjectDir() . "/public/media/" date("Y") . "/" date("m") . "/" $val->filePath;
  56.                 }
  57.                 $attachmend $newMdiaArr;
  58.             }
  59.             
  60.             foreach($meiles as $meil){
  61.                 $this->mailerService->sendRegistrationEmail(trim($meil), $subject$content$attachmend);
  62.             }
  63.             $mainFormAnswer->setStatus('Нове');
  64.             $this->entityManager->persist($mainFormAnswer );
  65.         }
  66.         
  67.         $dataMails $mainFormAnswer->getData();
  68.         if($dataMails != null){
  69.             foreach($dataMails as $k => $data){
  70.                 if(!empty($data['email']) AND !empty($data['title']) AND !empty( $data['content'] ) AND empty($data['send'])){
  71.                     // print_r($data); die;
  72.                     $this->mailerService->sendRegistrationEmail(trim($data['email']), $data['title'], $data['content']);
  73.                     $dataMails[$k]['send'] = true;
  74.                 }
  75.             }
  76.             $mainFormAnswer->setStatus('send_answer');
  77.             $mainFormAnswer->setData($dataMails);
  78.             $this->entityManager->persist($mainFormAnswer );
  79.             $this->entityManager->flush();
  80.         }
  81.     }
  82. }