unserver-unify
Version:
293 lines (281 loc) • 9.5 kB
JavaScript
;
angular.module('bamboo.mystudy').controller('ExamResultCtrl', function( $scope, ExamService, $sce, loginService, $stateParams, $state, CommonService, ApiService, examBizModel, docHelper, previewFileHelper) {
var self = this;
this.id = $stateParams.recordid;
this.paperid = $stateParams.paperid;
this.imageUrlPrefix = ApiService.SHOST + "/public/" + ApiService.RES + "/school/" + loginService.school._id + "/";
this.logoUrl = this.imageUrlPrefix + loginService.school.icon;
this.papertype = $stateParams.type;
this.part = [];
this.paper;
this.activetab = 'individual';
this.result;
var userresult = {};
this.correct;
this.title;
this.miss;
this.scores;
this.time;
this.showAudio = [];
this.comments = {};
getInfo(this.id);
this.useravatarpath = ApiService.PSURL + "/avatar/";
this.typename = {
'single': 'Multiple Choice',
'fill': 'Fill In Blanks',
'mfill': 'Fill In Blanks',
'tof': 'True or False',
'multiple': 'Multiple Answers',
'mquestion': 'Question Group',
"short": 'Essay Question',
"typing": 'Typing',
"mDD": 'Multiple Match D&D',
"info": 'Information',
"sDD": 'Single Match D&D',
"order": 'Order Question'
};
$scope.getTrustAsHtml = function(str) {
return s.unescapeHTML(str);
}
function getInfo(id) {
var _info = {
id: id,
action: 'getdexamrecordbyid'
};
if (self.papertype == "Paper") {
_info.action = 'getexamrecordbyid';
// getReport(self.paperid);
}
console.log(_info);
examApi(_info, function(_record) {
console.log("-------_record-------");
console.log(_record);
self.reasonid = _record.reasonid;
self.comments = _record.comments;
self.commentAuthor = _record.commentAuthor;
self.knowledgeresults = _record.knowledgeresult;
angular.forEach(_record.knowledgeresult, function(item, key) {
self.showknowledge = true;
// console.log(item);
// console.log(key);
var total = item.correct + item.wrong;
item.rate = parseInt(item.correct * 100 / total);
})
console.log(_record);
userresult = _record.questions;
if (self.papertype == "Paper") {
var _r = {
action: 'getfullpaper',
id: self.paperid
};
// console.log(_r);
// console.log(_record);
examApi(_r, function(paper) {
//console.log(paper);
paper = paper || {};
self.paper = paper.paper;
self.qstList = paper.qstList;
self.part = handleResult(_record, paper);
getReport(self.paperid);
console.log(self.part);
});
} else {
self.paper = _record.paper;
var info = {
paper: _record.paper,
qstList: _record.questions
};
self.part = handleResult(_record.record, info);
}
filterIllegalchars(self.part);
});
}
function filterIllegalchars(qList) {
angular.forEach(qList, function(q, idx) {
q.content = docHelper.filterIllegalChars(q.content);
});
}
function handleResult(record, paper) {
console.log(record);
record = record || {};
paper = paper || {};
paper.paper = paper.paper || {};
self.title = paper.paper.title;
self.correct = record.correct;
self.miss = record.miss;
self.score = record.score;
self.wrong = record.wrong;
var neededData = [];
var _qsts = {};
var _result = record.questions;
var line = [];
self.totalscore = 0;
var questionIds = [];
if (self.papertype == "Paper") {
angular.forEach(paper.paper.questions, function(val, idx) {
if(val.type!='mquestion'&&val.type!='info'){
self.totalscore += val.score || 0;
}
// self.totalscore += val.score || 0;
if (questionIds.indexOf(val.id) < 0) {
questionIds.push(val.id);
}
});
} else {
// console.log(paper);
angular.forEach(paper.paper.contents, function(val, idx) {
self.totalscore += (val.score || 0) * (val.counter || 0);
});
}
angular.forEach(paper.qstList, function(val, idx) {
val = ExamService.convertV1Question(val);
var id = val._id;
_qsts[id] = val;
});
var csvstr = "";
angular.forEach(_result, function(val, key) {
var id = key;
if (questionIds.indexOf(id) < 0) {
questionIds.push(id);
}
var q = _qsts[id] || {};
if (q.comments && typeof q.comments[0] != 'object') {
q.comments = null;
} else {
console.log(q.comments);
angular.forEach(q.comments, function(comment) {
var user = {
id: comment.uid,
avatar: comment.avatar,
}
comment.user_avatar = CommonService.getAvatarSrc(user);
});
}
if (q.commentaudio) {
q.audiourl = $sce.trustAsResourceUrl(ApiService.SHOST + "/exam/audio/" + encodeURI(q.commentaudio));
}
if (q.file) {
q.fileurl = ApiService.SHOST + "/exam/file/" + q.file;
}
var r = val;
// console.log(r);
for (var key in record.reviewresult) {
var value = record.reviewresult[key];
if (key == id) {
r.teacherScore = value;
}
}
//if (r.userAnswer) {
// if (q.type == 'multiple' && r.userAnswer.length < 1) {
// delete r.userAnswer;
// } else
// if (q.type == 'mfill' && r.userAnswer.length < 1) {
// delete r.userAnswer;
// }
//}
if (r.userAnswer) {
if (r.userAnswer.length < 1) {
delete r.userAnswer;
}
}
});
var _index = 1;
angular.forEach(questionIds, function(id) {
var q = _qsts[id] || {};
if (q.type != "mquestion" && q.type != "info") {
q._index = _index;
_index++;
}
var r = _result[id];
if (q.type != "info") {
neededData.push({
q: q,
r: r
})
}
})
console.log(neededData);
return neededData;
}
function handleReordData(data) {
if (!data) {
return;
}
//console.log(data);
self.reportFlag = true;
var qRecords = data.questionresult;
var scoreStatistic = data.statistic;
self.paperTotalScore = 0;
if (self.paper && self.paper.questions && self.paper.questions.length > 0) {
for (var i = 0; i < self.paper.questions.length; i += 1) {
self.paperTotalScore += self.paper.questions[i].score;
}
}
var qstList = self.qstList;
// console.log(qstList)
if (qstList && qstList.length > 0) {
for (var i = 0; i < qstList.length; i += 1) {
var _id = qstList[i]._id;
if (qRecords[_id]) {
qstList[i].totalAnswerCnt = qRecords[_id].counter;
qstList[i].totalMissCnt = qRecords[_id].miss;
qstList[i].totalCorrectCnt = qRecords[_id].correct;
qstList[i].wronganswers = qRecords[_id].answers;
}
console.log(userresult[_id]);
var useranswer = userresult[_id];
if (useranswer) {
if (useranswer.flag) {
qstList[i].result = "correct";
} else if (!useranswer.flag && (!useranswer.userAnswer || useranswer.userAnswer.length < 1)) {
qstList[i].result = "Not Attempted";
} else if (!useranswer.flag && !useranswer.iscore) {
qstList[i].result = "wrong";
}
}
qstList[i].totalWrongCnt = qstList[i].totalAnswerCnt - qstList[i].totalCorrectCnt - qstList[i].totalMissCnt;
qstList[i].answerstr = qstList[i].answer.join(" ");
qstList[i].totalCorrectCntPercentage = 100 * qstList[i].totalCorrectCnt / qstList[i].totalAnswerCnt;
qstList[i].totalWrongCntPercentage = 100 * qstList[i].totalWrongCnt / qstList[i].totalAnswerCnt;
qstList[i].totalMissCntPercentage = 100 * qstList[i].totalMissCnt / qstList[i].totalAnswerCnt;
}
self.questionsRecords = self.displayquestionsRecords = qstList;
// console.log(qstList);
}
$scope.counter = data.counter;
$scope.times = data.times / data.counter;
$scope.scores = data.scores / data.counter;
}
this.print = function() {
window.print();
}
function getReport(id) {
var info = {
action: "getpaperreport",
id: id
};
examApi(info, handleReordData);
}
function examApi(info, callback) {
ApiService.post('/exam', info).then(function(result) {
if (result.data.success) {
if (!callback) {
console.log("-- api success ---");
//CommonService.showNoBlockSuccess('Update Successful!');
} else {
callback(result.data.data);
}
}
});
}
this.preview = function(obj,eid) {
this.baseurl = ApiService.SHOST + "/public/" + ApiService.RES + "/examattachment/" + eid + "/" + obj.result;
console.log(this.baseurl);
previewFileHelper.preview(obj.source,this.baseurl);
}
this.previewVideo = function(obj){
var url = ApiService.SHOST + "/exam/video/" + encodeURI(obj.commentvideo);
console.log(url);
previewFileHelper.preview(obj.commentvideo,url);
}
});