unserver-unify
Version:
370 lines • 11.4 kB
JavaScript
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;
}
});