src/Controller/HomeController.php line 48

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Blog;
  4. use App\Entity\Categorie;
  5. use App\Entity\MessageClient;
  6. use App\Entity\PageAboutUs;
  7. use App\Entity\Prediction;
  8. use App\Entity\Reservation;
  9. use App\Entity\User;
  10. use App\Form\MessageClientFormType;
  11. use App\Form\PredictionFormType;
  12. use App\Repository\BlogRepository;
  13. use App\Repository\CategorieRepository;
  14. use App\Repository\TestNumerologieInfoElmtRepository;
  15. use App\Repository\TestNumerologieInfoRepository;
  16. use App\Repository\UserRepository;
  17. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  18. use Symfony\Component\HttpFoundation\Response;
  19. use Symfony\Component\HttpFoundation\Request;
  20. use Symfony\Component\Routing\Annotation\Route;
  21. use App\Service\MailService;
  22. use App\Service\ReservationService;
  23. use App\Service\SecurityService;
  24. use Doctrine\ORM\EntityManagerInterface;
  25. use Exception;
  26. use Symfony\Component\HttpFoundation\JsonResponse;
  27. class HomeController extends AbstractController
  28. {
  29. private $mailService;
  30. private $entityManager;
  31. private $messageClientRepository;
  32. private $userRepository;
  33. private $reservationService;
  34. public function __construct(MailService $mailService, EntityManagerInterface $entityManager, ReservationService $reservationService, UserRepository $userRepository){
  35. $this->mailService = $mailService;
  36. $this->entityManager = $entityManager;
  37. $this->reservationService = $reservationService;
  38. $this->userRepository = $userRepository;
  39. }
  40. #[Route('/', name: 'app_home')]
  41. public function index(Request $request, CategorieRepository $categorieRepository): Response
  42. {
  43. $prediction = new Prediction();
  44. $predictionForm = $this->createForm(PredictionFormType::class, $prediction);
  45. $predictionForm->handleRequest($request);
  46. $error = null;
  47. if ($predictionForm->isSubmitted() && $predictionForm->isValid()) {
  48. try{
  49. $prediction = $predictionForm->getData();
  50. $prediction->setCreatedAt(new \DateTime());
  51. $this->entityManager->persist($prediction);
  52. $client = $this->userRepository->findByMailIngoreCase($prediction->getEmail());
  53. if(!$client){
  54. $client = new User();
  55. $client->setFirstname($prediction->getName());
  56. $client->setMail($prediction->getEmail());
  57. $client->setRoles(['ROLE_CLIENT']);
  58. $this->entityManager->persist($client);
  59. }
  60. $this->entityManager->flush();
  61. return $this->redirectToRoute('app_prediction', [
  62. 'nm'=>SecurityService::encrypt($prediction->getName(), SecurityService::$KEY) ,
  63. 'dg'=>SecurityService::encrypt($prediction->getDigit(), SecurityService::$KEY)
  64. ]);
  65. } catch(\Exception $ex){
  66. $this->addFlash('danger', $ex->getMessage());
  67. }
  68. }
  69. return $this->render('home/home.html.twig', [
  70. 'controller_name' => 'HomeController',
  71. 'predictionForm' => $predictionForm->createView(),
  72. 'error'=>$error
  73. ]);
  74. }
  75. #[Route('/nos-informations/{id}', name: 'app_about_us')]
  76. public function aboutUs( PageAboutUs $pageAboutUs): Response
  77. {
  78. return $this->render('about_us/page_about_us_show.html.twig', [
  79. 'controller_name' => 'aboutUsController',
  80. 'pageAboutUs' => $pageAboutUs
  81. ]);
  82. }
  83. #[Route('/services', name: 'app_services')]
  84. public function services(Request $request): Response
  85. {
  86. return $this->render('services/services.html.twig', [
  87. 'controller_name' => 'servicesController'
  88. ]);
  89. }
  90. #[Route('/details', name: 'app_details')]
  91. public function details(Request $request): Response
  92. {
  93. return $this->render('details/details.html.twig', [
  94. 'controller_name' => 'detailsController'
  95. ]);
  96. }
  97. #[Route('/services-voyance-cartomancie', name: 'app_prestations')]
  98. public function prestations(Request $request, CategorieRepository $categorieRepository): Response
  99. {
  100. return $this->render('prestations/prestations.html.twig', [
  101. 'controller_name' => 'prestationsController',
  102. 'categories' => $categorieRepository->findAll()
  103. ]);
  104. }
  105. #[Route('/prestation/category/{id}/details', name: 'app_prestations_category_details')]
  106. public function app_prestations_details(Categorie $catPrestation): Response
  107. {
  108. return $this->render('prestations/prestations_details.html.twig', [
  109. 'catPrestation' => $catPrestation
  110. ]);
  111. }
  112. #[Route('/e-formations', name: 'app_formations')]
  113. public function formations(Request $request): Response
  114. {
  115. return $this->render('formations/formations.html.twig', [
  116. 'controller_name' => 'formationsController'
  117. ]);
  118. }
  119. #[Route('/temoignages', name: 'app_testimonials')]
  120. public function testimonials(Request $request): Response
  121. {
  122. return $this->render('testimonials/testimonials.html.twig', [
  123. 'controller_name' => 'testimonialsController'
  124. ]);
  125. }
  126. #[Route('/prediction', name: 'app_prediction')]
  127. public function prediction(Request $request, TestNumerologieInfoRepository $testNumerologieInfoRepository, TestNumerologieInfoElmtRepository $testNumerologieInfoElmtRepository): Response
  128. {
  129. $error = null;
  130. $name = SecurityService::decrypt($request->query->get('nm'), SecurityService::$KEY);
  131. $digit = SecurityService::decrypt($request->query->get('dg'), SecurityService::$KEY);
  132. $info = $testNumerologieInfoRepository->find($digit);
  133. if($info!=null) $info->setElmts($testNumerologieInfoElmtRepository->findValidByParent($info));
  134. return $this->render('prediction/prediction.html.twig', [
  135. 'name' => $name,
  136. 'info' => $info,
  137. 'error'=>$error
  138. ]);
  139. }
  140. #[Route('/contact', name: 'app_contact')]
  141. public function contact(Request $request, MailService $mailService): Response
  142. {
  143. $messageClient = new MessageClient();
  144. $form = $this->createForm(MessageClientFormType::class, $messageClient);
  145. $form->handleRequest($request);
  146. $error = "";
  147. if ($form->isSubmitted() && $form->isValid()) {
  148. try{
  149. $messageClient = $form->getData();
  150. $mail = [
  151. 'to' => $this->getParameter('contact_recipient_mail'),
  152. 'subject' => "Nouveau contact de ".$messageClient->getName(),
  153. 'body' => $mailService->renderTwig('emails/contact.html.twig', ['contact' => $messageClient])
  154. ];
  155. $mailService->sendMail($mail);
  156. $messageClient->setCreatedAt(new \DateTime());
  157. $this->entityManager->persist($messageClient);
  158. $this->entityManager->flush();
  159. $this->addFlash('success', 'Message envoyé');
  160. unset($messageClient);
  161. unset($form);
  162. $messageClient = new MessageClient();
  163. $form = $this->createForm(MessageClientFormType::class, $messageClient);
  164. } catch(\Exception $ex){
  165. $this->addFlash('danger', $ex->getMessage());
  166. }
  167. }
  168. return $this->render('contact/contact.html.twig', [
  169. 'form' => $form->createView(),
  170. 'contact' => $messageClient,
  171. 'error'=>$error
  172. ]);
  173. }
  174. #[Route('/rendez-vous/etape-1', name: 'app_appointment_step_1')]
  175. public function appointmentStep1(Request $request): Response
  176. {
  177. $orders = [];
  178. if ($request->isMethod('POST')) {
  179. return $this->redirectToRoute('app_appointment_step_2');
  180. }
  181. return $this->render('appointment/appointment_step_1.html.twig', [
  182. 'controller_name' => 'appointmentController',
  183. 'orders'=>$orders
  184. ]);
  185. }
  186. #[Route('/rendez-vous/etape-2', name: 'app_appointment_step_2')]
  187. public function appointmentStep2(Request $request): Response
  188. {
  189. $orders = [];
  190. if ($request->isMethod('POST')) {
  191. return $this->redirectToRoute('app_appointment_step_3');
  192. }
  193. return $this->render('appointment/appointment_step_2.html.twig', [
  194. 'controller_name' => 'appointmentController',
  195. 'orders'=>$orders
  196. ]);
  197. }
  198. #[Route('/rendez-vous/etape-3', name: 'app_appointment_step_3')]
  199. public function appointmentStep3(Request $request): Response
  200. {
  201. $orders = [];
  202. if ($request->isMethod('POST')) {
  203. return $this->redirectToRoute('app_home');
  204. }
  205. return $this->render('appointment/appointment_step_3.html.twig', [
  206. 'controller_name' => 'appointmentController',
  207. 'orders'=>$orders
  208. ]);
  209. }
  210. #[Route('/rendez-vous', name: 'app_appointment')]
  211. public function appointment(Request $request): Response
  212. {
  213. return $this->redirectToRoute('app_appointment_step_1');
  214. }
  215. #[Route('/mentions-legales', name: 'app_legal_notice')]
  216. public function legalNotice(Request $request): Response
  217. {
  218. return $this->render('legal-notice/legal-notice.html.twig', [
  219. 'controller_name' => 'legalNoticeController'
  220. ]);
  221. }
  222. #[Route('/take-appointment', name: 'app_take_appointment', methods:"POST")]
  223. public function takeAppointment(Request $request): JsonResponse
  224. {
  225. try{
  226. $params = json_decode( $request->getContent(), true);
  227. $reservation = $this->reservationService->parseReservation($params);
  228. $reservation->setFromAdmin($this->isGranted('ROLE_ADMIN'));
  229. $this->reservationService->saveReservation($reservation);
  230. return new JsonResponse(['reservationId' => $reservation->getId()]);
  231. } catch(Exception $ex){
  232. return new JsonResponse(['message' => $ex->getMessage()], 500);
  233. }
  234. }
  235. public function checkStatus($statusShould, Reservation $reservation): ?Response{
  236. if($statusShould != Reservation::CREATED && $reservation->getStatut() == Reservation::CREATED)
  237. return $this->redirectToRoute('app_take_appointment_step_1', ['id' => $reservation->getId()]);
  238. else if($statusShould != Reservation::SCHEDULED && $reservation->getStatut() == Reservation::SCHEDULED)
  239. return $this->redirectToRoute('app_take_appointment_step_2', ['id' => $reservation->getId()]);
  240. else if($statusShould != Reservation::PAIED && $reservation->getStatut() == Reservation::PAIED)
  241. return $this->redirectToRoute('app_take_appointment_step_3', ['id' => $reservation->getId()]);
  242. return null;
  243. }
  244. #[Route('/take-appointment/{id}/step-1', name: 'app_take_appointment_step_1')]
  245. public function takeAppointmentStep1(Reservation $reservation, Request $request): Response
  246. {
  247. $response = $this->checkStatus(Reservation::CREATED, $reservation);
  248. if($response) return $response;
  249. return $this->render('take_appointment/take_appointment_step_1.html.twig', [
  250. 'controller_name' => 'appointmentController',
  251. 'reservation'=>$reservation,
  252. 'clientId'=>$this->getUser() != null ? $this->getUser()->getId() : null
  253. ]);
  254. }
  255. #[Route('/take-appointment/{id}/step-2', name: 'app_take_appointment_step_2')]
  256. public function takeAppointmentStep2(Reservation $reservation, Request $request): Response
  257. {
  258. $response = $this->checkStatus(Reservation::SCHEDULED, $reservation);
  259. if($response) return $response;
  260. return $this->render('take_appointment/take_appointment_step_2.html.twig', [
  261. 'controller_name' => 'appointmentController',
  262. 'reservation'=>$reservation
  263. ]);
  264. }
  265. #[Route('/take-appointment/{id}/step-3', name: 'app_take_appointment_step_3')]
  266. public function takeAppointmentStep3(Reservation $reservation, Request $request): Response
  267. {
  268. $response = $this->checkStatus(Reservation::PAIED, $reservation);
  269. if($response) return $response;
  270. return $this->render('take_appointment/take_appointment_step_3.html.twig', [
  271. 'controller_name' => 'appointmentController',
  272. 'reservation'=>$reservation
  273. ]);
  274. }
  275. #[Route('/reservation/{id}/payement-intent', name: 'app_reservation_payment_intent', methods:"GET")]
  276. public function getPaymentIntent(Reservation $reservation): JsonResponse
  277. {
  278. try{
  279. $clientSecret = $this->reservationService->createReservationPaymentIntent($reservation);
  280. return new JsonResponse(['clientSecret' => $clientSecret]);
  281. } catch(Exception $ex){
  282. return new JsonResponse(['message' => $ex->getMessage()], 500);
  283. }
  284. }
  285. #[Route('/reservation/{id}/pay', name: 'app_reservation_pay', methods:"PUT")]
  286. public function pay(Reservation $reservation): JsonResponse
  287. {
  288. try{
  289. $reservation->setPaymentApiMethod(Reservation::PAYMENT_API_METHOD_STRIPE);
  290. $this->reservationService->payReservation($reservation);
  291. return new JsonResponse(['message' => 'ok']);
  292. } catch(Exception $ex){
  293. return new JsonResponse(['message' => $ex->getMessage()], 500);
  294. }
  295. }
  296. #[Route('/reservation/{id}/paypal', name: 'app_reservation_paypal', methods:"PUT")]
  297. public function paypal(Reservation $reservation, Request $request): JsonResponse
  298. {
  299. try{
  300. $reservation->setPaymentApiMethod(Reservation::PAYMENT_API_METHOD_PAYPAL);
  301. $params = json_decode( $request->getContent(), true);
  302. $this->reservationService->payReservationPaypal($reservation, $params['authorizationId']);
  303. return new JsonResponse(['message' => 'ok']);
  304. } catch(Exception $ex){
  305. return new JsonResponse(['message' => $ex->getMessage()], 500);
  306. }
  307. }
  308. #[Route('/reservaton/{id}/infos', name: 'app_reservation_save_infos', methods:"POST")]
  309. public function saveInfos(Reservation $reservation, Request $request): JsonResponse
  310. {
  311. try{
  312. $params = json_decode( $request->getContent(), true);
  313. $params['client']=null;
  314. if($params['clientId']!=null) $params['client']=$this->userRepository->find($params['clientId']);
  315. $reservation = $this->reservationService->saveInfosReservation($reservation, $params);
  316. return new JsonResponse(['message' => 'ok']);
  317. } catch(Exception $ex){
  318. return new JsonResponse(['message' => $ex->getMessage()], 500);
  319. }
  320. }
  321. // #[Route('/requete/sql/exec', name: 'req_sql_exec')]
  322. // public function req_sql_exec(BlogRepository $blogRepository, EntityManagerInterface $em)
  323. // {
  324. // $allBlog = $blogRepository->findAll();
  325. // /**
  326. // * @var Blog $blog
  327. // */
  328. // foreach ($allBlog as $blog) {
  329. // $blog->setMetatitle($blog->getTitre());
  330. // $blog->setMetadescription($blog->getDescription());
  331. // $blog->setNomAuteur('Françoise');
  332. // }
  333. // $em->flush();
  334. // return $this->redirectToRoute('app_about_us');
  335. // }
  336. }