From 3de17ad3065010745f8ae8dd009cf28432b810c4 Mon Sep 17 00:00:00 2001 From: Joe Atzberger Date: Thu, 4 Jun 2009 12:43:53 -0500 Subject: [PATCH] Standalone branch selection 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. Includes squashed patch to fix tmpl and to automatically redirect if there are no POST params to be recycled. Signed-off-by: Galen Charlton Signed-off-by: Henri-Damien LAURENT --- circ/selectbranchprinter.pl | 69 ++++++++++++++-- .../en/modules/circ/selectbranchprinter.tmpl | 82 ++++++++++++------- 2 files changed, 115 insertions(+), 36 deletions(-) diff --git a/circ/selectbranchprinter.pl b/circ/selectbranchprinter.pl index c878742820..0a0f411c01 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 @@ -52,7 +97,7 @@ unless ($branches->{$branch}) { my @printkeys = sort keys %$printers; if (scalar(@printkeys) == 1 or not $printers->{$printer}) { - $printer = $printkeys[0]; + $printer = $printkeys[0]; # if printer didn't really exist, or there is only 1 anyway, then replace it w/ one that does } my @printerloop; @@ -67,15 +112,27 @@ foreach ( @printkeys ) { my @recycle_loop; foreach ($query->param()) { - /^branch(printer)?$/ and next; # disclude branch and branchprinter + $_ or next; # disclude blanks + $_ eq "branch" and next; # disclude branch + $_ eq "printer" and next; # disclude printer + $_ eq "oldreferer" and next; # disclude oldreferer + warn "recycling $_"; 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. + +if (scalar @updated and not scalar @recycle_loop) { + # we updated something, and there were no extra params to POST: quick redirect + print $query->redirect($referer || '/cgi-bin/koha/circ/circulation.pl'); +} + $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 2298ba28b0..648fea160f 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/selectbranchprinter.tmpl +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/selectbranchprinter.tmpl @@ -19,52 +19,74 @@
- -
- -
Single Branch mode is ON. + + + +

Update Succeeded

+Updated:
    + + +
  • Library:
  • + + --> + +
  • ERROR - unknown
  • + + +
+ +
+ + " value="" /> + +
+ +
+ + +
Set Library -
  1. -
  2. - - - -
  3. - - + - + - +
  4. -
+ + + +
  • +
  • +
    -
    +
    " value="" /> -
    referer is: - - - -
    + +
    -- 2.39.5