<?php
namespace App\Controller;
use App\Entity\Users;
use App\Entity\UsersAmbienti;
use App\Entity\Questionari;
use App\Entity\QuestionariIniziati;
use App\Entity\Domande;
use App\Entity\Risposte;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Doctrine\Persistence\ManagerRegistry;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\Yaml\Yaml;
class WebserviceController extends AbstractController
{
private $requestStack;
public function __construct(RequestStack $requestStack)
{
$this->requestStack = $requestStack;
}
private function checkAuth($auth, $doctrine)
{
$a = explode(" ", $auth);
if ($a[0] == "Basic") {
$t = $a[1];
if ($t == "") {
return false;
} else {
$t = explode(".", $t);
$t0_header = base64_decode($t[0]);
$t1_payload = base64_decode($t[1]);
$t0_header = json_decode($t0_header);
if ($t0_header) {
$t1_payload = json_decode($t1_payload);
if ($t1_payload) {
$from = $t1_payload->from;
$to = $t1_payload->to;
if ($from <= $t1_payload->from && $to >= $t1_payload->to) {
$user = $doctrine->getRepository(Users::class)->findOneBy(['email' => $t1_payload->user]);
if ($user) {
$ambiente = $doctrine->getRepository(UsersAmbienti::class)->findOneBy(['user' => $user, "url" => $t1_payload->url]);
$apisecret = $ambiente->getApisecret();
if ($t0_header == "HS256") {
$alg = "sha256";
} else {
$alg = "sha256";
}
$signature = hash_hmac($alg, $t[0] . $t[1], $apisecret, true);
$signature = base64_encode($signature);
if ($signature == $t[2]) {
return $ambiente->getId();
} else {
//$signature = $user->getEmail()."|".$t1_payload->url."|".$signature;
return "-3";
}
} else {
return "-1";
}
} else {
return "-2";
}
} else {
return false;
}
} else {
return false;
}
}
}
return false;
}
#[Route('/webservice', name: 'app_webservice')]
public function index(Request $request, ManagerRegistry $doctrine): Response
{
echo '<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/css/bootstrap.min.css">
<title>LIVE</title>
<link href="/dist/css/pages/login-register-lock.css" rel="stylesheet">
<link href="/dist/css/style.min.css" rel="stylesheet">
<style>
footer {
width: 100%;
position: fixed;
bottom: 0px;
text-align: center;
padding: 3px;
background-color: #000;
color: #fff;
}
</style>
</head>
<body>
<div style="width: 100%; height: 20px; position: absolute; top: 50%; margin-top: -10px;">
<center>LIVE</center>
</div>
</body>
<footer><center>42b.it</center></footer>
</html>';
exit();
$this->denyAccessUnlessGranted('ROLE_USER');
echo "no";
exit();
}
#[Route('/webservice/connect', name: 'app_webservice_connect')]
public function connect(Request $request,ManagerRegistry $doctrine): Response
{
$apikey = $request->get("a");
$apisecret = $request->get("b");
$url = $request->get("c");
$user = $doctrine->getRepository(UsersAmbienti::class)->findOneBy(['apikey' => $apikey, "apisecret" => $apisecret]);
if ($user) {
$header = [
'typ' => 'JWT',
'alg' => 'HS256'
];
$header = json_encode($header);
$header = base64_encode($header);
$now = strtotime(date("Y-m-d H:i:s"));
$to = $now + 3600; // 1 ora;
$payload = [
"from" => date("Y-m-d H:i:s"),
"to" => date("Y-m-d H:i:s", $to),
"url" => $url,
"user" => $user->getUser()->getEmail()
];
$payload = json_encode($payload);
$payload = base64_encode($payload);
$signature = hash_hmac('sha256', $header . $payload, $apisecret, true);
$signature = base64_encode($signature);
$token = $header . "." . $payload . "." . $signature;
echo $token;
exit();
} else {
echo "0";
exit();
}
}
#[Route('/webservice/getquestionari', name: 'app_webservice_getquestionari')]
public function getQuestionari(Request $request,ManagerRegistry $doctrine): Response
{
$headers = apache_request_headers();
$check = $this->checkAuth($headers["Authorization"], $doctrine);
if ((int)$check > 0) {
$questionari = $doctrine->getRepository(Questionari::class)->findBy(['ambiente' => $check]);
$res = [];
foreach ($questionari as $q) {
if ($q->getQuestionario()) {
// non riporto
} else {
$res[$q->getId()] = $q->getTitolo();
}
}
echo json_encode($res);
} else {
if ((int)$check == -1) {
echo "Api error";
} elseif ((int)$check == -2) {
echo "Expired";
} elseif ((int)$check == -3) {
echo "Api error";
} else {
echo "Error";
}
}
exit();
}
#[Route('/webservice/createquestionaro', name: 'app_webservice_createquestionario')]
public function createQuestionario(Request $request,ManagerRegistry $doctrine): Response
{
$headers = apache_request_headers();
$check = $this->checkAuth($headers["Authorization"], $doctrine);
if ((int)$check > 0){
$teachers = [];
$nteachers = $request->get("nteachers");
if ((int)$nteachers > 0) {
for ($i = 1; $i <= $nteachers; $i++) {
$teachers[] = [
"id" => $request->get("teacher_id_" . $i),
"username" => $request->get("teacher_id_username_" . $i),
"name" => $request->get("teacher_id_name_" . $i)
];
}
}
$questionario = $_REQUEST["questionario"];
$q = $doctrine->getRepository(Questionari::class)->findOneById((int)$questionario);
if ($q) {
$q2 = new Questionari();
$q2->setQuestionario($q);
$q2->setAmbiente($q->getAmbiente());
$q2->setCorsoId($_REQUEST["course"]);
$q2->setUser($q->getUser());
$q2->setTitolo($q->getTitolo());
$q2->setDescrizione($q->getDescrizione());
$q2->setCreatedAt(new \DateTimeImmutable("now"));
$token = bin2hex(random_bytes(32));
$soken = bin2hex(hash_hmac('sha256',$token,bin2hex(random_bytes(8)), true));
$q2->setToken($soken);
$entityManager = $doctrine->getManager();
$entityManager->persist($q2);
$entityManager->flush();
$qid = $q2->getId();
$domande = $doctrine->getRepository(Domande::class)->findByQuestionario(["questionario" => $q], ["posizione" => "ASC"]);
if ($domande){
$posizione = 1;
foreach ($domande as $d) {
if ($d->getTipoRisposta() == "docente") {
foreach ($teachers as $t) {
$d2 = new Domande();
$d2->setQuestionario($q2);
$d2->setDomanda($d->getDomanda());
$d2->setTipoRisposta($d->getTipoRisposta());
$d2->setOpzioniRisposta($d->getOpzioniRisposta() . "\nTeacher:" . json_encode($t));
$d2->setMultipla($d->isMultipla());
$d2->setPosizione($posizione);
$d2->setCreatedAt(new \DateTimeImmutable("now"));
$d2->setPlaceholder($d->getPlaceholder());
$d2->setObbligatoria($d->isObbligatoria());
$entityManager->persist($d2);
$posizione++;
}
} else {
$d2 = new Domande();
$d2->setQuestionario($q2);
$d2->setDomanda($d->getDomanda());
$d2->setTipoRisposta($d->getTipoRisposta());
$d2->setOpzioniRisposta($d->getOpzioniRisposta());
$d2->setMultipla($d->isMultipla());
$d2->setPosizione($posizione);
$d2->setCreatedAt(new \DateTimeImmutable("now"));
$d2->setPlaceholder($d->getPlaceholder());
$d2->setObbligatoria($d->isObbligatoria());
$entityManager->persist($d2);
$posizione++;
}
}
$entityManager->flush();
}
echo $soken . "." . $q2->getId();
} else {
echo "Errore 149";
}
exit();
} else {
if((int)$check == -1) {
echo "Api error";
} elseif ((int)$check == -2) {
echo "Expired";
} elseif ((int)$check == -3) {
echo "Api error";
} else {
echo "Error";
}
}
exit();
}
#[Route('/webservice/getStudentQuestionario', name: 'app_webservice_getstudentquestionario')]
public function getStudentQuestionario(Request $request,ManagerRegistry $doctrine): Response{
$headers = apache_request_headers();
$check = $this->checkAuth($headers["Authorization"], $doctrine);
$user = $request->get("user");
if ((int)$check > 0 && $user != "") {
// il token generale e' corretto
// controllo che il token passato sia corretto rispetto al questioanrio
$q = $doctrine->getRepository(Questionari::class)->findOneByToken($request->get("token"));
if ($q->getId() == $request->get("questionario") || $q->getQuestionario()->getId() == $request->get("questionario")) {
if ($q->getId() == $request->get("questionario")) {
$qid = $q->getId();
} else {
$qid = $q->getQuestionario()->getId();
}
$qi = $doctrine->getRepository(QuestionariIniziati::class)->findOneBy([
"questionario" => $q,
"user_id" => $user,
"status" => 1,
"ambiente" => $q->getQuestionario()->getAmbiente()
]);
if ($qi) {
$qid .= "_" . $qi->getId();
}
echo $qid;
} else {
echo "error";
}
}
exit();
}
#[Route('/webservice/sustain', name: 'app_webservice_sustainstudentquestionario')]
public function sustainStudentQuestionario(Request $request,ManagerRegistry $doctrine): Response
{
$headers = apache_request_headers();
$session = $this->requestStack->getSession();
$session_token = $session->get('token');
$session_signature = $session->get('signature');
$session_message = $session->get('message');
if ($session_token != "") {
$token1 = $session_token;
$session->set('token', "");
$signature = $session_signature;
$session->set('signature', "");
$res = json_decode(base64_decode($token1));
} else {
$token1 = $request->get("token");
$signature = $request->get("signature");
}
if ($token1 == "") {
echo "288";
return $this->redirectToRoute("login");
}
$res = json_decode(base64_decode($token1));
// controllo se esiste il questionario ( questionario ) con il token passato ( token )
$q = $doctrine->getRepository(Questionari::class)->findOneBy([
"id" => $res->questionario,
"token"=> $res->token
]);
if (!$q) {
$questionario = $doctrine->getRepository(Questionari::class)->find($res->questionario);
if ($questionario) {
$q = $doctrine->getRepository(Questionari::class)->findOneBy([
"questionario" => $questionario,
"token"=> $res->token
]);
}
}
if ($q) {
$ambiente = $q->getQuestionario()->getAmbiente();
$secret = $ambiente->getApisecret();
$signature2 = hash_hmac("sha256", $token1, $secret, true);
$signature2 = base64_encode($signature2);
if ($signature != $signature2) {
echo "Error code 283";
echo $signature . " " . $signature2 . "<br />";
exit();
}
if ((int)$res->questionarioiniziato != 0) {
$qi = $doctrine->getRepository(QuestionariIniziati::class)->findOneBy([
"id" => $res->questionarioiniziato
]);
if ($qi) {
$domande = $doctrine->getRepository(Domande::class)->findBy(["questionario" => $q], ["posizione" => "ASC"]);
$risposte = $doctrine->getRepository(Risposte::class)->findBy(["questionario_iniziato" => $qi], ["posizione" => "ASC"]);
$risp = [];
foreach ($risposte as $r){
$risp[$r->getDomanda()->getId()] = $r;
}
} else {
echo "errore";
exit();
}
} else {
//exit();
$qi = new QuestionariIniziati();
$qi->setQuestionario($q);
$qi->setAmbiente($q->getQuestionario()->getAmbiente());
$qi->setUserId($res->user);
$qi->setUserEmail($res->user_email);
$qi->setUserEmailHash($res->user_email_hash);
$qi->setStatus(1);
$qi->setLastQuestion(0);
$qi->setReturnurl($res->return);
$qi->setCreatedAt(new \DateTimeImmutable("now"));
$qi->setModifiedAt(new \DateTimeImmutable("now"));
$entityManager = $doctrine->getManager();
$entityManager->persist($qi);
$entityManager->flush();
// riscrivo il token e la signature perche' e' cambiato il valore di questionarioiniziato
$r= [];
$r["user"] = $res->user;
$r["user_email"] = $res->user_email;
$r["user_email_hash"] = $res->user_email_hash;
$r["course"] = $res->course;
$r["questionario"] = $res->questionario;
$r["questionarioiniziato"] = $qi->getId();
$r["return"] = $res->return;
$r["token"] = $res->token;
echo "<!-- token: " . $token1 . "<br/>-->";
echo "<!-- secret: " . $secret . "<br />-->";
echo "<!-- signature: " . $signature . "<br />-->";
$token1 = base64_encode(json_encode($r));
$signature = hash_hmac("sha256", $token1, $secret, true);
$signature = base64_encode($signature);
$domande = $doctrine->getRepository(Domande::class)->findBy(["questionario" => $q], ["posizione" => "ASC"]);
if ($domande) {
$posizione = 1;
foreach ($domande as $d) {
$r = new Risposte();
$r->setQuestionario($q);
$r->setQuestionarioIniziato($qi);
$r->setDomanda($d);
$r->setTipoRisposta($d->getTipoRisposta());
$r->setOpzioniRisposta($d->getOpzioniRisposta());
$r->setMultipla($d->isMultipla());
$r->setPosizione($posizione);
$r->setRisposta("");
$r->setCreatedAt(new \DateTimeImmutable("now"));
$r->setModifiedAt(new \DateTimeImmutable("now"));
$r->setObbligatoria($d->isObbligatoria());
$entityManager->persist($r);
$posizione++;
}
}
$entityManager->flush();
$risposte = $doctrine->getRepository(Risposte::class)->findBy(["questionario_iniziato" => $qi], ["posizione" => "ASC"]);
$risp = [];
foreach ($risposte as $r) {
$risp[$r->getDomanda()->getId()] = $r;
}
}
return $this->render('webservice/questionario.html.twig', [
"qi" => $qi,
"domande" => $domande,
"risposte" => $risp,
"token" => $token1,
"signature" => $signature,
"message" => $session_message,
]);
} else {
var_dump($res);
echo "Error code 380";
exit();
}
}
#[Route('/webservice/cancelAndBack/{qi}', name: 'app_webservice_cancelquestionario_andback')]
public function cancelQuestionarioAndBack(Request $request, ManagerRegistry $doctrine, QuestionariIniziati $qi): Response
{
$entityManager = $doctrine->getManager();
$token1 = $request->get("token");
$signature = $request->get("signature");
$url = $request->get("return");
$res = json_decode(base64_decode($token1));
var_dump($res);
// controllo se esiste il questionario ( questionario ) con il token passato ( token )
$q = $doctrine->getRepository(Questionari::class)->findOneBy([
"id" => $res->questionario,
"token" => $res->token
]);
if ($q) {
$ambiente = $q->getQuestionario()->getAmbiente();
$secret = $ambiente->getApisecret();
$signature2 = hash_hmac("sha256", $token1, $secret, true);
$signature2 = base64_encode($signature2);
if ($signature != $signature2) {
echo "Error code 283";
exit();
}
}
if ($qi) {
$qi->setStatus("-1");
$qi->setModifiedAt(new \DateTimeImmutable("now"));
$entityManager->persist($qi);
$entityManager->flush();
return $this->redirect($res->return);
} else {
echo "Error code 387";
exit();
}
}
#[Route('/webservice/save/{qi}', name: 'app_webservice_savequestionario')]
public function save(Request $request, ManagerRegistry $doctrine, QuestionariIniziati $qi): Response
{
$entityManager = $doctrine->getManager();
$token1 = $request->get("token");
$signature = $request->get("signature");
$url = $request->get("return");
$res = json_decode(base64_decode($token1));
// controllo se esiste il questionario ( questionario ) con il token passato ( token )
$q = $doctrine->getRepository(Questionari::class)->findOneBy([
"id" => $res->questionario,
"token"=> $res->token
]);
if ($q) {
$ambiente = $q->getQuestionario()->getAmbiente();
$secret = $ambiente->getApisecret();
$signature2 = hash_hmac("sha256", $token1, $secret, true);
$signature2 = base64_encode($signature2);
if ($signature != $signature2) {
echo "Error code 283";
exit();
}
}
if ($qi) {
$domandeObbligatorie = [];
$domandes = $qi->getQuestionario()->getDomandes();
foreach ($domandes as $d) {
if ($d->isObbligatoria()) {
if ($d->getTipoRisposta() == "linkert5" || $d->getTipoRisposta() == "linkert7" || $d->getTipoRisposta()=="docente"){
$domandeObbligatorie[$d->getId()] = [];
$argomenti = $d->getOpzioniRisposta();
$righe = explode("\n",$argomenti);
foreach($righe as $r){
$v = explode("#",$r);
if($v[0]=="argomenti"){
$args = explode("|",$v[1]);
$i = 1;
foreach($args as $a){
$domandeObbligatorie[$d->getId()][$i] = 1;
$i++;
}
}
}
}
}
}
$risposte = [];
$risposte_complete = [];
foreach ($_REQUEST as $k => $v) {
if (stripos($k,"domanda_") !== false) {
$d = explode("_",$k);
$id_domanda = $d[1];
if (count($d) == 3) {
$argomento = $d[2];
} else {
$argomento = "";
}
if (!isset($risposte[$id_domanda])) {
$risposte[$id_domanda] = [];
}
$valore = $v;
$risposte[$id_domanda][$argomento] = $v;
}
}
foreach ($risposte as $id_domanda => $k) {
$i = 1;
foreach ($risposte[$id_domanda] as $k2 => $v2) {
if ($k2 == "") {
$risposte_complete[$id_domanda][$k2] = $v2;
} else {
if ($k2 == $i) {
$risposte_complete[$id_domanda][$k2] = $v2;
} else {
while ($i < $k2) {
$risposte_complete[$id_domanda][$i] = "";
$i++;
}
$risposte_complete[$id_domanda][$k2] = $v2;
}
}
$i++;
}
}
} else {
echo "Error code 387";
exit();
}
foreach ($risposte_complete as $domanda => $v) {
if (isset($domandeObbligatorie[$domanda])) {
$d = array_diff_key($risposte_complete[$domanda],$domandeObbligatorie[$domanda]);
if (count($d) == 0) {
unset($domandeObbligatorie[$domanda]);
}
}
}
$error = 0;
$message = [];
$message["Error"] = [];
$message["Success"] = [];
if (isset($domandeObbligatorie) && count($domandeObbligatorie) > 0) {
$message['Error'][] = 'Tutte le domande obbligatorie devono essere completate. Grazie!';
$error = 1;
}
if (!$error) {
foreach ($risposte_complete as $domanda => $v) {
$domanda_ = $doctrine->getRepository(Domande::class)->findOneBy(["id" => $domanda]);
if ($domanda_) {
$risposta = $doctrine->getRepository(Risposte::class)->findOneBy([
"questionario_iniziato" => $qi,
"domanda"=> $domanda_
]);
if ($risposta) {
$s = [];
$posizione = "";
foreach ($risposte_complete[$domanda] as $posizione => $valore) {
if (is_array($valore)) {
$valore = implode(",", $valore);
}
$s[] = $posizione . ":" . $valore;
}
if (count($s) == 1 && $posizione == "") {
$r = $risposte_complete[$domanda][$posizione];
if (is_array($r)) {
$r = implode("|", $r);
}
} else {
$r = implode("|", $s);
}
$risposta->setRisposta($r);
$risposta->setModifiedAt(new \DateTimeImmutable("now"));
$entityManager->persist($risposta);
$qi->setModifiedAt(new \DateTimeImmutable("now"));
$entityManager->persist($qi);
} else {
echo "489";
exit();
}
} else {
echo "492";
exit();
}
}
$entityManager->flush();
$message["Success"][] = "Questionario salvato correttamente";
$session = $this->requestStack->getSession();
$session->set('token', $token1);
$session->set('signature', $signature);
$session->set('message', $message);
return $this->redirectToRoute("app_webservice_sustainstudentquestionariook", ["qi" => $qi->getId()]);
}
$session = $this->requestStack->getSession();
$session->set('token', $token1);
$session->set('signature', $signature);
$session->set('message', $message);
//$foo = $session->get('foo');
// the second argument is the value returned when the attribute doesn't exist
//$filters = $session->get('filters', []);
return $this->redirectToRoute("app_webservice_sustainstudentquestionario");
}
#[Route('/webservice/saved/{qi}', name: 'app_webservice_sustainstudentquestionariook')]
public function saved(Request $request,ManagerRegistry $doctrine,QuestionariIniziati $qi): Response
{
$entityManager = $doctrine->getManager();
$session = $this->requestStack->getSession();
$token1 = $session->get("token");
$signature = $session->get("signature");
$url = $qi->getReturnurl();
$res = json_decode(base64_decode($token1));
// controllo se esiste il questionario ( questionario ) con il token passato ( token )
$q = $doctrine->getRepository(Questionari::class)->findOneBy([
"id" => $res->questionario,
"token" => $res->token
]);
if ($q) {
$ambiente = $q->getQuestionario()->getAmbiente();
$secret = $ambiente->getApisecret();
$signature2 = hash_hmac("sha256", $token1, $secret, true);
$signature2 = base64_encode($signature2);
if($signature!=$signature2){
echo "Error code 283";
exit();
}
}
$session = $this->requestStack->getSession();
$session->set('token', $token1);
$session->set('signature', $signature);
return $this->render('webservice/saved.html.twig', [
"qi" => $qi
]);
}
#[Route('/webservice/chiamaallinea/{ambiente}', name: 'app_webservice_chiama_allinea_ambiente')]
public function chiamaallinea(Request $request, ManagerRegistry $doctrine, $ambiente = ""): Response
{
// wget https://questionari.42b.it/webservice/chiamaallinea/partecipa?token=UN49MEURY2vNn6zf --output-document=logAllinea.`date +\%Y\%m\%d-\%H_\%M_\%S`.log
// da mettere in crontab
// il token e' definito nel file yaml dell' ambiente, nella cartella conig, assieme a username e password con cui contattare moodle.
echo "---------------------------------------\n\r";
echo date("Y-m-d H:i:s")."\n\r";
echo "---------------------------------------\n\r";
if ($_SERVER["REMOTE_ADDR"] != "51.77.220.131" && 0) {
echo "Non puoi eseguire da qui: ".$_SERVER["REMOTE_ADDR"];
exit();
}
$token = $request->get("token");
$yaml = Yaml::parse(file_get_contents('../config/' . $ambiente . '.yaml'));
$stored_token = $yaml["parameters"]["token"];
if ($token != $stored_token) {
echo "Token errato";
exit();
}
$token2 = "";
if (isset($yaml["parameters"]["password"])) {
$token2 = md5(date("Y-m-d H") . " " . $ambiente . " " . $yaml["parameters"]["password"]);
} else {
echo "File errato";
exit();
}
if ($token2 == "") {
echo "Token2 errato";
exit();
}
// chiamata di fatto interna, ma la faccio come se fosse esterna
$url = "https://questionari.42b.it/webservice/allineaambiente/" . $ambiente . "?token=" . $token2;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);
$res = curl_exec($ch);
curl_close($ch);
echo "ok";
exit();
}
#[Route('/webservice/allineaambiente/{ambiente}', name: 'app_webservice_allinea_ambiente')]
public function allinea(Request $request, ManagerRegistry $doctrine, $ambiente = ""): Response
{
$entityManager = $doctrine->getManager();
$session = $this->requestStack->getSession();
$yaml = Yaml::parse(file_get_contents('../config/' . $ambiente . '.yaml'));
$token1 = md5(date("Y-m-d H") . " " . $ambiente . " " . $yaml["parameters"]["password"]);
$t = $request->get("token");
if ($ambiente == "") {
echo "manca ambiente";
exit();
}
if ($_SERVER["REMOTE_ADDR"] != "51.77.220.131" && $_SERVER["REMOTE_ADDR"] != "92.246.117.18" && $_SERVER["REMOTE_ADDR"] != "92.246.117.158") {
echo "Non puoi eseguire da qui: " . $_SERVER["REMOTE_ADDR"];
exit();
}
if ($t != $token1) {
echo "Token errato";
exit();
}
// se sono qui, posso cominciare ad eseguire
switch ($ambiente) {
case "partecipa":
$url = "https://www.partecipa.eu";
break;
case "cfcs":
$url = "https://fad.cafoscarichallengeschool.it";
break;
default:
echo "Manca ambiente";
exit();
}
$username = $password = "";
if (isset($yaml) && isset($yaml["parameters"])) {
$username = $yaml["parameters"]["username"];
$password = $yaml["parameters"]["password"];
}
if ($username=="" || $password == "") {
echo "mancano credenziali";
exit();
} else {
$x = exec('curl "' . $url . '/login/token.php?service=moodle_mobile_app" -d "username=' . $username . '&password=' . $password . '"');
$j = json_decode($x);
if (!$j) {
echo "error 751";
exit();
}
$token = $j->token;
if ($token) {
$ambiente = $doctrine->getRepository(UsersAmbienti::class)
->findOneBy(["url" => $url]);
if ($ambiente) {
$entityManager = $doctrine->getManager();
$query = $entityManager->createQuery(
'SELECT q
FROM App\Entity\Questionari q
WHERE q.ambiente = :ambiente
AND q.corso_id IS NOT NULL
ORDER BY q.id ASC'
)->setParameter('ambiente', $ambiente->getId());
$res = $query->getResult();
$corsi = [];
foreach ($res as $r) {
if (!in_array($r->getCorsoId(), $corsi)) {
$corsi[] = $r->getCorsoId();
}
}
$utenti = [];
if (count($corsi) > 0) {
foreach ($corsi as $c) {
//$x = exec('curl "https:///www.partecipa.eu/webservice/rest/server.php?wstoken='.$token.'&wsfunction=core_user_get_users_by_field" -d "field=username&values[0]='.$username.'&moodlewsrestformat=json"');
$x = exec('curl "' . $url . '/webservice/rest/server.php?wstoken=' . $token . '&wsfunction=core_enrol_get_enrolled_users" -d "courseid=' . $c . '&moodlewsrestformat=json"');
$j = json_decode($x);
foreach ($j as $u) {
foreach ($u->roles as $role) {
if ($role->shortname == "manager") {
if (!isset($utenti[$u->email])) {
$utenti[$u->email] = [];
}
$utenti[$u->email][] = $c;
}
}
}
}
}
}
foreach ($utenti as $k => $v) {
$user = $doctrine->getRepository(Users::class)
->findOneBy(["email" => $k]);
if ($user) {
if (count($v) > 0) {
echo "utente " . $k . " assegno corsi " . json_encode($v) . "\n\r";
echo "\n\r";
$user->setCorsiMoodle(json_encode($v));
}
$entityManager = $doctrine->getManager();
$entityManager->persist($user);
$entityManager->flush();
} else {
$u = new Users();
$u->setEmail($k);
$u->setPassword("emty");
$u->setRoles(array("ROLE_MANAGER"));
$u->setIsVerified(0);
if (count($v) > 0) {
$u->setCorsiMoodle(json_encode($v));
}
$entityManager = $doctrine->getManager();
$entityManager->persist($u);
$entityManager->flush();
}
}
exit();
} else {
echo "errore nel token";
exit();
}
exit();
}
}
}