Bug 7600: Return a single-pixel GIF when no local cover image exists
Signed-off-by: Kristina D.C. Hoeppner <kristina@catalyst.net.nz> Signed-off-by: Paul Poulain <paul.poulain@biblibre.com>
This commit is contained in:
parent
f7a7b34bdf
commit
d7fe2f24db
31
C4/Images.pm
31
C4/Images.pm
|
|
@ -25,7 +25,7 @@ use 5.010;
|
|||
use C4::Context;
|
||||
use GD;
|
||||
|
||||
use vars qw($debug $VERSION @ISA @EXPORT);
|
||||
use vars qw($debug $noimage $VERSION @ISA @EXPORT);
|
||||
|
||||
BEGIN {
|
||||
|
||||
|
|
@ -40,6 +40,11 @@ BEGIN {
|
|||
&DelImage
|
||||
);
|
||||
$debug = $ENV{KOHA_DEBUG} || $ENV{DEBUG} || 0;
|
||||
|
||||
$noimage = pack( "H*",
|
||||
'47494638396101000100800000FFFFFF'
|
||||
. '00000021F90401000000002C00000000'
|
||||
. '010001000002024401003B' );
|
||||
}
|
||||
|
||||
=head2 PutImage
|
||||
|
|
@ -101,13 +106,14 @@ sub RetrieveImage {
|
|||
my $sth = $dbh->prepare($query);
|
||||
$sth->execute($imagenumber);
|
||||
my $imagedata = $sth->fetchrow_hashref;
|
||||
if ( !$imagedata ) {
|
||||
$imagedata->{'thumbnail'} = $noimage;
|
||||
$imagedata->{'imagefile'} = $noimage;
|
||||
}
|
||||
if ( $sth->err ) {
|
||||
warn "Database error!";
|
||||
return undef;
|
||||
}
|
||||
else {
|
||||
return $imagedata;
|
||||
warn "Database error!" if $debug;
|
||||
}
|
||||
return $imagedata;
|
||||
}
|
||||
|
||||
=head2 ListImagesForBiblio
|
||||
|
|
@ -192,4 +198,17 @@ sub _scale_image {
|
|||
}
|
||||
}
|
||||
|
||||
=head2 NoImage
|
||||
|
||||
C4::Images->NoImage;
|
||||
|
||||
Returns the gif to be used when there is no image matching the request, and
|
||||
its mimetype (image/gif).
|
||||
|
||||
=cut
|
||||
|
||||
sub NoImage {
|
||||
return $noimage, 'image/gif';
|
||||
}
|
||||
|
||||
1;
|
||||
|
|
|
|||
|
|
@ -58,62 +58,44 @@ imagenumber, a random image is selected.
|
|||
|
||||
=cut
|
||||
|
||||
error() unless C4::Context->preference("OPACLocalCoverImages");
|
||||
|
||||
if ( defined $data->param('imagenumber') ) {
|
||||
$imagenumber = $data->param('imagenumber');
|
||||
}
|
||||
elsif ( defined $data->param('biblionumber') ) {
|
||||
my @imagenumbers = ListImagesForBiblio( $data->param('biblionumber') );
|
||||
if (@imagenumbers) {
|
||||
$imagenumber = $imagenumbers[0];
|
||||
my ( $image, $mimetype ) = C4::Images->NoImage;
|
||||
if ( C4::Context->preference("LocalCoverImages") ) {
|
||||
if ( defined $data->param('imagenumber') ) {
|
||||
$imagenumber = $data->param('imagenumber');
|
||||
}
|
||||
else {
|
||||
warn "No images for this biblio" if $DEBUG;
|
||||
error();
|
||||
}
|
||||
}
|
||||
else {
|
||||
$imagenumber = shift;
|
||||
}
|
||||
|
||||
if ($imagenumber) {
|
||||
warn "imagenumber passed in: $imagenumber" if $DEBUG;
|
||||
my $imagedata = RetrieveImage($imagenumber);
|
||||
|
||||
error() unless $imagedata;
|
||||
|
||||
if ($imagedata) {
|
||||
my $image;
|
||||
if ( $data->param('thumbnail') ) {
|
||||
$image = $imagedata->{'thumbnail'};
|
||||
elsif ( defined $data->param('biblionumber') ) {
|
||||
my @imagenumbers = ListImagesForBiblio( $data->param('biblionumber') );
|
||||
if (@imagenumbers) {
|
||||
$imagenumber = $imagenumbers[0];
|
||||
}
|
||||
else {
|
||||
$image = $imagedata->{'imagefile'};
|
||||
warn "No images for this biblio" if $DEBUG;
|
||||
}
|
||||
print $data->header(
|
||||
-type => $imagedata->{'mimetype'},
|
||||
-'Cache-Control' => 'no-store',
|
||||
-expires => 'now',
|
||||
-Content_Length => length($image)
|
||||
), $image;
|
||||
exit;
|
||||
}
|
||||
else {
|
||||
warn "No image exists for $imagenumber" if $DEBUG;
|
||||
error();
|
||||
$imagenumber = shift;
|
||||
}
|
||||
|
||||
if ($imagenumber) {
|
||||
warn "imagenumber passed in: $imagenumber" if $DEBUG;
|
||||
my $imagedata = RetrieveImage($imagenumber);
|
||||
if ($imagedata) {
|
||||
if ( $data->param('thumbnail') ) {
|
||||
$image = $imagedata->{'thumbnail'};
|
||||
}
|
||||
else {
|
||||
$image = $imagedata->{'imagefile'};
|
||||
}
|
||||
$mimetype = $imagedata->{'mimetype'};
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
error();
|
||||
}
|
||||
|
||||
error();
|
||||
|
||||
sub error {
|
||||
print $data->header( -status => '404', -expires => 'now' );
|
||||
exit;
|
||||
}
|
||||
print $data->header(
|
||||
-type => $mimetype,
|
||||
-'Cache-Control' => 'no-store',
|
||||
-expires => 'now',
|
||||
-Content_Length => length($image)
|
||||
), $image;
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
|
|
|
|||
|
|
@ -58,62 +58,44 @@ imagenumber, a random image is selected.
|
|||
|
||||
=cut
|
||||
|
||||
error() unless C4::Context->preference("OPACLocalCoverImages");
|
||||
|
||||
if ( defined $data->param('imagenumber') ) {
|
||||
$imagenumber = $data->param('imagenumber');
|
||||
}
|
||||
elsif ( defined $data->param('biblionumber') ) {
|
||||
my @imagenumbers = ListImagesForBiblio( $data->param('biblionumber') );
|
||||
if (@imagenumbers) {
|
||||
$imagenumber = $imagenumbers[0];
|
||||
my ( $image, $mimetype ) = C4::Images->NoImage;
|
||||
if ( C4::Context->preference("OPACLocalCoverImages") ) {
|
||||
if ( defined $data->param('imagenumber') ) {
|
||||
$imagenumber = $data->param('imagenumber');
|
||||
}
|
||||
else {
|
||||
warn "No images for this biblio" if $DEBUG;
|
||||
error();
|
||||
}
|
||||
}
|
||||
else {
|
||||
$imagenumber = shift;
|
||||
}
|
||||
|
||||
if ($imagenumber) {
|
||||
warn "imagenumber passed in: $imagenumber" if $DEBUG;
|
||||
my $imagedata = RetrieveImage($imagenumber);
|
||||
|
||||
error() unless $imagedata;
|
||||
|
||||
if ($imagedata) {
|
||||
my $image;
|
||||
if ( $data->param('thumbnail') ) {
|
||||
$image = $imagedata->{'thumbnail'};
|
||||
elsif ( defined $data->param('biblionumber') ) {
|
||||
my @imagenumbers = ListImagesForBiblio( $data->param('biblionumber') );
|
||||
if (@imagenumbers) {
|
||||
$imagenumber = $imagenumbers[0];
|
||||
}
|
||||
else {
|
||||
$image = $imagedata->{'imagefile'};
|
||||
warn "No images for this biblio" if $DEBUG;
|
||||
}
|
||||
print $data->header(
|
||||
-type => $imagedata->{'mimetype'},
|
||||
-'Cache-Control' => 'no-store',
|
||||
-expires => 'now',
|
||||
-Content_Length => length($image)
|
||||
), $image;
|
||||
exit;
|
||||
}
|
||||
else {
|
||||
warn "No image exists for $imagenumber" if $DEBUG;
|
||||
error();
|
||||
$imagenumber = shift;
|
||||
}
|
||||
|
||||
if ($imagenumber) {
|
||||
warn "imagenumber passed in: $imagenumber" if $DEBUG;
|
||||
my $imagedata = RetrieveImage($imagenumber);
|
||||
if ($imagedata) {
|
||||
if ( $data->param('thumbnail') ) {
|
||||
$image = $imagedata->{'thumbnail'};
|
||||
}
|
||||
else {
|
||||
$image = $imagedata->{'imagefile'};
|
||||
}
|
||||
$mimetype = $imagedata->{'mimetype'};
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
error();
|
||||
}
|
||||
|
||||
error();
|
||||
|
||||
sub error {
|
||||
print $data->header( -status => '404', -expires => 'now' );
|
||||
exit;
|
||||
}
|
||||
print $data->header(
|
||||
-type => $mimetype,
|
||||
-'Cache-Control' => 'no-store',
|
||||
-expires => 'now',
|
||||
-Content_Length => length($image)
|
||||
), $image;
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue