selectbranchprinter now posts to itself to set the branch.  That also means that
other pages can set the branch by linking to selectbranchprinter like:
    /cgi-bin/koha/circ/selectbranchprinter.pl?branch=MAIN

We use HTTP_REFERER to allow the user to continue back to wherever they linked 
from,
defaulting to circulation.pl (the former POST target).

Note that all "branchprinter" functions are basically useless as the data is not
properly handled in the session storage.  Chris C. expects this to be addressed
with later patches for HLT.  There appear to be no 3.0 users of this intended
functionality yet.
---
 circ/selectbranchprinter.pl                        |   60 +++++++++++++-
 .../prog/en/modules/circ/selectbranchprinter.tmpl  |   81 +++++++++++++-------
 2 files changed, 107 insertions(+), 34 deletions(-)

diff --git a/circ/selectbranchprinter.pl b/circ/selectbranchprinter.pl
index c878742..69b546f 100755
--- a/circ/selectbranchprinter.pl
+++ b/circ/selectbranchprinter.pl
@@ -23,7 +23,7 @@ use CGI;
 
 use C4::Context;
 use C4::Output;
-use C4::Auth;
+use C4::Auth qw/:DEFAULT get_session/;
 use C4::Print;  # GetPrinters
 use C4::Koha;
 use C4::Branch; # GetBranches GetBranchesLoop
@@ -40,11 +40,56 @@ my ( $template, $borrowernumber, $cookie ) = 
get_template_and_user({
     flagsrequired   => { circulate => "circulate_remaining_permissions" },
 });
 
+my $sessionID = $query->cookie("CGISESSID");
+my $session = get_session($sessionID);
+
 # try to get the branch and printer settings from http, fallback to userenv
 my $branches = GetBranches();
 my $printers = GetPrinters();
