Prepare monitoring using Statements component (early draft stage)
[qomet.git] / public / javascripts / monitor.js
1 // TODO: onglets pour chaque groupe + section déroulante questionnaire (chargé avec réponses)
2 // NOM Prenom (par grp, puis alphabétique)
3 // réponse : vert si OK (+ choix), rouge si faux, gris si texte (clic pour voir)
4 // + temps total ?
5 // click sur en-tête de colonne : tri alphabétique, tri décroissant...
6 // Affiché si (hash du) mdp du cours est correctement entré
7 // Doit reprendre les données en base si refresh (sinon : sockets)
8
9 // Also buttons "start exam", "end exam" for logged in teacher
10
11 let socket = null; //monitor answers in real time
12
13 new Vue({
14 el: "#monitor",
15 data: {
16 password: "", //from password field
17 assessment: null, //obtained after authentication
18 // Stage 0: unauthenticated (password),
19 // 1: authenticated (password hash validated), start monitoring
20 stage: 0,
21 },
22 methods: {
23 // stage 0 --> 1
24 startMonitoring: function() {
25 $.ajax("/start/monitoring", {
26 method: "GET",
27 data: {
28 password: this.,
29 aname: examName,
30 cname: courseName,
31 },
32 dataType: "json",
33 success: s => {
34 if (!!s.errmsg)
35 return this.warning(s.errmsg);
36 this.stage = 1;
37 },
38 });
39 },
40 // TODO: 2-level sockets, for prof and monitors
41 socket = io.connect("/" + assessment.name, {
42 query: "number=" + this.student.number + "&password=" + this.password
43 });
44 socket.on(message.allAnswers, this.setAnswers);
45 initializeStage2(s.questions, s.paper);
46 },
47 });
48 },
49 // stage 2 --> 3 (or 4)
50 // from a message by statements component, or time over
51 // TODO: also function startAssessment (for main teacher only)
52 endAssessment: function() {
53 // Set endTime, destroy password
54 $("#leftButton, #rightButton").show();
55 if (assessment.mode == "open")
56 {
57 this.stage = 4;
58 return;
59 }
60 $.ajax("/end/assessment", {
61 method: "GET",
62 data: {
63 aid: assessment._id,
64 number: this.student.number,
65 password: this.student.password,
66 },
67 dataType: "json",
68 success: ret => {
69 if (!!ret.errmsg)
70 return this.warning(ret.errmsg);
71 assessment.conclusion = ret.conclusion;
72 this.stage = 3;
73 delete this.student["password"]; //unable to send new answers now
74 socket.disconnect();
75 socket = null;
76 },
77 });
78 },
79 },
80 });