Bug 9421: tools/picture-upload.pl not Plack-compatible

This patch avoids using file-level private variables in subroutines
by passing the needed variables as parameters to the subroutines.

To test (under Plack):
1) Try uploading a patron image without applying the patch. Notice
   it fails.
2) Apply patch.
3) Try uploading a patron image again, noticing this time it succeeds.

To test (under Apache):
1) Apply patch.
2) Try uploading a patron image, confirm that it works.

Signed-off-by: Mirko Tietgen <mirko@abunchofthings.net>
Fixes Plack, does not break Apache. Works as expected.

Signed-off-by: Jonathan Druart <jonathan.druart@biblibre.com>
Signed-off-by: Jared Camins-Esakov <jcamins@cpbibliography.com>
This commit is contained in:
Jared Camins-Esakov 2013-01-17 21:39:38 -05:00
parent fe14e6ad40
commit 75703cf604
1 changed files with 8 additions and 9 deletions

View File

@ -115,12 +115,12 @@ if ( ($op eq 'Upload') && $uploadfile ) { # Case is important in these ope
}
my $results;
foreach my $dir ( @directories ) {
$results = handle_dir( $dir, $filesuffix );
$results = handle_dir( $dir, $filesuffix, $template );
$handled++ if $results == 1;
}
$total = scalar @directories;
} else { #if ($filetype eq 'zip' )
$results = handle_dir( $dirname, $filesuffix );
$results = handle_dir( $dirname, $filesuffix, $template, $cardnumber, $tempfile );
$handled = 1;
$total = 1;
}
@ -157,11 +157,11 @@ if ( $borrowernumber && !$errors && !$template->param('ERRORS') ) {
}
sub handle_dir {
my ( $dir, $suffix ) = @_;
my $source;
my ( $dir, $suffix, $template, $cardnumber, $source ) = @_;
$debug and warn "Entering sub handle_dir; passed \$dir=$dir, \$suffix=$suffix";
if ($suffix =~ m/zip/i) { # If we were sent a zip file, process any included data/idlink.txt files
my ( $file, $filename, $cardnumber );
my ( $file, $filename );
undef $cardnumber;
$debug and warn "Passed a zip file.";
opendir my $dirhandle, $dir;
while ( my $filename = readdir $dirhandle ) {
@ -189,20 +189,19 @@ sub handle_dir {
$filename =~ s/[\"\r\n\s]//g;
$debug and warn "Cardnumber: $cardnumber Filename: $filename";
$source = "$dir/$filename";
%counts = handle_file($cardnumber, $source, %counts);
%counts = handle_file($cardnumber, $source, $template, %counts);
}
close FILE;
closedir ($dirhandle);
} else {
$source = $tempfile;
%counts = handle_file($cardnumber, $source, %counts);
%counts = handle_file($cardnumber, $source, $template, %counts);
}
push @counts, \%counts;
return 1;
}
sub handle_file {
my ($cardnumber, $source, %count) = @_;
my ($cardnumber, $source, $template, %count) = @_;
$debug and warn "Entering sub handle_file; passed \$cardnumber=$cardnumber, \$source=$source";
$count{filenames} = () if !$count{filenames};
$count{source} = $source if !$count{source};