src/Controller/Compte/ProfilController.php line 59

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. /**
  4.  * @author Mehrez Labidi
  5.  */
  6. namespace App\Controller\Compte;
  7. use App\Services\MetaTag;
  8. use App\Services\Compte\Profil\ProfilManagers;
  9. use App\Controller\EntityUsingController;
  10. use Symfony\Component\HttpFoundation\Request;
  11. use Symfony\Component\HttpFoundation\Response;
  12. use Doctrine\ORM\EntityManagerInterface;
  13. use App\Form\Type\Compte\{
  14.     ProfilType
  15. };
  16. use App\Entity\Utilisateur;
  17. use App\Entity\UtilisateursNewsletter;
  18. use App\Entity\UtilisateursNewsletterPartenaires;
  19. use App\Entity\UtilisateursNewsletterPDC;
  20. use App\Services\Mailer;
  21. use Symfony\Bridge\Twig\Mime\TemplatedEmail;
  22. use Symfony\Component\Mailer\MailerInterface;
  23. use Symfony\Component\Mime\Address;
  24. use App\Helper\TransProvider;
  25. class ProfilController extends EntityUsingController {
  26.     private $am;
  27.     /**
  28.      * @var MetaTag
  29.      */
  30.     private $metaTag;
  31.     
  32.     /**
  33.      * @var TransProvider
  34.      */
  35.     private $transProvider;
  36.     /**
  37.      * @var EntityManagerInterface
  38.      */
  39.     protected $em;
  40.     /**
  41.      * 
  42.      * @param AnnoncesManagers $am
  43.      */
  44.     public function __construct(EntityManagerInterface $emProfilManagers $amMetaTag $metaTagTransProvider $transProvider) {
  45.         $this->am $am;
  46.         $this->em $em;
  47.         $this->metaTag $metaTag;
  48.         $this->transProvider $transProvider;
  49.     }
  50.     public function modifierProfil(Request $requestMailerInterface $mailer$codePays): Response {
  51.         $this->denyAccessUnlessGranted('ROLE_USER'); //  page inaccessible sans authentification
  52.         $user $this->getUser();
  53.        
  54.         $form $this->createForm(ProfilType::class, null, [
  55.             'action' => $this->generateUrl(
  56.                     $request->attributes->get('_route'),
  57.                     [
  58.                         'codePays' => $codePays,
  59.                     ]
  60.             ),
  61.             'method' => 'POST',
  62.         ]);
  63.         if ($request->isMethod('POST')) {
  64.             $form->submit($request->request->get($form->getName()));
  65.             if ($form->isSubmitted() && $form->isValid()) {
  66.                 $data $form->getData();
  67.                 if ($form->getClickedButton()->getName() === "submit_profil_form") {
  68.                     unset($data["password"]);
  69.                     unset($data["new_password"]);
  70.                     unset($data["email"]);
  71.                     $this->am->updateProfil($data$user);
  72.                     $this->addFlash('success_profil''Vos coordonnées sont modifiées');
  73.                 }
  74.                 if ($form->getClickedButton()->getName() === "submit_password_form") {
  75.                     $arr = [
  76.                         "password" => $data["password"],
  77.                         "new_password" => $data["new_password"],
  78.                     ];
  79.                     $this->am->updateProfil($arr$user);
  80.                     $this->addFlash('success_password''Votre mot de passe est modifié');
  81.                 }
  82.                 if ($form->getClickedButton()->getName() === "submit_email_form") {
  83.                     // Variable pour savoir si on continue les vérifications, si false, on ne vérifie plus
  84.                     $proceed true;
  85.                     
  86.                     // Si les emails sont identiques, on ajoute une erreur
  87.                     if ($user->email_utilisateur == $form->get('email')->getData()) {
  88.                         $form->get('email')->addError(new \Symfony\Component\Form\FormError('Adresse email identique'));
  89.                         $proceed false// On a déjà une erreur, inutile de continuer les vérifications
  90.                     }
  91.                     
  92.                     // Si la première vérification est bonne, on continue les autres vérifications
  93.                     if ($proceed) {
  94.                         // On verifie ensuite si l'adresse email est déjà utilisée
  95.                         $emailExists $this->em->getRepository(Utilisateur::class)->findOneBy(['email_utilisateur' => $form->get('email')->getData()]);
  96.                         
  97.                         // Si adresse déjà utilisée, on ajoute une erreur
  98.                         if ($emailExists) {
  99.                             $form->get('email')->addError(new \Symfony\Component\Form\FormError('Adresse email indisponible'));
  100.                         }
  101.                     }
  102.                     
  103.                     // Si le formulaire est valide et aucune erreur n'a été ajoutée
  104.                     if ($form->isValid()) {
  105.                         $oldEmail $user->email_utilisateur;
  106.                         $newEmail $data["email"];
  107.                         $arr = [
  108.                             "email" => $newEmail,
  109.                         ];
  110.                         
  111.                         // On sauvegarde l'adresse email
  112.                         $this->am->updateProfil($arr$user);
  113.                         $this->addFlash('success_email''Votre adresse email a été mise à jour');
  114.                         
  115.                         // On met à jour avec la nouvelle adresse email les newsletters si elles existent
  116.                         $newsletter $this->em->getRepository(UtilisateursNewsletter::class)->findOneBy(['email' => $oldEmail'etat_utilisateur' => 'inscrit']);
  117.                         
  118.                         if ($newsletter) {
  119.                             $newsletter->_set('email'$newEmail);
  120.                             $this->em->persist($newsletter);
  121.                             $this->em->flush();
  122.                         }
  123.                         
  124.                         $newsletter_partenaire $this->em->getRepository(UtilisateursNewsletterPartenaires::class)->findOneBy(['email' => $oldEmail]);
  125.                         
  126.                         if ($newsletter_partenaire) {
  127.                             $newsletter_partenaire->_set('email'$newEmail);
  128.                             $this->em->persist($newsletter_partenaire);
  129.                             $this->em->flush();
  130.                         }
  131.                         
  132.                         $newsletter_pdc $this->em->getRepository(UtilisateursNewsletterPDC::class)->findOneBy(['email' => $oldEmail]);
  133.                         
  134.                         if ($newsletter_pdc) {
  135.                             $newsletter_pdc->_set('email'$newEmail);
  136.                             $this->em->persist($newsletter_pdc);
  137.                             $this->em->flush();
  138.                         }
  139.                         
  140.                         // On envoie un mail sur l'ancienne adresse email pour notifier du changement
  141.                         $email = (new TemplatedEmail())
  142.                             ->from(new Address(Mailer::$senderAdress['notification'], Mailer::$senderAlias['notification']))
  143.                             ->to($oldEmail)
  144.                             ->subject($this->transChoice("<important> Vous venez de modifier votre adresse email sur FUSACQ"))
  145.                             ->htmlTemplate('compte/profil/email.html.twig')
  146.                             ->context([
  147.                                 'oldEmail' => $oldEmail,
  148.                                 'newEmail' => $newEmail
  149.                             ]);
  150.                         
  151.                         $mailer->send($email);
  152.                     }
  153.                 }
  154.             } else {
  155.                 if ($form->getClickedButton()->getName() === "submit_profil_form") {
  156.                     $this->addFlash('echec_profil'"Certains champs sont vides ou invalides.");
  157.                 }
  158.                 if ($form->getClickedButton()->getName() === "submit_password_form") {
  159.                     $this->addFlash('echec_password''Le mot de passe est invalide');
  160.                 }
  161.                 if ($form->getClickedButton()->getName() === "submit_email_form") {
  162.                     $this->addFlash('echec_email'"L'adresse email est invalide");
  163.                 }
  164.             }
  165.         }
  166.         $metaTag $this->metaTag
  167.                 ->setTitle("Compte / Mon profil")
  168.                 ->setDescription("Compte / Mon profil");
  169.         
  170.         return $this->render('compte/profil/modifier-profil.html.twig', [
  171.                     'form' => $form->createView(), 'metaTag' => $metaTag,
  172.         ]);
  173.     }
  174.     /**
  175.      * @param $var
  176.      * @return mixed|string
  177.      */
  178.     private function transChoice($var)
  179.     {
  180.         if (is_string($var)) {
  181.             $var $this->transProvider
  182.             ->translate($var"""M");
  183.         }
  184.         if (is_array($var)) {
  185.             foreach ($var as $key => $item) {
  186.                 unset($var[$key]);
  187.                 $key $this->transProvider
  188.                 ->translate($key"""M");
  189.                 $var[$key] = $item;
  190.             }
  191.         }
  192.         return $var;
  193.     }
  194. }