[Koha-patches] [PATCH] Bug 7813: Ability to delete local cover images
Tomas Cohen Arazi
tomascohen at gmail.com
Mon Sep 2 20:19:25 CEST 2013
This patch adds the ability to delete local cover images from the detail page. It adds a '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.
Any comments are welcome, this is WIP.
Thanks
To+
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
---
.../intranet-tmpl/prog/en/css/staff-global.css | 4 +
.../prog/en/modules/catalogue/detail.tt | 46 ++++++++++--
svc/cover_images | 78 ++++++++++++++++++++
3 files changed, 121 insertions(+), 7 deletions(-)
create mode 100755 svc/cover_images
diff --git a/koha-tmpl/intranet-tmpl/prog/en/css/staff-global.css b/koha-tmpl/intranet-tmpl/prog/en/css/staff-global.css
index 9d4446c..308e3a0 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/css/staff-global.css
+++ b/koha-tmpl/intranet-tmpl/prog/en/css/staff-global.css
@@ -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);
diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tt
index 1011224..117a232 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tt
+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tt
@@ -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 %]
@@ -693,15 +718,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>
diff --git a/svc/cover_images b/svc/cover_images
new file mode 100755
index 0000000..c644e1a
--- /dev/null
+++ b/svc/cover_images
@@ -0,0 +1,78 @@
+#!/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 );
+
--
1.7.9.5
More information about the Koha-patches
mailing list