src/Controller/ResetPasswordController.php line 27

Open in your IDE?
  1. <?php
  2. // src/Controller/ResetPasswordController.php
  3. namespace App\Controller;
  4. use App\Entity\User;
  5. use App\Entity\Order;
  6. use App\Entity\TypeAbonnement;
  7. use App\Form\ResetPasswordRequestFormType;
  8. use Doctrine\ORM\EntityManagerInterface;
  9. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  10. use Symfony\Component\HttpFoundation\Request;
  11. use Symfony\Component\HttpFoundation\Response;
  12. use Symfony\Component\Mailer\MailerInterface;
  13. use Symfony\Component\Mime\Email;
  14. use Symfony\Component\Routing\Annotation\Route;
  15. use Symfony\Component\Uid\Uuid;
  16. use Symfony\Component\HttpFoundation\Session\Flash\FlashBagInterface;
  17. use Symfony\Component\HttpFoundation\JsonResponse;
  18. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  19. use App\Entity\Abonnement;
  20. class ResetPasswordController extends AbstractController
  21. {
  22.     #[Route('/reset-password'name'app_reset_password_request')]
  23.     public function request(Request $requestEntityManagerInterface $entityManagerMailerInterface $mailer): Response
  24.     {
  25.         $form $this->createForm(ResetPasswordRequestFormType::class);
  26.         $form->handleRequest($request);
  27.         if ($form->isSubmitted() && $form->isValid()) {
  28.             $email $form->get('email')->getData();
  29.             $user $entityManager->getRepository(User::class)->findOneBy(['email' => $email]);
  30.             if ($user) {
  31.                 // Génération du jeton et date d'expiration
  32.                 $resetToken Uuid::v4();
  33.                 $user->setResetToken($resetToken);
  34.                 $user->setResetTokenExpiresAt(new \DateTime('+1 hour'));
  35.                 $entityManager->persist($user);
  36.                 $entityManager->flush();
  37.                 // Envoi de l'e-mail avec le lien de réinitialisation
  38.                 $resetUrl $this->generateUrl('app_reset_password', ['token' => $resetToken], 0);
  39.                 $email = (new Email())
  40.                     ->from('no-reply@cassaclock.com')
  41.                     ->replyTo('no-reply@cassaclock.com')
  42.                     ->to($user->getEmail())
  43.                     ->subject('Réinitialisation de mot de passe')
  44.                     ->html("Bonjour,<br/>
  45.                     Suivre le lien suivant pour réinitialiser votre mot de passe : 
  46.                             <a href='$resetUrl'>$resetUrl</a><br/><br/>Cdt, Cassa Clock");
  47.                 $mailer->send($email);
  48.                 $this->addFlash('success''Un lien de réinitialisation a été envoyé à votre adresse e-mail.');
  49.             }
  50.             return $this->redirectToRoute('app_login');
  51.         }
  52.         return $this->render('reset_password/request.html.twig', [
  53.             'requestForm' => $form->createView(),
  54.         ]);
  55.     }
  56.     #[Route('/reset-password-admin'name'app_reset_password_request_admin')]
  57.     public function requestAdmin(Request $requestEntityManagerInterface $entityManagerMailerInterface $mailer): Response
  58.     {
  59.         $form $this->createForm(ResetPasswordRequestFormType::class);
  60.         $form->handleRequest($request);
  61.         if ($form->isSubmitted() && $form->isValid()) {
  62.             $email $form->get('email')->getData();
  63.             $user $entityManager->getRepository(User::class)->findOneBy(['email' => $email]);
  64.             if ($user) {
  65.                 // Génération du jeton et date d'expiration
  66.                 $resetToken Uuid::v4();
  67.                 $user->setResetToken($resetToken);
  68.                 $user->setResetTokenExpiresAt(new \DateTime('+1 hour'));
  69.                 $entityManager->persist($user);
  70.                 $entityManager->flush();
  71.                 // Envoi de l'e-mail avec le lien de réinitialisation
  72.                 $resetUrl $this->generateUrl('app_reset_password', ['token' => $resetToken], 0);
  73.                 $email = (new Email())
  74.                     ->from('no-reply@cassaclock.com')
  75.                     ->replyTo('no-reply@cassaclock.com')
  76.                     ->to($user->getEmail())
  77.                     ->subject('Réinitialisation de mot de passe')
  78.                     ->html("Bonjour,<br/>
  79.                     Suivre le lien suivant pour réinitialiser votre mot de passe : 
  80.                             <a href='$resetUrl'>$resetUrl</a><br/><br/>Cdt, Cassa Clock");
  81.                 $mailer->send($email);
  82.                 $this->addFlash('success''Un lien de réinitialisation a été envoyé à votre adresse e-mail.');
  83.             }
  84.             return $this->redirectToRoute('app_login');
  85.         }
  86.         return $this->render('reset_password/requestadmin.html.twig', [
  87.             'requestForm' => $form->createView(),
  88.         ]);
  89.     }
  90.     #[Route('/paiementpaypal/success'name'paiementpaypal_success')]
  91. public function paiementpaypalSuccess(Request $request,
  92. EntityManagerInterface $em
  93. ): JsonResponse
  94. {
  95. /*
  96.     $data = $request->getSession()->get('paypal_payment_data_abonnement', []);
  97.             
  98.     //$idpay = $data['idpay'];
  99.     $amount = $data['amount'];*/
  100.     $userId $request->query->get('userId');
  101.     $amount $request->query->get('amount');
  102.     if (!$userId || !is_numeric($userId)) {
  103.         return $this->json(['error' => 'userId manquant ou invalide'], 400);
  104.     }
  105.     $user $em->getRepository(User::class)->find($userId);
  106.     
  107.     if ($amount && $amount 10) {
  108.         $typeabonnement =  $em->getRepository(TypeAbonnement::class)->findOneBy(['libelle' => 'Ndimnal']);
  109.     }
  110.         
  111.     else if
  112.     (14 $amount  && $amount 20){
  113.         $typeabonnement =  $em->getRepository(TypeAbonnement::class)->findOneBy(['libelle' => 'Xarit']);
  114.     }
  115.     
  116.     else if (27 $amount  && $amount 35){
  117.         $typeabonnement =  $em->getRepository(TypeAbonnement::class)->findOneBy(['libelle' => 'Téranga']);
  118.     }
  119. if ($typeabonnement != null && $user != null)
  120.         {
  121.         // 3. Création de la commande (order)
  122.         $order = new Order();
  123.         $order->setAmount($amount);
  124.         $order->setCurrency('USD');
  125.         $order->setPaymentId('paypal-' uniqid()); // ID unique
  126.         $order->setPayerEmail(''); // à compléter si nécessaire
  127.         $order->setStatus('approved');
  128.         $order->setUserprofile('');
  129.         $order->setTypeorder('paypal');
  130.         $order->setCreatedAt(new \DateTime());
  131.     
  132.         
  133.         // 4. Création de l’abonnement
  134.         $abonnement = new Abonnement();
  135.         $abonnement->setDateabonnement(new \DateTime());
  136.         $abonnement->setUserabonnee($user);
  137.         $abonnement->setUserprofile($user->getUsername());
  138.         $abonnement->setStatutabonnement('ongoing');
  139.         $abonnement->setTypeabonnement($typeabonnement);
  140.     
  141.         // 5. Persistance
  142.         $em->persist($order);
  143.         $em->persist($abonnement);
  144.         $em->flush();
  145.     }
  146.     return $this->json([
  147.         'status' => 'success',
  148.         'message' => 'Paiement reussi',
  149.     ]);
  150. }
  151. #[Route('/paiementpaypal/cancel'name'paiementpaypal_cancel')]
  152. public function paiementpaypalCancel(Request $request): JsonResponse
  153. {
  154.     return $this->json([
  155.         'status' => 'cancel',
  156.         'message' => 'Paiement canceled',
  157.     ]);
  158. }
  159.     #[Route('/reset-password/{token}'name'app_reset_password')]
  160.     public function reset(string $tokenRequest $requestEntityManagerInterface $entityManager): Response
  161.     {
  162.         $user $entityManager->getRepository(User::class)->findOneBy(['resetToken' => $token]);
  163.        // dd($user->getResetTokenExpiresAt());
  164.         if (!$user || $user->getResetTokenExpiresAt() < new \DateTimeImmutable()) {
  165.             throw $this->createNotFoundException('Jeton invalide ou expiré.');
  166.         }
  167.         // Gestion de la modification du mot de passe
  168.         if ($request->isMethod('POST')) {
  169.             $password $request->request->get('password');
  170.             $hashedPassword password_hash($passwordPASSWORD_BCRYPT);
  171.             $user->setPassword($hashedPassword);
  172.             // Réinitialisation des champs de token
  173.             $user->setResetToken(null);
  174.             $user->setResetTokenExpiresAt(null);
  175.             $entityManager->flush();
  176.             $this->addFlash('success''Mot de passe modifié avec succès.');
  177.             return $this->redirectToRoute('app_login');
  178.         }
  179.         return $this->render('reset_password/reset.html.twig', [
  180.             'token' => $token,
  181.         ]);
  182.     }
  183. }