src/Controller/InscriptionSite/ApiElearning.php line 282

Open in your IDE?
  1. <?php
  2. namespace App\Controller\InscriptionSite;
  3. use App\Controller\ContratElearningController;
  4. use App\Controller\MailerController;
  5. use App\Entity\ContratElearning;
  6. use App\Entity\Thinkific;
  7. use App\Repository\ContratElearningRepository;
  8. use App\Repository\InformationepsRepository;
  9. use App\Repository\ThinkificRepository;
  10. use App\Repository\UniteInscriptionRepository;
  11. use Proxies\__CG__\App\Entity\UniteInscription;
  12. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  13. use Symfony\Component\HttpFoundation\JsonResponse;
  14. use Symfony\Contracts\HttpClient\HttpClientInterface;
  15. use Symfony\Component\HttpFoundation\Request;
  16. use Symfony\Component\Mailer\MailerInterface;
  17. use Symfony\Component\Routing\Annotation\Route;
  18. use Symfony\Contracts\HttpClient\Exception\ExceptionInterface;
  19. use Symfony\Component\HttpFoundation\Response;
  20. /**
  21.  * @Route("/thinkific")
  22.  */
  23. class ApiElearning extends AbstractController
  24. {
  25.     private $client;
  26.     public function __construct(HttpClientInterface $client)
  27.     {
  28.         $this->client $client;
  29.     }
  30.     /**
  31.      * @Route("/user")
  32.      */
  33.     public function checkUser($userFromInscritThinkificRepository $thinkificRepositoryMailerController $mailerMailerInterface $mailerInterfaceUniteInscriptionRepository $uniteInscriptionRepository$mailDifferent)
  34.     {
  35.         $email urlencode($userFromInscrit['email']);
  36.         /*$this->client->withOptions([
  37.             'base_uri' => '',
  38.             'headers' => ['header-name' => 'header-value']
  39.         ]);*/
  40.         try {
  41.             $response $this->client->request(
  42.                 'GET',
  43.                 'https://api.thinkific.com/api/public/v1/users?page=1&limit=25&query%5Bemail%5D=' $email,
  44.                 [
  45.                     'headers' => [
  46.                         'accept' => 'application/json',
  47.                         'X-Auth-API-Key' => '5025ff66cae4bd7a0f2d349cac7fa09e',
  48.                         'X-Auth-Subdomain' => 'ecp-s-site'
  49.                     ],
  50.                     /*'query' => [
  51.                         "email"=> "bob@example.com",
  52.                     ]*/
  53.                 ]
  54.             );
  55.             $statusCode $response->getStatusCode();
  56.             // $contentType = 'application/json'
  57.             $content $response->getContent();
  58.             // $content = '{"id":521583, "name":"symfony-docs", ...}'
  59.             $content $response->toArray();
  60.             // $content = ['id' => 521583, 'name' => 'symfony-docs', ...]
  61.             if (count($content['items']) == 0) {
  62.                 //dd(count($content['items']));
  63.                 $password uniqid();
  64.                 $user $this->createUser($userFromInscrit$password);
  65.                 $this->enrollUser(['id' => $user'email' => $userFromInscrit['email']], $userFromInscrit["formation"], $userFromInscrit["datedebut"], $userFromInscrit["datefin"], $mailer$mailerInterface$password$userFromInscrit["uniteinscription"]);
  66.                 if ($mailDifferent) {
  67.                     //dd("re");
  68.                     $thinkific $thinkificRepository->findOneBy(["uniteinscription" => $userFromInscrit['inscrit']]);
  69.                     //$this->delete($thinkific->getEmail());
  70.                     $thinkific->setEmail($userFromInscrit['email'])
  71.                         ->setStartDate(new \DateTime(date('Y-m-d'strtotime($userFromInscrit['datedebut']))));
  72.                     $thinkificRepository->add($thinkific);
  73.                 } else {
  74.                     $thinkific = new Thinkific();
  75.                     //dd($uniteInscriptionRepository->find($userFromInscrit['inscrit']));
  76.                     $thinkific->setUniteinscription($uniteInscriptionRepository->find($userFromInscrit['uniteinscription']))
  77.                         ->setEmail($userFromInscrit["email"])
  78.                         ->setPassword($password)
  79.                         ->setStartDate(new \DateTime(date('Y-m-d'strtotime($userFromInscrit['datedebut']))));
  80.                     $thinkificRepository->add($thinkifictrue);
  81.                     //dd($thinkific);
  82.                 }
  83.             } elseif (count($content['items']) > 0) {
  84.                 //dd($content);
  85.                 $thinkific $thinkificRepository->findOneBy(["uniteinscription" => $userFromInscrit['inscrit']]);
  86.                 if ($thinkific == null) {
  87.                     $thinkific = new Thinkific();
  88.                     $thinkific->setUniteinscription($uniteInscriptionRepository->find($userFromInscrit['inscrit']))
  89.                         ->setEmail($userFromInscrit["email"])
  90.                         ->setPassword(uniqid())
  91.                         ->setStartDate(new \DateTime(date('Y-m-d'strtotime($userFromInscrit['datedebut']))));
  92.                     $thinkificRepository->add($thinkifictrue);
  93.                 }
  94.                 $this->enrollUser(['id' => $content['items'][0]['id'], 'email' => $userFromInscrit['email']], $userFromInscrit["formation"], $userFromInscrit["datedebut"], $userFromInscrit["datefin"], $mailer$mailerInterface""$userFromInscrit["uniteinscription"]);
  95.             }
  96.         } catch (ExceptionInterface $e) {
  97.         }
  98.     }
  99.     public function createUser($user$password)
  100.     {
  101.         /*$this->client->withOptions([
  102.             'base_uri' => '',
  103.             'headers' => ['header-name' => 'header-value']
  104.         ]);*/
  105.         //try{
  106.         $response $this->client->request(
  107.             'POST',
  108.             'https://api.thinkific.com/api/public/v1/users',
  109.             [
  110.                 'body' => [
  111.                     "first_name" => $user["firstname"],
  112.                     "last_name" => $user["lastname"],
  113.                     "email" => $user["email"],
  114.                     "password" => $password,
  115.                     /*"roles"=> [
  116.                         "affiliate"
  117.                         ],*/
  118.                     //"affiliate_commission"=> 0,
  119.                     //"affiliate_payout_email"=> "rrbook9600@gmail.com"
  120.                 ],
  121.                 'headers' => [
  122.                     'accept' => 'application/json',
  123.                     'X-Auth-API-Key' => '5025ff66cae4bd7a0f2d349cac7fa09e',
  124.                     'X-Auth-Subdomain' => 'ecp-s-site'
  125.                 ]
  126.             ]
  127.         );
  128.         $statusCode $response->getStatusCode();
  129.         //$headers = $response->getHeaders();
  130.         // $contentType = 'application/json'
  131.         $content $response->getContent();
  132.         // $content = '{"id":521583, "name":"symfony-docs", ...}'
  133.         $content $response->toArray();
  134.         // $content = ['id' => 521583, 'name' => 'symfony-docs', ...]
  135.         return $content["id"];
  136.         /*}catch(ExceptionInterface $e){
  137.             dd($e);
  138.         }*/
  139.     }
  140.     /**
  141.      * @route("/user/create")
  142.      */
  143.     public function createUserText()
  144.     {
  145.         /*$this->client->withOptions([
  146.               'base_uri' => '',
  147.               'headers' => ['header-name' => 'header-value']
  148.           ]);*/
  149.         //try{
  150.         $response $this->client->request(
  151.             'POST',
  152.             'https://api.thinkific.com/api/public/v1/users',
  153.             [
  154.                 'body' => [
  155.                     "first_name" => "firstname",
  156.                     "last_name" => "lastname",
  157.                     "email" => "email@dsdh.vrv",
  158.                     "password" => "password",
  159.                     /*"roles"=> [
  160.                           "affiliate"
  161.                           ],*/
  162.                     //"affiliate_commission"=> 0,
  163.                     //"affiliate_payout_email"=> "rrbook9600@gmail.com"
  164.                 ],
  165.                 'headers' => [
  166.                     'accept' => 'application/json',
  167.                     'X-Auth-API-Key' => '5025ff66cae4bd7a0f2d349cac7fa09e',
  168.                     'X-Auth-Subdomain' => 'ecp-s-site'
  169.                 ]
  170.             ]
  171.         );
  172.         $statusCode $response->getStatusCode();
  173.         //$headers = $response->getHeaders();
  174.         // $contentType = 'application/json'
  175.         $content $response->getContent();
  176.         // $content = '{"id":521583, "name":"symfony-docs", ...}'
  177.         $content $response->toArray();
  178.         // $content = ['id' => 521583, 'name' => 'symfony-docs', ...]
  179.         return new JsonResponse($content['id']);
  180.         /*}catch(ExceptionInterface $e){
  181.               dd($e);
  182.           }*/
  183.     }
  184.     /**
  185.      * @route("/user/enrole")
  186.      */
  187.     public function enrollUser($user$formation$datedebut$datefinMailerController $mailerMailerInterface $mailerInterface$password$uniteinscription null)
  188.     {
  189.         /*$this->client->withOptions([
  190.               'base_uri' => '',
  191.               'headers' => ['header-name' => 'header-value']
  192.           ]);*/
  193.         try {
  194.             $courseId "2124353"//transport de marchandise
  195.             if ($formation == "VTC") {
  196.                 $courseId "2138537";
  197.             } else if ($formation == "TPMR") {
  198.                 $courseId "2198414";
  199.             }
  200.             if ($uniteinscription != null) {
  201.                 // if (strtolower($uniteinscription->getCarte()->getWording()) == "examen vtc (pack de 10)") {
  202.                 //     $courseId = "2315302";
  203.                 // }
  204.                 // else if (strtolower($uniteinscription->getCarte()->getWording()) == "examen vtc (pack de 25)") {
  205.                 //     $courseId = "2258682";
  206.                 // }
  207.                 // else if (strtolower($uniteinscription->getCarte()->getWording()) == "examen vtc (pack de 50)") {
  208.                 //     $courseId = "2285278";
  209.                 // }
  210.                 // else if (strtolower($uniteinscription->getCarte()->getWording()) == "examen vtc (pack de 70)") {
  211.                 //     $courseId = "2315304";
  212.                 // }
  213.                 $courseId $uniteinscription->getCarte()->getThinkificFormationId();
  214.             }
  215.             $response $this->client->request(
  216.                 'POST',
  217.                 'https://api.thinkific.com/api/public/v1/enrollments',
  218.                 [
  219.                     'body' => [
  220.                         "course_id" => $courseId,
  221.                         "user_id" => $user['id'],
  222.                         "activated_at" => date("Y-m-d\TH:i:s.000\Z"strtotime($datedebut)),
  223.                         "expiry_date" => date("Y-m-d\TH:i:s.000\Z"strtotime($datefin)),
  224.                         /*"course_id"=> "2138537",
  225.                           "user_id"=> "126954539",
  226.                           "activated_at"=> "2027-01-01T01:01:00Z",
  227.                           "expiry_date"=> "2029-01-01T01:01:00Z"*/
  228.                     ],
  229.                     'headers' => [
  230.                         'accept' => 'application/json',
  231.                         'X-Auth-API-Key' => '5025ff66cae4bd7a0f2d349cac7fa09e',
  232.                         'X-Auth-Subdomain' => 'ecp-s-site'
  233.                     ]
  234.                 ]
  235.             );
  236.             //dd($formation);
  237.             $statusCode $response->getStatusCode();
  238.             $content $response->getContent();
  239.             //die;
  240.             if ($statusCode == 201 || $statusCode == 204) {
  241.                 $mailer->sendThinkificMail($mailerInterface$user['email'], $password$datedebut$datefin);
  242.                 $this->addFlash("messagerenvoiemailthinkific", [1"Les identifiants d'accès ont été envoyés sur le mail $user[email]. Veuillez vérifier aussi vos spams"]);
  243.             }
  244.             //$headers = $response->getHeaders();
  245.             // $contentType = 'application/json'
  246.             $content $response->getContent();
  247.             // $content = '{"id":521583, "name":"symfony-docs", ...}'
  248.             $content $response->toArray();
  249.             // $content = ['id' => 521583, 'name' => 'symfony-docs', ...]
  250.             return new JsonResponse($content);
  251.         } catch (ExceptionInterface $e) {
  252.             //dump($user['id']['id']);
  253.         }
  254.     }
  255.     /**
  256.      * @Route("/renvoie",name="app_renvoie_mail_thinkific")
  257.      */
  258.     public function Renvoi(ContratElearningController $contratElearningControllerContratElearningRepository $contratElearningRepositoryRequest $requestMailerInterface $mailerInterfaceUniteInscriptionRepository $uniteInscriptionRepositoryThinkificRepository $thinkificRepositoryMailerController $mailerInformationepsRepository $informationepsRepository)
  259.     {
  260.         $uniteinscription $uniteInscriptionRepository->find($request->query->get('selected'));
  261.         $thinkific $thinkificRepository->findOneBy(["uniteinscription" => $uniteinscription]);
  262.         $contratExist $contratElearningRepository->findOneBy(['uniteinscription' => $uniteinscription]);
  263.         if ((int) $uniteinscription->getCarte()->getDuree() > && (int) $uniteinscription->getCarte()->getThinkificFormationId() > 0) {
  264.             foreach ($uniteinscription->getInscrits() as $key => $value) {
  265.                 if ($value->getElearning() != null) {
  266.                     $mailer->sendThinkificMail(
  267.                         $mailerInterface,
  268.                         $uniteinscription->getTier()->getEmail(),
  269.                         $thinkific->getPassword(),
  270.                         $value->getElearning()->getDatedebut(),
  271.                         $value->getElearning()->getDatefin()
  272.                     );
  273.                 }
  274.             }
  275.         } else {
  276.             if ($contratExist == null) {
  277.                 $contratElearning = new ContratElearning();
  278.                 $contratElearning->setUniteinscription($uniteinscription)
  279.                     ->setLevel(1//1 pour envoyer, 2 pour accepter et 3 pour rejeter
  280.                     ->setCreatedAt(new \DateTimeImmutable())
  281.                     ->setToken(str_shuffle(base64_encode($uniteinscription->getId()) . date('U')));
  282.                 $contratElearningRepository->add($contratElearningtrue);
  283.                 $mailer->sendContratElearning($mailerInterface$uniteinscription$contratElearning->getToken());
  284.                 $this->addFlash("messagerenvoiemailthinkific", [1"Mail de contrat"]);
  285.             }
  286.             //send contrat only if it has level 1
  287.             elseif ($contratExist->getLevel() == 1) {
  288.                 $mailer->sendContratElearning($mailerInterface$uniteinscription$contratExist->getToken());
  289.                 $this->addFlash("messagerenvoiemailthinkific", [1"Mail de contrat"]);
  290.             } elseif ($contratExist->getLevel() == 2) {
  291.                 if ($thinkific != null) {
  292.                     if ($uniteinscription->getTier()->getEmail() == $thinkific->getEmail()) {
  293.                         foreach ($uniteinscription->getInscrits() as $key => $value) {
  294.                             if ($value->getElearning() != null) {
  295.                                 $mailer->sendThinkificMail(
  296.                                     $mailerInterface,
  297.                                     $uniteinscription->getTier()->getEmail(),
  298.                                     $thinkific->getPassword(),
  299.                                     $value->getElearning()->getDatedebut(),
  300.                                     $value->getElearning()->getDatefin()
  301.                                 );
  302.                                 $contratElearningController->generate($contratExist$informationepsRepository);
  303.                                 $mailer->sendContratFile($mailerInterface$contratExist->getUniteinscription(), "contratelearning/" 'contrat_' $this->renameFile($contratExist->getUniteinscription()->getTier()->getLastname() . '_' $contratExist->getUniteinscription()->getTier()->getFirstname()) . ".pdf");
  304.                                 $this->addFlash("messagerenvoiemailthinkific", [1"Les identifiants d'accès ont été envoyés sur le mail " $uniteinscription->getTier()->getEmail() . ". Veuillez vérifier aussi vos spams"]);
  305.                             }
  306.                         }
  307.                     } elseif ($uniteinscription->getTier()->getEmail() != $thinkific->getEmail()) {
  308.                         foreach ($uniteinscription->getInscrits() as $key => $value) {
  309.                             if ($value->getElearning() != null) {
  310.                                 $formationName '';
  311.                                 $formationName $value->getFormation()->getWording();
  312.                                 break;
  313.                                 $this->checkUser([
  314.                                     'inscrit' => $uniteinscription->getId(),
  315.                                     'lastname' => $uniteinscription->getTier()->getLastname(),
  316.                                     'firstname' => $uniteinscription->getTier()->getFirstname(),
  317.                                     'email' => $uniteinscription->getTier()->getEmail(),
  318.                                     'formation' => $formationName,
  319.                                     //code de dssp sur thinkific
  320.                                     'datedebut' => $value->getSession()->getStartDate()->format('Y-m-d'),
  321.                                     'datefin' => $value->getSession()->getEndDate()->format('Y-m-d'),
  322.                                 ], $thinkificRepository$mailer$mailerInterface$uniteInscriptionRepositorytrue);
  323.                             }
  324.                         }
  325.                     }
  326.                     //$this->addFlash("messagerenvoiemailthinkific",[1,"Mail renvoyé"]);
  327.                 } else
  328.                     $this->addFlash("messagerenvoiemailthinkific", [0"Ce inscrit n'existe pas sur Thinkific"]);
  329.             }
  330.         }
  331.         return $this->redirect($request->headers->get('referer'));
  332.     }
  333.     /**
  334.      * @Route("/renvoie-preinscription",name="app_renvoie_mail_preinscription")
  335.      */
  336.     public function RenvoiMailPreinscription(Request $requestMailerInterface $mailerInterfaceUniteInscriptionRepository $uniteInscriptionRepositoryMailerController $mailer)
  337.     {
  338.         $uniteinscription $uniteInscriptionRepository->find($request->query->get('inscrit'));
  339.         if ($uniteinscription == null) {
  340.             $this->addFlash("messagerenvoiemailthinkific", [0"Nous n'avons pas pu envoyer le mail de préinscription car l'inscrit n'a pas été retrouvé!"]);
  341.             return $this->redirect($request->headers->get('referer'));
  342.         }
  343.         $tier $uniteinscription->getTier();
  344.         if ($tier->getEmail() != null) {
  345.             $mailer->sendPreinscriptionMail($mailerInterface$uniteinscription);
  346.             $this->addFlash("messagerenvoiemailthinkific", [1"Le mail a été bien renvoyé"]);
  347.         } else
  348.             $this->addFlash("messagerenvoiemailthinkific", [0"Le stagiaire " $tier->getLastname() . " " $tier->getFirstname() . " ne dispose pas d'adresse mail. Il ne recevra donc pas de mail de préinscription!"]);
  349.         return $this->redirect($request->headers->get('referer'));
  350.     }
  351.     public function renameFile($filename)
  352.     {
  353.         $search = array('À''Á''Â''Ã''Ä''Å''Ç''È''É''Ê''Ë''Ì''Í''Î''Ï''Ò''Ó''Ô''Õ''Ö''Ù''Ú''Û''Ü''Ý''à''á''â''ã''ä''å''ç''è''é''ê''ë''ì''í''î''ï''ð''ò''ó''ô''õ''ö''ù''ú''û''ü''ý''ÿ');
  354.         //Préférez str_replace à strtr car strtr travaille directement sur les octets, ce qui pose problème en UTF-8
  355.         $replace = array('A''A''A''A''A''A''C''E''E''E''E''I''I''I''I''O''O''O''O''O''U''U''U''U''Y''a''a''a''a''a''a''c''e''e''e''e''i''i''i''i''o''o''o''o''o''o''u''u''u''u''y''y');
  356.         $filename str_replace($search$replace$filename);
  357.         return $filename//On retourne le résultat
  358.     }
  359. }