use Mail::Sendmail;
use Text::CSV_XS;
use CGI;
+use Carp;
use vars qw($VERSION);
-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
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
=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
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);
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) {
($verbose) and print scalar(@ARGV), " argument(s) after options: " . join(" ", @ARGV) . "\n";
-foreach my $report (@ARGV) {
- my ($sql, $type) = get_saved_report($report);
- unless ($sql) {
- warn "ERROR: No saved report $report found";
+foreach my $report_id (@ARGV) {
+ my $report = get_saved_report($report_id);
+ unless ($report) {
+ warn "ERROR: No saved report $report_id found";
next;
}
+ my $sql => $report->{savedsql};
+ my $report_name => $report->{report_name};
+ my $type => $report->{type};
+
$verbose and print "SQL: $sql\n\n";
- # my $results = execute_query($sql, undef, 0, 99999, $format, $report);
+ if (defined($report_name) and $report_name ne "")
+ {
+ $subject = $report_name ;
+ }
+ else
+ {
+ $subject = 'Koha Saved Report';
+ }
+ # my $results = execute_query($sql, undef, 0, 99999, $format, $report_id);
my ($sth) = execute_query($sql);
# execute_query(sql, , 0, 20, , )
my $count = scalar($sth->rows);
}
$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 = (
Subject => $subject,
Message => $message
);
- sendmail(%mail) or warn "mail not sent";
+ sendmail(%mail) or carp 'mail not sent:' . $Mail::Sendmail::error;
} else {
print $message;
}