UNPKG

unserver-unify

Version:

370 lines 11.4 kB
'use strict' angular.module('bamboo.common').service('ExamService', function(ApiService, loginService, $state, CommonService, $window, $localStorage) { this.examApi = function(info, callback) { ApiService.post('/exam', info).then(function(result) { console.log(result); if (result.data.success) { if (!callback) { CommonService.showInfo('Update Successful!'); } else { callback(result.data.data); } } else { console.log('error', result.data.error); } }); }; // service to get full info about one paper by id this.getFullPaperById = function(paperid, callback) { //log warning if no callback if (!callback) { console.log('Try to get full paper(id:' + paperid + ') without callback'); } var info = { id: paperid, action: 'getfullpaper' }; ApiService.post('/exam', info).then(function(result) { if (result.data.success) { callback(result.data.data); } else { var error = result.data.error || '' + result.data.info || ''; CommonService.showNoBlockErr("Error : " + error); } }) } this.checkQResult = function(q) { switch (q.type) { case 'single': // console.log(q) angular.forEach(q._options, function(opt, index) { // console.log(opt); // console.log(index); if (opt.correct && index == q.select) { q.judgement = 'Correct'; q.selection = opt.text; console.log('correct'); } }) if (q.judgement != 'Correct') { if (q.select || q.select == 0) { q.judgement = 'Wrong'; q.selection = q._options[q.select].text; } else { q.judgement = 'Not Attempted'; } } break; case 'multiple': var opts = q._options; console.log("--------multiple---------"); // console.log(opts); var _selected = 0; var _correct = true; for (var j = 0; j < opts.length; j += 1) { var opt = opts[j]; console.log(opt); if (opt.selection) { _selected++; } if ((opt.selection && opt.correct) || (!opt.selection && !opt.correct)) {} else { _correct = false; console.log('wrong selection'); } } console.log(_selected); console.log(_correct); if (_selected) { if (_correct) { q.judgement = 'Correct'; } else { q.judgement = 'Wrong'; } } else { q.judgement = 'Not Attempted'; } break; case 'tof': console.log("--------tof---------"); console.log(q); q.tof_answer = q._options[0] && q._options[0].correct; if (!q.selection) { q.judgement = 'Not Attempted'; } else if (q.selection == 'true' && q.tof_answer) { q.judgement = 'Correct'; } else if (q.selection == 'false' && !q.tof_answer) { q.judgement = 'Correct'; } else { q.judgement = 'Wrong'; } break; case 'fill': case 'mfill': console.log(q); var opts = q._options; console.log("---------M Fills--------"); // console.log(opts); q.judgement = 'Correct'; var _selected = 0; var _correct = true; for (var j = 0; j < opts.length; j += 1) { var opt = opts[j]; if (opt.selection) { _selected++; var _result = false; for (var n = 0; n < opt.texts.length; n++) { if (opt.selection == opt.texts[n].text) { _result = true;; break; } } if (_result) {} else { _correct = false; console.log(opt); } } else { _correct = false; } } if (_selected) { if (_correct) { q.judgement = 'Correct'; } else { q.judgement = 'Wrong'; } } else { q.judgement = 'Not Attempted'; } break; } return q; } this.convertV1Question = function(q) { if (loginService.subDomain == 'xijing' && q.content) { q.content = q.content.replace("course.xijing.edu.cn:3500", "media.xijing.edu.cn"); q.content = q.content.replace("course.xijing.edu.cn:3500", "media.xijing.edu.cn"); angular.forEach(q._options, function(opt) { if (opt.text) { opt.text = opt.text.replace("course.xijing.edu.cn:3500", "media.xijing.edu.cn"); opt.text = opt.text.replace("course.xijing.edu.cn:3500", "media.xijing.edu.cn"); } }) } if (q.ver || q.ver >= 1) { return q; // no need to convert } console.log("version "); q.ver = 1; q._options = []; console.log(q); switch (q.type) { case 'single': if (q.options && q.options.length) { angular.forEach(q.options, function(opt, index) { var info = opt; if (opt.text == q.ok_answer) { info.correct = true; } q._options.push(info); }) } else { angular.forEach(q.answer, function(text, index) { var info = { text: text, correct: true, } q._options.push(info); }) angular.forEach(q.references, function(text, index) { var info = { text: text, } q._options.push(info); }) } // delete q.ok_answer; break; case 'multiple': if (q.options && q.options.length) { angular.forEach(q.options, function(opt, index) { q._options.push(opt); }) } else { angular.forEach(q.answer, function(text, index) { var info = { text: text, correct: true, } q._options.push(info); }) angular.forEach(q.references, function(text, index) { var info = { text: text, } q._options.push(info); }) } break; case 'fill': case 'mfill': angular.forEach(q.answer, function(text, index) { var info = { texts: [{ text: text }], } q._options.push(info); }) angular.forEach(q.options, function(val, index) { var _text = { text: val.text, } var info = { texts: [_text], } q._options.push(info); }) break; case 'tof': if (q.tof_answer) { var info = { correct: q.tof_answer, } q._options.push(info); delete q.tof_answer; } else if (q.answer) { var _t = false; if (q.answer[0] && (q.answer[0] == true || q.answer[0] == 'true')) { _t = true; } var info = { correct: _t, } q._options.push(info); } // console.log(q); break; } // delete q.answer; // delete q.references; // delete q.options; if (loginService.subDomain == 'xijing') { angular.forEach(q._options, function(opt) { if (opt.text) { opt.text = opt.text.replace("course.xijing.edu.cn:3500", "media.xijing.edu.cn"); opt.text = opt.text.replace("course.xijing.edu.cn:3500", "media.xijing.edu.cn"); } }) } return q; } // service to update paper this.updatePaperById = function(params, callback) { if (!params.hasOwnProperty('_id')) { console.log('try to update papar without id'); return; } params.action = 'updatepaper'; ApiService.post('/exam', params).then(function(result) { if (result.data.success) { if (callback) { callback(result.data.data); } } else { var error = result.data.error || '' + result.data.info || ''; CommonService.showNoBlockErr("Error : " + error); } }) } // service to update dpaper this.updateDpaperById = function(params, callback) { if (!params.hasOwnProperty('id')) { console.log('try to update papar without id'); return; } params.action = 'updatedpaper'; ApiService.post('/exam', params).then(function(result) { if (result.data.success) { if (callback) { callback(result.data.data); } } else { var error = result.data.error || '' + result.data.info || ''; CommonService.showNoBlockErr("Error : " + error); } }) } this.api = function(info, callback) { ApiService.post('/exam', info).then(function(result) { if (result.data.success) { if (!callback) { CommonService.showNoBlockSuccess('Update Successful!'); $state.reload(); } else { callback(result.data.data); } } else { var error = result.data.error || '' + result.data.info || ''; CommonService.showNoBlockErr("Error : " + error); } }) } this.redirect2Practise = function(id, type, task) { console.log(id, type, task); if (!id) return; var URL = ""; var AppURL = ApiService.APPURL; type = type || "knowledge"; switch (type) { case "knowledge": URL = AppURL + "practise/knowledge/" + id; break; default: URL = AppURL + "practise/knowledge/" + id; break; } $localStorage.referralURL = $window.location.href; console.log($localStorage.referralURL); console.log(URL); $window.location.href = URL; } this.redirect2Uapp = function(id, type, task) { if (!id) return; var URL = ""; var AppURL = ApiService.APPURL; type = type || "exam"; switch (type) { case "assignment": URL = AppURL + "exam/startpage/assignment/" + id; break; case "exam": URL = AppURL + "exam/startpage/exam/" + id; break; case "chapterexam": URL = AppURL + "exam/chpexamstartpage/course/" + id + "/" + task; break; case "test": URL = AppURL + "exam/test/test/" + id + "/"; break; case "knowledge": URL = AppURL + "exam/test/knowledge/" + id + "/"; break; case "errortest": URL = AppURL + "exam/test/error/" + id + "/"; break; case "targettest": URL = AppURL + "exam/test/personal/" + id + "/"; break; case "myspaceexam": URL = AppURL + "exam/test/exam/" + id + "/"; break; default: URL = AppURL + "exam/startpage/exam/" + id; break; } $localStorage.referralURL = $window.location.href; console.log(URL); $window.location.href = URL; } });