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(
  65. Request $request,
  66. UserRepository $userRepository,
  67. SubscriptionOrderRepository $subscriptionOrderRepository,
  68. SessionOrderRepository $sessionOrderRepository)
  69. {
  70. $isTwoTime = false;
  71. //Type d'order : subscription, group
  72. $orderType = $request->query->get('orderType');
  73. $userId = $request->query->get('userId');
  74. $orderId = $request->query->get('orderId');
  75. $user = $userRepository->findOneBy(['id'=> $userId]);
  76. $currency = '';
  77. if ($orderType == "subscription"){
  78. /** @var SubscriptionOrder $subscriptionOrder */
  79. $subscriptionOrder = $subscriptionOrderRepository->findOneBy(['id'=> $orderId]);
  80. $currency = $subscriptionOrder->getPaymentCurrency();
  81. if ($subscriptionOrder){
  82. $paidAmount = $subscriptionOrder->getPaidAmount();
  83. $startAt = $subscriptionOrder->getCoursesStartAt();
  84. $category = $subscriptionOrder->getCategory();
  85. $program = $subscriptionOrder->getSubject();
  86. $quantity = $subscriptionOrder->getNbOfScheduleChoose();
  87. $isTwoTime = false;
  88. }else{
  89. $paidAmount = null;
  90. $startAt = null;
  91. $program = null;
  92. $category = null;
  93. $quantity = null;
  94. }
  95. }elseif ($orderType == "group"){
  96. /** @var SessionOrder $sessionOrder */
  97. $sessionOrder = $sessionOrderRepository->findOneBy(['id'=> $orderId]);
  98. $currency = $sessionOrder->getPaymentCurrency();
  99. if ($sessionOrder){
  100. $paidAmount = $sessionOrder->getAmountPaid();
  101. $startAt = $sessionOrder->getSession()->getStartDate();
  102. $program = $sessionOrder->getSession()->getLevel()->getSubject();
  103. $category = $sessionOrder->getSession()->getLevel()->getSubject()->getCategory();
  104. $quantity = 1;
  105. $isTwoTime = $sessionOrder->getIsTwoTime();
  106. }else{
  107. $paidAmount = null;
  108. $startAt = null;
  109. $program = null;
  110. $category = null;
  111. $quantity = null;
  112. }
  113. }else{
  114. $paidAmount = null;
  115. $startAt = null;
  116. $program = null;
  117. $category = null;
  118. $quantity = null;
  119. }
  120. return $this->render('profil/thank-you.html.twig', [
  121. 'orderId' => $orderId,
  122. 'paidAmount' => $paidAmount,
  123. 'currency' => $currency,
  124. 'program' => $program,
  125. 'startDate' => $startAt,
  126. 'category' => $category,
  127. 'quantity' => $quantity,
  128. 'orderType' => $orderType,
  129. 'user' => $user,
  130. 'isTwoTime' => $isTwoTime
  131. ]);
  132. }
  133. /**
  134. * @Route("/profil", name="user_profil")
  135. */
  136. public function profil()
  137. {
  138. $currentYear = date('Y');
  139. $template = $this->isGranted('ROLE_TEACHER') && !$this->isGranted('ROLE_SECRETARIAT')
  140. ? 'teacher/profil.html.twig'
  141. : 'profil/profil.html.twig';
  142. return $this->render($template, [
  143. 'user' => $this->getUser(),
  144. 'currentYear' => $currentYear
  145. ]);
  146. }
  147. /**
  148. * @Route("/{id}/edit", name="user_profil_edit")
  149. */
  150. public function editProfil(User $user, Request $request, EntityManagerInterface $em)
  151. {
  152. $user = $this->getUser();
  153. $form = $this->createForm(AccountType::class, $user);
  154. $form->handleRequest($request);
  155. if ($form->isSubmitted() && $form->isValid()) {
  156. $em->persist($user);
  157. $em->flush();
  158. $this->addFlash(
  159. 'success',
  160. 'Les données de votre compte ont été mise à jour avec succès !'
  161. );
  162. return $this->redirectToRoute('user_profil');
  163. }
  164. $template = $this->isGranted('ROLE_TEACHER') && !$this->isGranted('ROLE_SECRETARIAT')
  165. ? 'teacher/edit-user.html.twig'
  166. : 'profil/edit.html.twig';
  167. return $this->render($template, [
  168. 'form' => $form->createView(),
  169. ]);
  170. }
  171. /**
  172. * @Route("/password", name="user_password_edit")
  173. * @param Request $request
  174. * @param UserPasswordEncoderInterface $passwordEncoder
  175. * @return \Symfony\Component\HttpFoundation\RedirectResponse|Response
  176. */
  177. public function editPassword(Request $request, UserPasswordEncoderInterface $passwordEncoder, EntityManagerInterface $em)
  178. {
  179. $user = $this->getUser();
  180. $form = $this->createForm(PasswordUserUpdateType::class, $user);
  181. $form->handleRequest($request);
  182. if ($form->isSubmitted() && $form->isValid()) {
  183. $user = $form->getData();
  184. $encodedPassword = $passwordEncoder->encodePassword($user, $user->getPassword());
  185. $user->setPassword($encodedPassword);
  186. $em->persist($user);
  187. $em->flush();
  188. $this->addFlash(
  189. 'success',
  190. 'Votre mot de passe a été mise à jour avec succès !'
  191. );
  192. return $this->redirectToRoute('user_profil');
  193. }
  194. $template = $this->isGranted('ROLE_TEACHER') && !$this->isGranted('ROLE_SECRETARIAT')
  195. ? 'teacher/edit-password.html.twig'
  196. : 'profil/password.html.twig';
  197. return $this->render($template, [
  198. 'form' => $form->createView(),
  199. ]);
  200. }
  201. /**
  202. * @Route("/child/add", name="user_profil_add_child")
  203. * @param Request $request
  204. * @param EntityManagerInterface $em
  205. * @return \Symfony\Component\HttpFoundation\RedirectResponse|Response
  206. */
  207. public function addChild(Request $request, EntityManagerInterface $em)
  208. {
  209. $child = new Child();
  210. $parent = $this->getUser();
  211. $form = $this->createForm(ChildType::class, $child);
  212. $form->handleRequest($request);
  213. if ($form->isSubmitted() && $form->isValid()) {
  214. $age = $child->getAge();
  215. if ($age > 0 and $age < 12)
  216. {
  217. $child->setIsChild(true)
  218. ->setIsTeen(false)
  219. ->setIsAdult(false)
  220. ;
  221. }elseif ($age > 11 and $age < 16)
  222. {
  223. $child->setIsTeen(true)
  224. ->setIsAdult(false)
  225. ->setIsChild(false)
  226. ;
  227. }else{
  228. $child->setIsTeen(false)
  229. ->setIsAdult(true)
  230. ->setIsChild(false)
  231. ;
  232. }
  233. $child->setParent($parent);
  234. $em->persist($child);
  235. $em->flush();
  236. $this->addFlash('success', 'Le membre a bien été ajouté');
  237. return $this->redirectToRoute('user_profil');
  238. }
  239. $template = $this->isGranted('ROLE_TEACHER') && !$this->isGranted('ROLE_SECRETARIAT')
  240. ? 'teacher/add-child.html.twig'
  241. : 'profil/add_child.html.twig';
  242. return $this->render($template, [
  243. 'form' => $form->createView(),
  244. ]);
  245. }
  246. /**
  247. * @Route("/child/{id}/edit", name="user_profil_edit_child")
  248. */
  249. public function editChild(Child $child, Request $request, EntityManagerInterface $em)
  250. {
  251. $parent = $this->getUser();
  252. $form = $this->createForm(ChildEditType::class, $child);
  253. $form->handleRequest($request);
  254. if ($form->isSubmitted() && $form->isValid()) {
  255. $age = $child->getAge();
  256. if ($age > 0 and $age < 12)
  257. {
  258. $child->setIsChild(true)
  259. ->setIsTeen(false)
  260. ->setIsAdult(false)
  261. ;
  262. }elseif ($age > 11 and $age < 16)
  263. {
  264. $child->setIsTeen(true)
  265. ->setIsAdult(false)
  266. ->setIsChild(false)
  267. ;
  268. }else{
  269. $child->setIsTeen(false)
  270. ->setIsAdult(true)
  271. ->setIsChild(false)
  272. ;
  273. }
  274. $child->setParent($parent);
  275. $em->persist($child);
  276. $em->flush();
  277. $this->addFlash('success', 'Les informations du membre '. $child->getFirstName().' ont bien été modifiées');
  278. return $this->redirectToRoute('user_profil');
  279. }
  280. $template = $this->isGranted('ROLE_TEACHER') && !$this->isGranted('ROLE_SECRETARIAT')
  281. ? 'teacher/edit-child.html.twig'
  282. : 'profil/edit_child.html.twig';
  283. return $this->render($template, [
  284. 'form' => $form->createView(),
  285. 'child' => $child,
  286. ]);
  287. }
  288. /**
  289. * @Route("/courses", name="user_courses")
  290. * @param SubscriptionOrderRepository $subscriptionOrderRepository
  291. * @param SessionOrderRepository $orderRepository
  292. * @param VideoCoursesRegistrationRepository $videosCoursesRegistrationRepository
  293. * @param TicketOrderRepository $ticketOrderRepository
  294. * @return Response
  295. */
  296. public function coursesList(SubscriptionOrderRepository $subscriptionOrderRepository, SessionOrderRepository $orderRepository, VideoCoursesRegistrationRepository $videosCoursesRegistrationRepository, TicketOrderRepository $ticketOrderRepository, UserPlacementTestRepository $userPlacementTestRepository, SessionRegistrationDateRepository $sessionRegistrationDateRepository, DiscountRepository $discountRepository)
  297. {
  298. /** @var User $user */
  299. $user = $this->getUser();
  300. $sessionsRegistrationDate = $sessionRegistrationDateRepository->findAll();
  301. $discounts = $discountRepository->findAll();
  302. $userTickets = $ticketOrderRepository->getValidTicketsForOneUser($user);
  303. $cardError = null;
  304. $activeSubscriptions = $subscriptionOrderRepository->getAllActiveSubscriptionForUser($user);
  305. $dueSubscriptions = $subscriptionOrderRepository->getAllDueSubscriptionForUser($user);
  306. /*rajouter dans la vue, la limite : "now"|date("Y/m/d") < abo.renewBefore|date_modify("+3 day")|date("Y/m/d")
  307. */
  308. $canceledSubscriptionsToResubscribe = $subscriptionOrderRepository->getAllSubscriptionToResubscribeForUser($user);
  309. $videosCourses = $videosCoursesRegistrationRepository->getAllActiveVideoCoursesOrderByUser($user);
  310. $activeGroupCourses = $orderRepository->getAllCurrentOrderSessionForUser($user);
  311. $sessionOrderWithNoFuturSessionOrder = $orderRepository->getAllCurrentOrderSessionForUserWithNoFuturOrderForSameProgram($user);
  312. $userTestsLevel = $userPlacementTestRepository->findBy([
  313. 'user' => $user,
  314. 'isCanceledbyUs' => false
  315. ]);
  316. return $this->render('profil/courses.html.twig', [
  317. 'user' => $user,
  318. 'activeSubscriptions' => $activeSubscriptions,
  319. 'dueSubscriptions' => $dueSubscriptions,
  320. 'toRenewSubscriptions' => $canceledSubscriptionsToResubscribe,
  321. 'activeGroup' => $activeGroupCourses,
  322. 'videosCourses' => $videosCourses,
  323. 'errorCard' => $cardError,
  324. 'stripe_public_key' => $this->getParameter('stripe_public_key'),
  325. 'tickets' => $userTickets,
  326. 'userTestsLevel' => $userTestsLevel,
  327. 'sessionsRegistrationDate' => $sessionsRegistrationDate,
  328. 'discounts' => $discounts,
  329. 'sessionOrderWithNoFuturSessionOrder' => $sessionOrderWithNoFuturSessionOrder
  330. ]);
  331. }
  332. }