src/Controller/AppController.php line 23
<?phpnamespace App\Controller;use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;use Symfony\Component\Routing\Annotation\Route;use Symfony\Component\HttpFoundation\Request;use Symfony\Component\HttpFoundation\Response;use Symfony\Component\Routing\Generator\UrlGeneratorInterface;use Symfony\Component\Asset\Packages;use Doctrine\Persistence\ManagerRegistry;use App\Form\EmailType;use App\Entity\EmailTemplate;use App\Entity\GeneratedEmail;use App\Service\SparkPost;class AppController extends AbstractController{#[Route('/', name: 'app_home')]public function home(){if($this->getUser()) {if($this->getUser()->hasRole('ROLE_ADMIN')) {return $this->redirectToRoute('sonata_admin_dashboard');} elseif($this->getUser()->hasRole('ROLE_USER')) {return $this->redirectToRoute('app_index');} else {return $this->redirectToRoute('app_login');}} else {return $this->redirectToRoute('app_login');}}#[Route('/preview/email/{uuid}', name: 'app_public_email')]public function publicEmail(Request $request, GeneratedEmail $generatedEmail) {return new Response($generatedEmail->getContent());}#[Route('/app', name: 'app_index')]public function index(Request $request, ManagerRegistry $doctrine, Packages $assetsManager, SparkPost $sparkpost){$form = $this->createForm(EmailType::class);$form->handleRequest($request);$em = $doctrine->getManager();$data = [];if ($form->isSubmitted()) {if($request->isXmlHttpRequest()) {$data = $form->getData();$code = $data['template']->getContent();$code = str_replace('{INTRODUCTORYSENTENCE}', isset($data['introductorySentence']) ? $data['introductorySentence'] : '', $code);$code = str_replace('{SENDERNAME}', isset($data['senderName']) ? $data['senderName'] : '', $code);$code = str_replace('{SENDERJOBTITLE}', isset($data['senderJobTitle']) ? $data['senderJobTitle'] : '', $code);$code = str_replace('{CONTENT}', isset($data['content']) ? $data['content'] : '', $code);return $this->json(['response' => 'success','result' => $code]);} else {if($form->isValid()) {$data = $form->getData();$html = $data['template']->getContent();$html = str_replace('{INTRODUCTORYSENTENCE}', $data['introductorySentence'], $html);$html = str_replace('{SENDERNAME}', $data['senderName'], $html);$html = str_replace('{SENDERJOBTITLE}', $data['senderJobTitle'], $html);$html = str_replace('{CONTENT}', $data['content'], $html);$emailInvalides = [];if(!filter_var($data['senderEmail'], FILTER_VALIDATE_EMAIL)) {$emailInvalides[] = $data['senderEmail'];}$lesEmails = array_values($data['to']);$emailsListe = [];foreach($lesEmails as $k => $unEmail) {if(!strpos($unEmail, '>')) {$emailsListe = array_merge($emailsListe, [trim($unEmail)]);} else {preg_match_all('/\<([^>]+)\>/', $unEmail, $res);foreach($res as $p => $addr) {$res[$p] = str_replace('>', '', str_replace('<', '', $addr));}$emailsListe = array_merge($emailsListe, $res);}}foreach($emailsListe as $k => $unEmail) {if(is_array($unEmail) && count($unEmail) > 0) {$emailsListe[$k] = $unEmail[0];} elseif(is_array($unEmail)) {unset($emailsListe[$k]);}}$emailsListe = array_unique($emailsListe);$lesEmails = $emailsListe;foreach($lesEmails as $unEmail) {if(!filter_var($unEmail, FILTER_VALIDATE_EMAIL)) {$emailInvalides[] = $unEmail;}}if(count($emailInvalides) > 0) {$this->addFlash('danger', 'An error occurred when sending the email. The following emails are invalid : '.implode(', ', $emailInvalides).'.');$this->addFlash('danger', 'Une erreur est survenue lors de l\'envoi du mail. Les adresses suivantes sont invalides : '.implode(', ', $emailInvalides).'.');} else {$genEmail = new GeneratedEmail();$genEmail->setContent($html);$genEmail->setDatetimeSent(new \DateTime("now"));$em->persist($genEmail);$em->flush();$to = [];foreach(array_values($lesEmails) as $email) {$to[] = $email;}$html = str_replace('[WebVersion]', $this->generateUrl('app_public_email', ['uuid' => $genEmail->getUuid()], UrlGeneratorInterface::ABSOLUTE_URL), $html);$error = false;$response = $sparkpost->send($data['senderEmail'], $to, $data['emailTitle'], $html);if(!isset($response->results)){$error = true;}if(!$error){$data['formIsSubmitted'] = true;$this->addFlash('success', 'Your email has been sent to : '.implode(', ', $to).'.');$this->addFlash('success', 'L\'email a bien été envoyé à : '.implode(', ', $to).'.');} else {$this->addFlash('danger', 'An error occurred when sending the email. Please retry.');$this->addFlash('danger', 'Une erreur est survenue lors de l\'envoi du mail. Veuillez ré-essayer.');}}}}}$em = $doctrine->getManager();$templates = $em->getRepository(EmailTemplate::class)->findAll();$logos = [];foreach(EmailTemplate::LOGOS as $file => $label) {$logos[$file] = $assetsManager->getUrl('build/images/'.$file);}$templatesJson = [];foreach($templates as $k => $unTemplate) {$templatesJson[$unTemplate->getId()] = new \stdClass;$templatesJson[$unTemplate->getId()]->text = nl2br($unTemplate->getTextContent());$templatesJson[$unTemplate->getId()]->title = $unTemplate->getEmailTitle();$templatesJson[$unTemplate->getId()]->logo = $logos[$unTemplate->getLogo()];}return $this->render('app/index.html.twig', ['form' => $form->createView(),'templates' => $templatesJson,'data' => $data,'logos' => $logos]);}}