UNPKG

unserver-unify

Version:

754 lines (740 loc) 22.4 kB
'use strict'; 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); } });