diff options
Diffstat (limited to 'modules/zelfoverhoor/zelfoverhoor.js')
-rw-r--r-- | modules/zelfoverhoor/zelfoverhoor.js | 88 |
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(); }); |