groupId: function(group, prefix) {
                        return (prefix || "") + "group" + group;
                },
+               togglePresence: function(s) {
+                       s.present = !s.present;
+               },
+               allFinished: function() {
+                       for (s of this.students)
+                       {
+                               if (!s.present)
+                                       continue;
+                               const paperIdx = this.assessment.papers.findIndex( item => { return item.number == number; });
+                               if (paperIdx === -1)
+                                       return false;
+                               const paper = this.assessment.papers[paperIdx];
+                               if (paper.inputs.length < this.assessment.questions.length)
+                                       return false;
+                       }
+                       return true;
+               },
                getColor: function(number, qIdx) {
                        // For the moment, green if correct and red if wrong; grey if unanswered yet
                        // TODO: in-between color for partially right (especially for multi-questions)
                                                return input;
                                        });
                                        this.students = s.students;
+                                       this.students.forEach( s => { s.present = true; }); //a priori...
                                        this.stage = 1;
                                        socket = io.connect("/", {
                                                query: "aid=" + this.assessment._id + "&secret=" + s.secret
 
                                                        input#password(type="password" v-model="password" @keyup.enter="startMonitoring()")
                                                button.waves-effect.waves-light.btn(@click="startMonitoring()") Send
                                #stage1(v-show="stage==1")
-                                       button.waves-effect.waves-light.btn(@click="endMonitoring()") Send feedback
+                                       button.waves-effect.waves-light.btn(@click="endMonitoring()" :disabled="!allFinished()") Send feedback
                                        h4.title(@click="toggleDisplay('answers')") Anwers
                                        // TODO: aussi afficher stats, permettre tri par colonnes
                                        .card(v-show="display=='answers'")
                                                                        th(v-for="(q,i) in assessment.questions") Q.{{ (i+1) }}
                                                        tbody
                                                                tr.assessment(v-for="s in studentList(group)")
-                                                                       td(:class="{blur:!!s.blur,resize:!!s.resize,disconnect:!!s.disco}") {{ s.name }}
+                                                                       td(:class="{blur:!!s.blur,resize:!!s.resize,disconnect:!!s.disco}" @click="togglePresence(s)") {{ s.name }}
                                                                        td(v-for="(q,i) in assessment.questions" :style="{backgroundColor: getColor(s.number,i)}" @click="seeDetails(s.number,i)")  
                                        h4.title(@click="toggleDisplay('assessment')") Assessment
                                        div(v-show="display=='assessment'")