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