ComunicWeb/assets/js/components/groups/info.js

114 lines
2.4 KiB
JavaScript
Raw Permalink Normal View History

/**
* Groups information management
*
* @author Pierre HUBERT
*/
ComunicWeb.components.groups.info = {
/**
* Group information cache
*/
_cache: {},
/**
* Get information about a single group
*
* @param {Number} id The ID of the target group
* @param {Function} callback
*/
getInfo: function(id, callback){
//First, check if the group is cached or not
if(this._cache[id])
return callback(this._cache[id]);
//Then query the server, if required
ComunicWeb.components.groups.interface.getInfo(id, function(result){
//Check for errors
if(result.error)
return callback(result);
//Save group information
ComunicWeb.components.groups.info._cache[id] = result;
//Call callback
callback(result);
});
},
/**
* Get information about a multiple groups
*
* @param {Array} list The list of the IDs of the group to get information about
* @param {Function} callback
* @param {Boolean} force TRUE to ignore cache (FALSE by default)
*/
getInfoMultiple: function(list, callback, force){
//First, check which group are unknown in the cache
var toFetch = Array();
list.forEach(function(id){
if(!ComunicWeb.components.groups.info._cache[id] || force)
toFetch.push(id);
});
if(toFetch.length == 0){
this.getInfoMultiplePreCallback(list, callback);
return;
}
//Perform the request over the server
ComunicWeb.components.groups.interface.getInfoMultiple(toFetch, function(result){
//Check for errors
if(result.error)
return notify("Could not get information about the groups!", "danger");
//Process the list of groups
for(i in result){
//Save group information in the cache
ComunicWeb.components.groups.info._cache[result[i].id] = result[i];
}
//Call callback
ComunicWeb.components.groups.info.getInfoMultiplePreCallback(list, callback);
});
},
/**
* Get multiple information pre-callback
*
* @param {Array} list The list of the IDs of teh group to get information about
* @param {Function} callback
*/
getInfoMultiplePreCallback: function(list, callback){
var groupInfo = {};
list.forEach(function(id){
groupInfo[id] = ComunicWeb.components.groups.info._cache[id];
});
//Call callback
callback(groupInfo);
},
/**
* Clear cache
*/
clearCache: function(){
this._cache = {};
}
};
//Register cache cleaner
ComunicWeb.common.cacheManager.registerCacheCleaner("ComunicWeb.components.groups.info.clearCache");