src/Controller/Course/CourseController.php line 117

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Course;
  3. // use App\Entity\Course;
  4. use App\Helpers\SerializerHelper;
  5. use App\Helpers\UploadedBase64File;
  6. use App\Repository\CourseParticipantsRepository;
  7. use App\Repository\CourseRepository;
  8. use App\Repository\UserRepository;
  9. use App\Services\CourseService;
  10. use App\Services\SendMail;
  11. use Doctrine\ORM\EntityManagerInterface;
  12. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  13. use Symfony\Component\HttpFoundation\Request;
  14. use Symfony\Component\HttpFoundation\Response;
  15. use Symfony\Component\Routing\Annotation\Route;
  16. // use Symfony\Component\Serializer\Encoder\JsonEncoder;
  17. // use Symfony\Component\Serializer\Normalizer\AbstractNormalizer;
  18. use Symfony\Component\Serializer\SerializerInterface;
  19. class CourseController extends AbstractController
  20. {
  21.     public function __construct(
  22.         private CourseService $CourseService,
  23.         private CourseRepository $courseRepo,
  24.         private SerializerInterface $serializer,
  25.         private SendMail $mailer,
  26.         private UserRepository $userRepo,
  27.         private EntityManagerInterface $em,
  28.         private CourseParticipantsRepository $courseParticipantsRepo
  29.     )
  30.     {
  31.     }
  32.     #[Route('/api/add-course', name: 'add_course', methods: ["POST"])]
  33.     public function add(Request $request): Response
  34.     {
  35.         $data = $request->request->all();
  36.         if($data == []){
  37.             $data = json_decode($request->getContent(), true);
  38.         }
  39.         $file = $request->files->get('imageUrl');
  40.         
  41.         return $this->CourseService->add($data, $file);
  42.     }
  43.     #[Route('/api/delete-course/{id}', name: 'delete_course', methods: ["DELETE"])]
  44.     public function deleteRecipe($id): Response
  45.     {
  46.         return $this->CourseService->delete($id);
  47.     }
  48.   
  49.     #[Route('/admin/delete-course/{id}', name: 'delete_course_admin', methods: ["DELETE"])]
  50.     public function deleteRecipeAdmin($id): Response
  51.     {
  52.         return $this->CourseService->delete($id);
  53.     }
  54.     #[Route('/show-course/{slug}', name: 'show_course', methods: ["GET"]
  55.     // requirements: ["slug"=>"[a-zA-Z0-9\-]*"]
  56.     )]
  57.     public function showCourse($slug): Response
  58.     {
  59.         return $this->CourseService->show($slug);
  60.     }
  61.    
  62.     #[Route('/show-type_course/{id}', name: 'show_course_type', methods: ["GET"]
  63.     )]
  64.     public function showCourseType($id): Response
  65.     {
  66.         return $this->CourseService->showCourseType($id);
  67.     }
  68.     #[Route('/api/update-course/{id}', name: 'update_course', methods: ["POST"])]
  69.     public function updateCourse($id, Request $request): Response
  70.     {
  71.         $data = $request->request->all();
  72.         if($data == []){
  73.             $data = json_decode($request->getContent(), true);
  74.         }
  75.         $file = $request->files->get('imageUrl');
  76.         return $this->CourseService->update($id, $data, $file);
  77.     }
  78.    
  79.     #[Route('/admin-update-course/{id}', name: 'update_course_admin', methods: ["POST"])]
  80.     public function updateCourseAdmin($id, Request $request): Response
  81.     {
  82.         $data = $request->request->all();
  83.         $file = null;
  84.         
  85.         if($data == []){
  86.             $data = json_decode($request->getContent(), true);
  87.         }
  88.         if (isset($data["is_dash_data"])) {
  89.             if ($data['is_dash_data'] == true && isset($data['imageUrl'])) {
  90.                 if(!empty($data['imageUrl'])){
  91.                     $imgBase64 = $data["imageUrl"];
  92.                     $img = UploadedBase64File::extractBase64String($imgBase64);
  93.                     $file = new UploadedBase64File($img, random_int(2,20).'.jpg');
  94.                 }
  95.             }
  96.         }
  97.         return $this->CourseService->update($id, $data, $file);
  98.     }
  99.     #[Route('get-courses', name: 'get_courses', methods: ["GET"])]
  100.     public function getAll(
  101.         // Request $request
  102.         )
  103.     {
  104.         // $data = $request->request->all();
  105.         return $this->CourseService->getAll(
  106.             // $data
  107.         );
  108.     }
  109.       
  110.     #[Route('api/enroll-to-course/{id}', name: 'enroll_to_course', methods: ["GET"])]
  111.     public function enrollToCourse($id)
  112.     {
  113.         return $this->CourseService->enroll($id);
  114.     }
  115.     
  116.     #[Route('search-course-by-name/{keyword}', name: 'search_course_by_name', methods: ["GET"])]
  117.     public function searchCourseByName($keyword){
  118.         return $this->CourseService->searchCourseByName($keyword);
  119.     }
  120.     
  121.     #[Route("api/add-lesson", name:"add_course_lesson", methods:["POST"])]
  122.     public function addCourse(Request $request){
  123.         $data = $request->request->all();
  124.         if($data == []){
  125.             $data = json_decode($request->getContent(), true);
  126.         }
  127.         return $this->CourseService->addLesson($data);
  128.     }
  129.   
  130.     #[Route("show-lesson/{id}", name:"show_course_lesson", methods:["GET"])]
  131.     public function getLesson($id){
  132.         return $this->CourseService->getLesson($id);
  133.     }
  134.     
  135.     #[Route("course-participants/{id}", name:"show_course_participant", methods:["GET"])]
  136.     public function getCourse($id){
  137.         $course = $this->courseRepo->find($id);
  138.         if(!empty($course)){
  139.             
  140.             $courseJson = SerializerHelper::getJson($this->serializer, $course, "show_course");
  141.     
  142.             return $this->json(
  143.                 [
  144.                     "status_code"=> Response::HTTP_OK,
  145.                     "message"=> "Course list",
  146.                     "data"=> $courseJson
  147.                 ]
  148.             );
  149.         }
  150.         return $this->json([
  151.             "message"=>"KO",
  152.             "status_code"=> 500
  153.         ], 500);
  154.     }
  155.     #[Route('api/confirm-participation/{id}/{userId}',  methods: ["GET"])]
  156.     public function accept($id, $userId){
  157.         try{
  158.             $course = $this->courseRepo->find($id);
  159.             $user = $this->userRepo->find($userId);
  160.             $courseParticipants = $this->courseParticipantsRepo->findBy(["course"=> $course]);
  161.             foreach ($courseParticipants as $part) {
  162.                 // return $this->json(SerializerHelper::getJson($this->serializer, $part->getParticipants(), "user_info"));
  163.                 if($part->getParticipants()->contains($user)){
  164.                     
  165.                     $bodyMail = $this->mailer->createBodyMail('mails/course_accept_mail.html.twig', ['user' => $user, "course" => $course]);
  166.                     $this->mailer->sendEmail(from: 'abidjan.net@weblogy.com', to: $user->getEmail(), subject: 'Demande participation', body: $bodyMail);
  167.                     $part->setIsAcceped(true);
  168.                     $this->em->persist($part);
  169.                     $this->em->flush();
  170.                 }
  171.             }
  172.             $user = SerializerHelper::getJson($this->serializer, $part->getParticipants(), "user_info");
  173.             $courseJson = SerializerHelper::getJson($this->serializer, $course, "show_course");
  174.             $this->em->persist($course);
  175.             $this->em->flush();
  176.             return $this->json([
  177.                 "data"=> $courseJson,
  178.                 "message"=> "OK",
  179.                 "status_code"=> 200
  180.             ]);
  181.         }catch(\Exception $e){
  182.             return $this->json([
  183.                 "message"=>$e->getMessage(),
  184.                 "code"=> $e->getCode()
  185.             ], 500);
  186.         }
  187.     }
  188.     #[Route('api/reject-participation/{id}/{userId}',  methods: ["GET"])]
  189.     public function reject($id, $userId){
  190.         
  191.         try{
  192.             $course = $this->courseRepo->find($id);
  193.             $user = $this->userRepo->find($userId);
  194.             $bodyMail = $this->mailer->createBodyMail('mails/course_reject_mail.html.twig', ['user' => $user, "course" => $course]);
  195.             $this->mailer->sendEmail(from: 'abidjan.net@weblogy.com', to: $user->getEmail(), subject: 'Demande participation', body: $bodyMail);
  196.             $this->em->persist($course);
  197.             $this->em->flush();
  198.             $courseJson = SerializerHelper::getJson($this->serializer, $course, "show_course");
  199.             return $this->json([
  200.                 "data"=> $courseJson,
  201.                 "message"=> "OK",
  202.                 "status_code"=> 200
  203.             ]);
  204.         }catch(\Exception $e){
  205.             return $this->json([
  206.                 "message"=>$e->getMessage(),
  207.                 "code"=> $e->getCode()
  208.             ], 500);
  209.         }
  210.     }
  211.     #[Route('api/delete-user-to-participants/{id}/{userId}',  methods: ["GET"])]
  212.     public function deleteUser($id, $userId){
  213.         
  214.         try{
  215.             $course = $this->courseRepo->find($id);
  216.             $user = $this->userRepo->find($userId);
  217.             $courseParticipants = $this->courseParticipantsRepo->findBy(["course"=> $course]);
  218.             foreach ($courseParticipants as $part) {
  219.                 if($part->getParticipants()->contains($user)){
  220.                     $bodyMail = $this->mailer->createBodyMail('mails/course_delete_mail.html.twig', ['user' => $user, "course" => $course]);
  221.                     $this->mailer->sendEmail(from: 'abidjan.net@weblogy.com', to: $user->getEmail(), subject: 'Demande participation', body: $bodyMail);
  222.                     $part->setIsAcceped(false);
  223.                     $this->em->persist($part);
  224.                     $this->em->flush();
  225.                 }
  226.             }
  227.             $courseJson = SerializerHelper::getJson($this->serializer, $course, "show_course");
  228.             return $this->json([
  229.                 "data"=> $courseJson,
  230.                 "message"=> "OK",
  231.                 "status_code"=> 200
  232.             ]);
  233.         }catch(\Exception $e){
  234.             return $this->json([
  235.                 "message"=>$e->getMessage(),
  236.                 "code"=> $e->getCode()
  237.             ], 500);
  238.         }
  239.     }
  240.     #[Route('/add-type_cours', name: 'add_course_type', methods: ["POST"])]
  241.     public function addCourseType(Request $request): Response
  242.     {
  243.         $data = $request->request->all();
  244.         if($data == []){
  245.             $data = json_decode($request->getContent(), true);
  246.         }
  247.         
  248.         return $this->CourseService->addCourseType($data);
  249.     }
  250.     
  251.     #[Route('/update-type_cours/{id}', name: 'update_cours_type', methods: ["POST"])]
  252.     public function updateCourseType($id, Request $request): Response
  253.     {
  254.         $data = $request->request->all();
  255.         if($data == []){
  256.             $data = json_decode($request->getContent(), true);
  257.         }
  258.         
  259.         return $this->CourseService->updateCoursType($id,$data);
  260.     }
  261.     #[Route('get-course-types', name: 'get_course_types', methods: ["GET"])]
  262.     public function getAllCourseType()
  263.     {
  264.         return $this->CourseService->getAllCourseType();
  265.     }
  266.     #[Route('api/check-if_user_is-participants/{courseID}', name: 'check_if_user_is_participants', methods: ["GET"])]
  267.     public function checkIfUserIsParticipants($courseID){
  268.         return $this->CourseService->checkIfUserIsParticipants($courseID);
  269.     }
  270.     public function finalizePayment($course){
  271.         $montant = $course->getPrice();
  272.         $reference = $course->getCommande()->getReference();
  273.         $user_firstname = $course->getCommande()->getUser()->getPrenoms();
  274.         $user_lastname = $course->getCommande()->getUser()->getNom();
  275.         $user_email = $course->getCommande()->getUser()->getEmail();
  276.         $phoneNumber = $course->getCommande()->getUser()->getNumero();
  277.         $raison = `Finaliser Paiement Cours de Cuisine`;
  278.         $payementLink = "https://pay.apaym.com/paiementabidjannet/m=$montant/i=225/t=$phoneNumber/n=$user_firstname/p=$user_lastname/e=$user_email/r=$raison/k=$reference/l=1";
  279.         return $payementLink;
  280.     }
  281. }