X-Git-Url: http://koha-dev.rot13.org:8081/gitweb/?a=blobdiff_plain;f=tools%2Fupload-cover-image.pl;h=f55d8f128d9c8c12b020d2b26a80d29117cf1876;hb=f0108f4ff70bc351a2129ee670e07c8f79ae023e;hp=7552e2813ae8825db5273451d50f9e9826bda8ff;hpb=324615e396be7fadc8ba3cfa1a9f6025e900df3a;p=koha-ffzg.git diff --git a/tools/upload-cover-image.pl b/tools/upload-cover-image.pl index 7552e2813a..f55d8f128d 100755 --- a/tools/upload-cover-image.pl +++ b/tools/upload-cover-image.pl @@ -4,18 +4,18 @@ # # 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., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# You should have received a copy of the GNU General Public License +# along with Koha; if not, see . # # # @@ -37,37 +37,36 @@ 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 C4::Auth qw( get_template_and_user ); +use C4::Output qw( output_html_with_http_headers ); +use Koha::Biblios; +use Koha::CoverImages; +use Koha::Items; +use Koha::UploadedFiles; +use C4::Log qw( logaction ); -my $debug = 1; - -my $input = new CGI; +my $input = CGI->new; my $fileID = $input->param('uploadedfileid'); my ( $template, $loggedinuser, $cookie ) = get_template_and_user( { - template_name => "tools/upload-images.tmpl", + template_name => "tools/upload-images.tt", query => $input, type => "intranet", - authnotrequired => 0, - flagsrequired => { tools => 'upload_cover_images' }, - debug => 0, + flagsrequired => { tools => 'upload_local_cover_images' }, } ); my $filetype = $input->param('filetype'); my $biblionumber = $input->param('biblionumber'); -my $uploadfilename = $input->param('uploadfile'); +my $itemnumber = $input->param('itemnumber'); +#my $uploadfilename = $input->param('uploadfile'); # obsolete? my $replace = !C4::Context->preference("AllowMultipleCovers") || $input->param('replace'); my $op = $input->param('op'); @@ -76,19 +75,41 @@ my $sessionID = $cookies{'CGISESSID'}->value; my $error; -$template->{VARS}->{'filetype'} = $filetype; -$template->{VARS}->{'biblionumber'} = $biblionumber; +$template->param( + filetype => $filetype, + biblionumber => $biblionumber, + itemnumber => $itemnumber, +); my $total = 0; if ($fileID) { - my $uploaded_file = C4::UploadedFile->fetch( $sessionID, $fileID ); + my $upload = Koha::UploadedFiles->find( $fileID ); if ( $filetype eq 'image' ) { - my $fh = $uploaded_file->fh(); + my $fh = $upload->file_handle; my $srcimage = GD::Image->new($fh); + $fh->close if $fh; if ( defined $srcimage ) { - my $dberror = PutImage( $biblionumber, $srcimage, $replace ); - if ($dberror) { + eval { + if ( $replace ) { + if ( $biblionumber ) { + Koha::Biblios->find($biblionumber)->cover_images->delete; + } elsif ( $itemnumber ) { + Koha::Items->find($itemnumber)->cover_images->delete; + } + } + + Koha::CoverImage->new( + { + biblionumber => $biblionumber, + itemnumber => $itemnumber, + src_image => $srcimage + } + )->store; + }; + + if ($@) { + warn $@; $error = 'DBERR'; } else { @@ -101,9 +122,11 @@ if ($fileID) { undef $srcimage; } else { - my $filename = $uploaded_file->filename(); + my $filename = $upload->full_path; my $dirname = File::Temp::tempdir( CLEANUP => 1 ); - unless ( system( "unzip", $filename, '-d', $dirname ) == 0 ) { + qx/unzip $filename -d $dirname/; + my $exit_code = $?; + unless ( $exit_code == 0 ) { $error = 'UZIPFAIL'; } else { @@ -129,31 +152,50 @@ if ($fileID) { else { next; } - if ( open( FILE, $file ) ) { - while ( my $line = ) { + if ( open( my $fh, '<', $file ) ) { + while ( my $line = <$fh> ) { 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'"; $error = 'DELERR'; } else { - ( $biblionumber, $filename ) = split $delim, $line; + ( $biblionumber, $filename ) = split $delim, $line, 2; $biblionumber =~ s/[\"\r\n]//g; # remove offensive characters - $filename =~ s/[\"\r\n\s]//g; + $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 ) { $total++; - my $dberror = - PutImage( $biblionumber, $srcimage, - $replace ); - if ($dberror) { + eval { + if ( $replace ) { + if ( $biblionumber ) { + Koha::Biblios->find($biblionumber)->cover_images->delete; + } elsif ( $itemnumber ) { + Koha::Items->find($itemnumber)->cover_images->delete; + } + } + + Koha::CoverImage->new( + { + biblionumber => $biblionumber, + itemnumber => $itemnumber, + src_image => $srcimage + } + )->store; + }; + + if ($@) { $error = 'DBERR'; } } @@ -163,7 +205,7 @@ if ($fileID) { undef $srcimage; } } - close(FILE); + close($fh); } else { $error = 'OPNLINK'; @@ -171,10 +213,14 @@ if ($fileID) { } } } - $template->{VARS}->{'total'} = $total; - $template->{VARS}->{'uploadimage'} = 1; - $template->{VARS}->{'error'} = $error; - $template->{VARS}->{'biblionumber'} = $biblionumber; + + $template->param( + total => $total, + uploadimage => 1, + error => $error, + biblionumber => $biblionumber || Koha::Items->find($itemnumber)->biblionumber, + itemnumber => $itemnumber, + ); } output_html_with_http_headers $input, $cookie, $template->output;