Bug 16219: Add 'params' parameter to runreport.pl
authorNick Clemens <nick@bywatersolutions.com>
Wed, 5 Sep 2018 11:15:01 +0000 (11:15 +0000)
committerMartin Renvoize <martin.renvoize@ptfs-europe.com>
Tue, 13 Aug 2019 10:54:54 +0000 (11:54 +0100)
To test:
 1 - Apply patch
 2 - Write a report that takes no variables
 3 - Run this using runreport.pl
    perl misc/cronjobs/runreport.pl 1
 4 - Confirm results as expected
 5 - Write a report that takes one or more variables
 6 - Run using runreport.pl, but pass no params
 7 - You should get a SQL error
 8 - Now run passing the correct number of params
    perl misc/cronjobs/runreport.pl --param first --param=2nd 2
 9 - Verify results as expected
10 - call runreport with no parameters
    perl misc/cronjobs/runreport.pl
11 - Verify documentation is correct and helpful

Signed-off-by: Claire Gravely <claire.gravely@bsz-bw.de>
Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>

misc/cronjobs/runreport.pl

index b62639b..869ede8 100755 (executable)
@@ -67,6 +67,7 @@ runreport.pl [ -h | -m ] [ -v ] reportID [ reportID ... ]
    --to=s          e-mail address to send report to
    --from=s        e-mail address to send report from
    --subject=s     subject for the e-mail
+   --params=s      parameters for the report
    --store-results store the result of the report
    --csv-header    add column names as first line of csv output
 
@@ -122,6 +123,10 @@ E-mail address to send report from. Defaults to KohaAdminEmailAddress.
 
 Subject for the e-mail message. Defaults to "Koha Saved Report"
 
+=item B<--params>
+
+Repeatable, should provide one param per param requested for the report
+
 =item B<--store-results>
 
 Store the result of the report into the saved_reports DB table.
@@ -175,6 +180,7 @@ my $format  = "text";
 my $to      = "";
 my $from    = "";
 my $subject = "";
+my @params = ();
 my $separator = ',';
 my $quote = '"';
 my $store_results = 0;
@@ -192,6 +198,7 @@ GetOptions(
     'to=s'              => \$to,
     'from=s'            => \$from,
     'subject=s'         => \$subject,
+    'param=s'           => \@params,
     'email'             => \$email,
     'a|attachment'      => \$attachment,
     'username:s'        => \$username,
@@ -254,7 +261,11 @@ foreach my $report_id (@ARGV) {
             $subject = 'Koha Saved Report';
         }
     }
-    my ($sth) = execute_query( $sql, undef, undef, undef, $report_id );
+
+    # convert SQL parameters to placeholders
+    $sql =~ s/(<<.*?>>)/\?/g;
+
+    my ($sth) = execute_query( $sql, undef, undef, \@params, $report_id );
     my $count = scalar($sth->rows);
     unless ($count) {
         print "NO OUTPUT: 0 results from execute_query\n";