diff --git a/src/Controller/UserController.php b/src/Controller/UserController.php index 22c5fff..7596ece 100644 --- a/src/Controller/UserController.php +++ b/src/Controller/UserController.php @@ -4,6 +4,7 @@ namespace App\Controller; use App\Entity\User; use App\Entity\UsersOrganizations; +use App\Form\EditUserForm; use App\Form\NewUserForm; use App\Service\UserOrganizationService; use App\Service\UserService; @@ -99,19 +100,36 @@ class UserController extends AbstractController /** * GET /user/{id}/edit - Show form to edit user */ - #[Route('/{id}/edit', name: 'edit', requirements: ['id' => '\d+'], methods: ['GET'])] - public function edit(int $id, EntityManagerInterface $entityManager): Response + #[Route('/{id}/edit', name: 'edit', requirements: ['id' => '\d+'], methods: ['GET', 'POST'])] + public function edit(int $id, EntityManagerInterface $entityManager, Request $request): Response { + //Handle access control if (!$this->isGranted('ROLE_SUDALYS_ADMIN')) { throw $this->createAccessDeniedException('Access denied'); } + //Fetch user by ID and handle not found case $user = $entityManager->getRepository(User::class)->find($id); if (!$user) { throw $this->createNotFoundException(self::NOT_FOUND); } + //Create form for editing user + $form = $this->createForm(EditUserForm::class, $user); + + //Handle form submission + $form->handleRequest($request); + if ($form->isSubmitted() && $form->isValid()) { + //Persist changes to the user entity + $entityManager->persist($user); + $entityManager->flush(); + + //Redirect to user profile after successful edit + return $this->redirectToRoute('user_show', ['id' => $user->getId()]); + } + return $this->render('user/edit.html.twig', [ + 'form' => $form->createView(), 'user' => $user, ]); } diff --git a/src/Form/EditUserForm.php b/src/Form/EditUserForm.php new file mode 100644 index 0000000..1bcbf9f --- /dev/null +++ b/src/Form/EditUserForm.php @@ -0,0 +1,40 @@ +add('name', TextType::class, [ + 'label' => 'Prénom*', + 'required' => true, + ]) + ->add('surname', TextType::class, [ + 'label' => 'Nom*', + 'required' => true, + ]) + ->add('email', EmailType::class, [ + 'label' => 'Email*', + 'required' => true, + ]) + ->add('phoneNumber', TextType::class, [ + 'label' => 'Numéro de téléphone', + 'required' => false, + ]); + } + + public function configureOptions(\Symfony\Component\OptionsResolver\OptionsResolver $resolver): void + { + $resolver->setDefaults([ + 'data_class' => \App\Entity\User::class, + ]); + } + + +} diff --git a/templates/elements/userInformation.html.twig b/templates/elements/userInformation.html.twig index 8dbe968..228e6ba 100644 --- a/templates/elements/userInformation.html.twig +++ b/templates/elements/userInformation.html.twig @@ -1,8 +1,9 @@ {% block body %}
Email: {{ user.email }}
@@ -12,4 +13,4 @@