src/Controller/ProfilController.php line 45

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Child;
  4. use App\Entity\PaidCourseList;
  5. use App\Entity\PasswordUpdate;
  6. use App\Entity\SessionOrder;
  7. use App\Entity\SubscriptionOrder;
  8. use App\Entity\User;
  9. use App\Form\AccountType;
  10. use App\Form\ChildEditType;
  11. use App\Form\ChildType;
  12. use App\Form\PasswordUpdateType;
  13. use App\Form\PasswordUserUpdateType;
  14. use App\Repository\DiscountRepository;
  15. use App\Repository\HolidayRepository;
  16. use App\Repository\PaidCourseListRepository;
  17. use App\Repository\SessionOrderRepository;
  18. use App\Repository\SessionRegistrationDateRepository;
  19. use App\Repository\SubscriptionOrderRepository;
  20. use App\Repository\TicketOrderRepository;
  21. use App\Repository\UserPlacementTestRepository;
  22. use App\Repository\UserRepository;
  23. use App\Repository\VideoCoursesRegistrationRepository;
  24. use Doctrine\ORM\EntityManagerInterface;
  25. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
  26. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  27. use Symfony\Component\Form\FormError;
  28. use Symfony\Component\HttpFoundation\Request;
  29. use Symfony\Component\HttpFoundation\Response;
  30. use Symfony\Component\Routing\Annotation\Route;
  31. use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
  32. /**
  33.  * Class ProfilController
  34.  * @Route("/user")
  35.  * @Security("is_granted('ROLE_USER')")
  36.  */
  37. class ProfilController extends AbstractController
  38. {
  39.     /**
  40.      * @Route("/dashboard", name="user_dashboard")
  41.      */
  42.     public function index(HolidayRepository $holidayRepository)
  43.     {
  44.         $holday $holidayRepository->findOneBy([
  45.             'id' => 1
  46.         ]);
  47.         $startHoliday $holday->getStartAt();
  48.         $endHoliday $holday->getEndAt();
  49.         return $this->render('profil/dashboard.html.twig', [
  50.             'user' => $this->getUser(),
  51.             'startHoliday' => $startHoliday,
  52.             'endHoliday' => $endHoliday
  53.         ]);
  54.     }
  55.     /**
  56.      * @Route("/thanks", name="confirmation_purchase")
  57.      * @return Response
  58.      * @param Request $request
  59.      * @param UserRepository $userRepository
  60.      * @param SubscriptionOrderRepository $subscriptionOrderRepository
  61.      * @param SessionOrderRepository $sessionOrderRepository
  62.      * @return Response
  63.      */
  64.     public function confirmationPurchase(Request $requestUserRepository $userRepositorySubscriptionOrderRepository $subscriptionOrderRepositorySessionOrderRepository $sessionOrderRepository)
  65.     {
  66.         $isTwoTime false;
  67.         //Type d'order : subscription, group
  68.         $orderType $request->query->get('orderType');
  69.         $userId $request->query->get('userId');
  70.         $orderId $request->query->get('orderId');
  71.         $user $userRepository->findOneBy(['id'=> $userId]);
  72.         if ($orderType == "subscription"){
  73.             /** @var SubscriptionOrder $subscriptionOrder */
  74.             $subscriptionOrder $subscriptionOrderRepository->findOneBy(['id'=> $orderId]);
  75.             if ($subscriptionOrder){
  76.                 $paidAmount $subscriptionOrder->getPaidAmount();
  77.                 $startAt $subscriptionOrder->getCoursesStartAt();
  78.                 $category $subscriptionOrder->getCategory();
  79.                 $program $subscriptionOrder->getSubject();
  80.                 $quantity $subscriptionOrder->getNbOfScheduleChoose();
  81.                 $isTwoTime false;
  82.             }else{
  83.                 $paidAmount null;
  84.                 $startAt null;
  85.                 $program null;
  86.                 $category null;
  87.                 $quantity null;
  88.             }
  89.         }elseif ($orderType == "group"){
  90.             /** @var SessionOrder $sessionOrder */
  91.             $sessionOrder $sessionOrderRepository->findOneBy(['id'=> $orderId]);
  92.             if ($sessionOrder){
  93.                 $paidAmount $sessionOrder->getAmountPaid();
  94.                 $startAt $sessionOrder->getSession()->getStartDate();
  95.                 $program $sessionOrder->getSession()->getLevel()->getSubject();
  96.                 $category $sessionOrder->getSession()->getLevel()->getSubject()->getCategory();
  97.                 $quantity 1;
  98.                 $isTwoTime $sessionOrder->getIsTwoTime();
  99.             }else{
  100.                 $paidAmount null;
  101.                 $startAt null;
  102.                 $program null;
  103.                 $category null;
  104.                 $quantity null;
  105.             }
  106.         }else{
  107.             $paidAmount null;
  108.             $startAt null;
  109.             $program null;
  110.             $category null;
  111.             $quantity null;
  112.         }
  113.         return $this->render('profil/thank-you.html.twig', [
  114.             'orderId' => $orderId,
  115.             'paidAmount' => $paidAmount,
  116.             'program' => $program,
  117.             'startDate' => $startAt,
  118.             'category' => $category,
  119.             'quantity' => $quantity,
  120.             'orderType' => $orderType,
  121.             'user' => $user,
  122.             'isTwoTime' => $isTwoTime
  123.         ]);
  124.     }
  125.     /**
  126.      * @Route("/profil", name="user_profil")
  127.      */
  128.     public function profil()
  129.     {
  130.         $currentYear date('Y');
  131.         return $this->render('profil/profil.html.twig', [
  132.             'user' => $this->getUser(),
  133.             'currentYear' => $currentYear
  134.         ]);
  135.     }
  136.     /**
  137.      * @Route("/{id}/edit", name="user_profil_edit")
  138.      */
  139.     public function editProfil(User $userRequest $requestEntityManagerInterface $em)
  140.     {
  141.         $user $this->getUser();
  142.         $form $this->createForm(AccountType::class, $user);
  143.         $form->handleRequest($request);
  144.         if ($form->isSubmitted() && $form->isValid()) {
  145.             $em->persist($user);
  146.             $em->flush();
  147.             $this->addFlash(
  148.                 'success',
  149.                 'Les données de votre compte ont été mise à jour avec succès !'
  150.             );
  151.             return $this->redirectToRoute('user_profil');
  152.         }
  153.         return $this->render('profil/edit.html.twig', [
  154.             'form' => $form->createView(),
  155.         ]);
  156.     }
  157.     /**
  158.      * @Route("/password", name="user_password_edit")
  159.      * @param Request $request
  160.      * @param UserPasswordEncoderInterface $passwordEncoder
  161.      * @return \Symfony\Component\HttpFoundation\RedirectResponse|Response
  162.      */
  163.     public function editPassword(Request $requestUserPasswordEncoderInterface $passwordEncoderEntityManagerInterface $em)
  164.     {
  165.         $user $this->getUser();
  166.         $form $this->createForm(PasswordUserUpdateType::class, $user);
  167.         $form->handleRequest($request);
  168.         if ($form->isSubmitted() && $form->isValid()) {
  169.             $user $form->getData();
  170.             $encodedPassword $passwordEncoder->encodePassword($user$user->getPassword());
  171.             $user->setPassword($encodedPassword);
  172.             $em->persist($user);
  173.             $em->flush();
  174.             $this->addFlash(
  175.                 'success',
  176.                 'Votre mot de passe a été mise à jour avec succès !'
  177.             );
  178.             return $this->redirectToRoute('user_profil');
  179.             }
  180.         return $this->render('profil/password.html.twig', [
  181.             'form' => $form->createView(),
  182.         ]);
  183.     }
  184.     /**
  185.      * @Route("/child/add", name="user_profil_add_child")
  186.      * @param Request $request
  187.      * @param EntityManagerInterface $em
  188.      * @return \Symfony\Component\HttpFoundation\RedirectResponse|Response
  189.      */
  190.     public function addChild(Request $requestEntityManagerInterface $em)
  191.     {
  192.         $child = new Child();
  193.         $parent $this->getUser();
  194.         $form $this->createForm(ChildType::class, $child);
  195.         $form->handleRequest($request);
  196.         if ($form->isSubmitted() && $form->isValid()) {
  197.             $age $child->getAge();
  198.             if ($age and $age 12)
  199.             {
  200.                 $child->setIsChild(true)
  201.                     ->setIsTeen(false)
  202.                     ->setIsAdult(false)
  203.                 ;
  204.             }elseif ($age 11 and $age 16)
  205.             {
  206.                 $child->setIsTeen(true)
  207.                     ->setIsAdult(false)
  208.                     ->setIsChild(false)
  209.                 ;
  210.             }else{
  211.                 $child->setIsTeen(false)
  212.                     ->setIsAdult(true)
  213.                     ->setIsChild(false)
  214.                 ;
  215.             }
  216.             $child->setParent($parent);
  217.             $em->persist($child);
  218.             $em->flush();
  219.             $this->addFlash('success''Le membre a bien été ajouté');
  220.             return $this->redirectToRoute('user_profil');
  221.         }
  222.         return $this->render('profil/add_child.html.twig', [
  223.             'form' => $form->createView(),
  224.         ]);
  225.     }
  226.     /**
  227.      * @Route("/child/{id}/edit", name="user_profil_edit_child")
  228.      */
  229.     public function editChild(Child $childRequest $requestEntityManagerInterface $em)
  230.     {
  231.         $parent $this->getUser();
  232.         $form $this->createForm(ChildEditType::class, $child);
  233.         $form->handleRequest($request);
  234.         if ($form->isSubmitted() && $form->isValid()) {
  235.             $age $child->getAge();
  236.             if ($age and $age 12)
  237.             {
  238.                 $child->setIsChild(true)
  239.                     ->setIsTeen(false)
  240.                     ->setIsAdult(false)
  241.                 ;
  242.             }elseif ($age 11 and $age 16)
  243.             {
  244.                 $child->setIsTeen(true)
  245.                     ->setIsAdult(false)
  246.                     ->setIsChild(false)
  247.                 ;
  248.             }else{
  249.                 $child->setIsTeen(false)
  250.                     ->setIsAdult(true)
  251.                     ->setIsChild(false)
  252.                 ;
  253.             }
  254.             $child->setParent($parent);
  255.             $em->persist($child);
  256.             $em->flush();
  257.             $this->addFlash('success''Les informations du membre '$child->getFirstName().' ont bien été modifiées');
  258.             return $this->redirectToRoute('user_profil');
  259.         }
  260.         return $this->render('profil/edit_child.html.twig', [
  261.             'form' => $form->createView(),
  262.             'child' => $child,
  263.         ]);
  264.     }
  265.     /**
  266.      * @Route("/courses", name="user_courses")
  267.      * @param SubscriptionOrderRepository $subscriptionOrderRepository
  268.      * @param SessionOrderRepository $orderRepository
  269.      * @param VideoCoursesRegistrationRepository $videosCoursesRegistrationRepository
  270.      * @param TicketOrderRepository $ticketOrderRepository
  271.      * @return Response
  272.      */
  273.     public function coursesList(SubscriptionOrderRepository $subscriptionOrderRepositorySessionOrderRepository $orderRepositoryVideoCoursesRegistrationRepository $videosCoursesRegistrationRepositoryTicketOrderRepository $ticketOrderRepositoryUserPlacementTestRepository $userPlacementTestRepositorySessionRegistrationDateRepository $sessionRegistrationDateRepositoryDiscountRepository $discountRepository)
  274.     {
  275.         /** @var User $user */
  276.         $user $this->getUser();
  277.         $sessionsRegistrationDate $sessionRegistrationDateRepository->findAll();
  278.         $discounts $discountRepository->findAll();
  279.         $userTickets $ticketOrderRepository->getValidTicketsForOneUser($user);
  280.         $cardError null;
  281.         $activeSubscriptions $subscriptionOrderRepository->getAllActiveSubscriptionForUser($user);
  282.         $dueSubscriptions $subscriptionOrderRepository->getAllDueSubscriptionForUser($user);
  283.         /*rajouter dans la vue, la limite : "now"|date("Y/m/d") <  abo.renewBefore|date_modify("+3 day")|date("Y/m/d")
  284.         */
  285.         $canceledSubscriptionsToResubscribe $subscriptionOrderRepository->getAllSubscriptionToResubscribeForUser($user);
  286.         $videosCourses $videosCoursesRegistrationRepository->getAllActiveVideoCoursesOrderByUser($user);
  287.         $activeGroupCourses $orderRepository->getAllCurrentOrderSessionForUser($user);
  288.         $sessionOrderWithNoFuturSessionOrder $orderRepository->getAllCurrentOrderSessionForUserWithNoFuturOrderForSameProgram($user);
  289.         $userTestsLevel $userPlacementTestRepository->findBy([
  290.             'user' => $user,
  291.             'isCanceledbyUs' => false
  292.         ]);
  293.         return $this->render('profil/courses.html.twig', [
  294.             'user' => $user,
  295.             'activeSubscriptions' => $activeSubscriptions,
  296.             'dueSubscriptions' => $dueSubscriptions,
  297.             'toRenewSubscriptions' => $canceledSubscriptionsToResubscribe,
  298.             'activeGroup' => $activeGroupCourses,
  299.             'videosCourses' => $videosCourses,
  300.             'errorCard' => $cardError,
  301.             'stripe_public_key' => $this->getParameter('stripe_public_key'),
  302.             'tickets' => $userTickets,
  303.             'userTestsLevel' => $userTestsLevel,
  304.             'sessionsRegistrationDate' => $sessionsRegistrationDate,
  305.             'discounts' => $discounts,
  306.             'sessionOrderWithNoFuturSessionOrder' => $sessionOrderWithNoFuturSessionOrder
  307.         ]);
  308.     }
  309. }