<?php
namespace App\Controller\Front;
use App\Entity\Referee;
use App\ImageOptimizer;
use App\Security\EmailVerifier;
use App\Form\RegistrationFormType;
use Symfony\Component\Mime\Address;
use App\Repository\RefereeRepository;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bridge\Twig\Mime\TemplatedEmail;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Security\Core\Security;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\String\Slugger\AsciiSlugger;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
use SymfonyCasts\Bundle\VerifyEmail\Exception\VerifyEmailExceptionInterface;
class RegistrationController extends AbstractController
{
private EmailVerifier $emailVerifier;
public function __construct(EmailVerifier $emailVerifier)
{
$this->emailVerifier = $emailVerifier;
}
#[Route('/register', name: 'app_register')]
public function register(Request $request, UserPasswordHasherInterface $userPasswordHasher, EntityManagerInterface $entityManager, ImageOptimizer $imageOptimizer): Response
{
if ($this->getUser()) {
return $this->redirectToRoute('index');
}
// if($request->request->get('reponsecaptcha')) {
// // Connecter à Google avec les clés
// $recaptcha_url = 'https://www.google.com/recaptcha/api/siteverify';
// $recaptcha_secret = '6Lf_McYqAAAAAKfaSj8d8sItDN7tEUz0W_ClFinZ';
// $recaptcha_response = $request->request->get('reponsecaptcha');
// // Décoder les informations récupérées
// $recaptcha = file_get_contents($recaptcha_url . '?secret=' . $recaptcha_secret . '&response=' . $recaptcha_response);
// $recaptcha = json_decode($recaptcha);
// if ($recaptcha->score < 0.5) {
// return $this->redirectToRoute('index');
// }
// }
$user = new Referee();
$form = $this->createForm(RegistrationFormType::class, $user);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
// if (229 == $user->country->id) {
// echo "is ven";
// }
// echo "is not";;
$slugger = new AsciiSlugger();
$slug = $slugger->slug($user->getFirstname().' '.$user->getLastname());
$avatar = $form['avatar']->getData();
if($avatar) {
$avatar_name = 'profil_'.$slug.'.'.$avatar->guessExtension();
$avatar->move($this->getParameter('img_path').'/profiles', $avatar_name);
$user->setAvatar($avatar_name);
$imageOptimizer->resize($this->getParameter('img_path').'/profiles/'.$avatar_name, $this->getParameter('img_size_profil'));
}
$badge = $form['kyorugiIRCard']->getData();
if($badge) {
$badge_name = 'badge_kyorugi_'.$slug.'.'.$badge->guessExtension();
$badge->move($this->getParameter('img_path').'/badges', $badge_name);
$user->setKyorugiIRCard($badge_name);
$imageOptimizer->resize($this->getParameter('img_path').'/badges/'.$badge_name);
}
$badge = $form['poomsaeIRCard']->getData();
if($badge) {
$badge_name = 'badge_poomsae_'.$slug.'.'.$badge->guessExtension();
$badge->move($this->getParameter('img_path').'/badges', $badge_name);
$user->setPoomsaeIRCard($badge_name);
$imageOptimizer->resize($this->getParameter('img_path').'/badges/'.$badge_name);
}
// encode the plain password
$user->setPassword(
$userPasswordHasher->hashPassword(
$user,
$form->get('plainPassword')->getData()
)
);
$user->setActive(0);
$entityManager->persist($user);
$entityManager->flush();
// generate a signed url and email it to the user
$this->emailVerifier($user);
// do anything else you need here, like send an email
return $this->redirectToRoute('index');
}
return $this->render('Front/registration/register.html.twig', [
'registrationForm' => $form->createView(),
]);
}
#[Route('/verify/email', name: 'app_verify_email')]
public function verifyUserEmail(Request $request, RefereeRepository $refereeRepository): Response
{
$id = $request->get('id');
if (null === $id) {
return $this->redirectToRoute('app_register');
}
$user = $refereeRepository->find($id);
if (null === $user) {
return $this->redirectToRoute('app_register');
}
// validate email confirmation link, sets User::isVerified=true and persists
try {
$this->emailVerifier->handleEmailConfirmation($request, $user);
} catch (VerifyEmailExceptionInterface $exception) {
$this->addFlash('danger', $exception->getReason());
return $this->redirectToRoute('app_register');
}
// @TODO Change the redirect on success and handle or remove the flash message in your templates
$this->addFlash('success', 'Your email address has been verified.');
return $this->redirectToRoute('index');
}
#[Route('/profil', name: 'profil')]
public function profil(Request $request, UserPasswordHasherInterface $userPasswordHasher, EntityManagerInterface $entityManager, RefereeRepository $refereeRepository, Security $security, ImageOptimizer $imageOptimizer): Response
{
$user = $refereeRepository->find($security->getUser());
$avatar_old = $user->getAvatar();
$kyorugi_old = $user->getKyorugiIRCard();
$poomsae_old = $user->getPoomsaeIRCard();
$form = $this->createForm(RegistrationFormType::class, $user);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$slugger = new AsciiSlugger();
$slug = $slugger->slug($user->getFirstname().' '.$user->getLastname());
$avatar = $form['avatar']->getData();
if($avatar) {
$avatar_name = 'profil_'.$slug.'.'.$avatar->guessExtension();
$avatar->move($this->getParameter('img_path').'/profiles', $avatar_name);
$user->setAvatar($avatar_name);
$imageOptimizer->resize($this->getParameter('img_path').'/profiles/'.$avatar_name, $this->getParameter('img_size_profil'));
} else {
$user->setAvatar($avatar_old);
}
$badge = $form['kyorugiIRCard']->getData();
if($badge) {
$badge_name = 'badge_kyorugi_'.$slug.'.'.$badge->guessExtension();
$badge->move($this->getParameter('img_path').'/badges', $badge_name);
$user->setKyorugiIRCard($badge_name);
$imageOptimizer->resize($this->getParameter('img_path').'/badges/'.$badge_name);
} else {
$user->setKyorugiIRCard($kyorugi_old);
}
$badge = $form['poomsaeIRCard']->getData();
if($badge) {
$badge_name = 'badge_poomsae_'.$slug.'.'.$badge->guessExtension();
$badge->move($this->getParameter('img_path').'/badges', $badge_name);
$user->setPoomsaeIRCard($badge_name);
$imageOptimizer->resize($this->getParameter('img_path').'/badges/'.$badge_name);
} else {
$user->setPoomsaeIRCard($poomsae_old);
}
// encode the plain password
$user->setPassword(
$userPasswordHasher->hashPassword(
$user,
$form->get('plainPassword')->getData()
)
);
$entityManager->persist($user);
$entityManager->flush();
return $this->redirectToRoute('index');
}
return $this->render('Front/registration/register.html.twig', [
'registrationForm' => $form->createView(),
]);
}
#[Route('/resendverify', name: 'emailverify')]
public function resendverify(Security $security)
{
$user = $security->getUser();
$this->emailVerifier($user);
return $this->redirectToRoute('index');
}
private function emailVerifier($user)
{
$this->emailVerifier->sendEmailConfirmation('app_verify_email', $user,
(new TemplatedEmail())
->from(new Address('contact@africatkdreferee.com', 'Referees Africa'))
->to($user->getEmail())
->subject('Please Confirm your Email')
->htmlTemplate('Front/registration/confirmation_email.html.twig')
);
}
}