From d79c3011b82559fd7e46737877beaedaa65284f4 Mon Sep 17 00:00:00 2001 From: Jared Camins-Esakov Date: Wed, 18 Jan 2012 14:47:40 -0500 Subject: [PATCH] Bug 1633: QA follow-up Content-Type: text/plain; charset="UTF-8" * Show the "Upload images" button when OPACLocalCoverImages is enabled but LocalCoverImages (i.e. local cover images on the staff client) is not * Correct copyright and license comments in new files * perltidy and replace tabs by four spaces Signed-off-by: Koustubha Kale --- C4/Auth.pm | 1 + C4/Images.pm | 128 +++++++++++++------- catalogue/image.pl | 42 +++++-- catalogue/imageviewer.pl | 38 +++--- .../data/mysql/atomicupdate/local_cover_images.pl | 24 +++- .../intranet-tmpl/prog/en/includes/cat-toolbar.inc | 2 +- .../prog/en/modules/catalogue/imageviewer.tt | 66 +++++----- .../opac-tmpl/prog/en/modules/opac-imageviewer.tt | 60 +++++----- opac/opac-image.pl | 42 +++++-- opac/opac-imageviewer.pl | 10 +- tools/upload-cover-image.pl | 128 +++++++++++-------- 11 files changed, 322 insertions(+), 219 deletions(-) diff --git a/C4/Auth.pm b/C4/Auth.pm index 42deeb3..0915990 100755 --- a/C4/Auth.pm +++ b/C4/Auth.pm @@ -391,6 +391,7 @@ sub get_template_and_user { NoZebra => C4::Context->preference('NoZebra'), EasyAnalyticalRecords => C4::Context->preference('EasyAnalyticalRecords'), LocalCoverImages => C4::Context->preference('LocalCoverImages'), + OPACLocalCoverImages => C4::Context->preference('OPACLocalCoverImages'), AllowMultipleCovers => C4::Context->preference('AllowMultipleCovers'), ); } diff --git a/C4/Images.pm b/C4/Images.pm index 99d0198..209cde0 100644 --- a/C4/Images.pm +++ b/C4/Images.pm @@ -1,4 +1,23 @@ package C4::Images; + +# Copyright (C) 2011 C & P Bibliography Services +# Jared Camins-Esakov +# +# 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 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. + use strict; use warnings; use 5.010; @@ -9,17 +28,18 @@ use GD; use vars qw($debug $VERSION @ISA @EXPORT); BEGIN { - # set the version for version checking - $VERSION = 3.03; - require Exporter; - @ISA = qw(Exporter); - @EXPORT = qw( - &PutImage - &RetrieveImage - &ListImagesForBiblio - &DelImage + + # set the version for version checking + $VERSION = 3.03; + require Exporter; + @ISA = qw(Exporter); + @EXPORT = qw( + &PutImage + &RetrieveImage + &ListImagesForBiblio + &DelImage ); - $debug = $ENV{KOHA_DEBUG} || $ENV{DEBUG} || 0; + $debug = $ENV{KOHA_DEBUG} || $ENV{DEBUG} || 0; } =head2 PutImage @@ -31,27 +51,33 @@ Stores binary image data and thumbnail in database, optionally replacing existin =cut sub PutImage { - my ($biblionumber, $srcimage, $replace) = @_; + my ( $biblionumber, $srcimage, $replace ) = @_; return -1 unless defined($srcimage); if ($replace) { - foreach (ListImagesForBiblio($biblionumber)) { + foreach ( ListImagesForBiblio($biblionumber) ) { DelImage($_); } } my $dbh = C4::Context->dbh; - my $query = "INSERT INTO biblioimages (biblionumber, mimetype, imagefile, thumbnail) VALUES (?,?,?,?);"; + my $query = +"INSERT INTO biblioimages (biblionumber, mimetype, imagefile, thumbnail) VALUES (?,?,?,?);"; my $sth = $dbh->prepare($query); - my $mimetype = 'image/png'; # GD autodetects three basic image formats: PNG, JPEG, XPM; we will convert all to PNG which is lossless... -# Check the pixel size of the image we are about to import... - my $thumbnail = _scale_image($srcimage, 140, 200); # MAX pixel dims are 140 X 200 for thumbnail... - my $fullsize = _scale_image($srcimage, 600, 800); # MAX pixel dims are 600 X 800 for full-size image... + my $mimetype = 'image/png' + ; # GD autodetects three basic image formats: PNG, JPEG, XPM; we will convert all to PNG which is lossless... + + # Check the pixel size of the image we are about to import... + my $thumbnail = _scale_image( $srcimage, 140, 200 ) + ; # MAX pixel dims are 140 X 200 for thumbnail... + my $fullsize = _scale_image( $srcimage, 600, 800 ) + ; # MAX pixel dims are 600 X 800 for full-size image... $debug and warn "thumbnail is " . length($thumbnail) . " bytes."; - $sth->execute($biblionumber,$mimetype,$fullsize->png(),$thumbnail->png()); + $sth->execute( $biblionumber, $mimetype, $fullsize->png(), + $thumbnail->png() ); my $dberror = $sth->errstr; warn "Error returned inserting $biblionumber.$mimetype." if $sth->errstr; undef $thumbnail; @@ -70,14 +96,16 @@ sub RetrieveImage { my ($imagenumber) = @_; my $dbh = C4::Context->dbh; - my $query = 'SELECT mimetype, imagefile, thumbnail FROM biblioimages WHERE imagenumber = ?'; + my $query = +'SELECT mimetype, imagefile, thumbnail FROM biblioimages WHERE imagenumber = ?'; my $sth = $dbh->prepare($query); $sth->execute($imagenumber); my $imagedata = $sth->fetchrow_hashref; - if ($sth->err) { + if ( $sth->err ) { warn "Database error!"; return undef; - } else { + } + else { return $imagedata; } } @@ -89,22 +117,22 @@ Gets a list of all images associated with a particular biblio. =cut - sub ListImagesForBiblio { my ($biblionumber) = @_; my @imagenumbers; - my $dbh = C4::Context->dbh; + my $dbh = C4::Context->dbh; my $query = 'SELECT imagenumber FROM biblioimages WHERE biblionumber = ?'; - my $sth = $dbh->prepare($query); + my $sth = $dbh->prepare($query); $sth->execute($biblionumber); warn "Database error!" if $sth->errstr; - if (!$sth->errstr && $sth->rows > 0) { - while (my $row = $sth->fetchrow_hashref) { + if ( !$sth->errstr && $sth->rows > 0 ) { + while ( my $row = $sth->fetchrow_hashref ) { push @imagenumbers, $row->{'imagenumber'}; } return @imagenumbers; - } else { + } + else { return undef; } } @@ -120,9 +148,9 @@ Removes the image with the supplied imagenumber. sub DelImage { my ($imagenumber) = @_; warn "Imagenumber passed to DelImage is $imagenumber" if $debug; - my $dbh = C4::Context->dbh; + my $dbh = C4::Context->dbh; my $query = "DELETE FROM biblioimages WHERE imagenumber = ?;"; - my $sth = $dbh->prepare($query); + my $sth = $dbh->prepare($query); $sth->execute($imagenumber); my $dberror = $sth->errstr; warn "Database error!" if $sth->errstr; @@ -130,24 +158,36 @@ sub DelImage { } sub _scale_image { - my ($image, $maxwidth, $maxheight) = @_; - my ($width, $height) = $image->getBounds(); + my ( $image, $maxwidth, $maxheight ) = @_; + my ( $width, $height ) = $image->getBounds(); $debug and warn "image is $width pix X $height pix."; - if ($width > $maxwidth || $height > $maxheight) { + if ( $width > $maxwidth || $height > $maxheight ) { + # $debug and warn "$filename exceeds the maximum pixel dimensions of $maxwidth X $maxheight. Resizing..."; - my $percent_reduce; # Percent we will reduce the image dimensions by... - if ($width > $maxwidth) { - $percent_reduce = sprintf("%.5f",($maxwidth/$width)); # If the width is oversize, scale based on width overage... - } else { - $percent_reduce = sprintf("%.5f",($maxheight/$height)); # otherwise scale based on height overage. - } - my $width_reduce = sprintf("%.0f", ($width * $percent_reduce)); - my $height_reduce = sprintf("%.0f", ($height * $percent_reduce)); - $debug and warn "Reducing image by " . ($percent_reduce * 100) . "\% or to $width_reduce pix X $height_reduce pix"; - my $newimage = GD::Image->new($width_reduce, $height_reduce, 1); #'1' creates true color image... - $newimage->copyResampled($image,0,0,0,0,$width_reduce,$height_reduce,$width,$height); + my $percent_reduce; # Percent we will reduce the image dimensions by... + if ( $width > $maxwidth ) { + $percent_reduce = + sprintf( "%.5f", ( $maxwidth / $width ) ) + ; # If the width is oversize, scale based on width overage... + } + else { + $percent_reduce = + sprintf( "%.5f", ( $maxheight / $height ) ) + ; # otherwise scale based on height overage. + } + my $width_reduce = sprintf( "%.0f", ( $width * $percent_reduce ) ); + my $height_reduce = sprintf( "%.0f", ( $height * $percent_reduce ) ); + $debug + and warn "Reducing image by " + . ( $percent_reduce * 100 ) + . "\% or to $width_reduce pix X $height_reduce pix"; + my $newimage = GD::Image->new( $width_reduce, $height_reduce, 1 ) + ; #'1' creates true color image... + $newimage->copyResampled( $image, 0, 0, 0, 0, $width_reduce, + $height_reduce, $width, $height ); return $newimage; - } else { + } + else { return $image; } } diff --git a/catalogue/image.pl b/catalogue/image.pl index 98725a2..2d9a5e1 100755 --- a/catalogue/image.pl +++ b/catalogue/image.pl @@ -1,5 +1,8 @@ #!/usr/bin/perl # +# Copyright (C) 2011 C & P Bibliography Services +# Jared Camins-Esakov +# # based on patronimage.pl # # This file is part of Koha. @@ -23,14 +26,14 @@ use strict; use warnings; -use CGI; #qw(:standard escapeHTML); +use CGI; #qw(:standard escapeHTML); use C4::Context; use C4::Images; -$|=1; +$| = 1; my $DEBUG = 0; -my $data = new CGI; +my $data = new CGI; my $imagenumber; =head1 NAME @@ -57,17 +60,20 @@ imagenumber, a random image is selected. error() unless C4::Context->preference("OPACLocalCoverImages"); -if (defined $data->param('imagenumber')) { +if ( defined $data->param('imagenumber') ) { $imagenumber = $data->param('imagenumber'); -} elsif (defined $data->param('biblionumber')) { - my @imagenumbers = ListImagesForBiblio($data->param('biblionumber')); +} +elsif ( defined $data->param('biblionumber') ) { + my @imagenumbers = ListImagesForBiblio( $data->param('biblionumber') ); if (@imagenumbers) { $imagenumber = $imagenumbers[0]; - } else { + } + else { warn "No images for this biblio" if $DEBUG; error(); } -} else { +} +else { $imagenumber = shift; } @@ -79,25 +85,33 @@ if ($imagenumber) { if ($imagedata) { my $image; - if ($data->param('thumbnail')) { + if ( $data->param('thumbnail') ) { $image = $imagedata->{'thumbnail'}; - } else { + } + else { $image = $imagedata->{'imagefile'}; } - print $data->header (-type => $imagedata->{'mimetype'}, -'Cache-Control' => 'no-store', -expires => 'now', -Content_Length => length ($image)), $image; + print $data->header( + -type => $imagedata->{'mimetype'}, + -'Cache-Control' => 'no-store', + -expires => 'now', + -Content_Length => length($image) + ), $image; exit; - } else { + } + else { warn "No image exists for $imagenumber" if $DEBUG; error(); } -} else { +} +else { error(); } error(); sub error { - print $data->header ( -status=> '404', -expires => 'now' ); + print $data->header( -status => '404', -expires => 'now' ); exit; } diff --git a/catalogue/imageviewer.pl b/catalogue/imageviewer.pl index caa793e..011dfab 100755 --- a/catalogue/imageviewer.pl +++ b/catalogue/imageviewer.pl @@ -40,38 +40,42 @@ my ( $template, $borrowernumber, $cookie ) = get_template_and_user( ); my $biblionumber = $query->param('biblionumber') || $query->param('bib'); -my $imagenumber = $query ->param('imagenumber'); -my ($count, $biblio) = GetBiblio($biblionumber); +my $imagenumber = $query->param('imagenumber'); +my ( $count, $biblio ) = GetBiblio($biblionumber); my $itemcount = GetItemsCount($biblionumber); -my @items = GetItemsInfo( $biblionumber ); +my @items = GetItemsInfo($biblionumber); my $norequests = 1; foreach my $item (@items) { + # can place holds defaults to yes - $norequests = 0 unless ( ( $item->{'notforloan_per_itemtype'} > 0 ) || ( $item->{'itemnotforloan'} > 0 ) ); + $norequests = 0 + unless ( ( $item->{'notforloan_per_itemtype'} > 0 ) + || ( $item->{'itemnotforloan'} > 0 ) ); } -if($query->cookie("holdfor")){ - my $holdfor_patron = GetMember('borrowernumber' => $query->cookie("holdfor")); +if ( $query->cookie("holdfor") ) { + my $holdfor_patron = + GetMember( 'borrowernumber' => $query->cookie("holdfor") ); $template->param( - holdfor => $query->cookie("holdfor"), - holdfor_surname => $holdfor_patron->{'surname'}, - holdfor_firstname => $holdfor_patron->{'firstname'}, + holdfor => $query->cookie("holdfor"), + holdfor_surname => $holdfor_patron->{'surname'}, + holdfor_firstname => $holdfor_patron->{'firstname'}, holdfor_cardnumber => $holdfor_patron->{'cardnumber'}, ); } -if (C4::Context->preference("LocalCoverImages")) { +if ( C4::Context->preference("LocalCoverImages") ) { my @images = ListImagesForBiblio($biblionumber); $template->{VARS}->{'LocalCoverImages'} = 1; - $template->{VARS}->{'images'} = \@images; - $template->{VARS}->{'imagenumber'} = $imagenumber || $images[0] || ''; + $template->{VARS}->{'images'} = \@images; + $template->{VARS}->{'imagenumber'} = $imagenumber || $images[0] || ''; } - $template->{VARS}->{'count'} = $itemcount; - $template->{VARS}->{'biblionumber'} = $biblionumber; - $template->{VARS}->{'norequests'} = $norequests; - $template->param( C4::Search::enabled_staff_search_views ); - $template->{VARS}->{'biblio'} = $biblio; +$template->{VARS}->{'count'} = $itemcount; +$template->{VARS}->{'biblionumber'} = $biblionumber; +$template->{VARS}->{'norequests'} = $norequests; +$template->param(C4::Search::enabled_staff_search_views); +$template->{VARS}->{'biblio'} = $biblio; output_html_with_http_headers $query, $cookie, $template->output; diff --git a/installer/data/mysql/atomicupdate/local_cover_images.pl b/installer/data/mysql/atomicupdate/local_cover_images.pl index a698e7f..6a804fe 100755 --- a/installer/data/mysql/atomicupdate/local_cover_images.pl +++ b/installer/data/mysql/atomicupdate/local_cover_images.pl @@ -2,9 +2,10 @@ use strict; use warnings; use C4::Context; -my $dbh=C4::Context->dbh; +my $dbh = C4::Context->dbh; -$dbh->do( q|CREATE TABLE `biblioimages` ( +$dbh->do( + q|CREATE TABLE `biblioimages` ( `imagenumber` int(11) NOT NULL AUTO_INCREMENT, `biblionumber` int(11) NOT NULL, `mimetype` varchar(15) NOT NULL, @@ -12,9 +13,18 @@ $dbh->do( q|CREATE TABLE `biblioimages` ( `thumbnail` mediumblob NOT NULL, PRIMARY KEY (`imagenumber`), CONSTRAINT `bibliocoverimage_fk1` FOREIGN KEY (`biblionumber`) REFERENCES `biblio` (`biblionumber`) ON DELETE CASCADE ON UPDATE CASCADE - ) ENGINE=InnoDB DEFAULT CHARSET=utf8|); -$dbh->do( q|INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES ('OPACLocalCoverImages','0','Display local cover images on OPAC search and details pages.','1','YesNo')|); -$dbh->do( q|INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES ('LocalCoverImages','0','Display local cover images on intranet search and details pages.','1','YesNo')|); -$dbh->do( q|INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES ('AllowMultipleCovers','0','Allow multiple cover images to be attached to each bibliographic record.','1','YesNo')|); -$dbh->do( q|INSERT INTO permissions (module_bit, code, description) VALUES (13, 'upload_local_cover_images', 'Upload local cover images')|); + ) ENGINE=InnoDB DEFAULT CHARSET=utf8| +); +$dbh->do( +q|INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES ('OPACLocalCoverImages','0','Display local cover images on OPAC search and details pages.','1','YesNo')| +); +$dbh->do( +q|INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES ('LocalCoverImages','0','Display local cover images on intranet search and details pages.','1','YesNo')| +); +$dbh->do( +q|INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES ('AllowMultipleCovers','0','Allow multiple cover images to be attached to each bibliographic record.','1','YesNo')| +); +$dbh->do( +q|INSERT INTO permissions (module_bit, code, description) VALUES (13, 'upload_local_cover_images', 'Upload local cover images')| +); print "Upgrade done (Added support for local cover images)\n"; diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/cat-toolbar.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/cat-toolbar.inc index 4276133..bd597b5 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/includes/cat-toolbar.inc +++ b/koha-tmpl/intranet-tmpl/prog/en/includes/cat-toolbar.inc @@ -102,7 +102,7 @@ function confirm_items_deletion() { [% IF ( CAN_user_editcatalogue_edit_items ) %]{ text: _("Edit Items"), url: "/cgi-bin/koha/cataloguing/additem.pl?biblionumber=[% biblionumber %]" },[% END %] [% IF ( CAN_user_editcatalogue_edit_items ) %]{ text: _("Attach Item"), url: "/cgi-bin/koha/cataloguing/moveitem.pl?biblionumber=[% biblionumber %]" },[% END %] [% IF ( EasyAnalyticalRecords ) %][% IF ( CAN_user_editcatalogue_edit_items ) %]{ text: _("Link to Host Item"), url: "/cgi-bin/koha/cataloguing/linkitem.pl?biblionumber=[% biblionumber %]" },[% END %][% END %] - [% IF ( LocalCoverImages ) %][% IF ( CAN_user_tools_upload_local_cover_images ) %]{ text: _("Upload Image"), url: "/cgi-bin/koha/tools/upload-cover-image.pl?biblionumber=[% biblionumber %]&filetype=image" },[% END %][% END %] + [% IF ( LocalCoverImages || OPACLocalCoverImages) %][% IF ( CAN_user_tools_upload_local_cover_images ) %]{ text: _("Upload Image"), url: "/cgi-bin/koha/tools/upload-cover-image.pl?biblionumber=[% biblionumber %]&filetype=image" },[% END %][% END %] [% IF ( CAN_user_editcatalogue_edit_catalogue ) %]{ text: _("Edit as New (Duplicate)"), url: "/cgi-bin/koha/cataloguing/addbiblio.pl?biblionumber=[% biblionumber %]&frameworkcode=&op=duplicate" },[% END %] [% IF ( CAN_user_editcatalogue_edit_catalogue ) %]{ text: _("Replace Record via Z39.50"), onclick: {fn: PopupZ3950 } },[% END %] [% IF ( CAN_user_editcatalogue_edit_catalogue ) %]{ text: _("Delete Record"), onclick: {fn: confirm_deletion }[% IF ( count ) %],id:'disabled'[% END %] },[% END %] diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/imageviewer.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/imageviewer.tt index 0ec6011..794d4ad 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/imageviewer.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/imageviewer.tt @@ -18,19 +18,19 @@ function showCover(img) { [% END %] @@ -55,9 +55,9 @@ img.thumbnail {
-
-
-
+
+
+
[% INCLUDE 'cat-toolbar.inc' %] @@ -65,32 +65,32 @@ img.thumbnail {

[% biblio.author %]

[% IF ( LocalCoverImages == 1 ) %] - [% IF ( images.size > 0 ) %] -
-
- -
+ [% IF ( images.size > 0 ) %] +
+
+ +
-
+
- [% FOREACH img IN images %] - [% IF img %] - - [% IF ( imagenumber == img ) %] - Thumbnail - [% ELSE %] - Thumbnail - [% END %] - - [% END %] - [% END %] -
+ [% FOREACH img IN images %] + [% IF img %] + + [% IF ( imagenumber == img ) %] + Thumbnail + [% ELSE %] + Thumbnail + [% END %] + + [% END %] + [% END %] +
- [% ELSE %] -
There are no images for this record.
- [% END %] + [% ELSE %] +
There are no images for this record.
+ [% END %] [% ELSE %] -
Local images have not been enabled by your system administrator.
+
Local images have not been enabled by your system administrator.
[% END %]
diff --git a/koha-tmpl/opac-tmpl/prog/en/modules/opac-imageviewer.tt b/koha-tmpl/opac-tmpl/prog/en/modules/opac-imageviewer.tt index 8dd7add..f2d10bc 100644 --- a/koha-tmpl/opac-tmpl/prog/en/modules/opac-imageviewer.tt +++ b/koha-tmpl/opac-tmpl/prog/en/modules/opac-imageviewer.tt @@ -5,7 +5,7 @@ // @@ -47,34 +47,34 @@ img.thumbnail { [% IF ( OpacNav ) %]
[% ELSE %]
[% END %]
[% INCLUDE 'masthead.inc' %] -
-
-
-
-

Images for [% IF ( BiblioDefaultViewmarc ) %] +
+
+
+
+

Images for [% IF ( BiblioDefaultViewmarc ) %] [% ELSE %] [% IF ( BiblioDefaultViewisbd ) %] [% ELSE %] [% END %] [% END %][% biblio.title %] [% biblio.author %]

-
+
-
+
- [% IF OPACLocalCoverImages == 1 %] -
- [% FOREACH img IN images %] - [% IF img %] - - [% IF ( imagenumber == img ) %]Thumbnail - [% ELSE %] - Thumbnail - [% END %] - - [% END %] - [% END %] -
-
+ [% IF OPACLocalCoverImages == 1 %] +
+ [% FOREACH img IN images %] + [% IF img %] + + [% IF ( imagenumber == img ) %]Thumbnail + [% ELSE %] + Thumbnail + [% END %] + + [% END %] + [% END %] +
+
[% ELSE %] Unfortunately, images are not enabled for this catalog at this time. [% END %] diff --git a/opac/opac-image.pl b/opac/opac-image.pl index eefd573..340a47c 100755 --- a/opac/opac-image.pl +++ b/opac/opac-image.pl @@ -1,5 +1,8 @@ #!/usr/bin/perl # +# Copyright (C) 2011 C & P Bibliography Services +# Jared Camins-Esakov +# # based on patronimage.pl # # This file is part of Koha. @@ -23,14 +26,14 @@ use strict; use warnings; -use CGI; #qw(:standard escapeHTML); +use CGI; use C4::Context; use C4::Images; -$|=1; +$| = 1; my $DEBUG = 0; -my $data = new CGI; +my $data = new CGI; my $imagenumber; =head1 NAME @@ -57,17 +60,20 @@ imagenumber, a random image is selected. error() unless C4::Context->preference("OPACLocalCoverImages"); -if (defined $data->param('imagenumber')) { +if ( defined $data->param('imagenumber') ) { $imagenumber = $data->param('imagenumber'); -} elsif (defined $data->param('biblionumber')) { - my @imagenumbers = ListImagesForBiblio($data->param('biblionumber')); +} +elsif ( defined $data->param('biblionumber') ) { + my @imagenumbers = ListImagesForBiblio( $data->param('biblionumber') ); if (@imagenumbers) { $imagenumber = $imagenumbers[0]; - } else { + } + else { warn "No images for this biblio" if $DEBUG; error(); } -} else { +} +else { $imagenumber = shift; } @@ -79,25 +85,33 @@ if ($imagenumber) { if ($imagedata) { my $image; - if ($data->param('thumbnail')) { + if ( $data->param('thumbnail') ) { $image = $imagedata->{'thumbnail'}; - } else { + } + else { $image = $imagedata->{'imagefile'}; } - print $data->header (-type => $imagedata->{'mimetype'}, -'Cache-Control' => 'no-store', -expires => 'now', -Content_Length => length ($image)), $image; + print $data->header( + -type => $imagedata->{'mimetype'}, + -'Cache-Control' => 'no-store', + -expires => 'now', + -Content_Length => length($image) + ), $image; exit; - } else { + } + else { warn "No image exists for $imagenumber" if $DEBUG; error(); } -} else { +} +else { error(); } error(); sub error { - print $data->header ( -status=> '404', -expires => 'now' ); + print $data->header( -status => '404', -expires => 'now' ); exit; } diff --git a/opac/opac-imageviewer.pl b/opac/opac-imageviewer.pl index e806267..300e90f 100755 --- a/opac/opac-imageviewer.pl +++ b/opac/opac-imageviewer.pl @@ -33,19 +33,19 @@ my ( $template, $borrowernumber, $cookie ) = get_template_and_user( query => $query, type => "opac", authnotrequired => ( C4::Context->preference("OpacPublic") ? 1 : 0 ), - flagsrequired => { borrow => 1 }, + flagsrequired => { borrow => 1 }, } ); my $biblionumber = $query->param('biblionumber') || $query->param('bib'); my $imagenumber = $query->param('imagenumber'); -my ($count, $biblio) = GetBiblio($biblionumber); +my ( $count, $biblio ) = GetBiblio($biblionumber); -if (C4::Context->preference("OPACLocalCoverImages")) { +if ( C4::Context->preference("OPACLocalCoverImages") ) { my @images = ListImagesForBiblio($biblionumber); $template->{VARS}->{'OPACLocalCoverImages'} = 1; - $template->{VARS}->{'images'} = \@images; - $template->{VARS}->{'biblionumber'} = $biblionumber; + $template->{VARS}->{'images'} = \@images; + $template->{VARS}->{'biblionumber'} = $biblionumber; $template->{VARS}->{'imagenumber'} = $imagenumber || $images[0] || ''; } diff --git a/tools/upload-cover-image.pl b/tools/upload-cover-image.pl index f70aefc..7552e28 100755 --- a/tools/upload-cover-image.pl +++ b/tools/upload-cover-image.pl @@ -13,12 +13,13 @@ # 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, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. # # # + =head1 NAME upload-cover-image.pl - Script for handling uploading of both single and bulk coverimages and importing them into the database. @@ -36,7 +37,6 @@ resized, maintaining aspect ratio. =cut - use strict; use warnings; @@ -53,107 +53,127 @@ 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.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 $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 $uploaded_file = C4::UploadedFile->fetch( $sessionID, $fileID ); + if ( $filetype eq 'image' ) { + my $fh = $uploaded_file->fh(); my $srcimage = GD::Image->new($fh); - if (defined $srcimage) { - my $dberror = PutImage($biblionumber, $srcimage, $replace); + if ( defined $srcimage ) { + my $dberror = PutImage( $biblionumber, $srcimage, $replace ); if ($dberror) { $error = 'DBERR'; - } else { + } + else { $total = 1; } - } else { + } + else { $error = 'OPNIMG'; } undef $srcimage; - } else { + } + else { my $filename = $uploaded_file->filename(); - my $dirname = File::Temp::tempdir( CLEANUP => 1); - unless (system("unzip", $filename, '-d', $dirname) == 0) { + my $dirname = File::Temp::tempdir( CLEANUP => 1 ); + unless ( system( "unzip", $filename, '-d', $dirname ) == 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; + $biblionumber =~ + s/[\"\r\n]//g; # remove offensive characters + $filename =~ s/[\"\r\n\s]//g; 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; } -- 1.7.2.5