<?php
namespace App\Controller;
use App\Entity\Child;
use App\Entity\PaidCourseList;
use App\Entity\PasswordUpdate;
use App\Entity\SessionOrder;
use App\Entity\SubscriptionOrder;
use App\Entity\User;
use App\Form\AccountType;
use App\Form\ChildEditType;
use App\Form\ChildType;
use App\Form\PasswordUpdateType;
use App\Form\PasswordUserUpdateType;
use App\Repository\DiscountRepository;
use App\Repository\HolidayRepository;
use App\Repository\PaidCourseListRepository;
use App\Repository\SessionOrderRepository;
use App\Repository\SessionRegistrationDateRepository;
use App\Repository\SubscriptionOrderRepository;
use App\Repository\TicketOrderRepository;
use App\Repository\UserPlacementTestRepository;
use App\Repository\UserRepository;
use App\Repository\VideoCoursesRegistrationRepository;
use Doctrine\ORM\EntityManagerInterface;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Form\FormError;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
/**
* Class ProfilController
* @Route("/user")
* @Security("is_granted('ROLE_USER')")
*/
class ProfilController extends AbstractController
{
/**
* @Route("/dashboard", name="user_dashboard")
*/
public function index(HolidayRepository $holidayRepository)
{
$holday = $holidayRepository->findOneBy([
'id' => 1
]);
$startHoliday = $holday->getStartAt();
$endHoliday = $holday->getEndAt();
return $this->render('profil/dashboard.html.twig', [
'user' => $this->getUser(),
'startHoliday' => $startHoliday,
'endHoliday' => $endHoliday
]);
}
/**
* @Route("/thanks", name="confirmation_purchase")
* @return Response
* @param Request $request
* @param UserRepository $userRepository
* @param SubscriptionOrderRepository $subscriptionOrderRepository
* @param SessionOrderRepository $sessionOrderRepository
* @return Response
*/
public function confirmationPurchase(
Request $request,
UserRepository $userRepository,
SubscriptionOrderRepository $subscriptionOrderRepository,
SessionOrderRepository $sessionOrderRepository)
{
$isTwoTime = false;
//Type d'order : subscription, group
$orderType = $request->query->get('orderType');
$userId = $request->query->get('userId');
$orderId = $request->query->get('orderId');
$user = $userRepository->findOneBy(['id'=> $userId]);
$currency = '';
if ($orderType == "subscription"){
/** @var SubscriptionOrder $subscriptionOrder */
$subscriptionOrder = $subscriptionOrderRepository->findOneBy(['id'=> $orderId]);
$currency = $subscriptionOrder->getPaymentCurrency();
if ($subscriptionOrder){
$paidAmount = $subscriptionOrder->getPaidAmount();
$startAt = $subscriptionOrder->getCoursesStartAt();
$category = $subscriptionOrder->getCategory();
$program = $subscriptionOrder->getSubject();
$quantity = $subscriptionOrder->getNbOfScheduleChoose();
$isTwoTime = false;
}else{
$paidAmount = null;
$startAt = null;
$program = null;
$category = null;
$quantity = null;
}
}elseif ($orderType == "group"){
/** @var SessionOrder $sessionOrder */
$sessionOrder = $sessionOrderRepository->findOneBy(['id'=> $orderId]);
$currency = $sessionOrder->getPaymentCurrency();
if ($sessionOrder){
$paidAmount = $sessionOrder->getAmountPaid();
$startAt = $sessionOrder->getSession()->getStartDate();
$program = $sessionOrder->getSession()->getLevel()->getSubject();
$category = $sessionOrder->getSession()->getLevel()->getSubject()->getCategory();
$quantity = 1;
$isTwoTime = $sessionOrder->getIsTwoTime();
}else{
$paidAmount = null;
$startAt = null;
$program = null;
$category = null;
$quantity = null;
}
}else{
$paidAmount = null;
$startAt = null;
$program = null;
$category = null;
$quantity = null;
}
return $this->render('profil/thank-you.html.twig', [
'orderId' => $orderId,
'paidAmount' => $paidAmount,
'currency' => $currency,
'program' => $program,
'startDate' => $startAt,
'category' => $category,
'quantity' => $quantity,
'orderType' => $orderType,
'user' => $user,
'isTwoTime' => $isTwoTime
]);
}
/**
* @Route("/profil", name="user_profil")
*/
public function profil()
{
$currentYear = date('Y');
$template = $this->isGranted('ROLE_TEACHER') && !$this->isGranted('ROLE_SECRETARIAT')
? 'teacher/profil.html.twig'
: 'profil/profil.html.twig';
return $this->render($template, [
'user' => $this->getUser(),
'currentYear' => $currentYear
]);
}
/**
* @Route("/{id}/edit", name="user_profil_edit")
*/
public function editProfil(User $user, Request $request, EntityManagerInterface $em)
{
$user = $this->getUser();
$form = $this->createForm(AccountType::class, $user);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$em->persist($user);
$em->flush();
$this->addFlash(
'success',
'Les données de votre compte ont été mise à jour avec succès !'
);
return $this->redirectToRoute('user_profil');
}
$template = $this->isGranted('ROLE_TEACHER') && !$this->isGranted('ROLE_SECRETARIAT')
? 'teacher/edit-user.html.twig'
: 'profil/edit.html.twig';
return $this->render($template, [
'form' => $form->createView(),
]);
}
/**
* @Route("/password", name="user_password_edit")
* @param Request $request
* @param UserPasswordEncoderInterface $passwordEncoder
* @return \Symfony\Component\HttpFoundation\RedirectResponse|Response
*/
public function editPassword(Request $request, UserPasswordEncoderInterface $passwordEncoder, EntityManagerInterface $em)
{
$user = $this->getUser();
$form = $this->createForm(PasswordUserUpdateType::class, $user);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$user = $form->getData();
$encodedPassword = $passwordEncoder->encodePassword($user, $user->getPassword());
$user->setPassword($encodedPassword);
$em->persist($user);
$em->flush();
$this->addFlash(
'success',
'Votre mot de passe a été mise à jour avec succès !'
);
return $this->redirectToRoute('user_profil');
}
$template = $this->isGranted('ROLE_TEACHER') && !$this->isGranted('ROLE_SECRETARIAT')
? 'teacher/edit-password.html.twig'
: 'profil/password.html.twig';
return $this->render($template, [
'form' => $form->createView(),
]);
}
/**
* @Route("/child/add", name="user_profil_add_child")
* @param Request $request
* @param EntityManagerInterface $em
* @return \Symfony\Component\HttpFoundation\RedirectResponse|Response
*/
public function addChild(Request $request, EntityManagerInterface $em)
{
$child = new Child();
$parent = $this->getUser();
$form = $this->createForm(ChildType::class, $child);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$age = $child->getAge();
if ($age > 0 and $age < 12)
{
$child->setIsChild(true)
->setIsTeen(false)
->setIsAdult(false)
;
}elseif ($age > 11 and $age < 16)
{
$child->setIsTeen(true)
->setIsAdult(false)
->setIsChild(false)
;
}else{
$child->setIsTeen(false)
->setIsAdult(true)
->setIsChild(false)
;
}
$child->setParent($parent);
$em->persist($child);
$em->flush();
$this->addFlash('success', 'Le membre a bien été ajouté');
return $this->redirectToRoute('user_profil');
}
$template = $this->isGranted('ROLE_TEACHER') && !$this->isGranted('ROLE_SECRETARIAT')
? 'teacher/add-child.html.twig'
: 'profil/add_child.html.twig';
return $this->render($template, [
'form' => $form->createView(),
]);
}
/**
* @Route("/child/{id}/edit", name="user_profil_edit_child")
*/
public function editChild(Child $child, Request $request, EntityManagerInterface $em)
{
$parent = $this->getUser();
$form = $this->createForm(ChildEditType::class, $child);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$age = $child->getAge();
if ($age > 0 and $age < 12)
{
$child->setIsChild(true)
->setIsTeen(false)
->setIsAdult(false)
;
}elseif ($age > 11 and $age < 16)
{
$child->setIsTeen(true)
->setIsAdult(false)
->setIsChild(false)
;
}else{
$child->setIsTeen(false)
->setIsAdult(true)
->setIsChild(false)
;
}
$child->setParent($parent);
$em->persist($child);
$em->flush();
$this->addFlash('success', 'Les informations du membre '. $child->getFirstName().' ont bien été modifiées');
return $this->redirectToRoute('user_profil');
}
$template = $this->isGranted('ROLE_TEACHER') && !$this->isGranted('ROLE_SECRETARIAT')
? 'teacher/edit-child.html.twig'
: 'profil/edit_child.html.twig';
return $this->render($template, [
'form' => $form->createView(),
'child' => $child,
]);
}
/**
* @Route("/courses", name="user_courses")
* @param SubscriptionOrderRepository $subscriptionOrderRepository
* @param SessionOrderRepository $orderRepository
* @param VideoCoursesRegistrationRepository $videosCoursesRegistrationRepository
* @param TicketOrderRepository $ticketOrderRepository
* @return Response
*/
public function coursesList(SubscriptionOrderRepository $subscriptionOrderRepository, SessionOrderRepository $orderRepository, VideoCoursesRegistrationRepository $videosCoursesRegistrationRepository, TicketOrderRepository $ticketOrderRepository, UserPlacementTestRepository $userPlacementTestRepository, SessionRegistrationDateRepository $sessionRegistrationDateRepository, DiscountRepository $discountRepository)
{
/** @var User $user */
$user = $this->getUser();
$sessionsRegistrationDate = $sessionRegistrationDateRepository->findAll();
$discounts = $discountRepository->findAll();
$userTickets = $ticketOrderRepository->getValidTicketsForOneUser($user);
$cardError = null;
$activeSubscriptions = $subscriptionOrderRepository->getAllActiveSubscriptionForUser($user);
$dueSubscriptions = $subscriptionOrderRepository->getAllDueSubscriptionForUser($user);
/*rajouter dans la vue, la limite : "now"|date("Y/m/d") < abo.renewBefore|date_modify("+3 day")|date("Y/m/d")
*/
$canceledSubscriptionsToResubscribe = $subscriptionOrderRepository->getAllSubscriptionToResubscribeForUser($user);
$videosCourses = $videosCoursesRegistrationRepository->getAllActiveVideoCoursesOrderByUser($user);
$activeGroupCourses = $orderRepository->getAllCurrentOrderSessionForUser($user);
$sessionOrderWithNoFuturSessionOrder = $orderRepository->getAllCurrentOrderSessionForUserWithNoFuturOrderForSameProgram($user);
$userTestsLevel = $userPlacementTestRepository->findBy([
'user' => $user,
'isCanceledbyUs' => false
]);
return $this->render('profil/courses.html.twig', [
'user' => $user,
'activeSubscriptions' => $activeSubscriptions,
'dueSubscriptions' => $dueSubscriptions,
'toRenewSubscriptions' => $canceledSubscriptionsToResubscribe,
'activeGroup' => $activeGroupCourses,
'videosCourses' => $videosCourses,
'errorCard' => $cardError,
'stripe_public_key' => $this->getParameter('stripe_public_key'),
'tickets' => $userTickets,
'userTestsLevel' => $userTestsLevel,
'sessionsRegistrationDate' => $sessionsRegistrationDate,
'discounts' => $discounts,
'sessionOrderWithNoFuturSessionOrder' => $sessionOrderWithNoFuturSessionOrder
]);
}
}