[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