X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=circ%2Fselectbranchprinter.pl;h=a8af8dbc8f018efb2ad595237ecce3593f5949b1;hb=981711f203569e9ff29155c5b8ee0cbc565848b4;hp=626659b8d54704fdb25d9ab041a51eee70321cae;hpb=3c6410111b2c07339c7e29b604faa9a44c1d4ee1;p=koha.git diff --git a/circ/selectbranchprinter.pl b/circ/selectbranchprinter.pl old mode 100644 new mode 100755 index 626659b8d5..a8af8dbc8f --- a/circ/selectbranchprinter.pl +++ b/circ/selectbranchprinter.pl @@ -1,6 +1,4 @@ #!/usr/bin/perl -# WARNING: This file uses 4-character tabs! - # Copyright 2000-2002 Katipo Communications # @@ -20,128 +18,123 @@ # Suite 330, Boston, MA 02111-1307 USA use strict; -use CGI qw/:standard/; -use C4::Circulation::Circ2; +use warnings; +use CGI; + +use C4::Context; use C4::Output; -use C4::Auth; -use C4::Print; -use C4::Interface::CGI::Output; -use HTML::Template; -use DBI; +use C4::Auth qw/:DEFAULT get_session/; +use C4::Print; # GetPrinters use C4::Koha; +use C4::Branch; # GetBranches GetBranchesLoop + +# this will be the script 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" }, +}); + +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' ); +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); -# 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.... - -#general design stuff... -my $headerbackgroundcolor='#99cc33'; -my $circbackgroundcolor='#ffffcc'; -my $circbackgroundcolor='white'; -my $linecolor1='#ffffcc'; -my $linecolor2='white'; -my $backgroundimage="/images/background-mem.gif"; - -# try to get the branch and printer settings from the http.... -my %env; -my $query=new CGI; -my $branches=GetBranches('IS'); -my $printers=getprinters(\%env); -my $branch=$query->param('branch'); -my $printer=$query->param('printer'); - -($branch) || ($branch=$query->cookie('branch')); -($printer) || ($printer=$query->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; - -#$branch=''; -#$printer=''; - - -$env{'branchcode'}=$branch; -$env{'printer'}=$printer; -$env{'queue'}=$printer; - -# set up select options.... -my $branchcount=0; -my $printercount=0; -my @branchloop; -foreach my $br (keys %$branches) { - next unless $br =~ /\S/; - #(next) unless ($branches->{$_}->{'IS'}); # FIXME disabled to fix bug 202 - $branchcount++; - my %branch; - $branch{selected}=($br eq $oldbranch); - $branch{name}=$branches->{$br}->{'branchname'}; - $branch{value}=$br; - push(@branchloop,\%branch); +unless ($branches->{$branch}) { + $branch = (keys %$branches)[0]; # if branch didn't really exist, then replace it w/ one that does } -my @printerloop; -foreach (keys %$printers) { - (next) unless ($_); - $printercount++; - my %printer; - $printer{selected}=($_ eq $oldprinter); - $printer{name}=$printers->{$_}->{'printername'}; - $printer{value}=$_; - push(@printerloop,\%printer); + +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 } -# if there is only one.... -my $printername; -my $branchname; +my @printerloop; +foreach ( @printkeys ) { + next unless ($_); # skip printer if blank. + push @printerloop, { + selected => ( $_ eq $printer ), + name => $printers->{$_}->{'printername'}, + value => $_, + }; +} -my $oneprinter=($printercount==1) ; -my $onebranch=($branchcount==1) ; -if ($printercount==1) { - my ($tmpprinter)=keys %$printers; - $printername=$printers->{$tmpprinter}->{printername}; +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($_), + }; } -if ($branchcount==1) { - my ($tmpbranch)=keys %$branches; - $branchname=$branches->{$tmpbranch}->{branchname}; + +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 => $referer, + printerloop => \@printerloop, + branchloop => GetBranchesLoop($branch), + recycle_loop=> \@recycle_loop, +); -############################################################################################# -# 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(headerbackgroundcolor => $headerbackgroundcolor, - backgroundimage => $backgroundimage, - 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"), - ); - -my $branchcookie=$query->cookie(-name => 'branch', -value => "$branch", -expires => '+1y'); -my $printercookie=$query->cookie(-name => 'printer', -value => "$printer", -expires => '+1y'); - -my $cookies=[$cookie,$branchcookie, $printercookie]; -output_html_with_http_headers $query, $cookies, $template->output; - - -# Local Variables: -# tab-width: 4 -# End: +output_html_with_http_headers $query, $cookie, $template->output;