public function doDistribuer($id, $input)
 {
     $return = true;
     try {
         $tp = $this->model->findOrFail($id);
         if (isset($input['distribue'])) {
             //distribue les classes
             $classes = $tp->classes()->wherein('classe_id', $input['distribue'])->get();
             foreach ($classes as $classe) {
                 //TODO mettre toute la création dans une transaction
                 Note::forClasse($classe->id)->forTP($tp->id)->delete();
                 //efface les notes déjà distribuées pour ce TP/Classe
                 $etudiants = $classe->etudiants;
                 $questions = $tp->questions()->orderBy('ordre')->get();
                 foreach ($etudiants as $etudiant) {
                     $i = 1;
                     foreach ($questions as $question) {
                         $note = new Note();
                         $note->classe_id = $classe->id;
                         $note->tp_id = $tp->id;
                         $note->question_id = $question->id;
                         $note->etudiant_id = $etudiant->id;
                         $note->ordre = $i++;
                         $note->save();
                     }
                 }
                 //distribue une copie au prof pour qu'il puisse l'essayer
                 $i = 1;
                 foreach ($questions as $question) {
                     $note = new Note();
                     $note->classe_id = $classe->id;
                     $note->tp_id = $tp->id;
                     $note->question_id = $question->id;
                     $note->etudiant_id = Auth::user()->id;
                     $note->ordre = $i++;
                     $note->save();
                 }
                 //set le flag pour indiquer que c'est distribué
                 $classe->pivot->distribue = true;
                 $classe->pivot->save();
             }
         }
         //retire les classes
         if (isset($input['retire'])) {
             $classes = $tp->classes()->wherein('classe_id', $input['retire'])->get();
             foreach ($classes as $classe) {
                 Note::forClasse($classe->id)->forTP($tp->id)->delete();
                 //efface les notes déjà distribuées pour ce TP/Classe
                 //reset le flag pour indiquer que c'est pas distribué
                 $classe->pivot->distribue = false;
                 $classe->pivot->save();
             }
         }
     } catch (Exception $e) {
         $return = false;
     }
     return $return;
 }