unserver-unify
Version:
583 lines (567 loc) • 17 kB
JavaScript
;
angular.module('bamboo.course').controller('GsxCoursesCtrl', function($scope, $rootScope, loginService, ApiService, deviceDetector, $state, $stateParams, fullWidthService) {
var self = this;
var page = 1;
var groupType = $stateParams.type;
this.tab = $stateParams.tab;
console.log(this.tab);
var mycourses = [];
this.content = {};
this.allkeys = [];
this.allkeycolor = [];
this.allkeyresult = [];
this.option = '';
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') {
$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: 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) {
item.mycourseFlag = true;
}
})
}
angular.forEach(self.items, function(item, index) {
if (compareDate(item.update)) {
item.newflag = true;
}
if (item.infoOnlyFlag) {
item.courseurl = "index.courses.infoonly";
} 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.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 = '';
}
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') {
path = "/lcoursesgroupnumber";
//return;
}
ApiService.get(path).then(function(result) {
console.log(result);
if (result.data.success) {
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 (result.data.data[key]) {
catitem.counter = result.data.data[key];
_totalCoursesCountUnderCat += (catitem.counter || 0);
}
}
if (self.totalCoursesCountUnderCat < _totalCoursesCountUnderCat) {
self.totalCoursesCountUnderCat = _totalCoursesCountUnderCat;
}
}
});
}
}
this.subschool = false;
this.category = 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) {
getcourses();
getMyDepartments();
} else if (groupType != 'group') {
switch (self.tab) {
case 'star':
self.getStarCourses();
break;
case 'update':
self.getNewCourses();
break;
case 'top':
self.getTopCourses();
break;
default:
self.getHotestCourses();
break;
}
}
}
var searchmethod;
this.getAllCourses = function() {
page = 1;
self.clrCoursesSearchName(); // clear name search box
self.sortmethod = "";
searchmethod = undefined;
getcourses();
}
this.getHotestCourses = function() {
page = 1;
self.clrCoursesSearchName(); // clear name search box
self.sortmethod = "visitercounter";
searchmethod = {
visitercounter: {
$gte: 100
},
}
getcourses();
}
this.getStarCourses = function() {
page = 1;
self.clrCoursesSearchName(); // clear name search box
self.sortmethod = "star";
searchmethod = {
star: true,
}
getcourses();
}
this.getGoodCourses = function() {
page = 1;
self.clrCoursesSearchName(); // clear name search box
self.sortmethod = "goodC";
searchmethod = {
goodC: true,
}
getcourses();
}
this.getPassCourses = function() {
page = 1;
self.clrCoursesSearchName(); // clear name search box
self.sortmethod = "passC";
searchmethod = {
passC: true,
}
getcourses();
}
this.getNominationCourses = function() {
page = 1;
self.clrCoursesSearchName(); // clear name search box
self.sortmethod = "nominationC";
searchmethod = {
nominationC: true,
}
getcourses();
}
this.getNewCourses = function() {
page = 1;
self.clrCoursesSearchName(); // clear name search box
// console.log("getNewCourses");
self.sortmethod = "update";
var weekago = new Date();
weekago.setDate(weekago.getDate() - 30);
searchmethod = {
update: {
$gte: weekago
},
}
getcourses();
}
this.getPositionCourses = function() {
page = 1;
self.clrCoursesSearchName(); // clear name search box
// console.log("getNewCourses");
self.sortmethod = "position";
searchmethod = {
position: {
$gte: 0
}
}
getcourses();
}
this.getTopCourses = function() {
page = 1;
self.clrCoursesSearchName(); // clear name search box
// console.log("getNewCourses");
self.sortmethod = "top";
searchmethod = {
top: true,
}
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) {
self.items = [];
}
//self.items = self.items.concat(result.data.data);
self.items = result.data.data.items;
} else {
if (self.loadMoreFlag) {
self.items = self.items.concat(result.data.data.items);
self.loadMoreFlag = false;
} else {
self.items = result.data.data.items;
}
}
console.log(self.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();
}
self.loadMore = function() {
page++;
getcourses();
self.loadMoreFlag = true;
}
function getcourses() {
console.log("getcourses");
console.log(self.department);
// 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]
};
console.log(info);
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 (option) {
if (!info.search) {
info.search = {};
}
if (groupType == 'group') {
info.search.categoryTags = option;
} else {
info.search.industry = option;
}
}
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) {
console.log(key, title);
self.currentContent = self.content[title];
if (self.currentContent) {
self.showTab = "positionReq";
} else {
self.showTab = "positionList";
}
/*
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();
};
this.searchCourseByName = function(q) {
searchmethod = {
searchname: q
};
if (self.mobileFlag) {
self.setting.items = [];
}
getcourses();
};
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);
};
});