Bug 7813: Ability to delete local cover images
This patch adds the ability to delete local cover images from the
detail page. It adds an 'X' button to trigger the deletion. It occurs
using a new SVC script called cover_images that accepts the following
parameters:
- action
- biblionumber (used for checking imagenumber validity)
- imagenumber (repeatable)
It then deletes all valid images passed and returns a JSON object
containing the imagenumbers and the deletion status (1/0). The operation
is triggered using jQuery.ajax, and with the response the corresponding
images get deleted.
Note: currently one image is deleted at a time, but the code is there to
be used.
To test:
- Open the detail page fr a biblionumber containing one or more cover
images, go to its images tab.
- Apply the patch, reload the page, go to the images tab.
- Thumbnails should look better than before ;-)
- An 'X' button should show below each cover.
- Clicking the 'X' button should trigger an alert message asking for
confirmation.
a) Cancel: nothing happens, reload the page and check nothing got
deleted.
b) Accept: the deleted image should be gone, reload the page to check
it doesn't exist anymore and is not a browser/DOM manipulation trick.
- Signoff
Note: check having more cover images than those that fit the width and
see it wraps fine.
P.S. I chose not to implement every possible action on the svc script, but
another bug could be filled for more improvements.
Sponsored-by: Universidad Nacional de Cordoba
Signed-off-by: David Cook <dcook@prosentient.com.au>
Signed-off-by: Jonathan Druart <jonathan.druart@biblibre.com>
Signed-off-by: Galen Charlton <gmc@esilibrary.com>
This commit is contained in:
parent
9bd3a44944
commit
ab362b93a7
|
|
@ -1398,6 +1398,10 @@ li.email {
|
|||
margin : auto;
|
||||
}
|
||||
|
||||
.thumbnails > li {
|
||||
list-style-type: none;
|
||||
}
|
||||
|
||||
#searchresults ul li {
|
||||
font-size : 90%;
|
||||
list-style : url(../../img/item-bullet.gif);
|
||||
|
|
|
|||
|
|
@ -52,11 +52,36 @@ function verify_images() {
|
|||
});
|
||||
}
|
||||
|
||||
$(document).ready(function() {
|
||||
function removeLocalImage(imagenumber) {
|
||||
|
||||
$.ajax({
|
||||
url: "/cgi-bin/koha/svc/cover_images?action=delete&biblionumber=" + [% biblionumber %] + "&imagenumber=" + imagenumber,
|
||||
success: function(data) {
|
||||
$(data).each( function(i) {
|
||||
if ( this.deleted == 1 ) {
|
||||
$('#imagenumber-' + this.imagenumber).remove();
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
$(document).ready(function() {
|
||||
$('#bibliodetails').tabs();
|
||||
$('#search-form').focus();
|
||||
$('.thumbnails > li > a > span').click(function() {
|
||||
var result = confirm(_("Are you sure you want to delete this cover image?"));
|
||||
|
||||
if ( result == true ) {
|
||||
var imagenumber = $(this).parent().parent().attr('id').split('-')[1];
|
||||
removeLocalImage(imagenumber);
|
||||
}
|
||||
|
||||
return false;
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
[% IF ( AmazonCoverImages ) %]$(window).load(function() {
|
||||
verify_images();
|
||||
});[% END %]
|
||||
|
|
@ -697,15 +722,22 @@ function verify_images() {
|
|||
[% IF ( LocalCoverImages ) %]
|
||||
<div id="images">
|
||||
[% IF ( localimages.0 ) %]
|
||||
<p>Click on an image to view it in the image viewer</p>
|
||||
<p>Click on an image to view it in the image viewer</p>
|
||||
<ul class="thumbnails">
|
||||
[% FOREACH image IN localimages %]
|
||||
[% IF image %]
|
||||
<a class="localimage" href="/cgi-bin/koha/catalogue/imageviewer.pl?biblionumber=[% biblionumber %]&imagenumber=[% image %]"><img alt="" src="/cgi-bin/koha/catalogue/image.pl?thumbnail=1&imagenumber=[% image %]" /></a>
|
||||
[% END %]
|
||||
[% IF image %]
|
||||
<li id="imagenumber-[% image %]">
|
||||
<a class="thumbnail" href="/cgi-bin/koha/catalogue/imageviewer.pl?biblionumber=[% biblionumber %]&imagenumber=[% image %]">
|
||||
<img alt="" src="/cgi-bin/koha/catalogue/image.pl?thumbnail=1&imagenumber=[% image %]" />
|
||||
<span class="remove">×</span>
|
||||
</a>
|
||||
</li>
|
||||
[% END %]
|
||||
[% END %]
|
||||
</ul>
|
||||
[% ELSE %]
|
||||
[% IF ( CAN_user_tools_upload_local_cover_images ) %]
|
||||
<p>No images have been uploaded for this bibliographic record yet. Please <a href='/cgi-bin/koha/tools/upload-cover-image.pl?biblionumber=[% biblionumber %]&filetype=image'>upload</a> one.</p>
|
||||
<p>No images have been uploaded for this bibliographic record yet. Please <a href='/cgi-bin/koha/tools/upload-cover-image.pl?biblionumber=[% biblionumber %]&filetype=image'>upload</a> one.</p>
|
||||
[% END %]
|
||||
[% END %]
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,77 @@
|
|||
#!/usr/bin/perl
|
||||
|
||||
# Copyright 2013 Universidad Nacional de Cordoba
|
||||
# Tomas Cohen Arazi
|
||||
#
|
||||
# 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 Modern::Perl;
|
||||
|
||||
use CGI;
|
||||
use C4::Auth qw/check_cookie_auth/;
|
||||
use C4::Images;
|
||||
use JSON qw/to_json/;
|
||||
|
||||
my $input = new CGI;
|
||||
|
||||
my ( $auth_status, $sessionID ) =
|
||||
check_cookie_auth(
|
||||
$input->cookie('CGISESSID'),
|
||||
{ tools => 'upload_local_cover_images' } );
|
||||
|
||||
if ( $auth_status ne "ok" ) {
|
||||
exit 0;
|
||||
}
|
||||
|
||||
my $action = $input->param('action');
|
||||
my $biblionumber = $input->param('biblionumber');
|
||||
my @imagenumbers = $input->param('imagenumber');
|
||||
|
||||
# Array to store the reponse JSON
|
||||
my $response = [];
|
||||
|
||||
if ( $action eq "delete" ) {
|
||||
# Build a hash of valid imagenumbers fr the given biblionumber
|
||||
my %valid_imagenumbers = map {$_ => 1} ListImagesForBiblio($biblionumber);
|
||||
|
||||
foreach my $imagenumber ( @imagenumbers ) {
|
||||
if ( exists( $valid_imagenumbers{ $imagenumber } ) ) {
|
||||
DelImage($imagenumber);
|
||||
push @$response, {
|
||||
imagenumber => $imagenumber,
|
||||
deleted => 1
|
||||
};
|
||||
} else {
|
||||
push @$response, {
|
||||
imagenumber => $imagenumber,
|
||||
deleted => 0,
|
||||
error => "MSG_INVALID_IMAGENUMBER"
|
||||
};
|
||||
}
|
||||
}
|
||||
} else {
|
||||
# invalid action
|
||||
exit 0;
|
||||
}
|
||||
|
||||
binmode STDOUT, ":encoding(UTF-8)";
|
||||
print $input->header(
|
||||
-type => 'application/json',
|
||||
-charset => 'UTF-8'
|
||||
);
|
||||
|
||||
print to_json( $response );
|
||||
Loading…
Reference in New Issue