unserver-unify
Version:
754 lines (740 loc) • 22.4 kB
JavaScript
;
angular.module('bamboo.course').controller('CoursesCtrl', function($scope, $rootScope, loginService, CourseApi, ApiService, deviceDetector, $state, $stateParams, fullWidthService) {
var self = this;
var page = 1;
var groupType = $stateParams.type;
this.tab = $stateParams.tab;
console.log(this.tab);
this.bannerPath = ApiService.SHOST + "/public/" + ApiService.RES + "/school/" + ApiService.gid + "/";
self.courseTags = loginService.school.courseTags;
self.dynamicTypes = loginService.school.dynamicTypes || [];
self.currency = (loginService.school.currency&&loginService.school.currency.sign)?loginService.school.currency.sign:'$';
var mycourses = [];
this.content = {};
this.allkeys = [];
this.allkeycolor = [];
this.allkeyresult = [];
this.option = '';
this.dynamicType = '';
var colorarray = ['panel-grey', 'panel-red', 'panel-blue', 'panel-sea', 'panel-green', 'panel-orange'];
if (loginService.school.themecolors) {
$scope.coursebtmStyle = {
"background-color": loginService.school.themecolors.coursewidgetbtmcolor
};
}
if (loginService.subDomain == 'gsx' || loginService.school.theme == 't8') {
$rootScope.fullwidthflag = true;
}
$scope.$on("$destroy", function() {
console.log('-- destroy --');
fullWidthService.listen();
});
this.items = [];
this.setting = {
ctrl: self,
hasPhoto: false,
listName: "courses",
emptyTitle: 'No Course!',
pageSize: (loginService.school.theme=='t8')?10:9,
currentPage: (self.page + 1)
};
this.togglecat = function() {
if ($scope.category) {
$scope.category = false;
} else {
$scope.category = true;
}
}
this.show0item = true;
this.showTab = "information";
function compareMyCourses() {
if (!loginService.user) {
angular.forEach(self.items, function(item, index) {
if (item.infoOnlyFlag) {
item.courseurl = "index.courses.infoonly";
} else {
if (compareDate(item.update)) {
item.newflag = true;
}
item.courseurl = "index.courses.info";
}
console.log(item.infoOnlyFlag);
})
self.setting.items = self.items;
return;
}
loginService.getMyProfile().then(function(result) {
// console.log(result);
mycourses = result.courses;
console.log("Mycourses", mycourses);
// callback(mycourses);
if (mycourses && mycourses.length > 0) {
console.log("-- check --");
console.log("-- timeout --");
angular.forEach(self.items, function(item, index) {
var id = item._id;
if (mycourses.indexOf(id) > -1&&self.sortmethod!='coming') {
item.mycourseFlag = true;
}
})
}
angular.forEach(self.items, function(item, index) {
if (compareDate(item.update)) {
item.newflag = true;
}
if(self.sortmethod=='coming' ){
item.courseurl = "index.courses.info";
}else if (item.infoOnlyFlag) {
item.courseurl = "index.courses.infoonly";
} else if ((self.inspectorFlag || item.mycourseFlag) && ($state.current.name == 'index.corsegrade')) {
item.courseurl = "index.courses.course.knowledges";
} else if (self.inspectorFlag || item.mycourseFlag || (item.did && self.mydepartments.indexOf(item.did) > -1)) {
item.courseurl = "index.courses.course";
} else {
item.courseurl = "index.courses.info";
}
})
self.setting.items = self.items;
// $scope.$apply();
console.log(self.setting.items);
});
}
//console.log('isOwn:' + isOwn);
//console.log($stateParams);
self.showMobileSid = false; //init the var to show/hide sidebar for mobile view
self.toggleSideBar = function() {
self.showMobileSid = !self.showMobileSid;
}
this.mobileFlag = false;
self.mydepartments = [];
self.totalCoursesCountUnderCat = 0;
this.inspectorFlag = false;
console.log(loginService.user);
if(!loginService.school.disableAdminStudy){
if (loginService.user && (loginService.user.is_admin || loginService.user.grole == 'admin' || loginService.user.grole == 'sysmanager' || loginService.user.grole == 'sysinspector')) {
self.inspectorFlag = true;
}
}
var option;
this.option;
var industryAll = "All";
this.defaultpic = ApiService.SHOST + '/public/images/videos.png';
if (loginService.school.coursephoto) {
this.defaultpic = ApiService.SHOST + "/public/" + ApiService.RES + "/school/" + ApiService.gid + "/" + loginService.school.coursephoto;
}
this.coursePhotoUrl = ApiService.SHOST + '/lcourse/';
this.subjectPicUrl = ApiService.SHOST + "/public/" + ApiService.RES;
this.industryInited = false;
self.q = ''; //init the var to save the course search name
// this.Departments = ApiService.school.departments;
this.totalCoursesCountUnderDepartment = 0;
function getDepartments() {
var lists = [];
for (var i = 0; i < ApiService.school.departments.length; i++) {
var info = {
department: ApiService.school.departments[i],
}
lists.push(info);
}
self.Departments = lists;
// console.log(self.Departments);
}
var departmentnames = {};
function getalldepartments() {
var info = {
action: 'getdepartmentsinfo',
};
ApiService.post('/departments', info).then(function(result) {
// console.log(result.data);
if (result.data.success) {
var _departmentnames = result.data.data;
for (var id in _departmentnames) {
var name = _departmentnames[id];
departmentnames[name] = id;
}
getlateststatus();
// console.log(departmentnames);
}
});
};
this.toggledrop = function() {
if ($scope.dropdown) {
$scope.dropdown = false;
} else {
$scope.dropdown = true;
}
}
this.clrCoursesSearchName = function() {
self.q = '';
}
var fullCatNumber = {};
function fillCateNumber(_CatNumber) {
var _totalCoursesCountUnderCat = 0;
for (var i = 0; i < $scope.catitems.length; i++) {
var catitem = $scope.catitems[i];
var key = catitem.key;
//console.log(result.data.data[key]);
//console.log(groupType);
if (_CatNumber[key]) {
catitem.counter = _CatNumber[key];
_totalCoursesCountUnderCat += (catitem.counter || 0);
}else{
catitem.counter=0;
}
}
if (self.totalCoursesCountUnderCat < _totalCoursesCountUnderCat) {
self.totalCoursesCountUnderCat = _totalCoursesCountUnderCat;
}
}
function getlateststatus() {
if (loginService.school.coursebyDepartment) {
getDepartments()
var _info = {
action: "getlastdailyreport",
};
ApiService.post('/report', _info).then(function(result) {
if (result.data.success) {
var _totalCoursesCountUnderCat = 0;
if (loginService.school.coursebyDepartment) {
for (var i = 0; i < self.Departments.length; i++) {
var info = self.Departments[i];
var id = departmentnames[info.department];
if (id && result.data.data.cousesbydepartment[id]) {
info.counter = result.data.data.cousesbydepartment[id];
// console.log(info.counter);
self.totalCoursesCountUnderDepartment += info.counter;
// console.log(self.totalCoursesCountUnderDepartment);
}
}
}
}
})
} else {
//var path = "/lcoursescatnumber";
if (groupType == 'group') {
ApiService.get("/lcoursesgroupnumber").then(function(result) {
console.log(result);
if (result.data.success) {
fullCatNumber = result.data.data;
fillCateNumber(fullCatNumber)
}
});
} else {
querySearchedCate(null);
}
}
}
this.subschool = false;
this.category = ApiService.category;
this.headCate = ApiService.category;
this.categorykeys = ApiService.school.categorykeys;
if (groupType == 'group') {
this.category = ApiService.materialgroup;
this.categorykeys = ApiService.school.materialkeys;
}
console.log(this.category);
this.sortmethod = this.tab || ""; //visitercounter, position,score,update,created,recommend,top
if (deviceDetector.isMobile() && !deviceDetector.isTablet()) {
this.setting.pageSize = Math.floor((window.screen.height - $('.row').offset().top) / 70);
this.mobileFlag = true;
this.sortmethod = "update";
}
this.pageChanged = function(newPage) {
page = newPage;
getInfo();
};
this.nextPage = function() {
page++;
getInfo();
}
function getArray(obj, array, level, parent) {
if ((typeof obj) === "object") {
for (var key in obj) {
var fullkey;
if (parent == '') {
fullkey = key;
} else {
fullkey = parent + "," + key;
}
var _i = {
key: fullkey,
value: level,
title: key,
items: [],
};
array.push(_i);
var info = obj[key];
if (typeof info === "object") {
getArray(info, _i.items, level + 1, fullkey);
}
}
}
}
function generateCategoryList() {
var catList = [];
getArray(self.category, catList, 0, '');
console.log(catList);
if (!self.categorykeys) {
$scope.catitems = catList;
} else {
var keyindex = {};
var results = [];
angular.forEach(catList, function(val, index) {
var key = val.title;
keyindex[key] = val;
})
angular.forEach(self.categorykeys, function(key, index) {
if (keyindex[key]) {
results.push(keyindex[key]);
}
})
angular.forEach(keyindex, function(val, key) {
var found = false;
for (var i = 0; i < results.length; i++) {
var record = results[i].title;
if (record == key) {
found = true;
break;
}
}
if (!found) {
results.push(val);
}
})
$scope.catitems = results;
}
getlateststatus();
}
function getInfo() {
console.log("getInfo");
if (loginService.school.coursebyDepartment) {
getalldepartments();
} else {
generateCategoryList();
}
if (groupType != 'group' && !self.tab) {
if($rootScope.courseQ&&$rootScope.courseQ!='')
{
self.q = $rootScope.courseQ;
setTimeout(function(){
self.searchCourseByName(self.q);
$rootScope.courseQ = '';
},1);
}
else if($rootScope.courseCat&&$rootScope.courseCat!='')
{
setTimeout(function(){
self.list($rootScope.courseCat);
$rootScope.courseCat = '';
},1);
}
else
{
getcourses();
}
getMyDepartments();
} else if (groupType != 'group') {
switch (self.tab) {
case 'star':
self.getStarCourses();
break;
case 'update':
self.getNewCourses();
break;
case 'top':
self.getTopCourses();
break;
case 'visitercounter':
self.getHotestCourses();
break;
case 'all':
self.getAllCourses();
break;
default:
self.searchCourseByTag(self.tab);
break;
}
}
}
var searchmethod;
this.getAllCourses = function() {
self.clrCoursesSearchName(); // clear name search box
self.sortmethod = '';
searchmethod = {};
self.dynamicType = '';
page = 1;
getcourses();
querySearchedCate(self.q);
}
this.getComingCourses=function(){
self.clrCoursesSearchName(); // clear name search box
self.sortmethod = 'coming';
searchmethod = {};
page = 1;
getcourses();
}
this.searchCourseByTag = function(tag) {
self.clrCoursesSearchName(); // clear name search box
self.sortmethod = tag;
searchmethod = {};
searchmethod['cTag.' + tag] = true;
console.log(searchmethod);
page = 1;
getcourses();
}
this.searchCourseByType = function(type) {
self.clrCoursesSearchName(); // clear name search box
self.sortmethod = type;
self.dynamicType = type;
page = 1;
getcourses();
querySearchedCate(self.q);
}
this.getHotestCourses = function() {
self.clrCoursesSearchName(); // clear name search box
self.sortmethod = "visitercounter";
searchmethod = {
visitercounter: {
$gte: 100
},
}
page = 1;
getcourses();
}
this.getStarCourses = function() {
self.clrCoursesSearchName(); // clear name search box
self.sortmethod = "star";
searchmethod = {
star: true,
}
page = 1;
getcourses();
}
this.getGoodCourses = function() {
self.clrCoursesSearchName(); // clear name search box
self.sortmethod = "goodC";
searchmethod = {
goodC: true,
}
page = 1;
getcourses();
}
this.getPassCourses = function() {
self.clrCoursesSearchName(); // clear name search box
self.sortmethod = "passC";
searchmethod = {
passC: true,
}
page = 1;
getcourses();
}
this.getNominationCourses = function() {
self.clrCoursesSearchName(); // clear name search box
self.sortmethod = "nominationC";
searchmethod = {
nominationC: true,
}
page = 1;
getcourses();
}
this.getNewCourses = function() {
self.clrCoursesSearchName(); // clear name search box
self.latestCourse = true;
// console.log("getNewCourses");
self.sortmethod = "update";
var weekago = new Date();
weekago.setDate(weekago.getDate() - 30);
searchmethod = {
update: {
$gte: weekago
},
}
page = 1;
getcourses();
}
this.getPositionCourses = function() {
self.clrCoursesSearchName(); // clear name search box
// console.log("getNewCourses");
self.sortmethod = "position";
searchmethod = {
position: {
$gte: 0
}
}
page = 1;
getcourses();
}
this.getTopCourses = function() {
self.clrCoursesSearchName(); // clear name search box
// console.log("getNewCourses");
self.sortmethod = "top";
searchmethod = {
top: true,
}
page = 1;
getcourses();
}
var userfullnames = {};
var weekago = new Date();
weekago.setDate(weekago.getDate() - 7);
function compareDate(courseDate) {
var cd = new Date(courseDate);
if (cd > weekago) return true;
else return false;
};
this.total = 0;
function handleCourses(result) {
console.log(result);
if (self.mobileFlag) {
if (!self.items || page == 1) {
self.items = [];
}
self.items = self.items.concat(result.data.data.items);
//self.items = result.data.data.items;
} else {
self.items = result.data.data.items;
}
self.setting.totalCount = result.data.data.counter;
if (self.total < result.data.data.counter) {
self.total = result.data.data.counter;
}
$scope.setting = self.setting;
compareMyCourses();
}
function getcourses() {
console.log("getcourses");
// console.log(self.department);
console.log(page);
var names = [];
// self.toggleSideBar ();
var limit = self.setting.pageSize || 9;
self.showMobileSid = false;
if (self.department) {
var info = {
action: "getcourselist",
start: (page - 1) * limit,
sort: {
reverse: true,
predicate: self.sortmethod
},
limit: limit,
did: departmentnames[self.department],
search: searchmethod
};
console.log(info);
if(self.sortmethod=='coming'){
info.action="getComingPublishCourses";
delete info.sort;
}
ApiService.post('/lcourses', info).then(handleCourses);
} else {
var info = {
// id: ApiService.gid,
action: "getcourselist",
page: page - 1,
start: (page - 1) * limit,
sort: {
reverse: true,
predicate: self.sortmethod
},
limit: limit,
search: searchmethod,
};
console.log(info);
if(self.sortmethod=='coming'){
info.action="getComingPublishCourses";
delete info.sort;
}
if (!info.search) {
info.search = {};
}
if (option) {
if (groupType == 'group') {
info.search.categoryTags = option;
} else {
if(self.searchCateFlag)
{
info.search.industry = option;
categoryLoad(info.search.industry);
}
if(self.q&&self.q!=''&&self.searchCourseFlag) {
info.search.searchname = self.q;
}
}
}
if(self.dynamicType) {
info.search.dynamicType = self.dynamicType;
}
// if(loginService.subDomain=='gsx'||loginService.subDomain=='cap') {
// info.search.lang = $rootScope.currentLanguage;
// }
console.log(info);
return ApiService.post('/lcourses', info).then(handleCourses);
}
}
function getMyDepartments() {
console.log("getMyDepartments");
if (loginService.user && (loginService.user.grole == 'dinspector' || loginService.user.grole == 'dadmin')) {
var info = {
action: "getmydepartment",
};
ApiService.post('/departments', info).then(function(result) {
if (result.data.success) {
for (var i = 0; i < result.data.data.length; i++) {
self.mydepartments.push(result.data.data[i]._id)
}
console.log(result.data.data);
console.log(self.mydepartments);
}
});
}
}
getInfo();
this.department;
this.listdepartment = function(department) {
self.department = department;
//searchmethod = null;
self.setting.items = [];
page = 1;
getcourses();
}
this.list = function(key, title) {
self.currentContent = self.content[title];
if (self.currentContent) {
self.showTab = "positionReq";
} else {
self.showTab = "positionList";
}
self.searchCateFlag = true;
/*
self.clrCoursesSearchName(); // clear name search box
console.log(key);
option = key;
searchmethod = null;
this.option = option;
self.setting.items = [];
page = 1;
getcourses();
*/
//self.clrCoursesSearchName(); // clear name search box
self.sortmethod = "";
option = key;
searchmethod = null;
this.option = option;
self.setting.items = [];
page = 1;
getcourses();
if (!key&&!loginService.school.coursebyDepartment) {
fillCateNumber(fullCatNumber);
}
};
function querySearchedCate(string) {
var info = {
action: "getSearchedCategoryNumber",
options: {}
}
if(string){
info.searchname = string;
}
if(loginService.subDomain=='gsx'||loginService.subDomain=='cap') {
info.options.lang = $rootScope.currentLanguage;
}
if(self.dynamicType) {
info.options.dynamicType = self.dynamicType;
};
console.log(info);
CourseApi.lcApi(info, function(data) {
console.log(data);
fillCateNumber(data)
})
}
this.searchCourseByName = function(q) {
self.searchCourseFlag = true;
if (self.mobileFlag) {
self.setting.items = [];
}
searchmethod = {
searchname: q
};
getcourses();
if (!loginService.school.coursebyDepartment) {
querySearchedCate(q);
}
};
this.searchPositionByName = function(q) {
q = angular.lowercase(q);
console.log(self.allkeys);
angular.forEach(self.allkeys, function(item, index) {
if (angular.lowercase(self.allkeys[index]).indexOf(q) > -1) {
self.allkeyresult[index] = 1;
} else self.allkeyresult[index] = 0;
})
};
this.goToDetail = function(key) {
self.list(key, key);
};
this.clearSearchCourse = function() {
self.searchCourseFlag = false;
self.q = '';
searchmethod = null;
getcourses();
if (!loginService.school.coursebyDepartment) {
querySearchedCate(self.q);
}
}
this.clearSearchCate = function() {
self.searchCateFlag = false;
self.option = '';
getcourses();
}
this.clearSearch = function() {
self.searchCourseFlag = false;
self.searchCateFlag = false;
self.q = '';
self.dynamicType = '';
searchmethod = null;
self.sortmethod = '';
self.option = '';
self.topCate = {};
self.headCate = ApiService.category;
self.relatedCate = {};
getcourses();
if (!loginService.school.coursebyDepartment) {
querySearchedCate(self.q);
}
}
function categoryLoad(key){
if(key&&key!=''){
var arr = key.split(',');
self.topCate = arr;
self.headCate = ApiService.category;
self.relatedCate = {};
var temp = angular.copy(self.category);
angular.forEach(arr,function(val,index){
temp = angular.copy(temp[val]);
if(arr.length>1&&index==(arr.length-2)){
self.headCate = temp;
}
if(arr.length>=2&&index==(arr.length-1)){
self.relatedCate = temp;
}
});
}
}
$scope.isObjectEmpty = function(obj){
return Object.keys(obj).length === 0;
}
this.headerCateSearch = function(key,index){
var str = '';
if(index) {
for(i=0;i<index;i++){
str+=self.topCate[i]+',';
}
str+=key;
} else {
str = key;
}
console.log(str);
self.list(str);
}
});