-my $branch   = $query->param('branch' ) || C4::Context->userenv->{'branch'}; 
-my $printer  = $query->param('printer') || 
C4::Context->userenv->{'branchprinter'};
+my $branch   = $query->param('branch' );
+my $printer  = $query->param('printer');
+# fallbacks for $branch and $printer after possible session updates
+
+my $userenv_branch  = C4::Context->userenv->{'branch'}        || '';
+my $userenv_printer = C4::Context->userenv->{'branchprinter'} || '';
+my @updated;
+
+# $session lddines here are doing the updating
+if ($branch and $branches->{$branch}) {
+    if (! $userenv_branch or $userenv_branch ne $branch ) {
+        my $branchname = GetBranchName($branch);
+        $template->param(LoginBranchname => $branchname);   # update template 
for new branch
+        $template->param(LoginBranchcode => $branch);       # update template 
for new branch
+        $session->param('branchname', $branchname);         # update sesssion 
in DB
+        $session->param('branch', $branch);                 # update sesssion 
in DB
+        push @updated, {
+            updated_branch => 1,
+                old_branch => $userenv_branch,
+        };
+    } # else branch the same, no update
+} else {
+    $branch = $userenv_branch;  # fallback value
+}
+
+# FIXME: branchprinter is not retained by session.  This feature was not 
adequately
+# ported from Koha 2.2.3 where it had been a separate cookie.
+# So this needs to be fixed for Koha 3 or removed outright.
+#   --atz (w/ info from chris cormack)
+
+if ($printer) {
+    if (! $userenv_printer or $userenv_printer ne $printer ) {
+        $session->param('branchprinter', $printer);         # update sesssion 
in DB
+        $template->param('new_printer', $printer);          # update template
+        push @updated, {
+            updated_printer => 1,
+                old_printer => $userenv_printer,
+        };
+    } # else printer is the same, no update
+} else {
+    $printer = $userenv_printer;  # fallback value
+}
+
+$template->param(updated => \...@updated) if (scalar @updated);
 
 unless ($branches->{$branch}) {
     $branch = (keys %$branches)[0];  # if branch didn't really exist, then 
replace it w/ one that does
@@ -67,15 +112,20 @@ foreach ( @printkeys ) {
 
 my @recycle_loop;
 foreach ($query->param()) {
-    /^branch(printer)?$/ and next;  # disclude branch and branchprinter
+    $_ or next;
+    $_ eq "branch"  and next;  # disclude branch and branchprinter
+    $_ eq "printer" and next;  # disclude branch and branchprinter
     push @recycle_loop, {
         param => $_,
         value => $query->param($_),
     };
 }
 
+my $referer =  $query->param('oldreferer') || $ENV{HTTP_REFERER};
+$referer =~ /selectbranchprinter\.pl/ and undef $referer;   # avoid sending 
them back to this same page.
+
 $template->param(
-    referer     => $ENV{HTTP_REFERER},
+    referer     => $referer,
     printerloop => \...@printerloop,
     branchloop  => GetBranchesLoop($branch),
     recycle_loop=> \...@recycle_loop,
diff --git 
a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/selectbranchprinter.tmpl 
b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/selectbranchprinter.tmpl
index 2298ba2..460f953 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/selectbranchprinter.tmpl
+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/selectbranchprinter.tmpl
@@ -19,38 +19,64 @@
   <div id="bd">
     <div id="yui-main">
       <div class="yui-b">
-<!-- NOTE this posts back to circulation to enact changes.  Should stay here. 
-->
-<form method="post" action="/cgi-bin/koha/circ/circulation.pl">
-<!-- TMPL_IF NAME="singleBranchMode" -->
-    <br />Single Branch mode is ON.
+
+<!-- TMPL_IF NAME="updated" -->
+
+<h2>Update Succeeded</h2>
+Updated:<ul>
+    <!-- TMPL_LOOP NAME="updated" -->
+    <!-- TMPL_IF    NAME="updated_branch"  -->
+        <li>Library: <!-- TMPL_VAR NAME="old_branch"  DEFAULT="?" --> &rArr; 
<!-- TMPL_VAR NAME="LoginBranchcode" DEFAULT="?" --></li>
+    <!-- TMPL_ESLIF NAME="updated_printer" -->
+      <!-- FIXME:  <li>Printer: <!-- TMPL_VAR NAME="old_printer" DEFAULT="?" 
--> &rArr; <!-- TMPL_VAR NAME="new_printer" DEFAULT="?" --></li> -->
+    <!-- TMPL_ELSE -->
+        <li>ERROR - unknown</li>
+    <!-- /TMPL_IF -->
+    <!-- /TMPL_LOOP -->
+    </ul>
+<form method="post" action="<!-- TMPL_VAR NAME='referer' ESCAPE='HTML' 
DEFAULT='/cgi-bin/koha/circ/circulation.pl' -->">
+    <div class="noshow">
+        <!-- TMPL_LOOP NAME="recycle_loop" -->
+        <input name="<!-- TMPL_VAR NAME="param" -->" value="<!-- TMPL_VAR 
NAME="value" ESCAPE='HTML' -->" />
+        <!-- /TMPL_LOOP -->
+    </div>
+    <button type="submit">Continue</button>
+</form>
+
 <!-- TMPL_ELSE -->
+
+<form method="post" action="selectbranchprinter.pl">
 <fieldset class="rows">
        <legend>Set Library</legend>
-       <ol><li><label for="branch">Choose library:</label>
-       <select name="branch" id="branch">
-       <!-- TMPL_LOOP Name="branchloop" -->
-               <!-- TMPL_IF NAME="selected" -->
-        <option value="<!-- TMPL_VAR NAME="value" -->" 
selected="selected"><!-- TMPL_VAR NAME="branchname" --></option>
-        <!-- TMPL_ELSE -->
-        <option value="<!-- TMPL_VAR NAME="value" -->"><!-- TMPL_VAR 
NAME="branchname" --></option>
-        <!-- /TMPL_IF -->
-       <!-- /TMPL_LOOP -->
-       </select></li>
-<!-- /TMPL_IF -->
-
-<!-- TMPL_IF Name="printerloop" -->
-    <li><label for="printer">Choose a network printer:</label>
-    <input type="hidden" name="setcookies" value="1" />
-    <select name="printer" id="printer">
-        <!-- TMPL_LOOP Name="printerloop" -->
+    <ol>
+    <!-- TMPL_IF NAME="singleBranchMode" -->
+        <li>Single Branch mode is ON.</li>
+    <!-- TMPL_ELSE -->
+        <li><label for="branch">Choose library:</label>
+        <select name="branch" id="branch">
+        <!-- TMPL_LOOP Name="branchloop" -->
             <!-- TMPL_IF NAME="selected" -->
-                <option value="<!-- TMPL_VAR NAME="value" -->" 
selected="selected"><!-- TMPL_VAR NAME="name" --></option>
+            <option value="<!-- TMPL_VAR NAME="value" -->" 
selected="selected"><!-- TMPL_VAR NAME="branchname" --></option>
             <!-- TMPL_ELSE -->
-                               <option value="<!-- TMPL_VAR NAME="value" 
-->"><!-- TMPL_VAR NAME="name" --></option>
+            <option value="<!-- TMPL_VAR NAME="value" -->"><!-- TMPL_VAR 
NAME="branchname" --></option>
             <!-- /TMPL_IF -->
         <!-- /TMPL_LOOP -->
         </select></li>
-<!-- /TMPL_IF --></ol>
+    <!-- /TMPL_IF -->
+
+    <!-- TMPL_IF Name="printerloop" -->
+        <li><label for="printer">Choose a network printer:</label>
+        <input type="hidden" name="setcookies" value="1" />
+        <select name="printer" id="printer">
+            <!-- TMPL_LOOP Name="printerloop" -->
+                <!-- TMPL_IF NAME="selected" -->
+                    <option value="<!-- TMPL_VAR NAME="value" -->" 
selected="selected"><!-- TMPL_VAR NAME="name" --></option>
+                <!-- TMPL_ELSE -->
+                    <option value="<!-- TMPL_VAR NAME="value" -->"><!-- 
TMPL_VAR NAME="name" --></option>
+                <!-- /TMPL_IF -->
+            <!-- /TMPL_LOOP -->
+        </select></li>
+    <!-- /TMPL_IF --></ol>
 </fieldset>
 <fieldset class="action"><input type="submit" value="Submit" 
name="changesettings" /></fieldset>
 <div class="noshow">
@@ -58,13 +84,10 @@
     <input name="<!-- TMPL_VAR NAME="param" -->" value="<!-- TMPL_VAR 
NAME="value" ESCAPE='HTML' -->" />
     <!-- /TMPL_LOOP -->
     <input type="hidden" name="oldreferer" value="<!-- TMPL_VAR NAME='referer' 
ESCAPE='HTML' DEFAULT='/cgi-bin/koha/circ/circulation.pl' -->" />
-    <div>referer is:
-        <a href="<!-- TMPL_VAR NAME='referer' ESCAPE='HTML' 
DEFAULT='/cgi-bin/koha/circ/circulation.pl' -->">
-                 <!-- TMPL_VAR NAME='referer' ESCAPE='HTML' 
DEFAULT='/cgi-bin/koha/circ/circulation.pl' -->
-        </a>
-    </div>
 </div>
 </form>
+<!-- /updated -->
+<!-- /TMPL_IF -->
 
       </div>
     </div>
-- 
1.5.6.5

_______________________________________________
Koha-patches mailing list
[email protected]
http://lists.koha.org/mailman/listinfo/koha-patches

Reply via email to