View | Details | Raw Unified | Return to bug 8000
Collapse All | Expand All

(-)a/C4/Letters.pm (-9 / +18 lines)
Lines 1020-1026 sub GetQueuedMessages { Link Here
1020
1020
1021
    my $dbh = C4::Context->dbh();
1021
    my $dbh = C4::Context->dbh();
1022
    my $statement = << 'ENDSQL';
1022
    my $statement = << 'ENDSQL';
1023
SELECT message_id, borrowernumber, subject, content, message_transport_type, status, time_queued
1023
SELECT message_id, borrowernumber, subject, content, message_transport_type, status, time_queued, sentto_address
1024
FROM message_queue
1024
FROM message_queue
1025
ENDSQL
1025
ENDSQL
1026
1026
Lines 1149-1165 sub _send_message_by_email { Link Here
1149
1149
1150
    my $member = C4::Members::GetMember( 'borrowernumber' => $message->{'borrowernumber'} );
1150
    my $member = C4::Members::GetMember( 'borrowernumber' => $message->{'borrowernumber'} );
1151
    my $to_address = $message->{'to_address'};
1151
    my $to_address = $message->{'to_address'};
1152
    if (!$to_address && $member) {
1153
        $to_address = C4::Members::GetNoticeEmailAddress( $message->{'borrowernumber'} );
1154
    }
1152
    my $sendAllEmailsTo = C4::Context->preference('SendAllEmailsTo');
1155
    my $sendAllEmailsTo = C4::Context->preference('SendAllEmailsTo');
1153
    $to_address = $sendAllEmailsTo if ($sendAllEmailsTo && $sendAllEmailsTo =~ /@/ ); # some validation.  This could be improved.
1156
    $to_address = $sendAllEmailsTo if ($sendAllEmailsTo && $sendAllEmailsTo =~ /@/ ); # some validation.  This could be improved.
1154
    unless ($to_address) {
1157
    unless ($to_address) {
1155
        unless ($member) {
1158
        if (!$member) {
1156
            warn "FAIL: No 'to_address' and INVALID borrowernumber ($message->{borrowernumber})";
1159
            warn "FAIL: No 'to_address' and INVALID borrowernumber ($message->{borrowernumber})";
1157
            _set_message_status( { message_id => $message->{'message_id'},
1160
            _set_message_status( { message_id => $message->{'message_id'},
1158
                                   status     => 'failed' } );
1161
                                   status     => 'failed' } );
1159
            return;
1162
            return;
1160
        }
1163
        }
1161
        $to_address = C4::Members::GetNoticeEmailAddress( $message->{'borrowernumber'} );
1164
        else {
1162
        unless ($to_address) {  
1163
            # warn "FAIL: No 'to_address' and no email for " . ($member->{surname} ||'') . ", borrowernumber ($message->{borrowernumber})";
1165
            # warn "FAIL: No 'to_address' and no email for " . ($member->{surname} ||'') . ", borrowernumber ($message->{borrowernumber})";
1164
            # warning too verbose for this more common case?
1166
            # warning too verbose for this more common case?
1165
            _set_message_status( { message_id => $message->{'message_id'},
1167
            _set_message_status( { message_id => $message->{'message_id'},
Lines 1203-1210 sub _send_message_by_email { Link Here
1203
1205
1204
    _update_message_to_address($message->{'message_id'},$to_address) unless $message->{to_address}; #if initial message address was empty, coming here means that a to address was found and queue should be updated
1206
    _update_message_to_address($message->{'message_id'},$to_address) unless $message->{to_address}; #if initial message address was empty, coming here means that a to address was found and queue should be updated
1205
    if ( sendmail( %sendmail_params ) ) {
1207
    if ( sendmail( %sendmail_params ) ) {
1206
        _set_message_status( { message_id => $message->{'message_id'},
1208
        _set_message_status( { message_id     => $message->{'message_id'},
1207
                status     => 'sent' } );
1209
                               status         => 'sent',
1210
                               sentto_address => $to_address } );
1208
        return 1;
1211
        return 1;
1209
    } else {
1212
    } else {
1210
        _set_message_status( { message_id => $message->{'message_id'},
1213
        _set_message_status( { message_id => $message->{'message_id'},
Lines 1288-1298 sub _set_message_status { Link Here
1288
        return unless exists $params->{ $required_parameter };
1291
        return unless exists $params->{ $required_parameter };
1289
    }
1292
    }
1290
1293
1291
    my $dbh = C4::Context->dbh();
1292
    my $statement = 'UPDATE message_queue SET status= ? WHERE message_id = ?';
1294
    my $statement = 'UPDATE message_queue SET status= ? WHERE message_id = ?';
1295
    my @values;
1296
    push @values,$params->{'status'};
1297
    if (exists($params->{'sentto_address'})) {
1298
        $statement = 'UPDATE message_queue SET status=?, sentto_address=? WHERE message_id = ?';
1299
        push @values,$params->{'sentto_address'};
1300
    }
1301
    push @values,$params->{'message_id'};
1302
    my $dbh = C4::Context->dbh();
1293
    my $sth = $dbh->prepare( $statement );
1303
    my $sth = $dbh->prepare( $statement );
1294
    my $result = $sth->execute( $params->{'status'},
1304
    my $result = $sth->execute( @values );
1295
                                $params->{'message_id'} );
1296
    return $result;
1305
    return $result;
1297
}
1306
}
1298
1307
(-)a/t/db_dependent/Letters.t (-2 / +31 lines)
Lines 18-24 Link Here
18
# along with Koha; if not, see <http://www.gnu.org/licenses>.
18
# along with Koha; if not, see <http://www.gnu.org/licenses>.
19
19
20
use Modern::Perl;
20
use Modern::Perl;
21
use Test::More tests => 60;
21
use Test::More tests => 64;
22
use Test::MockModule;
22
use Test::MockModule;
23
use Test::Warn;
23
use Test::Warn;
24
24
Lines 107-113 $my_message->{message_transport_type} = 'sms'; Link Here
107
$message_id = C4::Letters::EnqueueLetter($my_message);
107
$message_id = C4::Letters::EnqueueLetter($my_message);
108
ok(defined $message_id && $message_id > 0, 'new message successfully queued');
108
ok(defined $message_id && $message_id > 0, 'new message successfully queued');
109
109
110
# This is will force C4::Context->preference() to read the DB.
111
C4::Context->disable_syspref_cache();
112
110
# used to trigger _send_message_by_email in C4::Letter
113
# used to trigger _send_message_by_email in C4::Letter
114
# first override.
115
$dbh->do("UPDATE systempreferences SET value='override\@example.com' WHERE variable='SendAllEmailsTo';");
111
my $message_id2 = C4::Letters::EnqueueLetter({
116
my $message_id2 = C4::Letters::EnqueueLetter({
112
    borrowernumber         => $borrowernumber,
117
    borrowernumber         => $borrowernumber,
113
    message_transport_type => 'email',
118
    message_transport_type => 'email',
Lines 146-156 is($messages_processed, 2, 'all queued messages processed'); Link Here
146
$messages = C4::Letters::GetQueuedMessages({ borrowernumber => $borrowernumber });
151
$messages = C4::Letters::GetQueuedMessages({ borrowernumber => $borrowernumber });
147
is(scalar(@$messages), 2, 'two messages stored for the borrower');
152
is(scalar(@$messages), 2, 'two messages stored for the borrower');
148
153
154
# used to trigger _send_message_by_email in C4::Letter
155
# second no override.
156
$dbh->do("UPDATE systempreferences SET value='' WHERE variable='SendAllEmailsTo';");
157
my $message_id3 = C4::Letters::EnqueueLetter({
158
    borrowernumber         => $borrowernumber,
159
    message_transport_type => 'email',
160
    to_address             => 'to@example.com',
161
    from_address           => 'from@example.com',
162
    letter => {
163
        content      => 'a message',
164
        title        => 'message title',
165
        metadata     => 'metadata',
166
        code         => 'TEST_MESSAGE',
167
        content_type => 'text/plain',
168
    },
169
});
170
171
$messages_processed = C4::Letters::SendQueuedMessages();
172
is($messages_processed, 1, 'third queued message processed');
173
174
$messages = C4::Letters::GetQueuedMessages({ borrowernumber => $borrowernumber });
175
is(scalar(@$messages), 3, 'three messages stored for the borrower');
176
149
is(
177
is(
150
    $messages->[0]->{status},
178
    $messages->[0]->{status},
151
    'failed',
179
    'failed',
152
    'message marked failed if tried to send SMS message for borrower with no smsalertnumber set (bug 11208)'
180
    'message marked failed if tried to send SMS message for borrower with no smsalertnumber set (bug 11208)'
153
);
181
);
182
is ( $messages->[1]->{sentto_address},'override@example.com','Second message sent to override.');
183
is ( $messages->[2]->{sentto_address},'to@example.com','Third message sent to default.');
154
184
155
# GetLetters
185
# GetLetters
156
my $letters = C4::Letters::GetLetters();
186
my $letters = C4::Letters::GetLetters();
157
- 

Return to bug 8000