src/Controller/DefaultController.php line 20

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Users;
  4. use App\Entity\Questionari;
  5. use App\Entity\QuestionariIniziati;
  6. use Doctrine\ORM\EntityManagerInterface;
  7. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  8. use Symfony\Component\HttpFoundation\Request;
  9. use Symfony\Component\HttpFoundation\Response;
  10. use Symfony\Component\Routing\Annotation\Route;
  11. use Doctrine\Persistence\ManagerRegistry;
  12. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  13. use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
  14. use Symfony\Component\HttpFoundation\ResponseHeaderBag;
  15. class DefaultController extends AbstractController
  16. {
  17.     #[Route('/'name'app_default_index')]
  18.     public function index(Request $requestManagerRegistry $doctrinestring $moodle_token ""string $uid ""): Response
  19.     {
  20.         $this->denyAccessUnlessGranted('ROLE_USER');
  21.         $user $this->getUser();
  22.         $user $doctrine->getRepository(Users::class)->find($user);
  23.         $roles $user->getRoles();
  24.         $username $user->getEmail();
  25.         $url "www.partecipa.eu";
  26.         if ($username == "apicerni" || $username=="antonio.picerni@gmail.com" || $username == "puppi@ecipa.eu" || $username == "danielelando@tutamail.com") {
  27.             $url "elearning.headup.it";
  28.         } 
  29.         if (in_array("ROLE_MANAGER"$roles)) {
  30.             $corsi = [];
  31.             $questionario_selected 0;
  32.             $questionario "";
  33.             $domande = [];
  34.             $listaquestionari = [];
  35.             $thisQuestionario "";
  36.             $contaCorsi 0;
  37.             $corsiMoodle  = [];
  38.             $corsoMoodle  0;
  39.             $domande_ = [];
  40.             if ((int)$request->get("corsoMoodle") != 0) {
  41.                 $corsoMoodle = (int)$request->get("corsoMoodle");
  42.             }
  43.             if ($moodle_token == "") {
  44.                 $moodle_token $request->get("moodle_token"); 
  45.             }
  46.             if ($uid == "") {
  47.                 $uid $request->get("uid");
  48.             }
  49.             if ($moodle_token != "" && $uid != "") {
  50.                 $corsi json_decode($user->getCorsiMoodle());
  51.                 if ($corsi && count($corsi) != && (int)$request->get("corsoMoodle") == 0) {
  52.                     $corsoMoodle $corsi[0];
  53.                 } else {
  54.                     if ((int)$request->get("corsoMoodle") == 0) {
  55.                         return $this->render('default/errormanager.html.twig', [
  56.                             "errore" => "Non ci sono corsi collegati"
  57.                         ]);
  58.                     }
  59.                 }
  60.                 $i 0;
  61.                 $options = [];
  62.                 foreach ($corsi as $c) {
  63.                     // recupero i titolo dei corsi a partire dall'id
  64.                     $options[] = "options[ids][".$i."]=".$c;
  65.                     $i++;
  66.                 }
  67.                 $x exec('curl "https://' $url '/webservice/rest/server.php?wstoken=' $moodle_token '&wsfunction=core_course_get_courses" -d "' implode("&"$options) . '&moodlewsrestformat=json"');
  68.                 $corsiJson json_decode($x);
  69.                 $questoCorso "";
  70.                 foreach ($corsiJson as $cJ) {
  71.                     $corsiMoodle[$cJ->id] = $cJ->shortname;
  72.                     if ($request->get("corsoMoodle") != "" && $cJ->id == $request->get("corsoMoodle")) {
  73.                         $questoCorso $cJ;
  74.                     }
  75.                 }
  76.                 //var_dump($corsi);
  77.                 $questionari $doctrine->getRepository(Questionari::class)->findBy(["corso_id" => $corsi]);
  78.                 $quests = [];
  79.                 $qid 0;
  80.                 foreach ($questionari as $q) {
  81.                     if (!isset($quests[$q->getQuestionario()->getId()])) {
  82.                         $quests[$q->getQuestionario()->getId()] = $q->getQuestionario()->getTitolo();
  83.                         if ($qid == 0) {
  84.                             $qid $q->getQuestionario()->getId();
  85.                         }
  86.                     }
  87.                 }
  88.                 if (count($quests) == 1) {
  89.                     $questionario_selected 1;
  90.                     if((int)$request->get("corsoMoodle") != 0) {
  91.                         $questionari $doctrine->getRepository(Questionari::class)->findBy(["corso_id" => (int)$request->get("corsoMoodle")]);
  92.                     } else {
  93.                         $questionari $doctrine->getRepository(Questionari::class)->findBy(["corso_id" => $corsi,"questionario" => $qid]);
  94.                     }
  95.                     foreach ($questionari as $q) {
  96.                         $contaCorsi++;
  97.                     }
  98.                     $thisQuestionario $questionari[0]->getQuestionario();
  99.                 }
  100.                 if ((int)$request->get("questionario") != 0) {
  101.                     if ((int)$request->get("corsoMoodle") != 0) {
  102.                         $questionari $doctrine->getRepository(Questionari::class)->findBy(["corso_id" => (int)$request->get("corsoMoodle"), "questionario" => (int)$request->get("questionario")]);
  103.                     } else {
  104.                         $questionari $doctrine->getRepository(Questionari::class)->findBy(["corso_id" => $corsi"questionario" => (int)$request->get("questionario")]);
  105.                     }
  106.                     $thisQuestionario $questionari[0]->getQuestionario();
  107.                     $questionario_selected 1;
  108.                     $questionario = (int)$request->get("questionario");
  109.                     foreach ($questionari as $q) {
  110.                         $contaCorsi++;
  111.                     }
  112.                 }
  113.                 if ($questionario_selected == 1) {
  114.                     // ho scelto il singolo questionario
  115.                     if ($corsoMoodle == 0) {
  116.                         // sono nell'aggregato multicorso
  117.                         // qui ci sono n questionari compilati che potrebbero avere sulla domanda "docente" un comportamento anomalo tra un questioanrio e l'altro ( 1 docente , 2 docenti .. n docenti a seconda del corso )
  118.                         // in questo caso costruisco il modello a partire dal "root model" e poi aggrego le risposte "docente" mediandole per renderle singole.
  119.                         $domande $thisQuestionario->getDomandes();
  120.                         foreach ($domande as $d) {
  121.                             if ($d->getTipoRisposta() == "linkert5") {
  122.                                 $opt $d->getOpzioniRisposta();
  123.                                 $opt explode("\n",$opt);
  124.                                 $range $opt[0];
  125.                                 $range explode("#",$range);
  126.                                 $range explode("|",$range[1]);
  127.                                 $argomenti $opt[1];
  128.                                 $argomenti explode("#",$argomenti);
  129.                                 $argomenti explode("|",$argomenti[1]);
  130.                                 $domande_["d".$d->getPosizione()] = ["domanda" => $d->getDomanda(), "argomenti" => [], "range" => []];
  131.                                 foreach ($range as $r) {
  132.                                     $r2 explode(":"$r);
  133.                                     $domande_["d" $d->getPosizione()]["range"][$r2[0]] = $r2[1];
  134.                                 }
  135.                                 $i 0;
  136.                                 foreach ($argomenti as $a) {
  137.                                     $domande_["d" $d->getPosizione()]["argomenti"][] = ["domanda" => $a,"range" => []];
  138.                                     foreach ($range as $r) {
  139.                                         $r2 explode(":"$r);
  140.                                         $domande_["d".$d->getPosizione()]["argomenti"][$i]["range"][$r2[0]] = 0;
  141.                                     }    
  142.                                     $i++;
  143.                                 }
  144.                             }
  145.                             if ($d->getTipoRisposta()=="docente") {
  146.                                 $opt $d->getOpzioniRisposta();
  147.                                 $opt explode("\n"$opt);
  148.                                 $range $opt[0];
  149.                                 $range explode("#"$range);
  150.                                 $range explode("|"$range[1]);
  151.                                 $argomenti $opt[1];
  152.                                 $argomenti explode("#"$argomenti);
  153.                                 $argomenti explode("|"$argomenti[1]);
  154.                                 $docente "";
  155.                                 $domande_["d" $d->getPosizione()] = ["domanda" => $d->getDomanda(), "argomenti" => [], "range" => [], "docente" => $docente];
  156.                                 foreach ($range as $r) {
  157.                                     $r2 explode(":"$r);
  158.                                     $domande_["d" $d->getPosizione()]["range"][$r2[0]] = $r2[1];
  159.                                 }
  160.                                 $i 0;
  161.                                 foreach ($argomenti as $a) {
  162.                                     $domande_["d".$d->getPosizione()]["argomenti"][] = ["domanda" => $a"range" => []];
  163.                                     foreach ($range as $r) {
  164.                                         $r2 explode(":"$r);
  165.                                         $domande_["d" $d->getPosizione()]["argomenti"][$i]["range"][$r2[0]] = 0;
  166.                                     }
  167.                                     $i++;
  168.                                 }
  169.                             }
  170.                         }
  171.                         foreach ($questionari as $q) {
  172.                             $listaquestionari[] = $q->getId();
  173.                         }
  174.                         $questionariIniziati $doctrine->getRepository(QuestionariIniziati::class)->findBy(["questionario" => $listaquestionari"status" => 1]);
  175.                         $risposteDocente = [];
  176.                         $quantiDocenti 0;
  177.                         $giro 0;
  178.                         foreach ($questionariIniziati as $qi) {
  179.                             $posizioneMenoUno 0;
  180.                             $risposte $qi->getRispostes();
  181.                             foreach ($risposte as $r) {
  182.                                 if ($r->getDomanda()->getTipoRisposta() == "linkert5") {
  183.                                     $risposta $r->getRisposta();
  184.                                     if ($risposta != "") {
  185.                                         $ris explode("|"$risposta);
  186.                                         foreach ($ris as $rr) {
  187.                                             $ris2 explode(":"$rr);
  188.                                             $posizione $r->getPosizione();
  189.                                             if ($posizioneMenoUno) {
  190.                                                 $posizione--;
  191.                                             }
  192.                                             if (!isset($domande_["d" $posizione])) {
  193.                                             } else {
  194.                                                 $domande_["d" $posizione]["argomenti"][((int)$ris2[0] - 1)]["range"][$ris2[1]]++;
  195.                                             }
  196.                                         }
  197.                                     }
  198.                                 }
  199.                                 if ($r->getDomanda()->getTipoRisposta() == "docente") {
  200.                                     if ($quantiDocenti == 1) {
  201.                                         $risposteDocente["posizione"] = $r->getPosizione();
  202.                                     }
  203.                                     if ($quantiDocenti 1) {
  204.                                         $posizioneMenoUno 1;
  205.                                     }
  206.                                     $risposta $r->getRisposta();
  207.                                     if ($risposta != "") {
  208.                                         $ris explode("|"$risposta);
  209.                                         $opzioni =  $r->getOpzioniRisposta();
  210.                                         $opzioni explode("\n"$opzioni);
  211.                                         $rangeDocente $opzioni[0];
  212.                                         $rangeDocente explode("#"$rangeDocente);
  213.                                         $rangeDocente explode("|"$rangeDocente[1]); 
  214.                                         $argomenti $opzioni[1];
  215.                                         $argomentiexplode("#"$argomenti);
  216.                                         $argomenti explode("|"$argomenti[1]); 
  217.                                         if (isset($opzioni[2])) {
  218.                                             $docente $opzioni[2];
  219.                                             $docente explode("Teacher:"$docente);
  220.                                             $docente json_decode($docente[1]);
  221.                                             $docente $docente->id;
  222.                                         } else {
  223.                                             $docente 0;
  224.                                         }
  225.                                         if (!isset($risposteDocente["d" $docente])) {
  226.                                             $risposteDocente["d" $docente] = ["argomenti" => []]; 
  227.                                             $i 0;
  228.                                             foreach ($argomenti as $a) {
  229.                                                 $risposteDocente["d" $docente]["argomenti"][] = ["domanda" => $a"range" => []];
  230.                                                 foreach ($rangeDocente as $r) {
  231.                                                     $r2 explode(":"$r);
  232.                                                     $risposteDocente["d" $docente]["argomenti"][$i]["range"][$r2[0]] = 0;
  233.                                                 }
  234.                                                 $i++;
  235.                                             }
  236.                                         }
  237.                                         foreach ($ris as $rr) {
  238.                                             $ris2 explode(":"$rr);
  239.                                             $risposteDocente["d" $docente]["argomenti"][((int)$ris2[0] - 1)]["range"][$ris2[1]]++;
  240.                                         }
  241.                                     }
  242.                                     $quantiDocenti++;
  243.                                 }
  244.                             }
  245.                             $giro++;
  246.                         }
  247.                         $nDocenti count($risposteDocente) - 1;
  248.                         $finalRisposteDocente = [
  249.                             "domanda" => "<p><strong>2. Valutazione docente</strong></p>",
  250.                             "argomenti" => [],
  251.                             "range" => []
  252.                         ];
  253.                         if (isset($rangeDocente)) {
  254.                             foreach ($rangeDocente as $rrr) {
  255.                                 $r_ explode(":"$rrr);
  256.                                 $finalRisposteDocente["range"][$r_[0]] = $r_[1];
  257.                             }
  258.                         }
  259.                         $giro 1;
  260.                         foreach ($risposteDocente as $k=>$v) {
  261.                             if ($k == "posizione") {
  262.                                 continue;
  263.                             }
  264.                             foreach ($v as $k2 => $v2) {
  265.                                 foreach ($v2 as $v3 => $k3) {
  266.                                     if (!isset($finalRisposteDocente["argomenti"][$v3])) {
  267.                                         $finalRisposteDocente["argomenti"][$v3] = ["domanda" => $k3["domanda"], "range" => []];
  268.                                     }
  269.                                     foreach ($k3["range"] as $k4 => $v4) {
  270.                                         $finalRisposteDocente["argomenti"][$v3]["range"] = [];
  271.                                         if (array_key_exists($k4$finalRisposteDocente["argomenti"][$v3]["range"])) {
  272.                                             $finalRisposteDocente["argomenti"][$v3]["range"][$k4] = 0;
  273.                                         }
  274.                                         $finalRisposteDocente["argomenti"][$v3]["range"][$k4] += $v4/$nDocenti;
  275.                                     }
  276.                                 }
  277.                             }
  278.                         }
  279.                         $domande_["d" $risposteDocente["posizione"]] = $finalRisposteDocente;
  280.                     } else {
  281.                         // sono nel dettaglio singolo corso
  282.                         // qui ci sono n questionari compilati e come "modello" posso ricostruire a partire da domane
  283.                         $questionarioModello $questionari[0];
  284.                         $domande $questionarioModello->getDomandes();
  285.                         foreach ($domande as $d) {
  286.                             if ($d->getTipoRisposta() == "linkert5") {
  287.                                 $opt $d->getOpzioniRisposta();
  288.                                 $opt explode("\n"$opt);
  289.                                 $range $opt[0];
  290.                                 $range explode("#"$range);
  291.                                 if (count($range) > 1) {
  292.                                     $range explode("|"$range[1]);
  293.                                 } else {
  294.                                     echo "Errore nella domanda ";
  295.                                     echo $d->getId();
  296.                                     exit();
  297.                                 }
  298.                                 
  299.                                 $argomenti $opt[1];
  300.                                 $argomenti explode("#"$argomenti);
  301.                                 $argomenti explode("|"$argomenti[1]);
  302.                                 $domande_["d" $d->getPosizione()] = ["domanda" => $d->getDomanda(), "argomenti" => [], "range" => []];
  303.                                 foreach ($range as $r) {
  304.                                     $r2 explode(":"$r);
  305.                                     $domande_["d" $d->getPosizione()]["range"][$r2[0]] = $r2[1];
  306.                                 }
  307.                                 $i 0;
  308.                                 foreach ($argomenti as $a) {
  309.                                     $domande_["d" $d->getPosizione()]["argomenti"][] = ["domanda" => $a,"range" => []];
  310.                                     foreach ($range as $r) {
  311.                                         $r2 explode(":"$r);
  312.                                         $domande_["d" $d->getPosizione()]["argomenti"][$i]["range"][$r2[0]] = 0;
  313.                                     } 
  314.                                     $i++;
  315.                                 }
  316.                             }
  317.                             if ($d->getTipoRisposta() == "docente") {
  318.                                 $opt $d->getOpzioniRisposta();
  319.                                 $opt explode("\n"$opt);
  320.                                 $range $opt[0];
  321.                                 $range explode("#"$range);
  322.                                 $range explode("|"$range[1]);
  323.                                 $argomenti $opt[1];
  324.                                 $argomenti explode("#"$argomenti);
  325.                                 $argomenti explode("|"$argomenti[1]);
  326.                                 $docente "";
  327.                                 if (isset($opt[2])) {
  328.                                     $docente explode("Teacher:"$opt[2]);
  329.                                     $docente json_decode($docente[1]);
  330.                                     $docente $docente->name;
  331.                                 }
  332.                                 $domande_["d" $d->getPosizione()] = ["domanda" => $d->getDomanda(), "argomenti" => [], "range" => [], "docente" => $docente];
  333.                                 foreach ($range as $r) {
  334.                                     $r2 explode(":"$r);
  335.                                     $domande_["d" $d->getPosizione()]["range"][$r2[0]] = $r2[1];
  336.                                 }
  337.                                 $i 0;
  338.                                 foreach ($argomenti as $a) {
  339.                                     $domande_["d" $d->getPosizione()]["argomenti"][] = ["domanda" => $a,"range" => []];
  340.                                     foreach ($range as $r) {
  341.                                         $r2 explode(":"$r);
  342.                                         $domande_["d" $d->getPosizione()]["argomenti"][$i]["range"][$r2[0]] = 0;
  343.                                     }    
  344.                                     $i++;
  345.                                 }
  346.                             }
  347.                         }
  348.                         foreach ($questionari as $q) {
  349.                             $listaquestionari[] = $q->getId();
  350.                         }
  351.                         $questionariIniziati $doctrine->getRepository(QuestionariIniziati::class)->findBy(["questionario" => $listaquestionari"status" => 1]);
  352.                         foreach ($questionariIniziati as $qi) {
  353.                             $risposte $qi->getRispostes();
  354.                             foreach ($risposte as $r) {
  355.                                 if ($r->getDomanda()->getTipoRisposta() == "linkert5") {
  356.                                     $risposta $r->getRisposta();
  357.                                     if ($risposta != "") {
  358.                                         $ris explode("|"$risposta);
  359.                                         foreach ($ris as $rr) {
  360.                                             $ris2 explode(":"$rr);
  361.                                             if (isset($domande_["d" $r->getPosizione()]["argomenti"][((int)$ris2[0] - 1)]["range"][$ris2[1]])) {
  362.                                                 $domande_["d" $r->getPosizione()]["argomenti"][((int)$ris2[0] - 1)]["range"][$ris2[1]]++;
  363.                                             }
  364.                                         }
  365.                                     }
  366.                                 }
  367.                                 if ($r->getDomanda()->getTipoRisposta() == "docente") {
  368.                                     $risposta $r->getRisposta();
  369.                                     if ($risposta != "") {
  370.                                         $ris explode("|"$risposta);
  371.                                         foreach ($ris as $rr) {
  372.                                             $ris2 explode(":"$rr);
  373.                                             if (isset($domande_["d" $r->getPosizione()]["argomenti"][((int)$ris2[0] - 1)]["range"][$ris2[1]])) {
  374.                                                 $domande_["d" $r->getPosizione()]["argomenti"][((int)$ris2[0]-1)]["range"][$ris2[1]]++;
  375.                                             }
  376.                                         }
  377.                                     }
  378.                                 }
  379.                             }
  380.                         }
  381.                     }
  382.                 } else {
  383.                     $questionariIniziati = [];
  384.                 }
  385.                 if ($request->get("xls") == 1) {
  386.                     $spreadsheet = new Spreadsheet();
  387.                     $sheet $spreadsheet->getActiveSheet();
  388.                     $sheet->setTitle("Export");
  389.                     $sheet->setCellValue('A1'$thisQuestionario->getTitolo());
  390.                     if ($questoCorso != "") {
  391.                         $sheet->setCellValue('A2'$questoCorso->fullname);
  392.                         $sheet->setCellValue('C2'$questoCorso->idnumber);
  393.                         $sheet->setCellValue('D2'date("d/m/Y"$questoCorso->startdate));
  394.                         $sheet->setCellValue('E2'date("d/m/Y"$questoCorso->enddate));
  395.                     } 
  396.                     $sheet->setCellValue('A3'"questionari iniziati");
  397.                     $sheet->setCellValue('B3'count($questionariIniziati));
  398.                     $sheet->setCellValue('C4'"Insoddisfacente");
  399.                     $sheet->setCellValue('D4'"Poco Soddisfacente");
  400.                     $sheet->setCellValue('E4'"Neutrale");
  401.                     $sheet->setCellValue('F4'"Soddisfacente");
  402.                     $sheet->setCellValue('G4'"Molto Soddisfacente");
  403.                     $i 5;
  404.                     foreach ($domande_ as $d) {
  405.                         $sheet->setCellValue('A' $istrip_tags($d["domanda"]));
  406.                         if (isset($d["docente"])) {
  407.                             $i++;
  408.                             $sheet->setCellValue('A' $i"Docente: " strip_tags($d["docente"]));
  409.                         }
  410.                         foreach ($d["argomenti"] as $a) {
  411.                             $i++;
  412.                             $sheet->setCellValue('A' $istrip_tags($a["domanda"]));
  413.                             foreach ($a["range"] as $k => $v) {
  414.                                 if ($k == 1) {
  415.                                     $sheet->setCellValue('C' $i$v);
  416.                                 }
  417.                                 if ($k == 2) {
  418.                                     $sheet->setCellValue('D' $i$v);
  419.                                 }
  420.                                 if ($k == 3) {
  421.                                     $sheet->setCellValue('E' $i$v);
  422.                                 }
  423.                                 if ($k == 4) {
  424.                                     $sheet->setCellValue('F' $i$v);
  425.                                 }
  426.                                 if ($k == 5) {
  427.                                     $sheet->setCellValue('G' $i$v);
  428.                                 }
  429.                             }
  430.                         }
  431.                         $i++;
  432.                     }
  433.                     // Create your Office 2007 Excel (XLSX Format)
  434.                     $writer = new Xlsx($spreadsheet);
  435.                     // Create a Temporary file in the system
  436.                     $fileName 'export_questionario.xlsx';
  437.                     $temp_file tempnam(sys_get_temp_dir(), $fileName);
  438.                     // Create the excel file in the tmp directory of the system
  439.                     $writer->save($temp_file);
  440.                     // Return the excel file as an attachment
  441.                     return $this->file($temp_file$fileNameResponseHeaderBag::DISPOSITION_INLINE);
  442.                 }
  443.                 return $this->render('default/indexmanager.html.twig', [
  444.                     "corsi" => $corsi,
  445.                     "quests" => $quests,
  446.                     "questionari" => $questionari,
  447.                     "questionario" => $questionario,
  448.                     "questionariIniziati" => count($questionariIniziati),
  449.                     "thisQuestionario" => $thisQuestionario,
  450.                     "moodle_token" => $moodle_token,
  451.                     "domande" => $domande_,
  452.                     "corsiMoodle" => $corsiMoodle,
  453.                     "corsoMoodle" => $corsoMoodle,
  454.                     "uid" => $uid,
  455.                     "questionario_selected" => $questionario_selected,
  456.                 ]); 
  457.             } else {
  458.                 return $this->render('default/errormanager.html.twig', []);
  459.             }
  460.         } else {
  461.             $q $doctrine->getRepository(Questionari::class)->findBy(["user" => $user"questionario" => null]);
  462.             return $this->render('default/index.html.twig', [
  463.                 "questionari" => $q
  464.             ]);
  465.         }
  466.     }
  467.     #[Route('/firewall'name'app_default_firewall')]
  468.     public function firewall(Request $request): Response
  469.     {
  470.         return new Response("Firewall");
  471.     }
  472. }