From: Bill Erickson Date: Mon, 20 Jul 2015 20:26:30 +0000 (-0400) Subject: LP1476370 Selfcheck logout warning, checkout resets X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=04c67f014fb79efbb68e5c1c16957f4a960d032d;p=evergreen%2Ftadl.git LP1476370 Selfcheck logout warning, checkout resets * Show a logout warning dialog 20 seconds before discontinuing a self-check patron login session. * Reset the inactivity timer with each checkout. Signed-off-by: Bill Erickson Signed-off-by: Ben Shum --- diff --git a/Open-ILS/src/templates/circ/selfcheck/logout_dialog.tt2 b/Open-ILS/src/templates/circ/selfcheck/logout_dialog.tt2 new file mode 100644 index 0000000000..11ecd07940 --- /dev/null +++ b/Open-ILS/src/templates/circ/selfcheck/logout_dialog.tt2 @@ -0,0 +1,14 @@ +
+

[% l('Your login session will soon timeout due to inactivity.') %]

+ + + +
+ + + +
+
+ diff --git a/Open-ILS/src/templates/circ/selfcheck/main.tt2 b/Open-ILS/src/templates/circ/selfcheck/main.tt2 index 22022fe2a6..c82337c9ed 100644 --- a/Open-ILS/src/templates/circ/selfcheck/main.tt2 +++ b/Open-ILS/src/templates/circ/selfcheck/main.tt2 @@ -4,6 +4,7 @@ [% INCLUDE 'circ/selfcheck/audio_config.tt2' %] +[% INCLUDE 'circ/selfcheck/logout_dialog.tt2' %]
[% INCLUDE 'circ/selfcheck/banner.tt2' %] @@ -55,6 +56,27 @@
+ + [% END %] diff --git a/Open-ILS/web/js/ui/default/circ/selfcheck/selfcheck.js b/Open-ILS/web/js/ui/default/circ/selfcheck/selfcheck.js index 303cbb9fb7..61ec139208 100644 --- a/Open-ILS/web/js/ui/default/circ/selfcheck/selfcheck.js +++ b/Open-ILS/web/js/ui/default/circ/selfcheck/selfcheck.js @@ -15,8 +15,12 @@ dojo.requireLocalization('openils.circ', 'selfcheck'); var localeStrings = dojo.i18n.getLocalization('openils.circ', 'selfcheck'); // set patron timeout default -var patronTimeout = 180000; /* 3 minutes */ +var patronTimeout = 160000; /* 2 minutes, 40 seconds */ var timerId = null; +// 20 second inactivity warning; total default timeout is 3 minutes. +var patronTimeoutWarning = 20000; +var selfckWarningSetup = false; +var selfckWarningTimer; const SET_BARCODE_REGEX = 'opac.barcode_regex'; const SET_PATRON_TIMEOUT = 'circ.selfcheck.patron_login_timeout'; @@ -37,7 +41,7 @@ openils.User.default_login_agent = 'selfcheck'; function selfckStartTimer() { timerId = setTimeout( function() { - SelfCheckManager.prototype.logoutPatron(); + selfckLogoutWarning(); }, patronTimeout ); @@ -49,6 +53,41 @@ function selfckResetTimer() { selfckStartTimer(); } +function selfckLogoutWarning() { + + // connect the logout warning dialog button handlers if needed + if (!selfckWarningSetup) { + selfckWarningSetup = true; + + dojo.connect(oilsSelfckLogout, 'onClick', + function() { + clearTimeout(selfckWarningTimer); + oilsSelfckLogoutDialog.hide(); + SelfCheckManager.prototype.logoutPatron(); + } + ); + + dojo.connect(oilsSelfckContinue, 'onClick', + function() { + clearTimeout(selfckWarningTimer); + oilsSelfckLogoutDialog.hide(); + selfckResetTimer(); + } + ); + } + + // warn the patron of imminent logout + oilsSelfckLogoutDialog.show(); + selfckWarningTimer = setTimeout( + function() { + // no action was taken, force a logout. + oilsSelfckLogoutDialog.hide(); + SelfCheckManager.prototype.logoutPatron(); + }, + patronTimeoutWarning + ); +} + function SelfCheckManager() { this.cgi = new openils.CGI(); @@ -295,8 +334,13 @@ SelfCheckManager.prototype.loadOrgSettings = function() { if(settings[SET_BARCODE_REGEX]) this.patronBarcodeRegex = new RegExp(settings[SET_BARCODE_REGEX].value); - if(settings[SET_PATRON_TIMEOUT]) - patronTimeout = parseInt(settings[SET_PATRON_TIMEOUT].value) * 1000; + // Subtract the timeout warning interval from the configured timeout + // so that when taken together they add up to the configured amount. + if(settings[SET_PATRON_TIMEOUT]) { + patronTimeout = + (parseInt(settings[SET_PATRON_TIMEOUT].value) * 1000) + - patronTimeoutWarning; + } } SelfCheckManager.prototype.drawLoginPage = function() { @@ -941,6 +985,9 @@ SelfCheckManager.prototype.checkin = function(barcode, abortTransit) { */ SelfCheckManager.prototype.checkout = function(barcode, override) { + // reset timeout + selfckResetTimer(); + this.prevCirc = null; if(!barcode) {