X-Git-Url: http://koha-dev.rot13.org:8081/gitweb/?a=blobdiff_plain;f=tools%2Fupload-cover-image.pl;h=ff89afb1d6fe0a4a87e4a7c28df32db305322efe;hb=5b215c410ef5afc5b11ddbc8ffddf6438c924109;hp=f70aefcb24e8c11b959d98ce989593c983cd4bf6;hpb=585a0024a1eee2e15283348c09653edbf4bfc267;p=koha_ffzg diff --git a/tools/upload-cover-image.pl b/tools/upload-cover-image.pl index f70aefcb24..ff89afb1d6 100755 --- a/tools/upload-cover-image.pl +++ b/tools/upload-cover-image.pl @@ -4,21 +4,22 @@ # # 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 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. +# 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 +# You should have received a copy of the GNU General Public License +# along with Koha; if not, see . # # # + =head1 NAME upload-cover-image.pl - Script for handling uploading of both single and bulk coverimages and importing them into the database. @@ -36,124 +37,151 @@ resized, maintaining aspect ratio. =cut - -use strict; -use warnings; +use Modern::Perl; use File::Temp; -use CGI; +use CGI qw ( -utf8 ); use GD; use C4::Context; use C4::Auth; use C4::Output; use C4::Images; -use C4::UploadedFile; +use Koha::UploadedFiles; +use C4::Log; my $debug = 1; my $input = new CGI; -my $fileID=$input->param('uploadedfileid'); -my ($template, $loggedinuser, $cookie) - = get_template_and_user({template_name => "tools/upload-images.tmpl", - query => $input, - type => "intranet", - authnotrequired => 0, - flagsrequired => { tools => 'upload_cover_images'}, - debug => 0, - }); - -my $filetype = $input->param('filetype'); -my $biblionumber = $input->param('biblionumber'); -my $uploadfilename = $input->param('uploadfile'); -my $replace = !C4::Context->preference("AllowMultipleCovers") || $input->param('replace'); -my $op = $input->param('op'); -my %cookies = parse CGI::Cookie($cookie); -my $sessionID = $cookies{'CGISESSID'}->value; +my $fileID = $input->param('uploadedfileid'); +my ( $template, $loggedinuser, $cookie ) = get_template_and_user( + { + template_name => "tools/upload-images.tt", + query => $input, + type => "intranet", + authnotrequired => 0, + flagsrequired => { tools => 'upload_local_cover_images' }, + debug => 0, + } +); + +my $filetype = $input->param('filetype'); +my $biblionumber = $input->param('biblionumber'); +#my $uploadfilename = $input->param('uploadfile'); # obsolete? +my $replace = !C4::Context->preference("AllowMultipleCovers") + || $input->param('replace'); +my $op = $input->param('op'); +my %cookies = parse CGI::Cookie($cookie); +my $sessionID = $cookies{'CGISESSID'}->value; my $error; -$template->{VARS}->{'filetype'} = $filetype; +$template->{VARS}->{'filetype'} = $filetype; $template->{VARS}->{'biblionumber'} = $biblionumber; my $total = 0; - if ($fileID) { - my $uploaded_file = C4::UploadedFile->fetch($sessionID, $fileID); - if ($filetype eq 'image') { - my $fh = $uploaded_file->fh(); + my $upload = Koha::UploadedFiles->find( $fileID ); + if ( $filetype eq 'image' ) { + my $fh = $upload->file_handle; my $srcimage = GD::Image->new($fh); - if (defined $srcimage) { - my $dberror = PutImage($biblionumber, $srcimage, $replace); + $fh->close if $fh; + if ( defined $srcimage ) { + my $dberror = PutImage( $biblionumber, $srcimage, $replace ); if ($dberror) { $error = 'DBERR'; - } else { + } + else { $total = 1; } - } else { + } + else { $error = 'OPNIMG'; } undef $srcimage; - } else { - my $filename = $uploaded_file->filename(); - my $dirname = File::Temp::tempdir( CLEANUP => 1); - unless (system("unzip", $filename, '-d', $dirname) == 0) { + } + else { + my $filename = $upload->full_path; + my $dirname = File::Temp::tempdir( CLEANUP => 1 ); + qx/unzip $filename -d $dirname/; + my $exit_code = $?; + unless ( $exit_code == 0 ) { $error = 'UZIPFAIL'; - } else { + } + else { my @directories; push @directories, "$dirname"; - foreach my $recursive_dir ( @directories ) { + foreach my $recursive_dir (@directories) { my $dir; opendir $dir, $recursive_dir; while ( my $entry = readdir $dir ) { - push @directories, "$recursive_dir/$entry" if ( -d "$recursive_dir/$entry" and $entry !~ /^[._]/ ); + push @directories, "$recursive_dir/$entry" + if ( -d "$recursive_dir/$entry" and $entry !~ /^[._]/ ); } closedir $dir; } - foreach my $dir ( @directories ) { + foreach my $dir (@directories) { my $file; if ( -e "$dir/idlink.txt" ) { $file = "$dir/idlink.txt"; - } elsif ( -e "$dir/datalink.txt" ) { + } + elsif ( -e "$dir/datalink.txt" ) { $file = "$dir/datalink.txt"; - } else { + } + else { next; } - if (open (FILE, $file)) { - while (my $line = ) { - my $delim = ($line =~ /\t/) ? "\t" : ($line =~ /,/) ? "," : ""; + if ( open( FILE, $file ) ) { + while ( my $line = ) { + my $delim = + ( $line =~ /\t/ ) ? "\t" + : ( $line =~ /,/ ) ? "," + : ""; + #$debug and warn "Delimeter is \'$delim\'"; unless ( $delim eq "," || $delim eq "\t" ) { - warn "Unrecognized or missing field delimeter. Please verify that you are using either a ',' or a 'tab'"; + warn +"Unrecognized or missing field delimeter. Please verify that you are using either a ',' or a 'tab'"; $error = 'DELERR'; - } else { - ($biblionumber, $filename) = split $delim, $line; - $biblionumber =~ s/[\"\r\n]//g; # remove offensive characters - $filename =~ s/[\"\r\n\s]//g; + } + else { + ( $biblionumber, $filename ) = split $delim, $line, 2; + $biblionumber =~ + s/[\"\r\n]//g; # remove offensive characters + $filename =~ s/[\"\r\n]//g; + $filename =~ s/^\s+//; + $filename =~ s/\s+$//; + if (C4::Context->preference("CataloguingLog")) { + logaction('CATALOGUING', 'MODIFY', $biblionumber, "biblio cover image: $filename"); + } my $srcimage = GD::Image->new("$dir/$filename"); - if (defined $srcimage) { + if ( defined $srcimage ) { $total++; - my $dberror = PutImage($biblionumber, $srcimage, $replace); + my $dberror = + PutImage( $biblionumber, $srcimage, + $replace ); if ($dberror) { $error = 'DBERR'; } - } else { + } + else { $error = 'OPNIMG'; } undef $srcimage; } } close(FILE); - } else { + } + else { $error = 'OPNLINK'; } } } } - $template->{VARS}->{'total'} = $total; - $template->{VARS}->{'uploadimage'} = 1; - $template->{VARS}->{'error'} = $error; + $template->{VARS}->{'total'} = $total; + $template->{VARS}->{'uploadimage'} = 1; + $template->{VARS}->{'error'} = $error; $template->{VARS}->{'biblionumber'} = $biblionumber; }