From 7f53483046057a8f7a032d8391e19ed5c4098096 Mon Sep 17 00:00:00 2001
From: Kyle M Hall <kyle@bywatersolutions.com>
Date: Fri, 18 Dec 2020 08:45:06 -0500
Subject: [PATCH] Bug 27265: Enable message queue cron to accept multiple codes
and types
It would be nice to be able to combine several types in a single run,
but exclude others, without having to have multiple cron lines
Test Plan:
1) Apply this patch
2) Run process_message_queue.pl with a single -c parameter
3) Note behavior is unchanged
4) Run process_message_queue.pl with multiple -c parameters
5) Note all the codes specified are processed
6) Repeat 2-5 with -t for type limits
---
C4/Letters.pm | 18 ++++++++++++++----
misc/cronjobs/process_message_queue.pl | 20 ++++++++++----------
2 files changed, 24 insertions(+), 14 deletions(-)
diff --git a/C4/Letters.pm b/C4/Letters.pm
index c36553ac9a..5d0fdbdae1 100644
--- a/C4/Letters.pm
+++ b/C4/Letters.pm
@@ -1273,8 +1273,10 @@ sub _add_attachments {
This function's parameter hash reference takes the following
optional named parameters:
message_transport_type: method of message sending (e.g. email, sms, etc.)
+ Can be a single string, or an arrayref of strings
borrowernumber : who the message is to be sent
letter_code : type of message being sent (e.g. PASSWORD_RESET)
+ Can be a single string, or an arrayref of strings
message_id : the message_id of the message. In that case the sub will return only 1 result
limit : maximum number of messages to send
@@ -1305,12 +1307,20 @@ sub _get_unsent_messages {
push @query_params, $params->{'borrowernumber'};
}
if ( $params->{'letter_code'} ) {
- $statement .= ' AND mq.letter_code = ? ';
- push @query_params, $params->{'letter_code'};
+ my @letter_codes = ref $params->{'letter_code'} eq "ARRAY" ? @{$params->{'letter_code'}} : $params->{'letter_code'};
+ if ( @letter_codes ) {
+ my $q = join( ",", ("?") x @letter_codes );
+ $statement .= " AND mq.letter_code IN ( $q ) ";
+ push @query_params, @letter_codes;
+ }
}
if ( $params->{'type'} ) {
- $statement .= ' AND message_transport_type = ? ';
- push @query_params, $params->{'type'};
+ my @types = ref $params->{'type'} eq "ARRAY" ? @{$params->{'type'}} : $params->{'type'};
+ if ( @types ) {
+ my $q = join( ",", ("?") x @types );
+ $statement .= " AND message_transport_type IN ( $q ) ";
+ push @query_params, @types;
+ }
}
if ( $params->{message_id} ) {
$statement .= ' AND message_id = ?';
diff --git a/misc/cronjobs/process_message_queue.pl b/misc/cronjobs/process_message_queue.pl
index d8918be607..5f0ceb8d71 100755
--- a/misc/cronjobs/process_message_queue.pl
+++ b/misc/cronjobs/process_message_queue.pl
@@ -32,8 +32,8 @@ my $limit = undef;
my $method = 'LOGIN';
my $help = 0;
my $verbose = 0;
-my $type = q{};
-my $letter_code;
+my @type;
+my @letter_code;
GetOptions(
'u|username:s' => \$username,
@@ -42,8 +42,8 @@ GetOptions(
'm|method:s' => \$method,
'h|help|?' => \$help,
'v|verbose' => \$verbose,
- 't|type:s' => \$type,
- 'c|code:s' => \$letter_code,
+ 't|type:s' => \@type,
+ 'c|code:s' => \@letter_code,
);
my $usage = << 'ENDUSAGE';
@@ -56,8 +56,8 @@ advance_notices.pl script.
This script has the following parameters :
-u --username: username of mail account
-p --password: password of mail account
- -t --type: If supplied, only processes this type of message ( email, sms )
- -c --code: If supplied, only processes messages with this letter code
+ -t --type: If supplied, only processes this type of message ( email, sms ), repeatable
+ -c --code: If supplied, only processes messages with this letter code, repeatable
-l --limit: The maximum number of messages to process for this run
-m --method: authentication method required by SMTP server (See perldoc Sendmail.pm for supported authentication types.)
-h --help: this message
@@ -80,8 +80,8 @@ if ( C4::Context->config("enable_plugins") ) {
{
verbose => $verbose,
limit => $limit,
- type => $type,
- letter_code => $letter_code,
+ type => \@type,
+ letter_code => @letter_code,
}
);
}
@@ -99,8 +99,8 @@ C4::Letters::SendQueuedMessages(
password => $password,
method => $method,
limit => $limit,
- type => $type,
- letter_code => $letter_code,
+ type => \@type,
+ letter_code => \@letter_code,
}
);
--
2.20.1