// For testing (and possibly migration) purposes, hard-code the
// list of settings that are available to be applied on the server,
- // either via workstation or user settings.
+ // either via workstation or user settings. Ultimately, the
+ // assumption will be that all settings live on the server except
+ // those specified by service.browserOnlyPrefixes.
service.serverSettings = [
'eg.circ.checkin.no_precat_alert',
'eg.circ.checkin.noop',
// get the value for a stored item
service.getItem = function(key) {
+ if (service.keyStoredOnServer(key))
+ return service.getServerItem(key);
+
if (!service.useSettings())
return $q.when(service.getLocalItem(key));
service.setServerItem = function(key, value) {
if (!service.auth) service.auth = $injector.get('egAuth');
+ if (!service.auth.token()) return $q.when();
var settings = {};
settings[key] = value;
return egNet.request(
'open-ils.actor',
'open-ils.actor.settings.apply.user_or_ws',
service.auth.token(), settings
+ ).then(function(settings) {
+ return service.keyCache[key] = value;
+ });
+ }
+
+ service.getServerItem = function(key) {
+ if (service.keyCache[key] != undefined)
+ return $q.when(service.keyCache[key])
+
+ if (!service.auth) service.auth = $injector.get('egAuth');
+ if (!service.auth.token()) return $q.when(null);
+
+ return egNet.request(
+ 'open-ils.actor',
+ 'open-ils.actor.settings.retrieve.atomic',
+ [key], service.auth.token()
+ ).then(function(settings) {
+ service.keyCache[key] = settings[0] ? settings[0][key] : null;
+ return service.keyCache[key];
+ });
+ }
+
+ service.getServerItemBatch = function(keys) {
+ // no cache checking for now. assumes batch mode is only
+ // called once on page load. maybe add cache checking later.
+ if (!service.auth) service.auth = $injector.get('egAuth');
+ if (!service.auth.token()) return $q.when({});
+
+ var foundValues = {};
+ return egNet.request(
+ 'open-ils.actor',
+ 'open-ils.actor.settings.retrieve',
+ keys, service.auth.token()
+ ).then(
+ function() {
+ // cache a value of null for any settings that have
+ // no server values applied
+ angular.forEach(keys, function(key) {
+ if (Object.keys(foundValues).indexOf(key) == -1)
+ service.keyCache[key] = foundValues[key] = null;
+ });
+ return foundValues;
+ },
+ null,
+ function(setting) {
+ // when streaming we receive one setting per response
+ var key = Object.keys(setting)[0];
+ service.keyCache[key] = foundValues[key] = setting[key];
+ }
);
}
+
// set the value for a stored or new item
service.setRemoteItem = function(key, value) {
service.keyCache[key] = value;
// remove a stored item
service.removeItem = function(key) {
+ if (service.keyStoredOnServer(key))
+ return service.setServerItem(key, null);
+
if (!service.useSettings())
return $q.when(service.removeLocalItem(key));