UNPKG

unserver-unify

Version:

569 lines (563 loc) 17.8 kB
angular.module('bamboo.common').service('ApiService', function($http, $rootScope, $localStorage, $q, LocalConfig, $location,$window, $sce) { 'use strict'; var self = this; this.gid = null; this.category = null; this.blogcategory; var defaultblogcategory = ['all', 'share', 'ask', 'job', 'support', 'suggestion', 'blog']; //console.log($location.host()); //console.log($location.port()); this.typelist = [{ type: 'single', text: 'Multiple Choice' }, { type: 'multiple', text: 'Multiple Answers' }, { type: 'mfill', text: 'Fill In Blanks' }, { type: 'tof', text: 'True or False' }, { type: 'short', text: 'Essay Question' }, { type: 'mquestion', text: 'Question Group' }, { type: 'info', text: 'Information' }, { type: 'sDD', text: 'Single Match D&D' }, { type: 'mDD', text: 'Multiple Match D&D' }, { type: 'typing', text: 'Typing Practice' }]; this.levelList = [{ key: 0, value: "Very Easy" }, { key: 1, value: "Easy" }, { key: 2, value: "Average" }, { key: 3, value: "Difficult" }, { key: 4, value: "Very Difficult" }, ]; this.levelDict = { 0: "Very Easy", 1: "Easy", 2: "Average", 3: "Difficult", 4: "Very Difficult" }; var typename = {}; angular.forEach(self.typelist, function(val, idx) { typename[val.type] = val.text; }); this.typename = typename; var _host = $location.host(); var _port = $location.port(); var _hosts = _host.split('.'); var newhost; if (LocalConfig.APIDOMAIN && LocalConfig.APIDOMAIN.length > 2) { newhost = LocalConfig.APIDOMAIN; } else { if (_hosts.length < 3) { return console.log("----------No subdomain Found ! ------------"); } newhost = "api." + _hosts[_hosts.length - 2] + "." + _hosts[_hosts.length - 1]; if (!LocalConfig.OSSSERVER && LocalConfig.OSSSUBDOMAIN) { LocalConfig.OSSSERVER = LocalConfig.OSSSUBDOMAIN + '.' + _hosts[_hosts.length - 2] + "." + _hosts[_hosts.length - 1]; } if (_hosts.length == 3 && _hosts[0] == 'ntuc') { LocalConfig.SHOST = '//' + _host + '/' + LocalConfig.MEDIAPATH; } } this.BASEDOMAIN = LocalConfig.BASEDOMAIN; if (!this.BASEDOMAIN) { this.BASEDOMAIN = _hosts[_hosts.length - 2] + "." + _hosts[_hosts.length - 1]; } //console.log(newhost); //var _protocol=$location.protocol(); console.log(window.location.origin); this.HOSTS = "//" + newhost; /* if (LocalConfig.APIDOMAIN && LocalConfig.APIDOMAIN.charAt(0) == '/') { this.HOSTS = LocalConfig.APIDOMAIN; } */ if (LocalConfig.PORT) { this.HOSTS += ":" + LocalConfig.PORT; } if (LocalConfig.APIDOMAIN && (LocalConfig.APIDOMAIN.charAt(0) == '/'||LocalConfig.APIDOMAIN.indexOf('https://')==0)) { this.HOSTS = LocalConfig.APIDOMAIN; } this.HOST = window.location.origin; this.RES = LocalConfig.RES; this.school; this.department; this.MEDIAPATH = LocalConfig.MEDIAPATH; this.SHOST = LocalConfig.SHOST; this.PSURL = LocalConfig.SHOST + '/public/' + LocalConfig.RES; this.UI_SERVER = self.HOSTS + '/ui'; this.RES = LocalConfig.RES; this.APPURL = (LocalConfig.APPSERVER_HOST || "//" + $location.host()) + (LocalConfig.APPSERVER_PORT ? ':' + LocalConfig.APPSERVER_PORT : '') + LocalConfig.APPSERVER_PATH; var _PARENT_PATH = LocalConfig.PARENT_PATH || '/parent/' this.PARENTURL = ("//" + $location.host()) + (LocalConfig.PARENT_PORT ? ':' + LocalConfig.PARENT_PORT : '') + _PARENT_PATH; // console.log(self.UI_SERVER); this.Categories; this.categoryInfo; this.forumcategory; this.forumcategoryKeys = []; this.CompanyTypes = []; this.DEPARTMENTFLAG = LocalConfig.DEPARTMENTFLAG; if (LocalConfig.DEPARTMENTKEY) { this.DEPARTMENTKEY = LocalConfig.DEPARTMENTKEY; } else if (this.DEPARTMENTFLAG) { var level = LocalConfig.DEPARTMENTLEVEL; if (!level) { level = 3; } var hstr = $location.host().split("."); if (hstr.length > level) { var index = hstr.length - level - 1; if (isNaN(parseInt(hstr[index]))) { this.DEPARTMENTKEY = hstr[index]; } } } var _vrr = []; function getArray(obj, level) { if ((typeof obj) === "object") { for (var key in obj) { var _i = { key: key, value: level, title: key, }; _vrr.push(_i); var info = obj[key]; if (typeof info === "object") { getArray(info, level + 1) } } } } $localStorage.previousTime = new Date(); var previousState = null; this.queryData = $location.search(); console.log(this.queryData); if (this.queryData && this.queryData.embeded) { $rootScope.hideHeader = true; } //console.log($localStorage); $localStorage.$default({ detail: {}, total: 0 }); this.changeToState = function(state) { console.log(state); console.log(previousState); var time = new Date(); if ($localStorage.detail && previousState && state != previousState && $localStorage.idleTime < 30) { var delta = (time - $localStorage.previousTime) / 1000; if (!$localStorage.detail[previousState]) { $localStorage.detail[previousState] = 1; } $localStorage.detail[previousState] += delta; $localStorage.total = $localStorage.total + delta; } /* if(previousState){ self.queryData={}; } */ previousState = state; $localStorage.previousTime = time; // console.log("--- state change : " + state); } $rootScope.$on('$stateChangeSuccess', function(event, toState, toParams, fromState, fromParams) { var _state = toState.name.split('.'); var state; if (_state && _state.length > 1) { state = _state[1]; self.changeToState(state); } // console.log(pagetimes); // console.log($localStorage.detail); if ($localStorage.total > 30) { //>5 minutes console.log('--- time out for record ---'); self.submitActivityRecord() } }) var _loginStatusDefer = null; this.resetLogin = function() { _loginStatusDefer = null; } this.getLoginStatus = function() { // console.log("-- getLoginStatus Service ---"); if (!_loginStatusDefer) { // console.log('new'); _loginStatusDefer = $q.defer(); self.post('/loginstatus').then(function(result) { // console.log(result); if (result.data.success) { // console.log("-- getLoginStatus get Result ---"); var user = result.data.data; // console.log(user); _loginStatusDefer.resolve(user); } else { _loginStatusDefer.resolve(null); } // console.log(_loginStatusDefer); }); } return _loginStatusDefer.promise; } this.getCheckSum = $rootScope.getCheckSum = function(_cs) { if (!_cs) { return 'a1b1c2'; } var len = _cs.length; var start = 0; if (len > 8) { start = len - 8; } var chk = 0; for (var i = start; i < len; i++) { chk += (_cs.charCodeAt(i) * (i + 1)); } return (chk & 0xffffffff).toString(16); // return md5.createHash(_cs); } this.submitActivityRecord = function(callback,lastFlag) { var now = new Date(); if (previousState&&$localStorage.detail) { var delta = (now - $localStorage.previousTime) / 1000; if (!$localStorage.detail[previousState]) { $localStorage.detail[previousState] = 1; } $localStorage.detail[previousState] += delta; $localStorage.total += delta; } $localStorage.previousTime = now; if ($localStorage.total < 10) { if (callback) { callback(); } return; } var info = { action: 'submitactivity', len: $localStorage.total, detail: $localStorage.detail, exit:lastFlag, } console.log(info); self.post("/site", info).then(function() { console.log("-- submit success ---"); $localStorage.$reset({ detail: {}, total: 0, previousTime: new Date(), }); if (callback) { callback(); } }); } function getKeyArray(obj) { getArray(obj, 0); //console.log(_vrr); self.Categories = _vrr; var _rrr = {}; for (var i = 0; i < _vrr.length; i++) { var info = _vrr[i]; var key = info.key; _rrr[key] = []; _rrr[key].push(key); // first value will be key itself //var level=info.level; for (var j = i + 1; j < _vrr.length; j++) { // search all the item until the same level key found var next = _vrr[j]; if (info.value < next.value) { _rrr[key].push(_vrr[j].key) } else { break; } } } //console.log(_rrr); self.categoryInfo = _rrr; } function getMainJsonKeys(jsondata) { var keys = []; for (var key in jsondata) { keys.push(key); } return keys; } this.extGet = function(url) { var deferred = $q.defer(); var info = { url: url, method: "GET", headers: { 'Content-Type': 'application/json' }, withCredentials: true }; $http.defaults.useXDomain = true; $http(info).then(function(res) { deferred.resolve(res.data); }); return deferred.promise; } this.getSchoolInfo = function(key, forceFlag) { console.log('getting school info') var subdomain = key; var deferred = $q.defer(); if (subdomain == self.key && !forceFlag && self.school && self.school._id) { deferred.resolve(self.school); return deferred.promise; } var info = { url: self.HOSTS + "/uapi/getSchoolId/" + subdomain, method: "GET", headers: { 'Content-Type': 'application/json' }, withCredentials: true // async: false, }; if (self.DEPARTMENTKEY && self.DEPARTMENTFLAG) { info.url = self.HOSTS + "/uapi/getSchoolId/" + subdomain + "/" + self.DEPARTMENTKEY; } // console.log(info); $http.defaults.useXDomain = true; $http(info).then(function(res) { var data=res.data; if (data.success) { // console.log(data); console.log(" --- getschoolapi"); self.gid = data.school._id; self.department = data.department; if (self.department && self.department._id) { // console.log("---- department detected ------"); self.DID = self.department._id; $rootScope.currentDepartment = self.department; } self.school = data.school; if (typeof self.school.wikiFlag == "undefined") { self.school.wikiFlag = true; } if (typeof self.school.forum == "undefined") { self.school.forum = true; } if (typeof self.school.courseFlag == "undefined") { self.school.courseFlag = true; } if (typeof self.school.blogFlag == "undefined") { self.school.blogFlag = true; } if (typeof self.school.newsFlag == "undefined") { self.school.newsFlag = true; } if (typeof self.school.BBSFlag == "undefined") { self.school.BBSFlag = true; } if (typeof self.school.mySpaceFlag == "undefined") { self.school.mySpaceFlag = true; } if (typeof self.school.eventFlag == "undefined") { self.school.eventFlag = true; } if (typeof self.school.classFlag == "undefined") { self.school.classFlag = true; } self.category = data.category; getKeyArray(self.category); // console.log(self.category) // console.log(data) // console.log(data.category) self.school.forumcategory = data.forumcategory; self.forumcategory = data.forumcategory; // console.log(data); self.materialgroup = data.materialgroup || {}; // console.log(data) // console.log(self.materialgroup) self.blogcategory = data.school.blogcategory; // console.log(self.blogcategory); if (!self.blogcategory || self.blogcategory.length < 1) { self.blogcategory = defaultblogcategory; } self.productcategory = data.productcategory; if (!self.productcategory) { self.productcategory = {}; } self.projectcategory = data.projectcategory || {}; self.companycategory = data.companycategory; if (!self.companycategory) { self.companycategory = {}; } self.materialgroup = data.materialgroup; if (!self.materialgroup) { self.materialgroup = {}; } // console.log(self.blogcategory); /* if(self.forumcategory){ self.forumcategoryKeys=getMainJsonKeys(self.forumcategory); }else{ self.forumcategory={};// avoid empty object }*/ /* set school icon */ if (self.school.ico) { var link = document.createElement('link'); link.type = 'image/x-icon'; link.rel = 'icon'; link.href = self.SHOST + "/public/" + self.RES + "/school/" + self.gid + "/" + self.school.ico; document.getElementsByTagName('head')[0].appendChild(link); } deferred.resolve(data.school); } else { self.gid = null; self.category = null; deferred.reject(null); } },function(res) { self.gid = null; self.category = null; deferred.reject(res.data); }); // console.log(deferred.promise) return deferred.promise; }; this.getFullUrl = function(url, useApi) { return self.UI_SERVER + "/" + self.gid + url; }; this.getRESUrl = function(url) { return $sce.trustAsResourceUrl(self.SHOST + "/public/" + self.RES + encodeURI(url)); }; this.redirect = function(url) { var fullurl = self.getFullUrl(url); window.location = fullurl; } var getParameters = function(method, url, data, useApi) { var sUrl=self.getFullUrl(url, useApi); if(method==='GET'){ if(sUrl.indexOf('?')==-1){ sUrl+='?time='+ (new Date()).getTime(); } else { sUrl+='&time='+ (new Date()).getTime(); } } // console.log(sUrl); var params = { url: sUrl, method: method, headers: { 'Content-Type': 'application/json' }, withCredentials: true, // async: false, }; if (method === 'POST' || method === 'PUT') { params.data = data; } return params; }; this.request = function(method, url, data, useApi) { var httpParams = getParameters(method, url, data, useApi); $http.defaults.useXDomain = true; return $http(httpParams); }; this.get = function(url, useApi) { return this.request('GET', url, null, useApi); }; this.post = function(url, data, useApi) { if (self.DID && data) { data.did = self.DID; } return this.request('POST', url, data, useApi); }; this.delete = function(url, useApi) { return this.request('DELETE', url, null, useApi); }; this.put = function(url, data, useApi) { return this.request('PUT', url, data, useApi); }; this.setGid = function(gid) { this.gid = gid; }; this.getDocCategory = function(doc, callback) { var array = []; if (self.school[doc]) { self.get("/schooldoc/" + self.school[doc]).then(function(result) { if (result.data.success && result.data.data) { // console.log(result.data.data); var cat = result.data.data.content || {}; var keys = result.data.data.arrays || []; var arrays = []; getKeysArray(cat, function(vrr, rrr) { arrays = vrr; }); var keyindex = {}; var results = []; angular.forEach(arrays, function(val, index) { var key = val.title; keyindex[key] = val; }) angular.forEach(keys, 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); } }) array = results; } callback(array); }); } else { callback(array); } } function getKeysArray(obj, callback, _flag) { _vrr = []; getArray(obj, 0, '', _flag); var _rrr = {}; for (var i = 0; i < _vrr.length; i++) { var info = _vrr[i]; var key = info.key; _rrr[key] = []; _rrr[key].push(key); // first value will be key itself for (var j = i + 1; j < _vrr.length; j++) { // search all the item until the same level key found var next = _vrr[j]; if (info.value < next.value) { _rrr[key].push(_vrr[j].key); } else { break; } } } callback(_vrr, _rrr); } this.getKeysArray = getKeysArray; });