X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=circ%2Fselectbranchprinter.pl;h=a8af8dbc8f018efb2ad595237ecce3593f5949b1;hb=529af6e044729156b9589775d35e6e46bda9a22a;hp=f01860b304bb41308c9ad9e2c7561747e9aebf83;hpb=40af15d8e66010d6a1e1187098f8dd71ece00c24;p=koha.git diff --git a/circ/selectbranchprinter.pl b/circ/selectbranchprinter.pl old mode 100644 new mode 100755 index f01860b304..a8af8dbc8f --- a/circ/selectbranchprinter.pl +++ b/circ/selectbranchprinter.pl @@ -18,102 +18,123 @@ # Suite 330, Boston, MA 02111-1307 USA use strict; -use CGI qw/:standard/; -use C4::Circulation; +use warnings; +use CGI; + +use C4::Context; use C4::Output; -use C4::Auth; -use C4::Print; +use C4::Auth qw/:DEFAULT get_session/; +use C4::Print; # GetPrinters use C4::Koha; -use C4::Branch; # GetBranches +use C4::Branch; # GetBranches GetBranchesLoop + +# this will be the script that chooses branch and printer settings.... -# this is a reorganisation of circulationold.pl -# dividing it up into three scripts...... -# this will be the first one that chooses branch and printer settings.... +my $query = CGI->new(); +my ( $template, $borrowernumber, $cookie ) = get_template_and_user({ + template_name => "circ/selectbranchprinter.tmpl", + query => $query, + type => "intranet", + debug => 1, + authnotrequired => 0, + flagsrequired => { circulate => "circulate_remaining_permissions" }, +}); -#general design stuff... +my $sessionID = $query->cookie("CGISESSID"); +my $session = get_session($sessionID); -# try to get the branch and printer settings from the http.... -my $query = new CGI; +# try to get the branch and printer settings from http, fallback to userenv my $branches = GetBranches(); my $printers = GetPrinters(); -my $branch = $query->param('branch'); +my $branch = $query->param('branch' ); my $printer = $query->param('printer'); +# fallbacks for $branch and $printer after possible session updates -my %cookie = $query->cookie('userenv'); -($branch) || ( $branch = $cookie{'branch'} ); -($printer) || ( $printer = $cookie{'printer'} ); - -( $branches->{$branch} ) || ( $branch = ( keys %$branches )[0] ); -( $printers->{$printer} ) || ( $printer = ( keys %$printers )[0] ); - -# is you force a selection.... -my $oldbranch = $branch; -my $oldprinter = $printer; - -# set up select options.... -my $branchcount = 0; -my $printercount = 0; -my @branchloop; -foreach my $br ( keys %$branches ) { - next unless $br =~ /\S/; # next unless $br is not blank. - - $branchcount++; - my %branch; - $branch{selected} = ( $br eq $oldbranch ); - $branch{name} = $branches->{$br}->{'branchname'}; - $branch{value} = $br; - push( @branchloop, \%branch ); +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 } -my @printerloop; -foreach ( keys %$printers ) { - (next) unless ($_); # next unless if this printer is blank. - $printercount++; - my %printer; - $printer{selected} = ( $_ eq $oldprinter ); - $printer{name} = $printers->{$_}->{'printername'}; - $printer{value} = $_; - push( @printerloop, \%printer ); + +# 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 } -# if there is only one.... -my $printername; -my $branchname; +$template->param(updated => \@updated) if (scalar @updated); -my $oneprinter = ( $printercount == 1 ); -my $onebranch = ( $branchcount == 1 ); -if ( $printercount == 1 ) { - my ($tmpprinter) = keys %$printers; - $printername = $printers->{$tmpprinter}->{printername}; +unless ($branches->{$branch}) { + $branch = (keys %$branches)[0]; # if branch didn't really exist, then replace it w/ one that does } -if ( $branchcount == 1 ) { - my ($tmpbranch) = keys %$branches; - $branchname = $branches->{$tmpbranch}->{branchname}; + +my @printkeys = sort keys %$printers; +if (scalar(@printkeys) == 1 or not $printers->{$printer}) { + $printer = $printkeys[0]; # if printer didn't really exist, or there is only 1 anyway, then replace it w/ one that does +} + +my @printerloop; +foreach ( @printkeys ) { + next unless ($_); # skip printer if blank. + push @printerloop, { + selected => ( $_ eq $printer ), + name => $printers->{$_}->{'printername'}, + value => $_, + }; +} + +my @recycle_loop; +foreach ($query->param()) { + $_ or next; # disclude blanks + $_ eq "branch" and next; # disclude branch + $_ eq "printer" and next; # disclude printer + $_ eq "oldreferer" and next; # disclude oldreferer + 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'); } -################################################################################ -# Start writing page.... -# set header with cookie.... - -my ( $template, $borrowernumber, $cookie ) = get_template_and_user( - { - template_name => "circ/selectbranchprinter.tmpl", - query => $query, - type => "intranet", - authnotrequired => 0, - flagsrequired => { circulate => 1 }, - } -); $template->param( - oneprinter => $oneprinter, - onebranch => $onebranch, - printername => $printername, - branchname => $branchname, - printerloop => \@printerloop, - branchloop => \@branchloop, - intranetcolorstylesheet => - C4::Context->preference("intranetcolorstylesheet"), - intranetstylesheet => C4::Context->preference("intranetstylesheet"), - IntranetNav => C4::Context->preference("IntranetNav"), + referer => $referer, + printerloop => \@printerloop, + branchloop => GetBranchesLoop($branch), + recycle_loop=> \@recycle_loop, ); output_html_with_http_headers $query, $cookie, $template->output;