<?php
namespace App\Controller\InscriptionSite;
use App\Controller\ContratElearningController;
use App\Controller\MailerController;
use App\Entity\ContratElearning;
use App\Entity\Thinkific;
use App\Repository\ContratElearningRepository;
use App\Repository\InformationepsRepository;
use App\Repository\ThinkificRepository;
use App\Repository\UniteInscriptionRepository;
use Proxies\__CG__\App\Entity\UniteInscription;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Contracts\HttpClient\HttpClientInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Contracts\HttpClient\Exception\ExceptionInterface;
use Symfony\Component\HttpFoundation\Response;
/**
* @Route("/thinkific")
*/
class ApiElearning extends AbstractController
{
private $client;
public function __construct(HttpClientInterface $client)
{
$this->client = $client;
}
/**
* @Route("/user")
*/
public function checkUser($userFromInscrit, ThinkificRepository $thinkificRepository, MailerController $mailer, MailerInterface $mailerInterface, UniteInscriptionRepository $uniteInscriptionRepository, $mailDifferent)
{
$email = urlencode($userFromInscrit['email']);
/*$this->client->withOptions([
'base_uri' => '',
'headers' => ['header-name' => 'header-value']
]);*/
try {
$response = $this->client->request(
'GET',
'https://api.thinkific.com/api/public/v1/users?page=1&limit=25&query%5Bemail%5D=' . $email,
[
'headers' => [
'accept' => 'application/json',
'X-Auth-API-Key' => '5025ff66cae4bd7a0f2d349cac7fa09e',
'X-Auth-Subdomain' => 'ecp-s-site'
],
/*'query' => [
"email"=> "bob@example.com",
]*/
]
);
$statusCode = $response->getStatusCode();
// $contentType = 'application/json'
$content = $response->getContent();
// $content = '{"id":521583, "name":"symfony-docs", ...}'
$content = $response->toArray();
// $content = ['id' => 521583, 'name' => 'symfony-docs', ...]
if (count($content['items']) == 0) {
//dd(count($content['items']));
$password = uniqid();
$user = $this->createUser($userFromInscrit, $password);
$this->enrollUser(['id' => $user, 'email' => $userFromInscrit['email']], $userFromInscrit["formation"], $userFromInscrit["datedebut"], $userFromInscrit["datefin"], $mailer, $mailerInterface, $password, $userFromInscrit["uniteinscription"]);
if ($mailDifferent) {
//dd("re");
$thinkific = $thinkificRepository->findOneBy(["uniteinscription" => $userFromInscrit['inscrit']]);
//$this->delete($thinkific->getEmail());
$thinkific->setEmail($userFromInscrit['email'])
->setStartDate(new \DateTime(date('Y-m-d', strtotime($userFromInscrit['datedebut']))));
$thinkificRepository->add($thinkific);
} else {
$thinkific = new Thinkific();
//dd($uniteInscriptionRepository->find($userFromInscrit['inscrit']));
$thinkific->setUniteinscription($uniteInscriptionRepository->find($userFromInscrit['uniteinscription']))
->setEmail($userFromInscrit["email"])
->setPassword($password)
->setStartDate(new \DateTime(date('Y-m-d', strtotime($userFromInscrit['datedebut']))));
$thinkificRepository->add($thinkific, true);
//dd($thinkific);
}
} elseif (count($content['items']) > 0) {
//dd($content);
$thinkific = $thinkificRepository->findOneBy(["uniteinscription" => $userFromInscrit['inscrit']]);
if ($thinkific == null) {
$thinkific = new Thinkific();
$thinkific->setUniteinscription($uniteInscriptionRepository->find($userFromInscrit['inscrit']))
->setEmail($userFromInscrit["email"])
->setPassword(uniqid())
->setStartDate(new \DateTime(date('Y-m-d', strtotime($userFromInscrit['datedebut']))));
$thinkificRepository->add($thinkific, true);
}
$this->enrollUser(['id' => $content['items'][0]['id'], 'email' => $userFromInscrit['email']], $userFromInscrit["formation"], $userFromInscrit["datedebut"], $userFromInscrit["datefin"], $mailer, $mailerInterface, "", $userFromInscrit["uniteinscription"]);
}
} catch (ExceptionInterface $e) {
}
}
public function createUser($user, $password)
{
/*$this->client->withOptions([
'base_uri' => '',
'headers' => ['header-name' => 'header-value']
]);*/
//try{
$response = $this->client->request(
'POST',
'https://api.thinkific.com/api/public/v1/users',
[
'body' => [
"first_name" => $user["firstname"],
"last_name" => $user["lastname"],
"email" => $user["email"],
"password" => $password,
/*"roles"=> [
"affiliate"
],*/
//"affiliate_commission"=> 0,
//"affiliate_payout_email"=> "rrbook9600@gmail.com"
],
'headers' => [
'accept' => 'application/json',
'X-Auth-API-Key' => '5025ff66cae4bd7a0f2d349cac7fa09e',
'X-Auth-Subdomain' => 'ecp-s-site'
]
]
);
$statusCode = $response->getStatusCode();
//$headers = $response->getHeaders();
// $contentType = 'application/json'
$content = $response->getContent();
// $content = '{"id":521583, "name":"symfony-docs", ...}'
$content = $response->toArray();
// $content = ['id' => 521583, 'name' => 'symfony-docs', ...]
return $content["id"];
/*}catch(ExceptionInterface $e){
dd($e);
}*/
}
/**
* @route("/user/create")
*/
public function createUserText()
{
/*$this->client->withOptions([
'base_uri' => '',
'headers' => ['header-name' => 'header-value']
]);*/
//try{
$response = $this->client->request(
'POST',
'https://api.thinkific.com/api/public/v1/users',
[
'body' => [
"first_name" => "firstname",
"last_name" => "lastname",
"email" => "email@dsdh.vrv",
"password" => "password",
/*"roles"=> [
"affiliate"
],*/
//"affiliate_commission"=> 0,
//"affiliate_payout_email"=> "rrbook9600@gmail.com"
],
'headers' => [
'accept' => 'application/json',
'X-Auth-API-Key' => '5025ff66cae4bd7a0f2d349cac7fa09e',
'X-Auth-Subdomain' => 'ecp-s-site'
]
]
);
$statusCode = $response->getStatusCode();
//$headers = $response->getHeaders();
// $contentType = 'application/json'
$content = $response->getContent();
// $content = '{"id":521583, "name":"symfony-docs", ...}'
$content = $response->toArray();
// $content = ['id' => 521583, 'name' => 'symfony-docs', ...]
return new JsonResponse($content['id']);
/*}catch(ExceptionInterface $e){
dd($e);
}*/
}
/**
* @route("/user/enrole")
*/
public function enrollUser($user, $formation, $datedebut, $datefin, MailerController $mailer, MailerInterface $mailerInterface, $password, $uniteinscription = null)
{
/*$this->client->withOptions([
'base_uri' => '',
'headers' => ['header-name' => 'header-value']
]);*/
try {
$courseId = "2124353"; //transport de marchandise
if ($formation == "VTC") {
$courseId = "2138537";
} else if ($formation == "TPMR") {
$courseId = "2198414";
}
if ($uniteinscription != null) {
// if (strtolower($uniteinscription->getCarte()->getWording()) == "examen vtc (pack de 10)") {
// $courseId = "2315302";
// }
// else if (strtolower($uniteinscription->getCarte()->getWording()) == "examen vtc (pack de 25)") {
// $courseId = "2258682";
// }
// else if (strtolower($uniteinscription->getCarte()->getWording()) == "examen vtc (pack de 50)") {
// $courseId = "2285278";
// }
// else if (strtolower($uniteinscription->getCarte()->getWording()) == "examen vtc (pack de 70)") {
// $courseId = "2315304";
// }
$courseId = $uniteinscription->getCarte()->getThinkificFormationId();
}
$response = $this->client->request(
'POST',
'https://api.thinkific.com/api/public/v1/enrollments',
[
'body' => [
"course_id" => $courseId,
"user_id" => $user['id'],
"activated_at" => date("Y-m-d\TH:i:s.000\Z", strtotime($datedebut)),
"expiry_date" => date("Y-m-d\TH:i:s.000\Z", strtotime($datefin)),
/*"course_id"=> "2138537",
"user_id"=> "126954539",
"activated_at"=> "2027-01-01T01:01:00Z",
"expiry_date"=> "2029-01-01T01:01:00Z"*/
],
'headers' => [
'accept' => 'application/json',
'X-Auth-API-Key' => '5025ff66cae4bd7a0f2d349cac7fa09e',
'X-Auth-Subdomain' => 'ecp-s-site'
]
]
);
//dd($formation);
$statusCode = $response->getStatusCode();
$content = $response->getContent();
//die;
if ($statusCode == 201 || $statusCode == 204) {
$mailer->sendThinkificMail($mailerInterface, $user['email'], $password, $datedebut, $datefin);
$this->addFlash("messagerenvoiemailthinkific", [1, "Les identifiants d'accès ont été envoyés sur le mail $user[email]. Veuillez vérifier aussi vos spams"]);
}
//$headers = $response->getHeaders();
// $contentType = 'application/json'
$content = $response->getContent();
// $content = '{"id":521583, "name":"symfony-docs", ...}'
$content = $response->toArray();
// $content = ['id' => 521583, 'name' => 'symfony-docs', ...]
return new JsonResponse($content);
} catch (ExceptionInterface $e) {
//dump($user['id']['id']);
}
}
/**
* @Route("/renvoie",name="app_renvoie_mail_thinkific")
*/
public function Renvoi(ContratElearningController $contratElearningController, ContratElearningRepository $contratElearningRepository, Request $request, MailerInterface $mailerInterface, UniteInscriptionRepository $uniteInscriptionRepository, ThinkificRepository $thinkificRepository, MailerController $mailer, InformationepsRepository $informationepsRepository)
{
$uniteinscription = $uniteInscriptionRepository->find($request->query->get('selected'));
$thinkific = $thinkificRepository->findOneBy(["uniteinscription" => $uniteinscription]);
$contratExist = $contratElearningRepository->findOneBy(['uniteinscription' => $uniteinscription]);
if ((int) $uniteinscription->getCarte()->getDuree() > 0 && (int) $uniteinscription->getCarte()->getThinkificFormationId() > 0) {
foreach ($uniteinscription->getInscrits() as $key => $value) {
if ($value->getElearning() != null) {
$mailer->sendThinkificMail(
$mailerInterface,
$uniteinscription->getTier()->getEmail(),
$thinkific->getPassword(),
$value->getElearning()->getDatedebut(),
$value->getElearning()->getDatefin()
);
}
}
} else {
if ($contratExist == null) {
$contratElearning = new ContratElearning();
$contratElearning->setUniteinscription($uniteinscription)
->setLevel(1) //1 pour envoyer, 2 pour accepter et 3 pour rejeter
->setCreatedAt(new \DateTimeImmutable())
->setToken(str_shuffle(base64_encode($uniteinscription->getId()) . date('U')));
$contratElearningRepository->add($contratElearning, true);
$mailer->sendContratElearning($mailerInterface, $uniteinscription, $contratElearning->getToken());
$this->addFlash("messagerenvoiemailthinkific", [1, "Mail de contrat"]);
}
//send contrat only if it has level 1
elseif ($contratExist->getLevel() == 1) {
$mailer->sendContratElearning($mailerInterface, $uniteinscription, $contratExist->getToken());
$this->addFlash("messagerenvoiemailthinkific", [1, "Mail de contrat"]);
} elseif ($contratExist->getLevel() == 2) {
if ($thinkific != null) {
if ($uniteinscription->getTier()->getEmail() == $thinkific->getEmail()) {
foreach ($uniteinscription->getInscrits() as $key => $value) {
if ($value->getElearning() != null) {
$mailer->sendThinkificMail(
$mailerInterface,
$uniteinscription->getTier()->getEmail(),
$thinkific->getPassword(),
$value->getElearning()->getDatedebut(),
$value->getElearning()->getDatefin()
);
$contratElearningController->generate($contratExist, $informationepsRepository);
$mailer->sendContratFile($mailerInterface, $contratExist->getUniteinscription(), "contratelearning/" . 'contrat_' . $this->renameFile($contratExist->getUniteinscription()->getTier()->getLastname() . '_' . $contratExist->getUniteinscription()->getTier()->getFirstname()) . ".pdf");
$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"]);
}
}
} elseif ($uniteinscription->getTier()->getEmail() != $thinkific->getEmail()) {
foreach ($uniteinscription->getInscrits() as $key => $value) {
if ($value->getElearning() != null) {
$formationName = '';
$formationName = $value->getFormation()->getWording();
break;
$this->checkUser([
'inscrit' => $uniteinscription->getId(),
'lastname' => $uniteinscription->getTier()->getLastname(),
'firstname' => $uniteinscription->getTier()->getFirstname(),
'email' => $uniteinscription->getTier()->getEmail(),
'formation' => $formationName,
//code de dssp sur thinkific
'datedebut' => $value->getSession()->getStartDate()->format('Y-m-d'),
'datefin' => $value->getSession()->getEndDate()->format('Y-m-d'),
], $thinkificRepository, $mailer, $mailerInterface, $uniteInscriptionRepository, true);
}
}
}
//$this->addFlash("messagerenvoiemailthinkific",[1,"Mail renvoyé"]);
} else
$this->addFlash("messagerenvoiemailthinkific", [0, "Ce inscrit n'existe pas sur Thinkific"]);
}
}
return $this->redirect($request->headers->get('referer'));
}
/**
* @Route("/renvoie-preinscription",name="app_renvoie_mail_preinscription")
*/
public function RenvoiMailPreinscription(Request $request, MailerInterface $mailerInterface, UniteInscriptionRepository $uniteInscriptionRepository, MailerController $mailer)
{
$uniteinscription = $uniteInscriptionRepository->find($request->query->get('inscrit'));
if ($uniteinscription == null) {
$this->addFlash("messagerenvoiemailthinkific", [0, "Nous n'avons pas pu envoyer le mail de préinscription car l'inscrit n'a pas été retrouvé!"]);
return $this->redirect($request->headers->get('referer'));
}
$tier = $uniteinscription->getTier();
if ($tier->getEmail() != null) {
$mailer->sendPreinscriptionMail($mailerInterface, $uniteinscription);
$this->addFlash("messagerenvoiemailthinkific", [1, "Le mail a été bien renvoyé"]);
} else
$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!"]);
return $this->redirect($request->headers->get('referer'));
}
public function renameFile($filename)
{
$search = array('À', 'Á', 'Â', 'Ã', 'Ä', 'Å', 'Ç', 'È', 'É', 'Ê', 'Ë', 'Ì', 'Í', 'Î', 'Ï', 'Ò', 'Ó', 'Ô', 'Õ', 'Ö', 'Ù', 'Ú', 'Û', 'Ü', 'Ý', 'à', 'á', 'â', 'ã', 'ä', 'å', 'ç', 'è', 'é', 'ê', 'ë', 'ì', 'í', 'î', 'ï', 'ð', 'ò', 'ó', 'ô', 'õ', 'ö', 'ù', 'ú', 'û', 'ü', 'ý', 'ÿ');
//Préférez str_replace à strtr car strtr travaille directement sur les octets, ce qui pose problème en UTF-8
$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');
$filename = str_replace($search, $replace, $filename);
return $filename; //On retourne le résultat
}
}