diff --git a/src/Controller/UserController.php b/src/Controller/UserController.php index 3293c39..a2cd028 100644 --- a/src/Controller/UserController.php +++ b/src/Controller/UserController.php @@ -52,7 +52,7 @@ class UserController extends AbstractController $user = $entityManager->getRepository(User::class)->find($id); if (!$user) { - throw $this->createNotFoundException('User not found'); + throw $this->createNotFoundException(self::NOT_FOUND); } $userOrganizations = $this->userOrganizationService->getUserOrganizations($user); @@ -74,20 +74,16 @@ class UserController extends AbstractController $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { + //Data is a User object. App\Form\NewUserForm is a form type that maps to User entity $data = $form->getData(); // Handle user creation logic here - $user = new User(); - $user->setEmail($data['email']); - $user->setName($data['name']); - $user->setSurname($data['surname']); - $user->setPhoneNumber($data['number']); //FOR DEV PURPOSES ONLY - $user->setPictureUrl(""); - $user->setPassword($this->userService->generateRandomPassword()); + $data->setPictureUrl(""); + $data->setPassword($this->userService->generateRandomPassword()); //FOR DEV PURPOSES ONLY - $this->entityManager->persist($user); + $this->entityManager->persist($data); $this->entityManager->flush(); // Redirect to user index @@ -99,6 +95,69 @@ 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 + { + if (!$this->isGranted('ROLE_SUDALYS_ADMIN')) { + throw $this->createAccessDeniedException('Access denied'); + } + + $user = $entityManager->getRepository(User::class)->find($id); + if (!$user) { + throw $this->createNotFoundException(self::NOT_FOUND); + } + + return $this->render('user/edit.html.twig', [ + 'user' => $user, + ]); + } +// +// /** +// * PUT/PATCH /user/{id} - Update user +// */ +// #[Route('/{id}', name: 'update', methods: ['PUT', 'PATCH'], requirements: ['id' => '\d+'])] +// public function update(int $id, Request $request, EntityManagerInterface $entityManager): Response +// { +// if (!$this->isGranted('ROLE_SUDALYS_ADMIN')) { +// throw $this->createAccessDeniedException('Access denied'); +// } +// +// $user = $entityManager->getRepository(User::class)->find($id); +// if (!$user) { +// throw $this->createNotFoundException(self::NOT_FOUND); +// } +// +// // Handle user update logic +// // Validate, persist, flush, redirect +// +// return $this->redirectToRoute('user_show', ['id' => $id]); +// } +// +// /** +// * DELETE /user/{id} - Delete user +// */ +// #[Route('/{id}', name: 'delete', methods: ['DELETE'], requirements: ['id' => '\d+'])] +// public function delete(int $id, EntityManagerInterface $entityManager): Response +// { +// if (!$this->isGranted('ROLE_SUDALYS_ADMIN')) { +// throw $this->createAccessDeniedException('Access denied'); +// } +// +// $user = $entityManager->getRepository(User::class)->find($id); +// if (!$user) { +// throw $this->createNotFoundException(self::NOT_FOUND)); +// } +// +// // Handle user deletion logic +// $entityManager->remove($user); +// $entityManager->flush(); +// +// return $this->redirectToRoute('user_index'); +// } + #[Route('/deactivate/{id}', name: 'deactivate', methods: ['GET'])] public function userDeactivate(Request $request, EntityManagerInterface $entityManager): Response @@ -107,7 +166,7 @@ class UserController extends AbstractController $userId = $request->attributes->get('id'); $user = $entityManager->getRepository(User::class)->find($userId); if (!$user) { - throw $this->createNotFoundException('User not found'); + throw $this->createNotFoundException(self::NOT_FOUND); } $user->setIsActive(false); $entityManager->persist($user); diff --git a/src/Entity/User.php b/src/Entity/User.php index 6774661..6797b7c 100644 --- a/src/Entity/User.php +++ b/src/Entity/User.php @@ -9,7 +9,9 @@ use Doctrine\DBAL\Types\Types; use Doctrine\ORM\Mapping as ORM; use Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface; use Symfony\Component\Security\Core\User\UserInterface; +use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity; +#[UniqueEntity(fields: ['email'], message: 'This email address is already in use.')] #[ORM\Entity(repositoryClass: UserRepository::class)] #[ORM\Table(name: '`user`')] #[ORM\UniqueConstraint(name: 'UNIQ_IDENTIFIER_EMAIL', fields: ['email'])] diff --git a/src/Form/NewUserForm.php b/src/Form/NewUserForm.php index 56ecf36..ba9b95b 100644 --- a/src/Form/NewUserForm.php +++ b/src/Form/NewUserForm.php @@ -2,10 +2,12 @@ namespace App\Form; +use App\Entity\User; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\Extension\Core\Type\EmailType; use Symfony\Component\Form\Extension\Core\Type\TextType; use Symfony\Component\Form\FormBuilderInterface; +use Symfony\Component\OptionsResolver\OptionsResolver; class NewUserForm extends AbstractType { @@ -15,6 +17,13 @@ class NewUserForm extends AbstractType ->add('email', EmailType::class, ['required' => true, 'label' => 'Email*']) ->add('name', TextType::class, ['required' => true, 'label' => 'Prénom*']) ->add('surname', TextType::class, ['required' => true, 'label' => 'Nom*']) - ->add('number', TextType::class, ['required' => false, 'label' => 'Numéro de téléphone']); + ->add('phoneNumber', TextType::class, ['required' => false, 'label' => 'Numéro de téléphone']); + } + + public function configureOptions(OptionsResolver $resolver): void + { + $resolver->setDefaults([ + 'data_class' => User::class, + ]); } }