operator change.. needs testing, styling
authorpines <pines@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Fri, 7 Jul 2006 21:09:10 +0000 (21:09 +0000)
committerpines <pines@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Fri, 7 Jul 2006 21:09:10 +0000 (21:09 +0000)
git-svn-id: svn://svn.open-ils.org/ILS/trunk@4938 dcc99617-32d9-48b4-a31d-7c20da2025e4

Open-ILS/xul/staff_client/chrome/content/main/menu.js
Open-ILS/xul/staff_client/chrome/content/main/menu_frame_menus.xul
Open-ILS/xul/staff_client/chrome/content/util/network.js

index 0d710d3..fec09bd 100644 (file)
@@ -356,6 +356,39 @@ main.menu.prototype = {
                        ],
 
                        /* Admin menu */
+                       'cmd_change_session' : [
+                               ['oncommand'],
+                               function() {
+                                       try {
+                                               obj.data.stash_retrieve();
+                                               JSAN.use('util.network'); var network = new util.network();
+                                               var x = document.getElementById('oc_menuitem');
+                                               var x_label = x.getAttribute('label_orig');
+                                               var temp_au = js2JSON( obj.data.list.au[0] );
+                                               var temp_ses = js2JSON( obj.data.session );
+                                               if (obj.data.list.au.length > 1) {
+                                                       obj.data.list.au = [ obj.data.list.au[1] ];
+                                                       obj.data.stash('list');
+                                                       network.reset_titlebars( obj.data );
+                                                       x.setAttribute('label', x_label );
+                                                       network.simple_request('AUTH_DESTROY', [ obj.data.session.key ] );
+                                                       obj.data.session = obj.data.previous_session;
+                                                       obj.data.stash('session');
+                                               } else {
+                                                       if (network.get_new_session('Change Login',{'url_prefix':obj.url_prefix})) {
+                                                               obj.data.stash_retrieve();
+                                                               obj.data.list.au[1] = JSON2js( temp_au );
+                                                               obj.data.stash('list');
+                                                               obj.data.previous_session = JSON2js( temp_ses );
+                                                               obj.data.stash('previous_session');
+                                                               x.setAttribute('label', 'Change Operator: ' + obj.data.list.au[1].usrname() );
+                                                       }
+                                               }
+                                       } catch(E) {
+                                               obj.error.standard_unexpected_error_alert('cmd_change_session',E);
+                                       }
+                               }
+                       ],
                        'cmd_manage_offline_xacts' : [
                                ['oncommand'],
                                function() {
index 91ba4f1..f8a61f3 100644 (file)
@@ -45,6 +45,7 @@
        <command id="cmd_retrieve_last_patron" />
        <command id="cmd_retrieve_last_record" />
 
+       <command id="cmd_change_session" />
        <command id="cmd_manage_offline_xacts" />
        <command id="cmd_download_patrons" />
        <command id="cmd_local_admin" />
 <!-- The Help menu on the main menu -->
 <menu id="main.menu.admin" label="&staff.main.menu.admin.label;" accesskey="-" old_accesskey="&staff.main.menu.admin.key;">
        <menupopup id="main.menu.admin.popup">
+               <menuitem id="oc_menuitem" label="Operator Change: New" label_orig="Operator Change: New" 
+                       accesskey="O" command="cmd_change_session"/>
                <menuitem label="Offline Transaction Management" accesskey="T" command="cmd_manage_offline_xacts"/>
                <menuitem label="Download Offline Patron List" accesskey="D" command="cmd_download_patrons"/>
                <menuseparator />
index 03733f2..92801df 100644 (file)
@@ -137,48 +137,73 @@ util.network.prototype = {
                }
        },
 
+       'reset_titlebars' : function(data) {
+               var obj = this;
+               data.stash_retrieve();
+               try {
+                       JSAN.use('util.window'); var win =  new util.window();
+                       var windowManager = Components.classes["@mozilla.org/appshell/window-mediator;1"].getService();
+                       var windowManagerInterface = windowManager.QueryInterface(Components.interfaces.nsIWindowMediator);
+                       var enumerator = windowManagerInterface.getEnumerator(null);
+
+                       var w; // set title on all appshell windows
+                       while ( w = enumerator.getNext() ) {
+                               if (w.document.title.match(/^\d/)) {
+                                       w.document.title = 
+                                               win.appshell_name_increment() 
+                                               + ': ' + data.list.au[0].usrname() 
+                                               + '@' + data.ws_name;
+                                               + '.' + data.server_unadorned 
+                               }
+                       }
+               } catch(E) {
+                       obj.error.standard_unexpected_error_alert('Error setting window titles to match new login',E);
+               }
+       },
+
+       'get_new_session' : function(name,xulG) {
+               var obj = this;
+               try {
+
+               netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserWrite');
+               var url = urls.XUL_AUTH_SIMPLE;
+               if (typeof xulG != 'undefined' && typeof xulG.url_prefix == 'function') url = xulG.url_prefix( url );
+               window.open(
+                       url
+                       + '?login_type=staff'
+                       + '&desc_brief=' + window.escape('Your session has expired')
+                       + '&desc_full=' + window.escape('Please re-login.  If after you have re-authenticated, you still see session expired dialogs like this one, please note where they are occuring and inform your friendly Evergreen developers of this debug information: ' + name),
+                       'simple_auth' + (new Date()).toString(),
+                       'chrome,resizable,modal,width=700,height=500'
+               );
+               JSAN.use('OpenILS.data');
+               var data = new OpenILS.data(); data.init({'via':'stash'});
+               if (typeof data.temporary_session != 'undefined' && data.temporary_session != '') {
+                       data.session.key = data.temporary_session.key; 
+                       data.session.authtime = data.temporary_session.authtime; 
+                       data.stash('session');
+                       alert('data.temporary_session = ' + js2JSON(data.temporary_session));
+                       data.list.au[0] = JSON2js(data.temporary_session.usr);
+                       alert('data.list.au[0] = ' + data.list.au[0]);
+                       data.stash('list');
+                       obj.reset_titlebars(data);
+                       return true;
+               }
+               return false;
+
+               } catch(E) {
+                       obj.error.standard_unexpected_error_alert('util.network.get_new_session',E);
+               }
+       },
+
        'rerequest_on_session_timeout' : function(app,name,params,req,o_params) {
                try {
                        var obj = this;
                        var robj = req.getResultObject();
                        if (robj != null && robj.ilsevent && robj.ilsevent == 1001) {
-                               netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserWrite');
-                               window.open(
-                                       urls.XUL_AUTH_SIMPLE
-                                       + '?login_type=staff'
-                                       + '&desc_brief=' + window.escape('Your session has expired')
-                                       + '&desc_full=' + window.escape('Please re-login.  If after you have re-authenticated, you still see session expired dialogs like this one, please note where they are occuring and inform your friendly Evergreen developers of this debug information: ' + name),
-                                       'simple_auth' + (new Date()).toString(),
-                                       'chrome,resizable,modal,width=700,height=500'
-                               );
-                               JSAN.use('OpenILS.data');
-                               var data = new OpenILS.data(); data.init({'via':'stash'});
-                               if (typeof data.temporary_session != 'undefined' && data.temporary_session != '') {
-                                       data.session.key = data.temporary_session.key; 
-                                       data.session.authtime = data.temporary_session.authtime; 
-                                       data.stash('session');
-                                       data.list.au[0] = JSON2js(data.temporary_session.usr);
-                                       data.stash('list');
-                                       try {
-                                               JSAN.use('util.window'); var win =  new util.window();
-                                               var windowManager = Components.classes["@mozilla.org/appshell/window-mediator;1"].getService();
-                                               var windowManagerInterface = windowManager.QueryInterface(Components.interfaces.nsIWindowMediator);
-                                               var enumerator = windowManagerInterface.getEnumerator(null);
-
-                                               var w; // set title on all appshell windows
-                                               while ( w = enumerator.getNext() ) {
-                                                       if (w.document.title.match(/^\d/)) {
-                                                               w.document.title = 
-                                                                       win.appshell_name_increment() 
-                                                                       + ': ' + data.list.au[0].usrname() 
-                                                                       + '@' + data.ws_name;
-                                                                       + '.' + data.server_unadorned 
-                                                       }
-                                               }
-                                       } catch(E) {
-                                               obj.error.standard_unexpected_error_alert('Error setting window titles to match new login',E);
-                                       }
 
+                               if (obj.get_new_session(name)) {
+                                       JSAN.use('OpenILS.data'); var data = new OpenILS.data(); data.init({'via':'stash'});
                                        params[0] = data.session.key;
                                        req = obj._request(app,name,params,null,o_params);
                                }