Merge remote branch 'kc/master' into new/enh/bug_5917
[koha_gimpoz] / misc / cronjobs / runreport.pl
index d4f5567..6a8cce7 100755 (executable)
@@ -53,6 +53,14 @@ runreport.pl [ -h | -m ] [ -v ] reportID [ reportID ... ]
    -m --man        full documentation, same as --help --verbose
    -v --verbose    verbose output
 
+   --format=s      selects format. Choice of text, html, csv, or tsv
+
+   -e --email      whether to use e-mail (implied by --to or --from)
+   --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
+
+
  Arguments:
    reportID        report ID Number from saved_sql.id, multiple ID's may be specified
 
@@ -72,6 +80,26 @@ Prints the manual page and exits.
 
 Verbose. Without this flag set, only fatal errors are reported.
 
+=item B<-format>
+
+Current options are text, html, csv, and tsv. At the moment, text and tsv both produce tab-separated tab-separated output.
+
+=item B<-email>
+
+Whether to use e-mail (implied by --to or --from).
+
+=item B<-to>
+
+E-mail address to send report to. Defaults to KohaAdminEmailAddress.
+
+=item B<-from>
+
+E-mail address to send report from. Defaults to KohaAdminEmailAddress.
+
+=item B<-subject>
+
+Subject for the e-mail message. Defaults to "Koha Saved Report"
+
 =back
 
 =head1 DESCRIPTION
@@ -93,17 +121,11 @@ Same as above, but also runs report #17.
 
 =over
 
-=item * 
-
-Complete testing for Sendmail related options: --email, --to, and --from.
 
 =item *
 
 Allow Saved Results option.
 
-=item *
-
-Possible --format option for CSV or tab-delimited output.
 
 =back
 
@@ -120,18 +142,21 @@ my $help    = 0;
 my $man     = 0;
 my $verbose = 0;
 my $email   = 0;
-my $format  = "";
+my $format  = "text";
 my $to      = "";
 my $from    = "";
 my $subject = 'Koha Saved Report';
+my $separator = ',';
+my $quote = '"';
 
 GetOptions(
     'help|?'     => \$help,
     'man'        => \$man,
     'verbose'    => \$verbose,
-    'format'     => \$format,
-    'to'         => \$to,
-    'from'       => \$from,
+    'format=s'   => \$format,
+    'to=s'       => \$to,
+    'from=s'     => \$from,
+    'subject=s'  => \$subject,
     'email'      => \$email,
 ) or pod2usage(2);
 pod2usage( -verbose => 2 ) if ($man);
@@ -140,8 +165,12 @@ pod2usage(1) if $help;
 
 unless ($format) {
     $verbose and print STDERR "No format specified, assuming 'text'\n";
-    $format = '';
-    # $format = 'text';
+    $format = 'text';
+}
+
+if ($format eq 'tsv' || $format eq 'text') {
+    $format = 'csv';
+    $separator = "\t";
 }
 
 if ($to or $from or $email) {
@@ -174,13 +203,31 @@ foreach my $report (@ARGV) {
     }
     $verbose and print "$count results from execute_query\n";
 
-    my $cgi = CGI->new();
-    my @rows = ();
-    while (my $line = $sth->fetchrow_arrayref) {
-        foreach (@$line) { defined($_) or $_ = ''; }    # catch undef values, replace w/ ''
-        push @rows, $cgi->TR( join('', $cgi->td($line)) ) . "\n";
+    my $message;
+    if ($format eq 'html') {
+        my $cgi = CGI->new();
+        my @rows = ();
+        while (my $line = $sth->fetchrow_arrayref) {
+            foreach (@$line) { defined($_) or $_ = ''; }    # catch undef values, replace w/ ''
+            push @rows, $cgi->TR( join('', $cgi->td($line)) ) . "\n";
+        }
+        $message = $cgi->table(join "", @rows);
+    } elsif ($format eq 'csv') {
+        my $csv = Text::CSV_XS->new({
+            quote_char  => $quote,
+            sep_char    => $separator,
+            });
+        while (my $line = $sth->fetchrow_arrayref) {
+            $csv->combine(@$line);
+#            foreach (@$line) {
+#                defined($_) or $_ = '';
+#                $_ =~ s/$quote/\\$quote/g;
+#                $_ = "$quote$_$quote";
+#            }    # catch undef values, replace w/ ''
+#            $message .= join ($separator, @$line) . "\n";
+            $message .= $csv->string() . "\n";
+        }
     }
-    my $message = $cgi->table(join "", @rows);
 
     if ($email){
         my %mail = (