From 35fcc9f481bcb9bb549abacc077a2c6ad07d8fe0 Mon Sep 17 00:00:00 2001
From: Owen Leonard <oleonard@myacpl.org>
Date: Wed, 3 Jul 2013 10:05:55 -0400
Subject: [PATCH] [SIGNED-OFF] Bug 3134 - Ability to selelct multiple reports
 to delete at once
Content-Type: text/plain; charset="utf-8"

This patch adds the option to select multiple saved reports for
deletion.

To test you must have two or more saved reports to delete. Deletion
should work properly when:

- Selecting one report for deletion by checking the box.
- Selecting more than one report for deletion by checking boxes.
- Clicking the old "Delete" link

Clicking the delete button should prompt you to confirm. Clicking cancel
should cancel.

Clicking the delete button when no boxes are checked should trigger an
alert asking you to select reports for deletion.

Signed-off-by: Liz Rea <wizzyrea@gmail.com>
Functional tests pass, template tests pass.
---
 C4/Reports/Guided.pm                               |   14 +++++++-------
 .../en/modules/reports/guided_reports_start.tt     |   19 +++++++++++++++++--
 reports/guided_reports.pl                          |   11 +++++++++--
 3 files changed, 33 insertions(+), 11 deletions(-)

diff --git a/C4/Reports/Guided.pm b/C4/Reports/Guided.pm
index f0db7a3..9447c71 100644
--- a/C4/Reports/Guided.pm
+++ b/C4/Reports/Guided.pm
@@ -609,13 +609,13 @@ sub format_results {
 }	
 
 sub delete_report {
-    my ($id)  = @_;
-    my $dbh   = C4::Context->dbh();
-    my $query = "DELETE FROM saved_sql WHERE id = ?";
-    my $sth   = $dbh->prepare($query);
-    $sth->execute($id);
-}	
-
+    my (@ids) = @_;
+        my $dbh = C4::Context->dbh;
+        my $query = 'DELETE FROM saved_sql WHERE id IN (' . join( ',', ('?') x @ids ) . ')';
+        my $sth = $dbh->prepare($query);
+        $sth->execute(@ids);
+        $sth->finish;
+}
 
 my $SAVED_REPORTS_BASE_QRY = <<EOQ;
 SELECT s.*, r.report, r.date_run, $AREA_NAME_SQL_SNIPPET, av_g.lib AS groupname, av_sg.lib AS subgroupname,
diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/reports/guided_reports_start.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/reports/guided_reports_start.tt
index 0138086..9f35e08 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/reports/guided_reports_start.tt
+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/reports/guided_reports_start.tt
@@ -122,6 +122,15 @@ $(document).ready(function(){
             rtable.fnSetColumnVis(4, true);
         }
     });
+
+    $("#reports_form").submit(function(){
+        var checkedItems = $("input[name=ids]:checked");
+        if ($(checkedItems).size() == 0) {
+            alert(_("You must select one or more reports to delete"));
+            return false;
+        }
+        return confirm(_("Are you sure you want to delete the selected reports?"));
+    });
 [% END %]
 
 [% IF ( showsql ) %]
@@ -132,7 +141,7 @@ $(document).ready(function(){
 [% IF ( saved1 ) %]
     $(".confirmdelete").click(function(){
         $(this).parents('tr').attr("class","warn");
-        if(confirm("Are you sure you want to "+$(this).attr("title")+"?")){
+        if(confirm(_("Are you sure you want to delete this saved report?"))){
             return true;
         } else {
             $(this).parents('tr').attr("class","");
@@ -273,6 +282,8 @@ canned reports and writing custom SQL reports.</p>
                 <option value="">All</option>
             </select>
         </div>
+<form action="/cgi-bin/koha/reports/guided_reports.pl" id="reports_form" method="post">
+<input type="hidden" name="phase" value="Delete Multiple" />
         <table id="table_reports">
             <thead>
                 <tr>
@@ -293,7 +304,7 @@ canned reports and writing custom SQL reports.</p>
             <tbody>
                 [% FOREACH savedreport IN savedreports %]
                     [% UNLESS ( loop.odd ) %]<tr class="odd">[% ELSE %]<tr>[% END %]
-                        <td>[% savedreport.id %]</td>
+                        <td><label>[% savedreport.id %] <input type="checkbox" name="ids" value="[% savedreport.id %]" /></label></td>
                         <td>
                             [% IF ( savedreport.report_name ) %]
                                 [% savedreport.report_name %]
@@ -338,6 +349,10 @@ canned reports and writing custom SQL reports.</p>
                 [% END %]
             </tbody>
         </table>
+        <fieldset class="action">
+            <input type="submit" value="Delete selected" />
+        </fieldset>
+    </form>
     </div>
 </div>
 [% ELSE %]<div class="dialog message">
diff --git a/reports/guided_reports.pl b/reports/guided_reports.pl
index 929feea..b9c49ad 100755
--- a/reports/guided_reports.pl
+++ b/reports/guided_reports.pl
@@ -108,11 +108,18 @@ elsif ( $phase eq 'Build new' ) {
     );
 }
 
+elsif ( $phase eq 'Delete Multiple') {
+    my @ids = $input->param('ids');
+    delete_report( @ids );
+    print $input->redirect("/cgi-bin/koha/reports/guided_reports.pl?phase=Use%20saved");
+    exit;
+}
+
 elsif ( $phase eq 'Delete Saved') {
 	
 	# delete a report from the saved reports list
-	my $id = $input->param('reports');
-	delete_report($id);
+    my $ids = $input->param('reports');
+    delete_report($ids);
     print $input->redirect("/cgi-bin/koha/reports/guided_reports.pl?phase=Use%20saved");
 	exit;
 }		
-- 
1.7.9.5