From ecbe9d96a105b144426939fb5eaf018337fbd50a Mon Sep 17 00:00:00 2001 From: Jonathan Druart Date: Thu, 23 Jan 2014 13:12:30 +0100 Subject: [PATCH] Bug 11678: Gather print notices: add --email parameter This patch add the ability to send generated files by email. You can specify several emails. Test plan: - same as Bug 11603 - call the script misc/cronjobs/gather_print_notices.pl with the following parameters: perl misc/cronjobs/gather_print_notices.pl /tmp/test --csv --ods --html --letter_code=CHECKIN -d=: --email="email_one@example.org" --email="email_two@example.org" Signed-off-by: Frederic Demians - Works as desribed. Rebased upon bug-11603. --- misc/cronjobs/gather_print_notices.pl | 69 ++++++++++++++++++++++++++++++++++- 1 file changed, 68 insertions(+), 1 deletion(-) diff --git a/misc/cronjobs/gather_print_notices.pl b/misc/cronjobs/gather_print_notices.pl index 30aec0c..24d9bd0 100755 --- a/misc/cronjobs/gather_print_notices.pl +++ b/misc/cronjobs/gather_print_notices.pl @@ -20,6 +20,7 @@ use Pod::Usage; use Getopt::Long; use File::Basename qw( dirname ); use Koha::DateUtils; +use MIME::Lite; my ( $stylesheet, @@ -31,6 +32,7 @@ my ( $delimiter, @letter_codes, $send, + @emails, ); $send = 1; @@ -43,6 +45,7 @@ GetOptions( 'd|delimiter:s' => \$delimiter, 'letter_code:s' => \@letter_codes, 'send!' => \$send, + 'e|email:s' => \@emails, ) || pod2usage(1); pod2usage(0) if $help; @@ -88,6 +91,7 @@ my @all_messages = @{ GetPrintMessages() }; exit unless @all_messages; my ( $html_filenames, $csv_filenames, $ods_filenames ); + $csv_filenames = print_notices({ messages => \@all_messages, split => $split, @@ -119,6 +123,22 @@ if ( $html ) { }); } +if ( @emails ) { + my $files = { + html => $html_filenames, + csv => $csv_filenames, + ods => $ods_filenames, + }; + for my $email ( @emails ) { + send_files({ + directory => $output_directory, + files => $files, + to => $email, + from => C4::Context->preference('KohaAdminEmailAddress'), # Should be replaced if bug 8000 is pushed + }); + } +} + sub print_notices { my ( $params ) = @_; @@ -276,13 +296,56 @@ sub generate_ods { $doc->save(); } +sub send_files { + my ( $params ) = @_; + my $directory = $params->{directory}; + my $files = $params->{files}; + my $to = $params->{to}; + my $from = $params->{from}; + return unless $to and $from; + + my $mail = MIME::Lite->new( + From => $from, + To => $to, + Subject => 'Print notices for ' . $today->output(), + Type => 'multipart/mixed', + ); + + while ( my ( $type, $filenames ) = each %$files ) { + for my $filename ( @$filenames ) { + my $mimetype = $type eq 'html' + ? 'text/html' + : $type eq 'csv' + ? 'text/csv' + : $type eq 'ods' + ? 'application/vnd.oasis.opendocument.spreadsheet' + : undef; + + next unless $mimetype; + + my $filepath = File::Spec->catdir( $directory, $filename ); + + next unless $filepath or -f $filepath; + + $mail->attach( + Type => $mimetype, + Path => $filepath, + Filename => $filename, + Encoding => 'base64', + ); + } + } + + $mail->send; +} + =head1 NAME gather_print_notices - Print waiting print notices =head1 SYNOPSIS -gather_print_notices output_directory [-s|--split] [--html] [--csv] [--ods] [--letter_code=LETTER_CODE] [-h|--help] +gather_print_notices output_directory [-s|--split] [--html] [--csv] [--ods] [--letter_code=LETTER_CODE] [-e|--email=your_email@example.org] [-h|--help] Will print all waiting print notices to the output_directory. @@ -333,6 +396,10 @@ This is the same as the csv parameter but using csv2odf to generate an ods file Filter print messages by letter_code. Several letter_code parameters can be given. +=item B<-e|--email> + +E-mail address to send generated files. + =item B<-h|--help> Print a brief help message -- 2.3.5