Bug 18457 - process_message_queue.pl will die if a patron has no sms_provider_id...
authorKyle M Hall <kyle@bywatersolutions.com>
Wed, 19 Apr 2017 13:52:38 +0000 (09:52 -0400)
committerKyle M Hall <kyle@bywatersolutions.com>
Mon, 24 Apr 2017 17:19:33 +0000 (13:19 -0400)
If SMS via Email is enabled, and a patron has opted for SMS messages, but has not selected a service provider, the cronjob will die with the error
Can't call method "domain" on an undefined value at /usr/share/koha/lib/C4/Letters.pm line 1055.
This will cause all messages that come after the error to not be sent!

Test Plan:
1) Enable SMS via Email
2) Enable SMS for a patron, but don't set a provider
3) Perform an action that will trigger an sms message to go into
   the holds queue ( item due, item checkout, etc )
4) Run process_message_queue.pl, note the error
5) Apply the patch
4) Run process_message_queue.pl, no error this time!

Signed-off-by: Chris Cormack <chrisc@catalyst.net.nz>
Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
C4/Letters.pm

index 5932a03..de7e04a 100644 (file)
@@ -1050,6 +1050,10 @@ sub SendQueuedMessages {
             if ( C4::Context->preference('SMSSendDriver') eq 'Email' ) {
                 my $member = C4::Members::GetMember( 'borrowernumber' => $message->{'borrowernumber'} );
                 my $sms_provider = Koha::SMS::Providers->find( $member->{'sms_provider_id'} );
+                unless ( $sms_provider ) {
+                    warn sprintf( "Patron %s has no sms provider id set!", $message->{'borrowernumber'} ) if $params->{'verbose'} or $debug;
+                    next MESSAGE;
+                }
                 $message->{to_address} .= '@' . $sms_provider->domain();
                 _send_message_by_email( $message, $params->{'username'}, $params->{'password'}, $params->{'method'} );
             } else {