summaryrefslogtreecommitdiff
path: root/modules/zelfoverhoor/zelfoverhoor.js
diff options
context:
space:
mode:
Diffstat (limited to 'modules/zelfoverhoor/zelfoverhoor.js')
-rw-r--r--modules/zelfoverhoor/zelfoverhoor.js88
1 files changed, 66 insertions, 22 deletions
diff --git a/modules/zelfoverhoor/zelfoverhoor.js b/modules/zelfoverhoor/zelfoverhoor.js
index bfc9781..8f87f75 100644
--- a/modules/zelfoverhoor/zelfoverhoor.js
+++ b/modules/zelfoverhoor/zelfoverhoor.js
@@ -5,6 +5,8 @@ var moddir;
var accounts=require("./accounts.json");
+var SHUFFLE_QUESTIONS=false;
+
// {<id>: {q: "question", a: "answer"}}
var questiondb={};
// {<id>: {id, name, description, questions: [<question_id>]}}
@@ -55,6 +57,31 @@ function shuffle(a){
}
}
+function checkQsetJson(json,errfunc){
+ var qset;
+ try {
+ qset=JSON.parse(json);
+ } catch(e){
+ errfunc("Invalid json received");
+ return null;
+ }
+ if(!qset.name||typeof qset.name!="string"||
+ !qset.description||typeof qset.description!="string"||
+ !qset.questions||!Array.isArray(qset.questions)){
+ errfunc("Invalid data received");
+ return null;
+ }
+ var i;
+ for(i=0;i<qset.questions.length;i++){
+ if(!qset.questions[i].q||typeof qset.questions[i].q!="string"||
+ !qset.questions[i].a||typeof qset.questions[i].a!="string"){
+ errfunc("Invalid question data received");
+ return null;
+ }
+ }
+ return qset;
+}
+
module.exports=function(app,io,_moddir){
moddir=_moddir;
@@ -85,7 +112,7 @@ module.exports=function(app,io,_moddir){
list.push(questiondb[qset.questions[i]]);
}
var resset={"id": qset.id, "name": qset.name, "description": qset.description, "questions": list};
- // shuffle(resset.questions);
+ if(SHUFFLE_QUESTIONS)shuffle(resset.questions);
fs.readFile(moddir+"/qs.html",function(err,data){
if(err)throw err;
res.send(String(data)
@@ -93,6 +120,19 @@ module.exports=function(app,io,_moddir){
.replace("/*###QUESTIONSET###*/",JSON.stringify(resset)));
});
});
+ app.get("/zelfoverhoor/qsdata/:id",function(req,res){
+ var qset=questionsets[req.params.id];
+ if(qset==null){
+ res.status(404).send("ID not found");
+ return;
+ }
+ var list=[];
+ for(var i=0;i<qset.questions.length;i++){
+ list.push(questiondb[qset.questions[i]]);
+ }
+ var resset={"id": qset.id, "name": qset.name, "description": qset.description, "questions": list};
+ res.send(JSON.stringify(resset));
+ });
app.use(["/zelfoverhoor/docent","/zelfoverhoor/docent/*"],cmn.authgen(accounts));
app.get("/zelfoverhoor/docent",function(req,res){
@@ -114,27 +154,8 @@ module.exports=function(app,io,_moddir){
res.send(JSON.stringify(list));
});
app.post("/zelfoverhoor/docent/addset",function(req,res){
- var qset;
- try {
- qset=JSON.parse(req.body);
- } catch(e){
- res.status(400).send("Invalid json received");
- return;
- }
- if(!qset.name||typeof qset.name!="string"||
- !qset.description||typeof qset.description!="string"||
- !qset.questions||!Array.isArray(qset.questions)){
- res.status(400).send("Invalid data received");
- return;
- }
- var i;
- for(i=0;i<qset.questions.length;i++){
- if(!qset.questions[i].q||typeof qset.questions[i].q!="string"||
- !qset.questions[i].a||typeof qset.questions[i].a!="string"){
- res.status(400).send("Invalid question data received");
- return;
- }
- }
+ var qset=checkQsetJson(req.body,function(err){res.status(400).send(err);});
+ if(qset==null)return;
var ids=[],id;
for(i=0;i<qset.questions.length;i++){
id=uniqidstr(function(s){return questiondb[s]==null;});
@@ -150,6 +171,28 @@ module.exports=function(app,io,_moddir){
persistDB();
res.send(setid);
});
+ app.post("/zelfoverhoor/docent/editset/:id",function(req,res){
+ var setid=req.params.id;
+ if(questionsets[setid]==null){
+ res.status(404).send("ID not found");
+ return;
+ }
+ if(userlists[req.authuser].indexOf(setid)==-1){
+ res.status(403).send("ID does not belong to you");
+ return;
+ }
+ var qset=checkQsetJson(req.body,function(err){res.status(400).send(err);});
+ if(qset==null)return;
+ var ids=[],id;
+ for(i=0;i<qset.questions.length;i++){
+ id=uniqidstr(function(s){return questiondb[s]==null;});
+ questiondb[id]={"q": qset.questions[i].q, "a": qset.questions[i].a};
+ ids.push(id);
+ }
+ questionsets[setid]={"id": setid, "name": qset.name, "description": qset.description, "questions": ids};
+ persistDB();
+ res.send(setid);
+ });
app.post("/zelfoverhoor/docent/deleteset",function(req,res){
var setid=req.body;
if(!setid||typeof setid!="string"){
@@ -172,6 +215,7 @@ module.exports=function(app,io,_moddir){
res.status(404).send("ID not found");
return;
}
+ delete questionsets[setid];
persistDB();
res.send();
});