X-Git-Url: https://git.auder.net/?a=blobdiff_plain;f=routes%2Fpages.js;h=2acefc0a18ee77e5495adc1075c17ee2a543b7a8;hb=HEAD;hp=37b84cf7d852595ec2947457e65b1d3c1cb1b3b9;hpb=e99c53fb3be56eb4c685dd061eef0e5b5bf22b73;p=qomet.git diff --git a/routes/pages.js b/routes/pages.js index 37b84cf..2acefc0 100644 --- a/routes/pages.js +++ b/routes/pages.js @@ -1,15 +1,14 @@ let router = require("express").Router(); const access = require("../utils/access"); -const UserEntity = require("../entities/user"); -const AssessmentEntity = require("../entities/assessment"); +const UserModel = require("../models/user"); +const EvaluationModel = require("../models/evaluation"); const CourseModel = require("../models/course"); -const AssessmentModel = require("../models/assessment"); // Actual pages (least specific last) -// List initials and count assessments +// List initials and count evaluations router.get("/", (req,res) => { - UserEntity.getAll( (err,userArray) => { + UserModel.getAll( (err,userArray) => { if (!!err) return res.json(err); res.render("index", { @@ -28,14 +27,20 @@ router.get("/login", access.unlogged, (req,res) => { // Redirection screens when possible cheating attempt detected in exam router.get("/enablejs", (req,res) => { - res.render("enable-js", { + res.render("enablejs", { title: "JS disabled", }); }); -router.get("/nodevtools", (req,res) => { - res.render("no-devtools", { - title: "Devtools enabled", +router.get("/fullscreen", (req,res) => { + res.render("fullscreen", { + title: "Not in fullscreen", + }); +}); + +router.get("/noblur", (req,res) => { + res.render("noblur", { + title: "Lost focus", }); }); @@ -70,7 +75,7 @@ router.get("/:initials([a-z0-9]+)/:courseCode([a-z0-9._-]+)", (req,res) => { let code = req.params["courseCode"]; CourseModel.getByRefs(initials, code, (err,course) => { access.checkRequest(res, err, course, "Course not found", () => { - AssessmentEntity.getByCourse(course._id, (err2,assessmentArray) => { + EvaluationModel.getByCourse(course._id, (err2,evaluationArray) => { if (!!err) return res.json(err); access.getUser(req, res, (err2,user) => { @@ -81,7 +86,7 @@ router.get("/:initials([a-z0-9]+)/:courseCode([a-z0-9._-]+)", (req,res) => { res.render("course", { title: "course " + initials + "/" + code, course: course, - assessmentArray: assessmentArray, + evaluationArray: evaluationArray, teacher: isTeacher, initials: initials, }); @@ -91,45 +96,57 @@ router.get("/:initials([a-z0-9]+)/:courseCode([a-z0-9._-]+)", (req,res) => { }); }); -// Display assessment (exam or open status) -router.get("/:initials([a-z0-9]+)/:courseCode([a-z0-9._-]+)/:assessmentName([a-z0-9._-]+)", (req,res) => { +// Grading students answers: --> after identification (password), always send secret with requests +router.get("/:initials([a-z0-9]+)/:courseCode([a-z0-9._-]+)/grade", (req,res) => { + let initials = req.params["initials"]; + let code = req.params["courseCode"]; + // TODO: if (main) teacher, also send secret, saving one request + res.render("grade", { + title: "grade exams " + code + "/" + name, + initials: initials, + courseCode: code, + }); +}); + +// Display evaluation (exam or open status) +router.get("/:initials([a-z0-9]+)/:courseCode([a-z0-9._-]+)/:evaluationName([a-z0-9._-]+)", (req,res) => { let initials = req.params["initials"]; let code = req.params["courseCode"]; - let name = req.params["assessmentName"]; - AssessmentModel.getByRefs(initials, code, name, (err,assessment) => { - access.checkRequest(res, err, assessment, "Assessment not found", () => { - if (!assessment.active) - return res.json({errmsg: "Assessment is idle"}); - delete assessment["papers"]; //always remove recorded students answers - if (assessment.mode == "exam") + let name = req.params["evaluationName"]; + EvaluationModel.getByRefs(initials, code, name, (err,evaluation) => { + access.checkRequest(res, err, evaluation, "Evaluation not found", () => { + if (!evaluation.active) + return res.json({errmsg: "Evaluation is idle"}); + delete evaluation["papers"]; //always remove recorded students answers + if (evaluation.mode == "exam") { if (!!req.headers['user-agent'].match(/(SpecialAgent|HeadlessChrome|PhantomJS)/)) { // Basic headless browser detection return res.json({errmsg: "Headless browser detected"}); } - // Strip conclusion + questions if exam mode (stepwise process) - delete assessment["conclusion"]; - delete assessment["questions"]; + // Strip questions if exam mode (stepwise process) + delete evaluation["questions"]; } - res.render("assessment", { - title: "assessment " + initials + "/" + code + "/" + name, - assessment: assessment, + res.render("evaluation", { + title: "evaluation " + initials + "/" + code + "/" + name, + evaluation: evaluation, }); }); }); }); -// Monitor: --> after identification (password), always send password hash with requests -router.get("/:initials([a-z0-9]+)/:courseCode([a-z0-9._-]+)/:assessmentName([a-z0-9._-]+)/monitor", (req,res) => { +// Monitor: --> after identification (password), always send secret with requests +router.get("/:initials([a-z0-9]+)/:courseCode([a-z0-9._-]+)/:evaluationName([a-z0-9._-]+)/monitor", (req,res) => { let initials = req.params["initials"]; let code = req.params["courseCode"]; - let name = req.params["assessmentName"]; + let name = req.params["evaluationName"]; + // TODO: if (main) teacher, also send secret, saving one request res.render("monitor", { - title: "monitor assessment " + code + "/" + name, + title: "monitor evaluation " + code + "/" + name, initials: initials, - code: code, - name: name, + courseCode: code, + examName: name, }); });