<?php
namespace App\Controller;
use App\Entity\EmailLog;
use App\Entity\EmailTemplate;
use App\Entity\EmailTrigger;
use App\Entity\Package;
use App\Entity\Participant;
use Endroid\QrCode\Builder\BuilderInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\KernelInterface;
use Symfony\Component\Routing\Annotation\Route;
class InviteRegistrationController extends BaseController
{
/**
* @Route("/invite/registration", name="app_invite_registration")
*/
public function index(Request $request, BuilderInterface $customQrCodeBuilder, KernelInterface $kernel): Response
{
if ($request->isMethod("POST")) {
if ($request->request->has('secretCode')) {
// Find package by secret code
$package = $this->em->getRepository(Package::class)->findOneBy(['secretCode' => $request->request->get('secretCode')]);
if (is_null($package)) {
$this->addFlash('warning', $this->translator->trans('inviteRegistration.error.secretCode'));
return $this->render('invite_registration/index.html.twig');
}
return $this->render('invite_registration/index.html.twig', [
'package' => $package,
]);
}
if ($request->request->has('packageBySecretCode')) {
$participant = (new Participant())
->setName($request->get('participantName'))
->setCompany($request->get('participantCompany'))
->setEmail($request->get('participantEmail'))
->setPhone($request->get('participantPhone'))
->setPackage($this->em->getRepository(Package::class)->findOneBy(['id' => $request->get('packageBySecretCode')]))
->setCreatedAt((new \DateTime()))
->setModifiedAt((new \DateTime()))
;
$this->em->persist($participant);
$this->em->flush();
// Send email
// $this->sendEmailUponRegistration($request, $participant, $customQrCodeBuilder, $kernel);
$this->addFlash('success',$this->translator->trans('inviteRegistration.success'));
return $this->render('invite_registration/index.html.twig');
}
}
return $this->render('invite_registration/index.html.twig');
}
public function sendEmailUponRegistration(Request $request, Participant $participant, BuilderInterface $customQrCodeBuilder, KernelInterface $kernel): void
{
$participantRepo = $this->em->getRepository(Participant::class);
$emailTemplateRepo = $this->em->getRepository(EmailTemplate::class);
$emailTemplate = $emailTemplateRepo->findOneBy(['emailTrigger'=>EmailTrigger::EMAIL_TRIGGER_REGISTRATION_ID]);
$emailBody = $emailTemplate->getHeader()->getBody() . $emailTemplate->getBody() . $emailTemplate->getFooter()->getBody();
$emailBodyPersonalized = $emailBody;
foreach(EmailTemplate::QR_BODY_TAGS as $tag) {
switch ($tag) {
case '###participantName###':
$emailBodyPersonalized = str_replace($tag,$participant->getName(),$emailBodyPersonalized);
break;
case '###participantCompany###':
$emailBodyPersonalized = str_replace($tag,$participant->getCompany(),$emailBodyPersonalized);
break;
case '###participantQRcode###':
$qrCode = $customQrCodeBuilder
->size(400)
->margin(20)
->data($participant->getSecretCode())
->build()
;
if(!file_exists($kernel->getProjectDir() . '/public/qrcodes')) {
exec('mkdir -p ' . $kernel->getProjectDir() . '/public/qrcodes');
exec('chmod -R 0777 ' . $kernel->getProjectDir() . '/public/qrcodes');
}
$qrCode->saveToFile($kernel->getProjectDir() . '/public/qrcodes/' . $participant->getSecretCode() . '.png');
$img = '<img src="' . $request->getUriForPath('/qrcodes/' . $participant->getSecretCode() . '.png') .'">';
$emailBodyPersonalized = str_replace($tag,$img,$emailBodyPersonalized);
break;
}
}
$participant->setQrSent((new \DateTime()));
$emailText = strip_tags($emailBodyPersonalized);
$emailRecord = (new EmailLog())
->setDestination($participant->getEmail())
->setTitle($emailTemplate->getTitle())
->setText($emailText)
->setBody($emailBodyPersonalized)
->setQrAttachPath($kernel->getProjectDir() . '/public/qrcodes/' . $participant->getSecretCode() . '.png')
;
$this->em->persist($emailRecord);
$this->em->flush();
}
}