From: Bill Erickson Date: Wed, 4 Apr 2018 14:55:25 +0000 (-0400) Subject: LP#1750894 Hatch server settings continued X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=95de50e9fdd61af8b6e2d709aad85c595e050cb2;p=working%2FEvergreen.git LP#1750894 Hatch server settings continued Signed-off-by: Bill Erickson --- diff --git a/Open-ILS/web/js/ui/default/staff/services/hatch.js b/Open-ILS/web/js/ui/default/staff/services/hatch.js index 216b462663..cdadae9242 100644 --- a/Open-ILS/web/js/ui/default/staff/services/hatch.js +++ b/Open-ILS/web/js/ui/default/staff/services/hatch.js @@ -70,7 +70,9 @@ angular.module('egCoreMod') // 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', @@ -247,6 +249,9 @@ angular.module('egCoreMod') // 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)); @@ -331,15 +336,66 @@ angular.module('egCoreMod') 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; @@ -421,6 +477,9 @@ angular.module('egCoreMod') // 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));