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

Signed-off-by: Andrew Fuerste-Henry <andrewfh@dubcolib.org>

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
This commit is contained in:
Kyle Hall 2020-12-18 08:45:06 -05:00 committed by Tomas Cohen Arazi
parent 43ecb3c86c
commit da7bcc2252
Signed by: tomascohen
GPG key ID: 0A272EA1B2F3C15F
2 changed files with 24 additions and 14 deletions

View file

@ -1232,8 +1232,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
@ -1264,12 +1266,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 = ?';

View file

@ -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;
my $command_line_options = join(" ",@ARGV);
@ -44,8 +44,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';
@ -58,8 +58,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
@ -95,8 +95,8 @@ if ( C4::Context->config("enable_plugins") ) {
{
verbose => $verbose,
limit => $limit,
type => $type,
letter_code => $letter_code,
type => \@type,
letter_code => @letter_code,
}
);
}
@ -114,8 +114,8 @@ C4::Letters::SendQueuedMessages(
password => $password,
method => $method,
limit => $limit,
type => $type,
letter_code => $letter_code,
type => \@type,
letter_code => \@letter_code,
}
);