unserver-unify
Version:
569 lines (563 loc) • 17.8 kB
JavaScript
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;
});