unserver-unify
Version:
338 lines (317 loc) • 10.2 kB
JavaScript
;
angular.module('bamboo.course').controller('KnowledgesCateCtrl', function($stateParams, $state, $localStorage, ExamService, CommonService, loginService, ApiService, $scope, $q, fullWidthService, $rootScope) {
var self = this;
this.pid = $stateParams.pid;
// this.totalq=0;
this.breadKrumKey = [];
this.defaultpic = ApiService.SHOST + '/public/images/videos.png';
$scope.knowledgesData = [];
this.knowledgeResult = {};
function getcalresult(val, key) {
// console.log(key);
var total = self.cateQuestCount;
if (total) {
// self.totalq+=total;
// console.log(self.totalq);
var options = {
total: total,
counter: val.counter,
qs: val.qs,
completeRate: val.qs * 100 / total,
correctRate: val.correct * 100 / (val.total),
}
// if (options.qs > total) {
// options.qs = total;
// }
// console.log(options);
return options;
}
// console.log(val);
// console.log(key);
// console.log(self.counters[key]);
return {};
}
$rootScope.fullwidthflag = true;
$scope.$on("$destroy", function() {
console.log('-- destroy --');
fullWidthService.listen();
});
function getKnowLedgeSummary() {
var deferred = $q.defer();
var info = {
action: "getKnowledgeTestSummary",
cid: $stateParams.cid,
};
// console.log('--regen cat');
ExamService.examApi(info, function(result) {
console.log(result);
if (result) {
self.knowledgeResult = result;
// angular.forEach(self.Knowledges, function(item) {
// var key = item.key;
// // console.log(key);
// if (result[key]) {
// item.result = getcalresult(result[key], key);
// self.totalscore+=result[key].score*10;
// }
// if (item.items && item.items.length) {
// angular.forEach(item.items, function(_item) {
// var _key = _item.key;
// if (result[_key]) {
// self.totalscore+=result[_key].score*10;
// // console.log(_key,result[_key]);
// _item.result = getcalresult(result[_key], _key);
// }
// })
// }
// })
// console.log(self.Knowledges);
deferred.resolve(true);
} else {
deferred.resolve(false);
}
});
return deferred.promise;
}
function getKnowledgeData() {
var deferred = $q.defer();
var info = {
cid: $stateParams.cid,
id: loginService.user._id,
action: "getusercourseknowledges",
}
// console.log(info);
ApiService.post('/user', info).then(function(result) {
if (result.data.success) {
self.examresult = result.data.data;
deferred.resolve(true);
} else {
deferred.resolve(false);
}
});
return deferred.promise;
}
function generateKnowledgeData(){
console.log(self.Knowledges);
angular.forEach(self.Knowledges, function(item) {
var key = item.key;
// console.log(key);
for (var _tkey in self.examresult) {
// console.log(_tkey);
if (_tkey.indexOf(key) == 0) {
console.log('matched');
if (item.exam) {
item.exam.correct += self.examresult[_tkey].correct || 0;
item.exam.counter += self.examresult[_tkey].counter || 0;
} else {
item.exam = self.examresult[_tkey];
}
}
}
if (item.items && item.items.length) {
angular.forEach(item.items, function(_item) {
var _key = item.key;
for (var _tkey in self.examresult) {
if (_tkey.indexOf(_key) == 0) {
if (_item.exam) {
_item.exam.correct += self.examresult[_tkey].correct || 0;
_item.exam.counter += self.examresult[_tkey].counter || 0;
} else {
_item.exam = self.examresult[_tkey];
}
}
}
})
}
})
}
//getKnowLedgeSummary();
function getKnowLedges() {
var deferred = $q.defer();
var info = {
action: "getCourseKnowledgeQuestionCounters",
lid: $stateParams.cid,
};
if(self.breadKrumKey.length!=0){
info.key = self.breadKrumKey.join();
}
console.log(info);
ExamService.examApi(info, function(result) {
console.log(result);
self.counters = result.counterinfo || [];
if(self.breadKrumKey.length==0){
var category = {};
angular.forEach(result.courses, function(course, index) {
if (course.knowledgeCat) {
category = angular.merge({}, category, course.knowledgeCat);
}
});
if (result.cat) {
category = angular.merge({}, category, result.cat);
}
var resultCopy = angular.copy(result);
self.topCate = angular.copy(category);
} else {
self.cateQuestCount = (self.counters&&self.counters['-'])?self.counters['-']:0;
}
deferred.resolve(true);
});
return deferred.promise;
}
function generateFolders()
{
self.cateQuestCount = 0;
getKnowLedges().then(function(cat){
generateQuestionsData().then(function(res){
var category = angular.copy(self.topCate);
angular.forEach(self.breadKrumKey,function(val){
if(category[val]){
category = category[val];
}
});
var catList = [];
console.log(self.knowledgeResult);
console.log(self.counters);
getArray(category, catList, 0, '');
if(self.breadKrumKey.length!=0){
angular.forEach(category,function(val,key){
self.cateQuestCount += (self.counters[key])?self.counters[key]:0;
});
}
self.Knowledges = catList;
});
});
}
function generateQuestionsData(){
var deferred = $q.defer();
self.catResult = {};
if(self.breadKrumKey.length!=0){
var tempKey = self.breadKrumKey.join(); //self.breadKrumKey[self.breadKrumKey.length-1];
if(self.cateQuestCount!=0){
generateKnowledgeData();
generateKnowledgeResult(angular.copy(self.Knowledges));
if(self.knowledgeResult[tempKey]){
console.log(self.knowledgeResult[tempKey]);
self.catResult = getcalresult(self.knowledgeResult[tempKey], tempKey);
console.log(self.catResult);
}
}
deferred.resolve(true);
} else {
deferred.resolve(true);
}
return deferred.promise;
}
this.searchCategory = function(key){
self.breadKrumKey.push(key);
generateFolders();
}
this.breadSearch = function(index){
self.breadKrumKey = self.breadKrumKey.slice(0,index+1);
generateFolders();
}
this.headerCateSearch = function(key){
self.breadKrumKey = [];
self.breadKrumKey.push(key);
generateFolders();
}
this.allCategory = function(){
self.breadKrumKey = [];
generateFolders();
}
function generateKnowledgeResult(items)
{
angular.forEach(items,function(val){
var arr = val.key.split(',');
if(arr.length!=1){
val.key = arr[arr.length-1];
val.parent = 1;
}
$scope.knowledgesData.push(val);
if(val.items){
generateKnowledgeResult(val.items);
}
});
}
// if(self.pid){
// getPracticeInfo();
// } else {
if($rootScope.knowledgeKey){
getKnowledgeData().then(function(res){
getKnowLedgeSummary().then(function(result){
getKnowLedges().then(function(know){
self.breadKrumKey = [];
self.breadKrumKey.push($rootScope.knowledgeKey);
generateFolders();
});
});
});
} else {
getKnowledgeData().then(function(res){
getKnowLedgeSummary().then(function(result){
generateFolders();
});
});
}
// }
function getPracticeInfo()
{
var info = {
action: 'getKnowledgeGroup',
id: self.pid,
};
ApiService.post('/lcourses', info).then(function(result) {
if(result.data.success){
self.practice = result.data.data || {};
console.log(self.practice);
getKnowLedges();
}
});
}
this.gotoTest = function() {
// console.log(node);
$localStorage.userTestKey = self.breadKrumKey.join();
ExamService.redirect2Uapp($stateParams.cid, 'knowledge');
}
this.gotoPractise = function() {
// console.log(node);
$localStorage.userTestKey = self.breadKrumKey.join();
ExamService.redirect2Practise($stateParams.cid, 'knowledge');
}
this.gotoLearn = function() {
$state.go("index.courses.course.knowledges.resources", { key: self.breadKrumKey.join() });
}
function getArray(obj, array, level, parent) {
if ((typeof obj) === "object") {
for (var key in obj) {
var fullkey;
if (self.breadKrumKey.length==0) {
fullkey = key;
} else {
fullkey = self.breadKrumKey.join() + "," + key;
}
var correctRate=0;
var qs=0;
if(self.knowledgeResult[fullkey]&&self.counters[key]) {
var total = self.counters[key];
correctRate = self.knowledgeResult[fullkey].correct * 100 / self.knowledgeResult[fullkey].total;
qs = self.knowledgeResult[fullkey].qs;
}
var _i = {
key: key,
fullkey: fullkey,
value: level,
title: key,
correctRate: correctRate,
qs: qs,
items: [],
};
array.push(_i);
var info = obj[key];
if (typeof info === "object") {
getArray(info, _i.items, level + 1, fullkey);
}
}
}
}
});