Bug 5253: Add options to runreport.pl

This makes sending reports via e-mail with runreport.pl work properly. It also
adds a --format option to allow the user to select between text, html, csv, and
tsv. At the moment text is not implemented, and falls back to tsv, but that is
still more readable than the HTML that used to be produced.

Signed-off-by: Ian Walls <ian.walls@bywatersolutions.com>
Signed-off-by: Chris Cormack <chrisc@catalyst.net.nz>
This commit is contained in:
Jared Camins-Esakov 2011-03-28 21:16:02 -04:00 committed by Chris Cormack
parent b5a050d759
commit 412966eff0

View file

@ -53,6 +53,14 @@ runreport.pl [ -h | -m ] [ -v ] reportID [ reportID ... ]
-m --man full documentation, same as --help --verbose -m --man full documentation, same as --help --verbose
-v --verbose verbose output -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: Arguments:
reportID report ID Number from saved_sql.id, multiple ID's may be specified 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. 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 =back
=head1 DESCRIPTION =head1 DESCRIPTION
@ -93,17 +121,11 @@ Same as above, but also runs report #17.
=over =over
=item *
Complete testing for Sendmail related options: --email, --to, and --from.
=item * =item *
Allow Saved Results option. Allow Saved Results option.
=item *
Possible --format option for CSV or tab-delimited output.
=back =back
@ -120,18 +142,21 @@ my $help = 0;
my $man = 0; my $man = 0;
my $verbose = 0; my $verbose = 0;
my $email = 0; my $email = 0;
my $format = ""; my $format = "text";
my $to = ""; my $to = "";
my $from = ""; my $from = "";
my $subject = 'Koha Saved Report'; my $subject = 'Koha Saved Report';
my $separator = ',';
my $quote = '"';
GetOptions( GetOptions(
'help|?' => \$help, 'help|?' => \$help,
'man' => \$man, 'man' => \$man,
'verbose' => \$verbose, 'verbose' => \$verbose,
'format' => \$format, 'format=s' => \$format,
'to' => \$to, 'to=s' => \$to,
'from' => \$from, 'from=s' => \$from,
'subject=s' => \$subject,
'email' => \$email, 'email' => \$email,
) or pod2usage(2); ) or pod2usage(2);
pod2usage( -verbose => 2 ) if ($man); pod2usage( -verbose => 2 ) if ($man);
@ -140,8 +165,12 @@ pod2usage(1) if $help;
unless ($format) { unless ($format) {
$verbose and print STDERR "No format specified, assuming 'text'\n"; $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) { if ($to or $from or $email) {
@ -174,13 +203,31 @@ foreach my $report (@ARGV) {
} }
$verbose and print "$count results from execute_query\n"; $verbose and print "$count results from execute_query\n";
my $message;
if ($format eq 'html') {
my $cgi = CGI->new(); my $cgi = CGI->new();
my @rows = (); my @rows = ();
while (my $line = $sth->fetchrow_arrayref) { while (my $line = $sth->fetchrow_arrayref) {
foreach (@$line) { defined($_) or $_ = ''; } # catch undef values, replace w/ '' foreach (@$line) { defined($_) or $_ = ''; } # catch undef values, replace w/ ''
push @rows, $cgi->TR( join('', $cgi->td($line)) ) . "\n"; push @rows, $cgi->TR( join('', $cgi->td($line)) ) . "\n";
} }
my $message = $cgi->table(join "", @rows); $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";
}
}
if ($email){ if ($email){
my %mail = ( my %mail = (