<?php
namespace App\Controller;
use App\Entity\Member;
use App\Entity\User;
use App\Entity\Address;
use App\Form\MemberType;
use DateTimeImmutable;
use App\Repository\MemberRepository;
use App\Repository\UserRepository;
use App\Repository\AddressRepository;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
/**
* @Route("/member")
*/
class MemberController extends AbstractController
{
/**
* @Route("/", name="app_member_index", methods={"GET"})
*/
public function index(MemberRepository $memberRepository): Response
{
return $this->render('member/index.html.twig', [
'members' => $memberRepository->findAll(),
]);
}
/**
* @Route("/new", name="app_member_new", methods={"GET", "POST"})
*/
public function new(Request $request,UserRepository $userRepository, MemberRepository $memberRepository ,AddressRepository $addressRepository, UserPasswordHasherInterface $userPasswordHasher): Response
{
$member = new Member();
$form = $this->createForm(MemberType::class, $member);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
//création du compte user
$user = new User();
$user->setEmail($form->get('email')->getData());
$user->setCreatedAt(new DateTimeImmutable());
$user->setUpdatedAt(new DateTimeImmutable());
$user->setIsVerified(false);
$user->setPassword(
$userPasswordHasher->hashPassword(
$user,
$request->request->get('password')
));
$userRoles = array("ROLE_USER","ROLE_MEMBER");
$user->setRoles($userRoles);
//création du membre
$member->setCreatedAt(new DateTimeImmutable());
$member->setUpdatedAt(new DateTimeImmutable());
$member->setUser($user);
if($request->request->get('active') == null)
{
$member->setActive(false);
$user->setActive(false);
}else{
$member->setActive(true);
$user->setActive(true);
}
//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, true);
$userRepository->add($user, true);
$member->setAddress($address);
$memberRepository->add($member, true);
return $this->redirectToRoute('app_member_index', [], Response::HTTP_SEE_OTHER);
}
return $this->renderForm('member/new.html.twig', [
'member' => $member,
'form' => $form,
]);
}
/**
* @Route("/{id}", name="app_member_show", methods={"GET"})
*/
public function show(Member $member): Response
{
return $this->render('member/show.html.twig', [
'member' => $member,
]);
}
/**
* @Route("/{id}/edit", name="app_member_edit", methods={"GET", "POST"})
*/
public function edit(Request $request, Member $member, MemberRepository $memberRepository, UserRepository $userRepository, AddressRepository $addressRepository): Response
{
$form = $this->createForm(MemberType::class, $member);
$form->handleRequest($request);
$user= $member->getUser();
if ($form->isSubmitted() && $form->isValid()) {
if($request->request->get('active') == 'on')
{
$member->setActive(true);
$user->setActive(true);
}else{
$member->setActive(false);
$user->setActive(false);
}
$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_member_index', [], Response::HTTP_SEE_OTHER);
}
return $this->renderForm('member/edit.html.twig', [
'member' => $member,
'address'=>$member->getAddress(),
'form' => $form,
]);
}
/**
* @Route("/{id}", name="app_member_delete", methods={"POST"})
*/
public function delete(Request $request, Member $member, MemberRepository $memberRepository): Response
{
if ($this->isCsrfTokenValid('delete'.$member->getId(), $request->request->get('_token'))) {
$memberRepository->remove($member, true);
}
return $this->redirectToRoute('app_member_index', [], Response::HTTP_SEE_OTHER);
}
}