src/EventListener/FormAnswerCreatedListener.php line 40
<?php
namespace App\EventListener;
use App\Service\MailerService;
use ApiPlatform\Core\EventListener\EventPriorities;
use App\Entity\FormAnswer;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\Event\ViewEvent;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\Validator\Validator\ValidatorInterface;
use Symfony\Component\HttpKernel\Event\ControllerEvent;
use Symfony\Component\HttpKernel\KernelInterface;
class FormAnswerCreatedListener implements EventSubscriberInterface
{
private $mailerService;
private EntityManagerInterface $entityManager;
private $validator;
private $kernel;
public function __construct(MailerService $mailerService, EntityManagerInterface $entityManager, ValidatorInterface $validator, KernelInterface $kernel)
{
$this->mailerService = $mailerService;
$this->entityManager = $entityManager;
$this->validator = $validator;
$this->kernel = $kernel;
}
public static function getSubscribedEvents()
{
return [
KernelEvents::VIEW => ['saveFormAnswer', EventPriorities::POST_WRITE],
];
}
public function saveFormAnswer(ViewEvent $event)
{
$mainFormAnswer = $event->getControllerResult();
$method = $event->getRequest()->getMethod();
if (!$mainFormAnswer instanceof FormAnswer) {
return;
}
$answerFields = $mainFormAnswer->getFormAnswerFields();
$content = "";
foreach($answerFields as $answerField){
$content .= $answerField->getFormField()->getLabel() . " - " . $answerField->getValue() . "\n";
}
$recipientEmail = $mainFormAnswer->getForm()->getSendMailAnswet();
$meiles = explode(',',$recipientEmail);
$subject = "Нова відповідь на форму - " . $mainFormAnswer->getForm()->getName();
$media = $mainFormAnswer->getMedia();
$attachmend = false;
if(empty($mainFormAnswer->getStatus()) OR is_null($mainFormAnswer->getStatus())){
if(count($media) > 0){
$newMdiaArr = [];
foreach($media as $val){
$newMdiaArr[] = $this->kernel->getProjectDir() . "/public/media/" . date("Y") . "/" . date("m") . "/" . $val->filePath;
}
$attachmend = $newMdiaArr;
}
foreach($meiles as $meil){
$this->mailerService->sendRegistrationEmail(trim($meil), $subject, $content, $attachmend);
}
$mainFormAnswer->setStatus('Нове');
$this->entityManager->persist($mainFormAnswer );
}
$dataMails = $mainFormAnswer->getData();
if($dataMails != null){
foreach($dataMails as $k => $data){
if(!empty($data['email']) AND !empty($data['title']) AND !empty( $data['content'] ) AND empty($data['send'])){
// print_r($data); die;
$this->mailerService->sendRegistrationEmail(trim($data['email']), $data['title'], $data['content']);
$dataMails[$k]['send'] = true;
}
}
$mainFormAnswer->setStatus('send_answer');
$mainFormAnswer->setData($dataMails);
$this->entityManager->persist($mainFormAnswer );
$this->entityManager->flush();
}
}
}