From 81cf363a1202e09b8fc77ad715bf9ceb560f107d Mon Sep 17 00:00:00 2001 From: Blou Date: Thu, 6 Mar 2014 15:16:09 -0500 Subject: [PATCH] Bug 8000 - Override emails of every message sent from Koha For testing purposes, we do not want emails sent to (legitimate) users. And sometime we also like to actually see what would be generated for the users. This preference will allow to override every message sent by koha with a new (temporary) To address. Leave it empty for normal usage. C4/Letters.pm installer/data/mysql/sysprefs.sql installer/data/mysql/updatedatabase.pl koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/admin.pref TESTING: 0) Run updatedatabase.pl 1) Enter a valid address for new preference SendAllEmailsTo, something that will be easily identified as NOT the normal destination for the Koha emails. 2) Have koha generate an email to a user. Or any other mean prefered that cause Koha to send email. 3) Validate that the email is NOT sent to the user. 4) Validate that the email IS sent to the overriding address. 5) Clean the preference 6) Redo the test, validate that the email is going to the right address. PS Not sure if those steps are precise enough. Here's one way: a) set AutoEmailOpacUser to true b) create a new user, with an email address c) Normally, a confirmation email is sent to the user. Validate that it goes to the SendAllEmailsTo one. --- C4/Letters.pm | 27 ++++++++++++++++++---- basket/sendbasket.pl | 2 ++ installer/data/mysql/sysprefs.sql | 1 + installer/data/mysql/updatedatabase.pl | 1 + .../prog/en/modules/admin/preferences/admin.pref | 5 ++++ misc/cronjobs/runreport.pl | 2 ++ opac/opac-sendbasket.pl | 2 ++ opac/opac-sendshelf.pl | 2 ++ virtualshelves/sendshelf.pl | 2 ++ 9 files changed, 40 insertions(+), 4 deletions(-) diff --git a/C4/Letters.pm b/C4/Letters.pm index e5c15ba..4a1142c 100644 --- a/C4/Letters.pm +++ b/C4/Letters.pm @@ -414,7 +414,11 @@ sub SendAlerts { my $alerts = getalert( '', 'issue', $subscriptionid ); foreach (@$alerts) { my $borinfo = C4::Members::GetMember('borrowernumber' => $_->{'borrowernumber'}); - my $email = $borinfo->{email} or next; + my $sendAllEmailsTo = C4::Context->preference('SendAllEmailsTo'); + my $email = $sendAllEmailsTo; + if (!($sendAllEmailsTo && $sendAllEmailsTo =~ /@/) ){ # some validation. This could be improved. + $email = $borinfo->{email} or next; + } # warn "sending issues..."; my $userenv = C4::Context->userenv; @@ -528,10 +532,20 @@ sub SendAlerts { # Remove the order tag $letter->{content} =~ s/(.*?)<\/order>/$1/gxms; + # SendAllEmailsTo system preference to override for testing + my $emailsTo = join( ',', @email); + my $emailsCC = join( ',', @cc); + my $sendAllEmailsTo = C4::Context->preference('SendAllEmailsTo'); + # some validation. This could be improved. + if ($sendAllEmailsTo && $sendAllEmailsTo =~ /@/ ) { + $emailsTo = $sendAllEmailsTo; + $emailsCC = ''; + } + # ... then send mail my %mail = ( - To => join( ',', @email), - Cc => join( ',', @cc), + To => $emailsTo, + Cc => $emailsCC, From => $userenv->{emailaddress}, Subject => Encode::encode( "UTF-8", "" . $letter->{title} ), Message => $letter->{'is_html'} @@ -583,9 +597,12 @@ sub SendAlerts { ) or return; return { error => "no_email" } unless $externalid->{'emailaddr'}; my $email = Koha::Email->new(); + my $emailaddr = $externalid->{'emailaddr'}; + my $sendAllEmailsTo = C4::Context->preference('SendAllEmailsTo'); + $emailaddr = $sendAllEmailsTo if ($sendAllEmailsTo && $sendAllEmailsTo =~ /@/ ); # some validation. This could be improved. my %mail = $email->create_message_headers( { - to => $externalid->{'emailaddr'}, + to => $emailaddr, from => $branchdetails->{'branchemail'}, replyto => $branchdetails->{'branchreplyto'}, sender => $branchdetails->{'branchreturnpath'}, @@ -1171,6 +1188,8 @@ sub _send_message_by_email { my $member = C4::Members::GetMember( 'borrowernumber' => $message->{'borrowernumber'} ); my $to_address = $message->{'to_address'}; + my $sendAllEmailsTo = C4::Context->preference('SendAllEmailsTo'); + $to_address = $sendAllEmailsTo if ($sendAllEmailsTo && $sendAllEmailsTo =~ /@/ ); # some validation. This could be improved. unless ($to_address) { unless ($member) { warn "FAIL: No 'to_address' and INVALID borrowernumber ($message->{borrowernumber})"; diff --git a/basket/sendbasket.pl b/basket/sendbasket.pl index 83dab55..7f6c697 100755 --- a/basket/sendbasket.pl +++ b/basket/sendbasket.pl @@ -45,7 +45,9 @@ my ( $template, $borrowernumber, $cookie ) = get_template_and_user ( ); my $bib_list = $query->param('bib_list'); +my $sendAllEmailsTo = C4::Context->preference('SendAllEmailsTo'); my $email_add = $query->param('email_add'); +$email_add = $sendAllEmailsTo if ($sendAllEmailsTo && $sendAllEmailsTo =~ /@/ ); # some validation. This could be improved. my $dbh = C4::Context->dbh; diff --git a/installer/data/mysql/sysprefs.sql b/installer/data/mysql/sysprefs.sql index aa53139..2e505d1 100644 --- a/installer/data/mysql/sysprefs.sql +++ b/installer/data/mysql/sysprefs.sql @@ -410,6 +410,7 @@ INSERT INTO systempreferences ( `variable`, `value`, `options`, `explanation`, ` ('SelfCheckHelpMessage','','70|10','Enter HTML to include under the basic Web-based Self Checkout instructions on the Help page','Textarea'), ('SelfCheckReceiptPrompt','1','NULL','If ON, print receipt dialog pops up when self checkout is finished','YesNo'), ('SelfCheckTimeout','120','','Define the number of seconds before the Web-based Self Checkout times out a patron','Integer'), +('SendAllEmailsTo','',NULL,'This email will replace the To address in every message sent by the system. This is meant to help testing only.','Textarea'), ('SeparateHoldings','0',NULL,'Separate current branch holdings from other holdings','YesNo'), ('SeparateHoldingsBranch','homebranch','homebranch|holdingbranch','Branch used to separate holdings','Choice'), ('SessionRestrictionByIP','1','Check for change in remote IP address for session security. Disable only when remote IP address changes frequently.','','YesNo'), diff --git a/installer/data/mysql/updatedatabase.pl b/installer/data/mysql/updatedatabase.pl index 6ed1223..db20db7 100755 --- a/installer/data/mysql/updatedatabase.pl +++ b/installer/data/mysql/updatedatabase.pl @@ -11686,6 +11686,7 @@ foreach my $file ( sort readdir $dirh ) { } } + =head1 FUNCTIONS =head2 TableExists($table) diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/admin.pref b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/admin.pref index 0f3b66c..73e83a4 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/admin.pref +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/admin.pref @@ -71,6 +71,11 @@ Administration: yes: "logged in library's" no: "all libraries" - rules by default. + - + - Redirect all emails from Koha to + - pref: SendAllEmailsTo + class: email + - instead of their intended user. Login options: - - Automatically log out users after diff --git a/misc/cronjobs/runreport.pl b/misc/cronjobs/runreport.pl index ddfb6ee..2c1ab87 100755 --- a/misc/cronjobs/runreport.pl +++ b/misc/cronjobs/runreport.pl @@ -211,6 +211,8 @@ if ($to or $from or $email) { $from or $from = C4::Context->preference('KohaAdminEmailAddress'); $to or $to = C4::Context->preference('KohaAdminEmailAddress'); } +my $sendAllEmailsTo = C4::Context->preference('SendAllEmailsTo'); +$to = $sendAllEmailsTo if ($sendAllEmailsTo && $sendAllEmailsTo =~ /@/ ); # some validation. This could be improved. unless (scalar(@ARGV)) { print STDERR "ERROR: No reportID(s) specified\n"; diff --git a/opac/opac-sendbasket.pl b/opac/opac-sendbasket.pl index 6b2d62f..dc54525 100755 --- a/opac/opac-sendbasket.pl +++ b/opac/opac-sendbasket.pl @@ -47,7 +47,9 @@ my ( $template, $borrowernumber, $cookie ) = get_template_and_user ( ); my $bib_list = $query->param('bib_list'); +my $sendAllEmailsTo = C4::Context->preference('SendAllEmailsTo'); my $email_add = $query->param('email_add'); +$email_add = $sendAllEmailsTo if ($sendAllEmailsTo && $sendAllEmailsTo =~ /@/ ); # some validation. This could be improved. my $dbh = C4::Context->dbh; diff --git a/opac/opac-sendshelf.pl b/opac/opac-sendshelf.pl index 8d39c93..cc2a3b9 100755 --- a/opac/opac-sendshelf.pl +++ b/opac/opac-sendshelf.pl @@ -47,7 +47,9 @@ my ( $template, $borrowernumber, $cookie ) = get_template_and_user ( ); my $shelfid = $query->param('shelfid'); +my $sendAllEmailsTo = C4::Context->preference('SendAllEmailsTo'); my $email = $query->param('email'); +$email = $sendAllEmailsTo if ($sendAllEmailsTo && $sendAllEmailsTo =~ /@/ ); # some validation. This could be improved. my $dbh = C4::Context->dbh; diff --git a/virtualshelves/sendshelf.pl b/virtualshelves/sendshelf.pl index cb46ce2..8416fbe 100755 --- a/virtualshelves/sendshelf.pl +++ b/virtualshelves/sendshelf.pl @@ -47,7 +47,9 @@ my ( $template, $borrowernumber, $cookie ) = get_template_and_user( ); my $shelfid = $query->param('shelfid'); +my $sendAllEmailsTo = C4::Context->preference('SendAllEmailsTo'); my $email = $query->param('email'); +$email = $sendAllEmailsTo if ($sendAllEmailsTo && $sendAllEmailsTo =~ /@/ ); # some validation. This could be improved. my $dbh = C4::Context->dbh; -- 1.9.1