Koha/patroncards/print.pl
Phil Ringnalda 0f255728c5
Bug 37614: Printing patron cards from patron lists should be a GET
There's no creating, updating, or deleting about printing patron cards, and
the only time there's a lot of data (selecting individual patrons in a card
creator batch), it doesn't matter if the "Export selected" URL exceeds the
maxlength for Apache since the actual link to create the PDF also will.

Test plan:
 1. Without the patch, Tools - Patron lists - New patron list - Name it and
    Save
 2. Type three characters in the Patron search form (mar works well) to get
    at least three patrons. Click on each of three, then click Add patrons
 3. You can only print cards from the list of lists, so back to Tools -
    Patron lists
 4. In the Actions menu choose Print patron cards, in the popup click Export
 5. Watch the throbber spin around for a while (it will never stop), then
    close the popup, apply the patch, restart_all
 6. Tools - Patron lists - Actions menu - Print patron cards - Export
 7. Click the PDF link, make sure it has all three of your patrons
 8. Tools - Patron card creator - New - Card batch
 9. Without putting anything in the textarea, click Add patrons, in the
    search popup search for your three characters (mar) again, and click
    the checkboxes to the left of three of the names, then Add selected
    patrons, then Close, then Add patrons
10. Click the checkboxes for two of the three patrons, then Export selected
    card(s), then Export in the popup
11. Hover the link to the PDF, verify that it doesn't have stray 'amp;'
    after the & and before label_id= anymore
12. Click the PDF link, verify it has your two patrons
13. Back at the card batch, click Export card batch, then Export
14. Check the PDF to verify it has all three of your patrons
15. Tools - Patron lists - click your list's name to open it
16. Click the card number for a patron, then the Patron lists tab in Checkout
17. Actions menu - Print patron cards - Export, verify the PDF has all three
    patrons

Signed-off-by: David Nind <david@davidnind.com>

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Signed-off-by: Katrin Fischer <katrin.fischer@bsz-bw.de>
2024-08-16 17:33:45 +02:00

143 lines
6.4 KiB
Perl
Executable file

#!/usr/bin/perl
#
# Copyright 2009 Foundations Bible College.
#
# 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 3 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, see <http://www.gnu.org/licenses>.
use Modern::Perl;
use CGI qw ( -utf8 );
use autouse 'Data::Dumper' => qw(Dumper);
use C4::Auth qw( get_template_and_user );
use C4::Output qw( output_html_with_http_headers );
use C4::Creators qw( get_all_layouts get_all_templates get_output_formats );
my $cgi = CGI->new;
my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
{
template_name => "patroncards/print.tt",
query => $cgi,
type => "intranet",
flagsrequired => { tools => 'label_creator' },
}
);
my $op = $cgi->param('op') || 'none';
my @label_ids = $cgi->multi_param('label_id'); # this will handle individual card printing; we use label_id to maintain consistency with the column names in the creator_batches table
my @batch_ids = $cgi->multi_param('batch_id');
my $patronlist_id = $cgi->param('patronlist_id') || undef;
my $layout_id = $cgi->param('layout_id') || undef;
my $layout_back_id = $cgi->param('layout_back_id') || undef;
my $template_id = $cgi->param('template_id') || undef;
my $start_card = $cgi->param('start_card') || 1;
my @borrower_numbers = $cgi->multi_param('borrower_number');
my $output_format = $cgi->param('output_format') || 'pdf';
my $referer = $cgi->param('referer') || undef;
my $layouts = undef;
my $templates = undef;
my $output_formats = undef;
my @batches = ();
my $multi_batch_count = scalar(@batch_ids);
my $card_count = scalar(@label_ids);
my $borrower_count = scalar(@borrower_numbers);
if ($op eq 'export') {
if (@label_ids) {
my $label_id_param = '&label_id=';
$label_id_param .= join ('&label_id=',@label_ids);
push (@batches, {create_script => ($output_format eq 'pdf' ? 'create-pdf.pl' : 'create-csv.pl'), #FIXME csv not supported, no script?
batch_id => $batch_ids[0],
template_id => $template_id,
layout_id => $layout_id,
layout_back_id => $layout_back_id,
start_card => $start_card,
label_ids => $label_id_param,
card_count => scalar(@label_ids),
});
$template->param(
batches => \@batches,
referer => $referer,
);
}
elsif (@borrower_numbers) {
my $borrower_number_param = '&borrower_number=';
$borrower_number_param .= join ('&borrower_number=',@borrower_numbers);
push (@batches, {create_script => ($output_format eq 'pdf' ? 'create-pdf.pl' : 'create-csv.pl'), #FIXME csv not supported, no script?
template_id => $template_id,
layout_id => $layout_id,
layout_back_id => $layout_back_id,
start_card => $start_card,
borrower_numbers => $borrower_number_param,
card_count => scalar(@borrower_numbers),
});
$template->param(
batches => \@batches,
referer => $referer,
);
}
elsif (@batch_ids) {
foreach my $batch_id (@batch_ids) {
push (@batches, {create_script => ($output_format eq 'pdf' ? 'create-pdf.pl' : 'create-csv.pl'), #FIXME csv not supported, no script?
batch_id => $batch_id,
template_id => $template_id,
layout_id => $layout_id,
layout_back_id => $layout_back_id,
start_card => $start_card,
});
}
$template->param(
batches => \@batches,
referer => $referer,
);
}
elsif ($patronlist_id ) {
$template->param(
patronlist_id => $patronlist_id,
template_id => $template_id,
layout_id => $layout_id,
layout_back_id => $layout_back_id,
start_card => $start_card,
referer => $referer,
);
}
}
elsif ($op eq 'none') {
# setup select menus for selecting layout and template for this run...
$referer = $ENV{'HTTP_REFERER'};
$referer =~ s/^.*?:\/\/.*?(\/.*)$/$1/m;
@batch_ids = map { {batch_id => $_} } @batch_ids;
@label_ids = map { {label_id => $_} } @label_ids;
@borrower_numbers = map { {borrower_number => $_} } @borrower_numbers;
$templates = get_all_templates( { fields => [qw( template_id template_code ) ], filters => { creator => "Patroncards" } });
$layouts = get_all_layouts({ fields => [ qw( layout_id layout_name ) ], filters => { creator => "Patroncards" } });
$output_formats = get_output_formats();
$template->param(
batch_ids => \@batch_ids,
label_ids => \@label_ids,
borrower_numbers => \@borrower_numbers,
patronlist_id => $patronlist_id,
templates => $templates,
layouts => $layouts,
output_formats => $output_formats,
multi_batch_count => $multi_batch_count,
card_count => $card_count,
borrower_count => $borrower_count,
referer => $referer,
);
}
output_html_with_http_headers $cgi, $cookie, $template->output;