<?php
namespace App\Controller;
use App\Entity\SignUp;
use App\Entity\Emails\Emails;
use App\Entity\Emails\GeneratorMail;
use App\Form\ActivationType;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Form\FormError;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bridge\Twig\Mime\TemplatedEmail;
class ActivationController extends AbstractController
{
protected $em;
public function __construct(EntityManagerInterface $entityManager)
{
$this->em = $entityManager;
}
/**
* @Route("/send/activation", name="app_activation_code")
*/
public function getNewCodeActivation(Request $request, MailerInterface $mailer)
{
$statut = false;
$email = $request->get('email', null);
if(!empty($email)){
$result = $this->em->getRepository(SignUp::class)->findOneBy([
"email" => $email
]);
if(!empty($result)){
$configMail = $this->em->getRepository(Emails::class)->findOneBy(["template_name" => "active-account"]);
if(!empty($configMail)){
$emailBody = (new GeneratorMail(new TemplatedEmail, $configMail))->setMail(
$email,
[
'mail' => $email,
'compagny_name' => $result->getCompagnieName(),
'link_activation' => $this->getParameter('app').$this->generateUrl('activation', ['email'=>$email, 'code'=>$result->getCodeActivation()]),
'code_activation' => $result->getCodeActivation(),
]
);
$mailer->send($emailBody);
$statut = true;
}
}
}
return new JsonResponse($statut);
}
/**
* @Route("/activation", name="app_activation")
*/
public function index(Request $request): Response
{
$success = false;
$email = $request->get('email', '');
$code = $request->get('code', '');
$form = $this->createForm(ActivationType::class, ['email'=>$email, 'code_activation'=>$code]);
$form->handleRequest($request);
if($form->isSubmitted() && $form->isValid()){
$params = $form->getData();
$result = $this->em->getRepository(SignUp::class)->findOneBy([
"email" => $params['email'],
"code_activation" => $params['code_activation'],
]);
if(empty($result)){
$message['fr'] = "Nous n'avons pas réussi à vous authentifier.";
$form->get('code_activation')->addError(new FormError($message['fr']));
}elseif($result->getStatut() == 1){
return $this->redirect($_ENV['APP_SOFT']);
}else{
$result->setStatut(1);
$result->setVisite(1);
$this->em->merge($result);
$this->em->flush();
$success = true;
}
//$this->em->persist($signUp);
//$this->em->flush();
//return $this->redirectToRoute('activation', ["email"=>$signUp->getEmail()]);
}
return $this->render('activation/index.html.twig', [
'form' => $form->createView(),
'email' => $email,
'code' => $code,
'success' => $success
]);
}
}