ParametersController.php 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\User;
  4. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  5. use Symfony\Component\HttpFoundation\Response;
  6. use Symfony\Component\Routing\Annotation\Route;
  7. use Symfony\Component\Form\Extension\Core\Type\PasswordType;
  8. use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
  9. use Symfony\Component\Form\Extension\Core\Type\TextareaType;
  10. use Symfony\Component\Form\Extension\Core\Type\RepeatedType;
  11. use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
  12. use Symfony\Component\HttpFoundation\Request;
  13. class ParametersController extends AbstractController
  14. {
  15. #[Route('/profile/{username}/parameters', name: 'parameters')]
  16. public function index(Request $request, UserPasswordEncoderInterface $encoder): Response
  17. {
  18. // Connexion à la BDD et récuperation de l'utilisateur
  19. $sessionUser = $this->get('session')->get('user');
  20. $em = $this->getDoctrine()->getManager();
  21. $repository_profile = $em->getRepository(User::class);
  22. $sessionUser = $this->get('session')->get('user');
  23. $profile = $repository_profile->findOneBy(array('username' => $sessionUser));
  24. // Création du formulaire
  25. $values = array(
  26. 'description' => $profile->getDescription(),
  27. 'profil_prive' => $profile->getIsPrivate(),
  28. );
  29. $formBuilder = $this->createFormBuilder($values);
  30. // Ajout des champs
  31. $formBuilder
  32. ->add('mot_de_passe', RepeatedType::class, array(
  33. 'type' => PasswordType::class,
  34. 'required' => false,
  35. 'first_options' => array('label' => 'Changer le mot de passe'),
  36. 'second_options' => array('label' => 'Répéter le nouveau mot de passe')
  37. ))
  38. ->add('description', TextareaType::class, ['required' => false, 'label' => 'Changer la description'])
  39. ->add('profil_prive', CheckboxType::class, ['required' => false, 'label' => 'Profil privé'])
  40. ->setAction($this->generateUrl('parameters', array('username' => $sessionUser)));
  41. // Génération du formulaire
  42. $form = $formBuilder->getForm();
  43. // Initialisation du message
  44. $message = "";
  45. // Si le formulaire modifié est envoyé (POST)
  46. if ($request->getMethod() == 'POST') {
  47. $form->handleRequest($request);
  48. if ($form->isValid()) {
  49. if ($form->get('mot_de_passe')->getData()) {
  50. $encoded_passwd = $encoder->encodePassword($profile, $form->get('mot_de_passe')->getData());
  51. $profile->setPassword($encoded_passwd);
  52. }
  53. $profile->setIsPrivate($form->get("profil_prive")->getData());
  54. $profile->setDescription($form->get('description')->getData());
  55. $em->persist($profile);
  56. $em->flush();
  57. $message = "Profil modifié.";
  58. }
  59. }
  60. return $this->render('parameters/index.html.twig', [
  61. 'form' => $form->createView(),
  62. 'username' => $sessionUser,
  63. 'message' => $message,
  64. ]);
  65. }
  66. }