protected function construitQuestionnaire($etudiant, $classe, $tp, $pageCourante) { $toutesLesQuestions = $tp->questions()->orderBy('ordre')->get(); $toutesLesReponses = Note::where('classe_id', '=', $classe->id)->where('tp_id', '=', $tp->id)->where('etudiant_id', '=', $etudiant->id)->get(); //batit la pagination des questions $i = 1; foreach ($toutesLesReponses as $reponse) { $page[$i][] = $reponse->id; if ($toutesLesQuestions->find($reponse->question_id)->pivot->breakafter) { $i++; } } //batit la liste des réponses déjà soumises par l'étudiant associées aux questions de la page affichée $reponsesPageCourante = Note::whereIn('id', $page[$pageCourante])->orderBy("ordre")->get(); //les indicateurs pour la pagination if (!empty($page[$pageCourante + 1])) { $pageSuivante = $pageCourante + 1; } else { $pageSuivante = null; } if (!empty($page[$pageCourante - 1])) { $pagePrecedente = $pageCourante - 1; } else { $pagePrecedente = null; } //le numéro de la première question de la page courante. $premiereQuestion = $toutesLesReponses->find($page[$pageCourante][0])->ordre; //store les ids afin de pouvoir les récupérer au retour afin que l'étudiant ne puisse répondre ou voir le TP des autres. Session::put('classeId', $classe->id); Session::put('tpId', $tp->id); Session::put('pageCourante', $pageCourante); return compact('toutesLesQuestions', 'toutesLesReponses', 'reponsesPageCourante', 'tp', 'classe', 'etudiant', 'pagePrecedente', 'pageCourante', 'pageSuivante', 'premiereQuestion'); }