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

(-)a/C4/Letters.pm (-9 / +18 lines)
Lines 1059-1065 sub GetQueuedMessages { Link Here
1059
1059
1060
    my $dbh = C4::Context->dbh();
1060
    my $dbh = C4::Context->dbh();
1061
    my $statement = << 'ENDSQL';
1061
    my $statement = << 'ENDSQL';
1062
SELECT message_id, borrowernumber, subject, content, message_transport_type, status, time_queued
1062
SELECT message_id, borrowernumber, subject, content, message_transport_type, status, time_queued, sentto_address
1063
FROM message_queue
1063
FROM message_queue
1064
ENDSQL
1064
ENDSQL
1065
1065
Lines 1188-1204 sub _send_message_by_email { Link Here
1188
1188
1189
    my $member = C4::Members::GetMember( 'borrowernumber' => $message->{'borrowernumber'} );
1189
    my $member = C4::Members::GetMember( 'borrowernumber' => $message->{'borrowernumber'} );
1190
    my $to_address = $message->{'to_address'};
1190
    my $to_address = $message->{'to_address'};
1191
    if (!$to_address && $member) {
1192
        $to_address = C4::Members::GetNoticeEmailAddress( $message->{'borrowernumber'} );
1193
    }
1191
    my $sendAllEmailsTo = C4::Context->preference('SendAllEmailsTo');
1194
    my $sendAllEmailsTo = C4::Context->preference('SendAllEmailsTo');
1192
    $to_address = $sendAllEmailsTo if ($sendAllEmailsTo && $sendAllEmailsTo =~ /@/ ); # some validation.  This could be improved.
1195
    $to_address = $sendAllEmailsTo if ($sendAllEmailsTo && $sendAllEmailsTo =~ /@/ ); # some validation.  This could be improved.
1193
    unless ($to_address) {
1196
    unless ($to_address) {
1194
        unless ($member) {
1197
        if (!$member) {
1195
            warn "FAIL: No 'to_address' and INVALID borrowernumber ($message->{borrowernumber})";
1198
            warn "FAIL: No 'to_address' and INVALID borrowernumber ($message->{borrowernumber})";
1196
            _set_message_status( { message_id => $message->{'message_id'},
1199
            _set_message_status( { message_id => $message->{'message_id'},
1197
                                   status     => 'failed' } );
1200
                                   status     => 'failed' } );
1198
            return;
1201
            return;
1199
        }
1202
        }
1200
        $to_address = C4::Members::GetNoticeEmailAddress( $message->{'borrowernumber'} );
1203
        else {
1201
        unless ($to_address) {  
1202
            # warn "FAIL: No 'to_address' and no email for " . ($member->{surname} ||'') . ", borrowernumber ($message->{borrowernumber})";
1204
            # warn "FAIL: No 'to_address' and no email for " . ($member->{surname} ||'') . ", borrowernumber ($message->{borrowernumber})";
1203
            # warning too verbose for this more common case?
1205
            # warning too verbose for this more common case?
1204
            _set_message_status( { message_id => $message->{'message_id'},
1206
            _set_message_status( { message_id => $message->{'message_id'},
Lines 1242-1249 sub _send_message_by_email { Link Here
1242
1244
1243
    _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
1245
    _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
1244
    if ( sendmail( %sendmail_params ) ) {
1246
    if ( sendmail( %sendmail_params ) ) {
1245
        _set_message_status( { message_id => $message->{'message_id'},
1247
        _set_message_status( { message_id     => $message->{'message_id'},
1246
                status     => 'sent' } );
1248
                               status         => 'sent',
1249
                               sentto_address => $to_address } );
1247
        return 1;
1250
        return 1;
1248
    } else {
1251
    } else {
1249
        _set_message_status( { message_id => $message->{'message_id'},
1252
        _set_message_status( { message_id => $message->{'message_id'},
Lines 1327-1337 sub _set_message_status { Link Here
1327
        return unless exists $params->{ $required_parameter };
1330
        return unless exists $params->{ $required_parameter };
1328
    }
1331
    }
1329
1332
1330
    my $dbh = C4::Context->dbh();
1331
    my $statement = 'UPDATE message_queue SET status= ? WHERE message_id = ?';
1333
    my $statement = 'UPDATE message_queue SET status= ? WHERE message_id = ?';
1334
    my @values;
1335
    push @values,$params->{'status'};
1336
    if (exists($params->{'sentto_address'})) {
1337
        $statement = 'UPDATE message_queue SET status=?, sentto_address=? WHERE message_id = ?';
1338
        push @values,$params->{'sentto_address'};
1339
    }
1340
    push @values,$params->{'message_id'};
1341
    my $dbh = C4::Context->dbh();
1332
    my $sth = $dbh->prepare( $statement );
1342
    my $sth = $dbh->prepare( $statement );
1333
    my $result = $sth->execute( $params->{'status'},
1343
    my $result = $sth->execute( @values );
1334
                                $params->{'message_id'} );
1335
    return $result;
1344
    return $result;
1336
}
1345
}
1337
1346
(-)a/t/db_dependent/Letters.t (-1 / +30 lines)
Lines 112-118 $my_message->{message_transport_type} = 'sms'; Link Here
112
$message_id = C4::Letters::EnqueueLetter($my_message);
112
$message_id = C4::Letters::EnqueueLetter($my_message);
113
ok(defined $message_id && $message_id > 0, 'new message successfully queued');
113
ok(defined $message_id && $message_id > 0, 'new message successfully queued');
114
114
115
# This is will force C4::Context->preference() to read the DB.
116
C4::Context->disable_syspref_cache();
117
115
# used to trigger _send_message_by_email in C4::Letter
118
# used to trigger _send_message_by_email in C4::Letter
119
# first override.
120
$dbh->do("UPDATE systempreferences SET value='override\@example.com' WHERE variable='SendAllEmailsTo';");
116
my $message_id2 = C4::Letters::EnqueueLetter({
121
my $message_id2 = C4::Letters::EnqueueLetter({
117
    borrowernumber         => $borrowernumber,
122
    borrowernumber         => $borrowernumber,
118
    message_transport_type => 'email',
123
    message_transport_type => 'email',
Lines 151-161 is($messages_processed, 2, 'all queued messages processed'); Link Here
151
$messages = C4::Letters::GetQueuedMessages({ borrowernumber => $borrowernumber });
156
$messages = C4::Letters::GetQueuedMessages({ borrowernumber => $borrowernumber });
152
is(scalar(@$messages), 2, 'two messages stored for the borrower');
157
is(scalar(@$messages), 2, 'two messages stored for the borrower');
153
158
159
# used to trigger _send_message_by_email in C4::Letter
160
# second no override.
161
$dbh->do("UPDATE systempreferences SET value='' WHERE variable='SendAllEmailsTo';");
162
my $message_id3 = C4::Letters::EnqueueLetter({
163
    borrowernumber         => $borrowernumber,
164
    message_transport_type => 'email',
165
    to_address             => 'to@example.com',
166
    from_address           => 'from@example.com',
167
    letter => {
168
        content      => 'a message',
169
        title        => 'message title',
170
        metadata     => 'metadata',
171
        code         => 'TEST_MESSAGE',
172
        content_type => 'text/plain',
173
    },
174
});
175
176
$messages_processed = C4::Letters::SendQueuedMessages();
177
is($messages_processed, 1, 'third queued message processed');
178
179
$messages = C4::Letters::GetQueuedMessages({ borrowernumber => $borrowernumber });
180
is(scalar(@$messages), 3, 'three messages stored for the borrower');
181
154
is(
182
is(
155
    $messages->[0]->{status},
183
    $messages->[0]->{status},
156
    'failed',
184
    'failed',
157
    'message marked failed if tried to send SMS message for borrower with no smsalertnumber set (bug 11208)'
185
    'message marked failed if tried to send SMS message for borrower with no smsalertnumber set (bug 11208)'
158
);
186
);
187
is ( $messages->[1]->{sentto_address},'override@example.com','Second message sent to override.');
188
is ( $messages->[2]->{sentto_address},'to@example.com','Third message sent to default.');
159
189
160
# GetLetters
190
# GetLetters
161
my $letters = C4::Letters::GetLetters();
191
my $letters = C4::Letters::GetLetters();
162
- 

Return to bug 8000