UNPKG

unserver-unify

Version:

293 lines (281 loc) 9.5 kB
'use strict'; 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); } });