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:
Jared Camins-Esakov 2012-03-07 22:13:34 -05:00 committed by Paul Poulain
parent f7a7b34bdf
commit d7fe2f24db
3 changed files with 85 additions and 102 deletions

View File

@ -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;

View File

@ -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

View File

@ -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