<?php
namespace App\Controller;
use App\Entity\SignUp;
use App\Entity\Subscribe;
use App\Entity\Emails\Emails;
use App\Entity\Emails\GeneratorMail;
use App\Entity\Leads\Leads;
use App\Entity\User;
use App\Form\SubscribeType;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bridge\Twig\Mime\TemplatedEmail;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\String\ByteString;
class SubscribeController extends AbstractController
{
protected $em;
public function __construct(EntityManagerInterface $entityManager)
{
$this->em = $entityManager;
}
/**
* @Route("/subscribe", name="app_subscribe")
*/
public function index(Request $request, UserPasswordHasherInterface $passwordHasher, MailerInterface $mailer): Response
{
$default['trial'] = !empty($request->query->get('trial')) ? $request->query->get('trial') : false;
$default['type'] = !empty($request->query->get('type')) ? $request->query->get('type') : $request->get('type');
$default['subscribe'] = !empty($request->query->get('subscribe')) ? $request->query->get('subscribe') : null;
$email = $lead['email'] = !empty($request->get('email')) ? $request->get('email') : '';
$lead['compagny_name'] = !empty($request->get('compagnie_name')) ? $request->get('compagnie_name') : '';
$lead['compagny_type'] = !empty($request->get('forme_juridique')) ? $request->get('forme_juridique') : '';
$lead['type_lead'] = !empty($request->get('typeLd')) ? $request->get('typeLd') : '';
$subscribes = $this->em->getRepository(Subscribe::class)->findBy(["statut"=>1, "default_sub"=>1]);
$this->em->getRepository(Leads::class)->setLead($lead);
$signUp = new SignUp;
$user = new User;
$signUp->setEmail($email);
$signUp->setCompagnieName($lead['compagny_name']);
$signUp->setFormeJuridique($lead['compagny_type']);
$form = $this->createForm(SubscribeType::class, $signUp);
$form->handleRequest($request);
if($form->isSubmitted() && $form->isValid()){
$password = $passwordHasher->hashPassword($signUp, $signUp->getMdpt());
$hashPro = (new ByteString)->fromRandom(32)->toString();
$email = $form["email"]->getData();
$user->setEmail($email);
$user->setUser($signUp->getNomResponsable());
$user->setMdpt($password);
$user->setAuthorization('["full"]');
$user->setHashPro($hashPro);
$code = strtoupper((new ByteString)->fromRandom(9)->toString());
$signUp->setCiviliteResponsable('M.');
$signUp->setMdpt($password);
$signUp->setHashPro($hashPro);
$signUp->setCodeActivation($code);
$signUp->setVisite(1);
$signUp->setStatut("0");
$this->em->persist($signUp);
$this->em->flush();
$this->em->persist($user);
$this->em->flush();
$id = $user->getId();
if(!empty($email) && !empty($code) && !empty($id)){
$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' => $form["compagnie_name"]->getData(),
'link_activation' => $this->getParameter('app').$this->generateUrl('activation', ['email'=>$email, 'code'=>$code]),
'code_activation' => $code,
]
);
$mailer->send($emailBody);
}
}
return $this->redirectToRoute('activation', ["email"=>$signUp->getEmail()]);
}
return $this->render('subscribe/index.html.twig', [
'form' => $form->createView(),
'trialDay' => 7,
'default' => $default,
'trialDate' => date('Y-m-d', strtotime('+ 7 DAYS')),
'subscribes' => $subscribes
]);
}
}