/
selectbranchprinter.pl
executable file
·140 lines (120 loc) · 4.92 KB
/
selectbranchprinter.pl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
#!/usr/bin/env perl
# Copyright 2000-2002 Katipo Communications
#
# This file is part of Koha.
#
# Koha is free software; you can redistribute it and/or modify it under the
# terms of the GNU General Public License as published by the Free Software
# Foundation; either version 2 of the License, or (at your option) any later
# version.
#
# Koha is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
# A PARTICULAR PURPOSE. See the GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License along with
# Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place,
# Suite 330, Boston, MA 02111-1307 USA
use strict;
use warnings;
use CGI;
use C4::Context;
use C4::Output;
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);
unless ($branches->{$branch}) {
$branch = (keys %$branches)[0]; # if branch didn't really exist, then replace it w/ one that does
}
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');
}
$template->param(
referer => $referer,
printerloop => \@printerloop,
branchloop => GetBranchesLoop($branch),
recycle_loop=> \@recycle_loop,
);
output_html_with_http_headers $query, $cookie, $template->output;