LP#1350042 detect is-staff mode for browser client
authorBill Erickson <berick@esilibrary.com>
Mon, 4 Aug 2014 17:16:02 +0000 (13:16 -0400)
committerBen Shum <bshum@biblio.org>
Fri, 29 Aug 2014 20:12:09 +0000 (16:12 -0400)
The browser client does not pass an OILS-Wrapper header to the embedded
catalog (etc.) so consider the presence of a workstation an indication
that the TPAC should operate in staff mode.

NOTE: this may require some additional thought, since this means all
TPACs within an authenticated browser will run in staff mode, which may
not be desired.

Signed-off-by: Bill Erickson <berick@esilibrary.com>
Signed-off-by: Ben Shum <bshum@biblio.org>
Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader.pm

index 5e8743e..eda0c65 100644 (file)
@@ -260,10 +260,17 @@ sub load_common {
     $ctx->{full_path} = $ctx->{base_path} . $self->cgi->path_info;
     $ctx->{unparsed_uri} = $self->apache->unparsed_uri;
     $ctx->{opac_root} = $ctx->{base_path} . "/opac"; # absolute base url
-    my $oils_wrapper = $self->apache->headers_in->get('OILS-Wrapper') || '';
-    $ctx->{is_staff} = ($oils_wrapper =~ /true/);
-    $ctx->{proto} = 'oils' if $ctx->{is_staff};
-    $ctx->{hostname} = 'remote' if $ctx->{is_staff};
+
+    my $xul_wrapper = 
+        ($self->apache->headers_in->get('OILS-Wrapper') || '') =~ /true/;
+
+    if ($xul_wrapper) {
+        # XUL client
+        $ctx->{is_staff} = 1;
+        $ctx->{proto} = 'oils';
+        $ctx->{hostname} = 'remote';
+    }
+
     $ctx->{physical_loc} = $self->get_physical_loc;
 
     # capture some commonly accessed pages
@@ -279,6 +286,17 @@ sub load_common {
             $ctx->{user} = $e->requestor;
             $ctx->{place_unfillable} = 1 if $e->requestor->wsid && $e->allowed('PLACE_UNFILLABLE_HOLD', $e->requestor->ws_ou);
 
+            # The browser client does not set an OILS-Wrapper header (above).
+            # The presence of a workstation and no header indicates staff mode.
+            # FIXME: this approach leaves un-wrapped TPAC's within the same
+            # browser (and hence same ses cookie) in an unnatural is_staff
+            # state.  Consider alternatives for determining is_staff / 
+            # is_browser_staff when $xul_wrapper is false.
+            if (!$xul_wrapper and $e->requestor->wsid) {
+                $ctx->{is_staff} = 1;
+                $ctx->{is_browser_staff} = 1;
+            }
+
             $ctx->{user_stats} = $U->simplereq(
                 'open-ils.actor', 
                 'open-ils.actor.user.opac.vital_stats',