@@ -, +, @@ --- C4/Members.pm | 21 ------- .../prog/en/modules/tools/picture-upload.tt | 1 + tools/picture-upload.pl | 64 ++++++++++++++-------- 3 files changed, 41 insertions(+), 45 deletions(-) --- a/C4/Members.pm +++ a/C4/Members.pm @@ -78,7 +78,6 @@ BEGIN { &GetTitles &GetPatronImage - &PutPatronImage &RmPatronImage &GetHideLostItemsPreference @@ -1912,26 +1911,6 @@ sub GetPatronImage { return $imagedata, $sth->errstr; } -=head2 PutPatronImage - - PutPatronImage($cardnumber, $mimetype, $imgfile); - -Stores patron binary image data and mimetype in database. -NOTE: This function is good for updating images as well as inserting new images in the database. - -=cut - -sub PutPatronImage { - my ($cardnumber, $mimetype, $imgfile) = @_; - warn "Parameters passed in: Cardnumber=$cardnumber, Mimetype=$mimetype, " . ($imgfile ? "Imagefile" : "No Imagefile") if $debug; - my $dbh = C4::Context->dbh; - my $query = "INSERT INTO patronimage (borrowernumber, mimetype, imagefile) VALUES ( ( SELECT borrowernumber from borrowers WHERE cardnumber = ? ),?,?) ON DUPLICATE KEY UPDATE imagefile = ?;"; - my $sth = $dbh->prepare($query); - $sth->execute($cardnumber,$mimetype,$imgfile,$imgfile); - warn "Error returned inserting $cardnumber.$mimetype." if $sth->errstr; - return $sth->errstr; -} - =head2 RmPatronImage my ($dberror) = RmPatronImage($borrowernumber); --- a/koha-tmpl/intranet-tmpl/prog/en/modules/tools/picture-upload.tt +++ a/koha-tmpl/intranet-tmpl/prog/en/modules/tools/picture-upload.tt @@ -68,6 +68,7 @@ [% ELSIF ( filerror.OPNERR ) %]ERROR: Image not imported because Koha was unable to open the image for reading. [% ELSIF ( filerror.OVRSIZ ) %]ERROR: Image not imported because the image file is too big (see online help for maximum size). [% ELSIF ( filerror.CRDFIL ) %]ERROR: Image not imported ([% filerror.CRDFIL %] missing). + [% ELSIF ( filerror.CARDNUMBER_DOES_NOT_EXIST ) %]ERROR: Image not imported because this patron does not exist in the database. [% ELSE %]ERROR: Image not imported because of an unknown error. Please refer to the error log for more details. [% END %] [% END %] --- a/tools/picture-upload.pl +++ a/tools/picture-upload.pl @@ -313,31 +313,47 @@ sub handle_file { $debug and warn "Image is of mimetype $mimetype"; my $dberror; if ($mimetype) { - $dberror = - PutPatronImage( $cardnumber, $mimetype, $imgfile ); - } - if ( !$dberror && $mimetype ) { - # Errors from here on are fatal only to the import of a particular image - #so don't bail, just note the error and keep going - $count{count}++; - push @{ $count{filenames} }, - { source => $filename, cardnumber => $cardnumber }; - } - elsif ($dberror) { - warn "Database returned error: $dberror"; - ( $dberror =~ /patronimage_fk1/ ) - ? $filerrors{'IMGEXISTS'} = 1 - : $filerrors{'DBERR'} = 1; - push my @filerrors, \%filerrors; - push @{ $count{filenames} }, - { - filerrors => \@filerrors, - source => $filename, - cardnumber => $cardnumber - }; - $template->param( ERRORS => 1 ); + my $patron = Koha::Patrons->find({ cardnumber => $cardnumber }); + if ( $patron ) { + my $image = $patron->image; + $image ||= Koha::Patron::Image->new({ borrowernumber => $patron->borrowernumber }); + $image->set({ + mimetype => $mimetype, + imagefile => $imgfile, + }); + eval { $image->store }; + if ( $@ ) { + # Errors from here on are fatal only to the import of a particular image + #so don't bail, just note the error and keep going + warn "Database returned error: $@"; + $filerrors{'DBERR'} = 1; + push my @filerrors, \%filerrors; + push @{ $count{filenames} }, + { + filerrors => \@filerrors, + source => $filename, + cardnumber => $cardnumber + }; + $template->param( ERRORS => 1 ); + } else { + $count{count}++; + push @{ $count{filenames} }, + { source => $filename, cardnumber => $cardnumber }; + } + } else { + warn "Patron with the cardnumber '$cardnumber' does not exist"; + $filerrors{'CARDNUMBER_DOES_NOT_EXIST'} = 1; + push my @filerrors, \%filerrors; + push @{ $count{filenames} }, + { + filerrors => \@filerrors, + source => $filename, + cardnumber => $cardnumber + }; + $template->param( ERRORS => 1 ); + } } - elsif ( !$mimetype ) { + else { warn "Unable to determine mime type of $filename. Please verify mimetype."; $filerrors{'MIMERR'} = 1; push my @filerrors, \%filerrors; --