<?php
namespace App\Controller;
use DateTime;
use App\Entity\User;
use App\Entity\Member;
use App\Entity\Address;
use App\Form\MemberType;
use App\Form\UserType;
use DateTimeImmutable;
use App\Security\EmailVerifier;
use App\Repository\UserRepository;
use App\Repository\MemberRepository;
use App\Repository\AddressRepository;
use Symfony\Bridge\Twig\Mime\TemplatedEmail;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
use App\Security\UserAuthenticator;
use Symfony\Component\Security\Http\Authentication\UserAuthenticatorInterface;
use SymfonyCasts\Bundle\VerifyEmail\Exception\VerifyEmailExceptionInterface;
/**
* @Route("/user")
*/
class UserController extends AbstractController
{
/* private EmailVerifier $emailVerifier;
public function __construct(EmailVerifier $emailVerifier)
{
$this->emailVerifier = $emailVerifier;
}*/
/**
* @Route("/", name="app_user_index", methods={"GET"})
*/
public function index(UserRepository $userRepository): Response
{
return $this->render('user/index.html.twig', [
'users' => $userRepository->findAll(),
]);
}
/**
* @Route("/new", name="app_user_new", methods={"GET", "POST"})
*/
public function newMember(Request $request, UserRepository $userRepository, MemberRepository $memberRepository, AddressRepository $addressRepository , UserPasswordHasherInterface $userPasswordHasher,UserAuthenticatorInterface $userAuthenticator, UserAuthenticator $authenticator): Response
{
$user = new User();
$form = $this->createForm(UserType::class, $user);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
//$rolesForm = $request->request->get('roles') ;
//création du compte user
$user->setCreatedAt(new DateTimeImmutable());
$user->setUpdatedAt(new DateTimeImmutable());
$user->setIsVerified(false);
$user->setPassword(
$userPasswordHasher->hashPassword(
$user,
$form->get('password')->getData()
));
//création du compte member
$member = new Member();
$member->setFirstName($request->request->get('firstName'));
$member->setLastName($request->request->get('lastName'));
$member->setEmail($form->get('email')->getData());
$member->setPhone($request->request->get('phone'));
$member->setBirthDate(\DateTime::createFromFormat('Y-m-d', $request->request->get('birthDate')));
$member->setSexe($request->request->get('sexe'));
$member->setCreatedAt(new DateTimeImmutable());
$member->setUpdatedAt(new DateTimeImmutable());
$member->setActive(false);
$member->setUser($user);
//création de l'adresse
$address =new Address();
$address->setStreet($request->request->get('street'));
$address->setNumber($request->request->get('number'));
$address->setCountry($request->request->get('country'));
$address->setPostcode($request->request->get('postcode'));
$address->setCreatedAt(new DateTimeImmutable());
$address->setUpdatedAt(new DateTimeImmutable());
$address->setActive(true);
$addressRepository->add($address);
$member->setAddress($address);
$userRoles = array("ROLE_USER","ROLE_MEMBER");
$user->setRoles($userRoles);
$memberRepository->add($member);
$userRepository->add($user, true);
// generate a signed url and email it to the user
/*$this->emailVerifier->sendEmailConfirmation('app_verify_email', $user,
(new TemplatedEmail())
->from(new Address('bot@coaching-village.fitness', 'Coaching Village Bot'))
->to($user->getEmail())
->subject('Confirmaion de votre Email pour la validation de votre compte')
->htmlTemplate('registration/confirmation_email.html.twig')
);*/
return $this->redirectToRoute('app_user_index', [], Response::HTTP_SEE_OTHER);
}
return $this->render('user/new.html.twig', [
'user' => $user,
'form' => $form->createView(),
]);
}
/**
* @Route("/{id}", name="app_user_show", methods={"GET"})
*/
public function show(User $user): Response
{
return $this->render('user/show.html.twig', [
'user' => $user,
]);
}
/**
* @Route("/{id}/edit", name="app_user_edit", methods={"GET", "POST"})
*/
public function edit(Request $request, User $user,UserPasswordHasherInterface $userPasswordHasher, AddressRepository $addressRepository, UserRepository $userRepository, MemberRepository $memberRepository): Response
{
$member = $memberRepository->findByUser($user);
$form = $this->createForm(MemberType::class, $member);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$member->setUpdatedAt(new DateTimeImmutable());
$user->setUpdatedAt(new DateTimeImmutable());
//modification de l'adresse
$address = $member->getAddress();
$address->setStreet($request->request->get('street'));
$address->setNumber($request->request->get('number'));
$address->setCountry($request->request->get('country'));
$address->setPostcode($request->request->get('postcode'));
$address->setUpdatedAt(new DateTimeImmutable());
$addressRepository->add($address, true);
$userRepository->add($user, true);
$memberRepository->add($member, true);
return $this->redirectToRoute('app_user_index', [], Response::HTTP_SEE_OTHER);
}
return $this->renderForm('user/edit.html.twig', [
'user' => $user,
'member'=>$member,
'address'=>$member->getAddress(),
'form' => $form,
]);
}
/**
* @Route("/{id}", name="app_user_delete", methods={"POST"})
*/
public function delete(Request $request, User $user, UserRepository $userRepository): Response
{
$user->setActive(false);
$userRepository->add($user,true);
return $this->redirectToRoute('app_user_index', [], Response::HTTP_SEE_OTHER);
}
/*
public function delete(Request $request, User $user, UserRepository $userRepository): Response
{
if ($this->isCsrfTokenValid('delete'.$user->getId(), $request->request->get('_token'))) {
$userRepository->remove($user, true);
}
return $this->redirectToRoute('app_user_index', [], Response::HTTP_SEE_OTHER);
}*/
}