Bug 19955: Add ability to process only one 'type' of message ( sms, email, etc )...
authorKyle M Hall <kyle@bywatetsolutions.com>
Thu, 11 Jan 2018 18:00:31 +0000 (13:00 -0500)
committerJonathan Druart <jonathan.druart@bugs.koha-community.org>
Mon, 26 Mar 2018 20:31:16 +0000 (17:31 -0300)
It would be nice to allow emails to be sent overnight, but limit the sending of SMS messages to hours when people are awake. Adding a type limit to process_message_queue.pl would allow this to be accomplished easily.

Signed-off-by: Charles Farmer <charles.farmer@inLibro.com>
Signed-off-by: Tomas Cohen Arazi <tomascohen@gmail.com>
Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
C4/Letters.pm
misc/cronjobs/process_message_queue.pl
t/db_dependent/Letters.t

index b76338e..0b04354 100644 (file)
@@ -1030,7 +1030,8 @@ ENDSQL
         letter_code => $letter_code,
         borrowernumber => $who_letter_is_for,
         limit => 50,
-        verbose => 1
+        verbose => 1,
+        type => 'sms',
     });
 
 Sends all of the 'pending' items in the message queue, unless
@@ -1054,6 +1055,7 @@ sub SendQueuedMessages {
         'limit'          => $params->{'limit'} // 0,
         'borrowernumber' => $params->{'borrowernumber'} // q{},
         'letter_code'    => $params->{'letter_code'} // q{},
+        'type'           => $params->{'type'} // q{},
     };
     my $unsent_messages = _get_unsent_messages( $which_unsent_messages );
     MESSAGE: foreach my $message ( @$unsent_messages ) {
@@ -1324,6 +1326,10 @@ sub _get_unsent_messages {
             $statement .= ' AND mq.letter_code = ? ';
             push @query_params, $params->{'letter_code'};
         }
+        if ( $params->{'type'} ) {
+            $statement .= ' AND message_transport_type = ? ';
+            push @query_params, $params->{'type'};
+        }
         if ( $params->{'limit'} ) {
             $statement .= ' limit ? ';
             push @query_params, $params->{'limit'};
index adb11bd..93f5c35 100755 (executable)
@@ -35,6 +35,7 @@ my $limit    = undef;
 my $method = 'LOGIN';
 my $help = 0;
 my $verbose = 0;
+my $type = q{};
 
 GetOptions(
     'u|username:s'      => \$username,
@@ -43,6 +44,7 @@ GetOptions(
     'm|method:s'        => \$method,
     'h|help|?'          => \$help,
     'v|verbose'         => \$verbose,
+    't|type'            => \$type,
 );
 my $usage = << 'ENDUSAGE';
 
@@ -55,11 +57,11 @@ 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 )
     -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
     -v --verbose: provides verbose output to STDOUT
-
 ENDUSAGE
 
 die $usage if $help;
@@ -73,6 +75,7 @@ C4::Letters::SendQueuedMessages(
         password => $password,
         method   => $method,
         limit    => $limit,
+        type     => $type,
     }
 );
 
index 4625ca2..195f3b2 100644 (file)
@@ -18,7 +18,7 @@
 # along with Koha; if not, see <http://www.gnu.org/licenses>.
 
 use Modern::Perl;
-use Test::More tests => 76;
+use Test::More tests => 77;
 use Test::MockModule;
 use Test::Warn;
 
@@ -133,8 +133,10 @@ is( $messages->[0]->{status}, 'pending', 'EnqueueLetter stores the status pendin
 
 
 # SendQueuedMessages
-my $messages_processed = C4::Letters::SendQueuedMessages();
-is($messages_processed, 1, 'all queued messages processed');
+my $messages_processed = C4::Letters::SendQueuedMessages( { type => 'email' });
+is($messages_processed, 0, 'No queued messaged process if type limit passed with unused type');
+$messages_processed = C4::Letters::SendQueuedMessages( { type => 'sms' });
+is($messages_processed, 1, 'all queued messages processed, found correct number of messages with type limit');
 $messages = C4::Letters::GetQueuedMessages({ borrowernumber => $borrowernumber });
 is(
     $messages->[0]->{status},