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

(-)a/C4/Letters.pm (-71 / +65 lines)
Lines 34-40 use C4::SMS; Link Here
34
use C4::Debug;
34
use C4::Debug;
35
use Koha::DateUtils;
35
use Koha::DateUtils;
36
use Koha::SMS::Providers;
36
use Koha::SMS::Providers;
37
37
use Koha::Database;
38
use Date::Calc qw( Add_Delta_Days );
39
use Encode;
40
use Carp;
38
use Koha::Email;
41
use Koha::Email;
39
use Koha::DateUtils qw( format_sqldatetime dt_from_string );
42
use Koha::DateUtils qw( format_sqldatetime dt_from_string );
40
43
Lines 974-980 sub EnqueueLetter { Link Here
974
    my $params = shift or return;
977
    my $params = shift or return;
975
978
976
    return unless exists $params->{'letter'};
979
    return unless exists $params->{'letter'};
977
#   return unless exists $params->{'borrowernumber'};
978
    return unless exists $params->{'message_transport_type'};
980
    return unless exists $params->{'message_transport_type'};
979
981
980
    my $content = $params->{letter}->{content};
982
    my $content = $params->{letter}->{content};
Lines 994-1021 sub EnqueueLetter { Link Here
994
        );
996
        );
995
    }
997
    }
996
998
997
    my $dbh       = C4::Context->dbh();
999
    my @to_addresses;
998
    my $statement = << 'ENDSQL';
1000
    if ( $params->{to_address} ) {
999
INSERT INTO message_queue
1001
        @to_addresses = ( $params->{to_address} );
1000
( borrowernumber, subject, content, metadata, letter_code, message_transport_type, status, time_queued, to_address, from_address, content_type )
1002
    } elsif ( $params->{borrowernumber} and $params->{message_transport_type} eq 'email' ) {
1001
VALUES
1003
        @to_addresses = @{ C4::Members::GetNoticeEmailAddresses( $params->{borrowernumber} ) };
1002
( ?,              ?,       ?,       ?,        ?,           ?,                      ?,      NOW(),       ?,          ?,            ? )
1004
    }
1003
ENDSQL
1004
1005
1005
    my $sth    = $dbh->prepare($statement);
1006
    my $from_address;
1006
    my $result = $sth->execute(
1007
    if ( $params->{from_address} ) {
1007
        $params->{'borrowernumber'},              # borrowernumber
1008
        $from_address = $params->{from_address};
1008
        $params->{'letter'}->{'title'},           # subject
1009
    } elsif ( $params->{message_transport_type} eq 'email' ) {
1009
        $params->{'letter'}->{'content'},         # content
1010
        if ( $params->{borrowernumber} ) {
1010
        $params->{'letter'}->{'metadata'} || '',  # metadata
1011
            my $rs = Koha::Database->new->schema->resultset('Borrower')->search({ borrowernumber => $params->{borrowernumber} }, {join => 'branchcode'});
1011
        $params->{'letter'}->{'code'}     || '',  # letter_code
1012
            $from_address = $rs->next->branchcode->branchemail;
1012
        $params->{'message_transport_type'},      # message_transport_type
1013
        }
1013
        'pending',                                # status
1014
1014
        $params->{'to_address'},                  # to_address
1015
        $from_address ||= C4::Context->preference('KohaAdminEmailAddress');
1015
        $params->{'from_address'},                # from_address
1016
    }
1016
        $params->{'letter'}->{'content-type'},    # content_type
1017
1017
    );
1018
    my $rs = Koha::Database->new->schema->resultset('MessageQueue');
1018
    return $dbh->last_insert_id(undef,undef,'message_queue', undef);
1019
    for my $to_address ( @to_addresses ) {
1020
        $rs->create({
1021
            borrowernumber => $params->{borrowernumber},
1022
            subject => $params->{letter}{title},
1023
            content => $params->{letter}{content},
1024
            metadata => ( $params->{letter}{metadata} || '' ),
1025
            letter_code => ( $params->{letter}{code}     || ''),
1026
            message_transport_type => $params->{message_transport_type},
1027
            status => 'pending',
1028
            to_address => $to_address,
1029
            from_address => $from_address,
1030
            content_type => $params->{letter}{'content-type'},
1031
        });
1032
    }
1033
    return scalar( @to_addresses );
1019
}
1034
}
1020
1035
1021
=head2 SendQueuedMessages ([$hashref]) 
1036
=head2 SendQueuedMessages ([$hashref]) 
Lines 1040-1045 sub SendQueuedMessages { Link Here
1040
          if $params->{'verbose'} or $debug;
1055
          if $params->{'verbose'} or $debug;
1041
        # This is just begging for subclassing
1056
        # This is just begging for subclassing
1042
        next MESSAGE if ( lc($message->{'message_transport_type'}) eq 'rss' );
1057
        next MESSAGE if ( lc($message->{'message_transport_type'}) eq 'rss' );
1058
1043
        if ( lc( $message->{'message_transport_type'} ) eq 'email' ) {
1059
        if ( lc( $message->{'message_transport_type'} ) eq 'email' ) {
1044
            _send_message_by_email( $message, $params->{'username'}, $params->{'password'}, $params->{'method'} );
1060
            _send_message_by_email( $message, $params->{'username'}, $params->{'password'}, $params->{'method'} );
1045
        }
1061
        }
Lines 1108-1138 list of hashes, each has represents a message in the message queue. Link Here
1108
sub GetQueuedMessages {
1124
sub GetQueuedMessages {
1109
    my $params = shift;
1125
    my $params = shift;
1110
1126
1111
    my $dbh = C4::Context->dbh();
1127
    my $rs = Koha::Database->new->schema->resultset('MessageQueue')->search(
1112
    my $statement = << 'ENDSQL';
1128
        {
1113
SELECT message_id, borrowernumber, subject, content, message_transport_type, status, time_queued
1129
            (
1114
FROM message_queue
1130
                $params->{borrowernumber}
1115
ENDSQL
1131
                ? ( borrowernumber => $params->{borrowernumber} )
1116
1132
                : ()
1117
    my @query_params;
1133
            ),
1118
    my @whereclauses;
1134
        },
1119
    if ( exists $params->{'borrowernumber'} ) {
1135
        {
1120
        push @whereclauses, ' borrowernumber = ? ';
1136
            (
1121
        push @query_params, $params->{'borrowernumber'};
1137
                $params->{limit}
1122
    }
1138
                ? ( rows => $params->{limit} )
1123
1139
                : ()
1124
    if ( @whereclauses ) {
1140
            ),
1125
        $statement .= ' WHERE ' . join( 'AND', @whereclauses );
1141
        },
1126
    }
1142
    );
1127
1143
    $rs->result_class('DBIx::Class::ResultClass::HashRefInflator');
1128
    if ( defined $params->{'limit'} ) {
1144
    return [ $rs->all ];
1129
        $statement .= ' LIMIT ? ';
1130
        push @query_params, $params->{'limit'};
1131
    }
1132
1133
    my $sth = $dbh->prepare( $statement );
1134
    my $result = $sth->execute( @query_params );
1135
    return $sth->fetchall_arrayref({});
1136
}
1145
}
1137
1146
1138
=head2 GetMessageTransportTypes
1147
=head2 GetMessageTransportTypes
Lines 1288-1309 sub _send_message_by_email { Link Here
1288
    my ($username, $password, $method) = @_;
1297
    my ($username, $password, $method) = @_;
1289
1298
1290
    my $member = C4::Members::GetMember( 'borrowernumber' => $message->{'borrowernumber'} );
1299
    my $member = C4::Members::GetMember( 'borrowernumber' => $message->{'borrowernumber'} );
1291
    my $to_address = $message->{'to_address'};
1300
1292
    unless ($to_address) {
1301
    unless ( $member and $message->{to_address} ) {
1293
        unless ($member) {
1302
        warn "FAIL: No 'to_address' and INVALID borrowernumber ($message->{borrowernumber})" unless $member;
1294
            warn "FAIL: No 'to_address' and INVALID borrowernumber ($message->{borrowernumber})";
1303
        _set_message_status({
1295
            _set_message_status( { message_id => $message->{'message_id'},
1304
            message_id => $message->{'message_id'},
1296
                                   status     => 'failed' } );
1305
            status     => 'failed'
1297
            return;
1306
        });
1298
        }
1307
        return;
1299
        $to_address = C4::Members::GetNoticeEmailAddress( $message->{'borrowernumber'} );
1300
        unless ($to_address) {  
1301
            # warn "FAIL: No 'to_address' and no email for " . ($member->{surname} ||'') . ", borrowernumber ($message->{borrowernumber})";
1302
            # warning too verbose for this more common case?
1303
            _set_message_status( { message_id => $message->{'message_id'},
1304
                                   status     => 'failed' } );
1305
            return;
1306
        }
1307
    }
1308
    }
1308
1309
1309
    my $utf8   = decode('MIME-Header', $message->{'subject'} );
1310
    my $utf8   = decode('MIME-Header', $message->{'subject'} );
Lines 1324-1330 sub _send_message_by_email { Link Here
1324
    my $email = Koha::Email->new();
1325
    my $email = Koha::Email->new();
1325
    my %sendmail_params = $email->create_message_headers(
1326
    my %sendmail_params = $email->create_message_headers(
1326
        {
1327
        {
1327
            to      => $to_address,
1328
            from    => $message->{'from_address'} || $branch_email,
1328
            from    => $message->{'from_address'} || $branch_email,
1329
            replyto => $branch_replyto,
1329
            replyto => $branch_replyto,
1330
            sender  => $branch_returnpath,
1330
            sender  => $branch_returnpath,
Lines 1414-1425 sub _send_message_by_sms { Link Here
1414
    return $success;
1414
    return $success;
1415
}
1415
}
1416
1416
1417
sub _update_message_to_address {
1418
    my ($id, $to)= @_;
1419
    my $dbh = C4::Context->dbh();
1420
    $dbh->do('UPDATE message_queue SET to_address=? WHERE message_id=?',undef,($to,$id));
1421
}
1422
1423
sub _set_message_status {
1417
sub _set_message_status {
1424
    my $params = shift or return;
1418
    my $params = shift or return;
1425
1419
(-)a/C4/Members.pm (-20 / +25 lines)
Lines 68-74 BEGIN { Link Here
68
        &GetAllIssues
68
        &GetAllIssues
69
69
70
        &GetFirstValidEmailAddress
70
        &GetFirstValidEmailAddress
71
        &GetNoticeEmailAddress
71
        &GetNoticeEmailAddresses
72
72
73
        &GetAge
73
        &GetAge
74
        &GetTitles
74
        &GetTitles
Lines 1135-1167 sub GetFirstValidEmailAddress { Link Here
1135
    }
1135
    }
1136
}
1136
}
1137
1137
1138
=head2 GetNoticeEmailAddress
1138
=head2 GetNoticeEmailAddresses
1139
1139
1140
  $email = GetNoticeEmailAddress($borrowernumber);
1140
  $emails = GetNoticeEmailAddresses( borrowernumber );
1141
1141
1142
Return the email address of borrower used for notices, given the borrowernumber.
1142
Return the email addresses of borrower used for notices, given the borrowernumber.
1143
Returns the empty string if no email address.
1143
Returns an empty arrayref if no email address.
1144
1144
1145
=cut
1145
=cut
1146
1146
1147
sub GetNoticeEmailAddress {
1147
sub GetNoticeEmailAddresses {
1148
    my $borrowernumber = shift;
1148
    my $borrowernumber = shift;
1149
1149
1150
    my $which_address = C4::Context->preference("AutoEmailPrimaryAddress");
1150
    my $which_addresses = C4::Context->preference("AutoEmailPrimaryAddress");
1151
    # if syspref is set to 'first valid' (value == OFF), look up email address
1151
    my @email_addresses;
1152
    if ( $which_address eq 'OFF' ) {
1152
    for my $email_address_field ( split /,/, $which_addresses ) {
1153
        return GetFirstValidEmailAddress($borrowernumber);
1153
1154
        # if syspref is set to 'first valid' (value == OFF), look up email address
1155
        if ( $email_address_field eq 'OFF' ) {
1156
            return [ GetFirstValidEmailAddress($borrowernumber) ];
1157
        }
1158
1159
        # specified email address field
1160
        my $email_address = C4::Context->dbh->selectcol_arrayref(
1161
            qq|
1162
                SELECT $email_address_field AS email
1163
                FROM borrowers
1164
                WHERE borrowernumber = ?
1165
            |, {}, $borrowernumber
1166
        );
1167
        push @email_addresses, $email_address->[0] if $email_address->[0];
1154
    }
1168
    }
1155
    # specified email address field
1169
    return \@email_addresses;
1156
    my $dbh = C4::Context->dbh;
1157
    my $sth = $dbh->prepare( qq{
1158
        SELECT $which_address AS primaryemail
1159
        FROM borrowers
1160
        WHERE borrowernumber=?
1161
    } );
1162
    $sth->execute($borrowernumber);
1163
    my $data = $sth->fetchrow_hashref;
1164
    return $data->{'primaryemail'} || '';
1165
}
1170
}
1166
1171
1167
=head2 GetUpcomingMembershipExpires
1172
=head2 GetUpcomingMembershipExpires
(-)a/C4/Message.pm (-26 lines)
Lines 158-164 the message. Link Here
158
sub enqueue {
158
sub enqueue {
159
    my ($class, $letter, $borrower, $transport) = @_;
159
    my ($class, $letter, $borrower, $transport) = @_;
160
    my $metadata   = _metadata($letter);
160
    my $metadata   = _metadata($letter);
161
    my $to_address = _to_address($borrower, $transport);
162
161
163
    # Same as render_metadata
162
    # Same as render_metadata
164
    my $format ||= sub { $_[0] || "" };
163
    my $format ||= sub { $_[0] || "" };
Lines 170-203 sub enqueue { Link Here
170
        letter                 => $letter,
169
        letter                 => $letter,
171
        borrowernumber         => $borrower->{borrowernumber},
170
        borrowernumber         => $borrower->{borrowernumber},
172
        message_transport_type => $transport,
171
        message_transport_type => $transport,
173
        to_address             => $to_address,
174
    });
172
    });
175
}
173
}
176
174
177
# based on message $transport, pick an appropriate address to send to
178
sub _to_address {
179
    my ($borrower, $transport) = @_;
180
    my $address;
181
    if ($transport eq 'email') {
182
        $address = $borrower->{email}
183
            || $borrower->{emailpro}
184
            || $borrower->{B_email};
185
    } elsif ($transport eq 'sms') {
186
        $address = $borrower->{smsalertnumber}
187
            || $borrower->{phone}
188
            || $borrower->{phonepro}
189
            || $borrower->{B_phone};
190
    } else {
191
        warn "'$transport' is an unknown message transport.";
192
    }
193
    if (not defined $address) {
194
        warn "An appropriate $transport address "
195
            . "for borrower $borrower->{userid} "
196
            . "could not be found.";
197
    }
198
    return $address;
199
}
200
201
# _metadata($letter) -- return the letter split into head/body/footer
175
# _metadata($letter) -- return the letter split into head/body/footer
202
sub _metadata {
176
sub _metadata {
203
    my ($letter) = @_;
177
    my ($letter) = @_;
(-)a/C4/Reserves.pm (-7 / +5 lines)
Lines 248-255 sub AddReserve { Link Here
248
                {   letter                 => $letter,
248
                {   letter                 => $letter,
249
                    borrowernumber         => $borrowernumber,
249
                    borrowernumber         => $borrowernumber,
250
                    message_transport_type => 'email',
250
                    message_transport_type => 'email',
251
                    from_address           => $admin_email_address,
251
                    to_address             => $admin_email_address,
252
                    to_address           => $admin_email_address,
253
                }
252
                }
254
            );
253
            );
255
        }
254
        }
Lines 1990-1998 sub _koha_notify_reserve { Link Here
1990
    my $dbh = C4::Context->dbh;
1989
    my $dbh = C4::Context->dbh;
1991
    my $borrower = C4::Members::GetMember(borrowernumber => $borrowernumber);
1990
    my $borrower = C4::Members::GetMember(borrowernumber => $borrowernumber);
1992
1991
1993
    # Try to get the borrower's email address
1994
    my $to_address = C4::Members::GetNoticeEmailAddress($borrowernumber);
1995
1996
    my $messagingprefs = C4::Members::Messaging::GetMessagingPreferences( {
1992
    my $messagingprefs = C4::Members::Messaging::GetMessagingPreferences( {
1997
            borrowernumber => $borrowernumber,
1993
            borrowernumber => $borrowernumber,
1998
            message_name => 'Hold_Filled'
1994
            message_name => 'Hold_Filled'
Lines 2039-2052 sub _koha_notify_reserve { Link Here
2039
        C4::Letters::EnqueueLetter( {
2035
        C4::Letters::EnqueueLetter( {
2040
            letter => $letter,
2036
            letter => $letter,
2041
            borrowernumber => $borrowernumber,
2037
            borrowernumber => $borrowernumber,
2042
            from_address => $admin_email_address,
2043
            message_transport_type => $mtt,
2038
            message_transport_type => $mtt,
2044
        } );
2039
        } );
2045
    };
2040
    };
2046
2041
2042
    # Try to get the borrower's email addresses
2043
    my $to_addresses = C4::Members::GetNoticeEmailAddresses($borrowernumber);
2044
2047
    while ( my ( $mtt, $letter_code ) = each %{ $messagingprefs->{transports} } ) {
2045
    while ( my ( $mtt, $letter_code ) = each %{ $messagingprefs->{transports} } ) {
2048
        next if (
2046
        next if (
2049
               ( $mtt eq 'email' and not $to_address ) # No email address
2047
               ( $mtt eq 'email' and not @$to_addresses ) # No email address
2050
            or ( $mtt eq 'sms'   and not $borrower->{smsalertnumber} ) # No SMS number
2048
            or ( $mtt eq 'sms'   and not $borrower->{smsalertnumber} ) # No SMS number
2051
            or ( $mtt eq 'phone' and C4::Context->preference('TalkingTechItivaPhoneNotification') ) # Notice is handled by TalkingTech_itiva_outbound.pl
2049
            or ( $mtt eq 'phone' and C4::Context->preference('TalkingTechItivaPhoneNotification') ) # Notice is handled by TalkingTech_itiva_outbound.pl
2052
        );
2050
        );
(-)a/misc/cronjobs/overdue_notices.pl (-5 / +5 lines)
Lines 578-585 END_SQL Link Here
578
                  and warn "borrower $borr has items triggering level $i.";
578
                  and warn "borrower $borr has items triggering level $i.";
579
579
580
                @emails_to_use = ();
580
                @emails_to_use = ();
581
                my $notice_email =
582
                    C4::Members::GetNoticeEmailAddress($borrowernumber);
583
                unless ($nomail) {
581
                unless ($nomail) {
584
                    if (@emails) {
582
                    if (@emails) {
585
                        foreach (@emails) {
583
                        foreach (@emails) {
Lines 587-593 END_SQL Link Here
587
                        }
585
                        }
588
                    }
586
                    }
589
                    else {
587
                    else {
590
                        push @emails_to_use, $notice_email if ($notice_email);
588
                        my $notice_emails =
589
                            C4::Members::GetNoticeEmailAddresses($borrowernumber);
590
                        push @emails_to_use, @$notice_emails;
591
                    }
591
                    }
592
                }
592
                }
593
593
Lines 732-738 END_SQL Link Here
732
                              letternumber   => $i,
732
                              letternumber   => $i,
733
                              postcode       => $data->{'zipcode'},
733
                              postcode       => $data->{'zipcode'},
734
                              country        => $data->{'country'},
734
                              country        => $data->{'country'},
735
                              email          => $notice_email,
735
                              email          => $notice_emails,
736
                              itemcount      => $itemcount,
736
                              itemcount      => $itemcount,
737
                              titles         => $titles,
737
                              titles         => $titles,
738
                              outputformat   => defined $csvfilename ? 'csv' : defined $htmlfilename ? 'html' : defined $text_filename ? 'text' : '',
738
                              outputformat   => defined $csvfilename ? 'csv' : defined $htmlfilename ? 'html' : defined $text_filename ? 'text' : '',
Lines 751-757 END_SQL Link Here
751
                                  city           => $data->{'city'},
751
                                  city           => $data->{'city'},
752
                                  postcode       => $data->{'zipcode'},
752
                                  postcode       => $data->{'zipcode'},
753
                                  country        => $data->{'country'},
753
                                  country        => $data->{'country'},
754
                                  email          => $notice_email,
754
                                  email          => ( scalar( @emails_to_use ) ? $emails_to_use[0] : undef ),
755
                                  itemcount      => $itemcount,
755
                                  itemcount      => $itemcount,
756
                                  titles         => $titles,
756
                                  titles         => $titles,
757
                                  outputformat   => defined $csvfilename ? 'csv' : defined $htmlfilename ? 'html' : defined $text_filename ? 'text' : '',
757
                                  outputformat   => defined $csvfilename ? 'csv' : defined $htmlfilename ? 'html' : defined $text_filename ? 'text' : '',
(-)a/opac/opac-memberentry.pl (-3 / +1 lines)
Lines 156-166 if ( $action eq 'create' ) { Link Here
156
156
157
            C4::Letters::EnqueueLetter(
157
            C4::Letters::EnqueueLetter(
158
                {
158
                {
159
                    borrowernumber         => $borrower{borrowernumber},
159
                    letter                 => $letter,
160
                    letter                 => $letter,
160
                    message_transport_type => 'email',
161
                    message_transport_type => 'email',
161
                    to_address             => $borrower{'email'},
162
                    from_address =>
163
                      C4::Context->preference('KohaAdminEmailAddress'),
164
                }
162
                }
165
            );
163
            );
166
        }
164
        }
(-)a/opac/opac-shareshelf.pl (-6 / +4 lines)
Lines 166-173 sub show_accept { Link Here
166
sub notify_owner {
166
sub notify_owner {
167
    my ($param) = @_;
167
    my ($param) = @_;
168
168
169
    my $toaddr = C4::Members::GetNoticeEmailAddress( $param->{owner} );
169
    my $toaddr = C4::Members::GetNoticeEmailAddresses( $param->{owner} );
170
    return if !$toaddr;
170
    return unless scalar( @$toaddr );
171
171
172
172
    #prepare letter
173
    #prepare letter
173
    my $letter = C4::Letters::GetPreparedLetter(
174
    my $letter = C4::Letters::GetPreparedLetter(
Lines 181-190 sub notify_owner { Link Here
181
    #send letter to queue
182
    #send letter to queue
182
    C4::Letters::EnqueueLetter(
183
    C4::Letters::EnqueueLetter(
183
        {
184
        {
185
            borrowernumber         => $param->{owner},
184
            letter                 => $letter,
186
            letter                 => $letter,
185
            message_transport_type => 'email',
187
            message_transport_type => 'email',
186
            from_address => C4::Context->preference('KohaAdminEmailAddress'),
187
            to_address   => $toaddr,
188
        }
188
        }
189
    );
189
    );
190
}
190
}
Lines 210-216 sub process_addrlist { Link Here
210
210
211
sub send_invitekey {
211
sub send_invitekey {
212
    my ($param) = @_;
212
    my ($param) = @_;
213
    my $fromaddr = C4::Context->preference('KohaAdminEmailAddress');
214
    my $url =
213
    my $url =
215
        C4::Context->preference('OPACBaseURL')
214
        C4::Context->preference('OPACBaseURL')
216
      . "/cgi-bin/koha/opac-shareshelf.pl?shelfnumber="
215
      . "/cgi-bin/koha/opac-shareshelf.pl?shelfnumber="
Lines 251-257 sub send_invitekey { Link Here
251
            {
250
            {
252
                letter                 => $letter,
251
                letter                 => $letter,
253
                message_transport_type => 'email',
252
                message_transport_type => 'email',
254
                from_address           => $fromaddr,
255
                to_address             => $a,
253
                to_address             => $a,
256
            }
254
            }
257
        );
255
        );
(-)a/t/db_dependent/Letters.t (-9 / +66 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 => 80;
21
use Test::More tests => 86;
22
use Test::MockModule;
22
use Test::MockModule;
23
use Test::Warn;
23
use Test::Warn;
24
24
Lines 63-74 my $library = $builder->build({ Link Here
63
});
63
});
64
my $patron_category = $builder->build({ source => 'Category' });
64
my $patron_category = $builder->build({ source => 'Category' });
65
my $date = dt_from_string;
65
my $date = dt_from_string;
66
my ( $email, $emailpro ) = ( 'email@example.org', 'emailpro@example.org' );
66
my $borrowernumber = AddMember(
67
my $borrowernumber = AddMember(
67
    firstname    => 'Jane',
68
    firstname    => 'Jane',
68
    surname      => 'Smith',
69
    surname      => 'Smith',
69
    categorycode => $patron_category,,
70
    categorycode => $patron_category,,
70
    branchcode   => $library->{branchcode},
71
    branchcode   => $library->{branchcode},
71
    dateofbirth  => $date,
72
    dateofbirth  => $date,
73
    email        => $email,
74
    emailpro     => $emailpro,
72
);
75
);
73
76
74
my $marc_record = MARC::Record->new;
77
my $marc_record = MARC::Record->new;
Lines 94-101 my $my_message = { Link Here
94
    to_address             => 'to@example.com',
97
    to_address             => 'to@example.com',
95
    from_address           => 'from@example.com',
98
    from_address           => 'from@example.com',
96
};
99
};
97
my $message_id = C4::Letters::EnqueueLetter($my_message);
100
is( C4::Letters::EnqueueLetter($my_message), undef, 'EnqueueLetter without the letter argument returns undef' );
98
is( $message_id, undef, 'EnqueueLetter without the letter argument returns undef' );
99
101
100
delete $my_message->{message_transport_type};
102
delete $my_message->{message_transport_type};
101
$my_message->{letter} = {
103
$my_message->{letter} = {
Lines 105-117 $my_message->{letter} = { Link Here
105
    code         => 'TEST_MESSAGE',
107
    code         => 'TEST_MESSAGE',
106
    content_type => 'text/plain',
108
    content_type => 'text/plain',
107
};
109
};
108
$message_id = C4::Letters::EnqueueLetter($my_message);
110
is( C4::Letters::EnqueueLetter($my_message), undef, 'EnqueueLetter without the message_transport_type argument returns undef' );
109
is( $message_id, undef, 'EnqueueLetter without the message type argument argument returns undef' );
110
111
111
$my_message->{message_transport_type} = 'sms';
112
$my_message->{message_transport_type} = 'sms';
112
$message_id = C4::Letters::EnqueueLetter($my_message);
113
my $messages_queued = C4::Letters::EnqueueLetter($my_message);
113
ok(defined $message_id && $message_id > 0, 'new message successfully queued');
114
is($messages_queued, 1, 'new message successfully queued');
114
115
115
116
# GetQueuedMessages
116
# GetQueuedMessages
117
my $messages = C4::Letters::GetQueuedMessages();
117
my $messages = C4::Letters::GetQueuedMessages();
Lines 119-125 is( @$messages, 1, 'GetQueuedMessages without argument returns all the entries' Link Here
119
119
120
$messages = C4::Letters::GetQueuedMessages({ borrowernumber => $borrowernumber });
120
$messages = C4::Letters::GetQueuedMessages({ borrowernumber => $borrowernumber });
121
is( @$messages, 1, 'one message stored for the borrower' );
121
is( @$messages, 1, 'one message stored for the borrower' );
122
is( $messages->[0]->{message_id}, $message_id, 'EnqueueLetter returns the message id correctly' );
123
is( $messages->[0]->{borrowernumber}, $borrowernumber, 'EnqueueLetter stores the borrower number correctly' );
122
is( $messages->[0]->{borrowernumber}, $borrowernumber, 'EnqueueLetter stores the borrower number correctly' );
124
is( $messages->[0]->{subject}, $my_message->{letter}->{title}, 'EnqueueLetter stores the subject correctly' );
123
is( $messages->[0]->{subject}, $my_message->{letter}->{title}, 'EnqueueLetter stores the subject correctly' );
125
is( $messages->[0]->{content}, $my_message->{letter}->{content}, 'EnqueueLetter stores the content correctly' );
124
is( $messages->[0]->{content}, $my_message->{letter}->{content}, 'EnqueueLetter stores the content correctly' );
Lines 453-458 is($mail{'To'}, 'testemail@mydomain.com', "mailto correct in sent claim"); Link Here
453
is($mail{'Message'}, 'my vendor|John Smith|Ordernumber ' . $ordernumber . ' (Silence in the library) (1 ordered)', 'Claim notice text constructed successfully');
452
is($mail{'Message'}, 'my vendor|John Smith|Ordernumber ' . $ordernumber . ' (Silence in the library) (1 ordered)', 'Claim notice text constructed successfully');
454
}
453
}
455
454
455
# EnqueueLetter and AutoEmailPrimaryAddress
456
$my_message = {
457
    borrowernumber         => $borrowernumber,
458
    message_transport_type => 'email',
459
    to_address             => 'to@example.com',
460
    from_address           => 'from@example.com',
461
    letter                 => {
462
        content      => 'a message',
463
        title        => 'message title',
464
        metadata     => 'metadata',
465
        code         => 'TEST_MESSAGE',
466
        content_type => 'text/plain',
467
    },
468
};
469
470
$dbh->do(q|DELETE FROM message_queue|);
471
t::lib::Mocks::mock_preference('AutoEmailPrimaryAddress', 'email');
472
is( C4::Letters::EnqueueLetter($my_message), 1, 'message successfully queued' );
473
$messages = C4::Letters::GetQueuedMessages({ borrowernumber => $borrowernumber });
474
is( scalar( @$messages ), 1, 'The message has been queued for the expected patron' );
475
is( $messages->[0]{to_address}, 'to@example.com', 'AutoEmailPrimaryAddress=email, EnqueueLetter used the to_address given in parameter' );
476
477
$dbh->do(q|DELETE FROM message_queue|);
478
delete $my_message->{to_address};
479
is( C4::Letters::EnqueueLetter($my_message), 1, 'message successfully queued' );
480
$messages = C4::Letters::GetQueuedMessages({ borrowernumber => $borrowernumber });
481
is( scalar( @$messages ), 1, 'The message has been queued for the expected patron' );
482
is( $messages->[0]{to_address}, $email, 'AutoEmailPrimaryAddress=email, EnqueueLetter used the patron email address if no to_address is given in parameter' );
483
484
$dbh->do(q|DELETE FROM message_queue|);
485
t::lib::Mocks::mock_preference('AutoEmailPrimaryAddress', 'emailpro');
486
is( C4::Letters::EnqueueLetter($my_message), 1, 'message successfully queued' );
487
$messages = C4::Letters::GetQueuedMessages({ borrowernumber => $borrowernumber });
488
is( scalar( @$messages ), 1, 'The message has been queued for the expected patron' );
489
is( $messages->[0]{to_address}, $emailpro, 'AutoEmailPrimaryAddress=emailpro, EnqueueLetter used the patron emailpro address if no to_address is given in parameter' );
490
491
$dbh->do(q|DELETE FROM message_queue|);
492
t::lib::Mocks::mock_preference('AutoEmailPrimaryAddress', 'OFF');
493
is( C4::Letters::EnqueueLetter($my_message), 1, 'message successfully queued' );
494
$messages = C4::Letters::GetQueuedMessages({ borrowernumber => $borrowernumber });
495
is( scalar( @$messages ), 1, 'The message has been queued for the expected patron' );
496
is( $messages->[0]{to_address}, $email, 'AutoEmailPrimaryAddress=OFF, EnqueueLetter used the patron email address if no to_address is given in parameter' );
497
498
$dbh->do(q|DELETE FROM message_queue|);
499
t::lib::Mocks::mock_preference('AutoEmailPrimaryAddress', 'email|OFF|emailpro'); # This is no consistent. OFF should be alone.
500
is( C4::Letters::EnqueueLetter($my_message), 1, 'message successfully queued' );
501
$messages = C4::Letters::GetQueuedMessages({ borrowernumber => $borrowernumber });
502
is( scalar( @$messages ), 1, 'The message has been queued for the expected patron' );
503
is( $messages->[0]{to_address}, $email, 'AutoEmailPrimaryAddress=email|OFF|emailpro, EnqueueLetter used the patron email address if no to_address is given in parameter' );
504
505
$dbh->do(q|DELETE FROM message_queue|);
506
t::lib::Mocks::mock_preference('AutoEmailPrimaryAddress', 'email|emailpro');
507
is( C4::Letters::EnqueueLetter($my_message), 2, 'messages successfully queued' );
508
$messages = C4::Letters::GetQueuedMessages({ borrowernumber => $borrowernumber });
509
is( scalar( @$messages ), 2, 'The messages have been queued for the expected patron' );
510
is( $messages->[0]{to_address}, $email, 'AutoEmailPrimaryAddress=email|emailpro, EnqueueLetter used the patron email address for the first letter' );
511
is( $messages->[1]{to_address}, $emailpro, 'AutoEmailPrimaryAddress=email|emailpro, EnqueueLetter used the patron emailpro address for the second letter' );
512
456
{
513
{
457
use C4::Serials;
514
use C4::Serials;
458
515
(-)a/t/db_dependent/Members.t (-5 / +12 lines)
Lines 139-153 is ($checkcardnum, "2", "Card number is too long"); Link Here
139
139
140
t::lib::Mocks::mock_preference( 'AutoEmailPrimaryAddress', 'OFF' );
140
t::lib::Mocks::mock_preference( 'AutoEmailPrimaryAddress', 'OFF' );
141
C4::Context->clear_syspref_cache();
141
C4::Context->clear_syspref_cache();
142
my $notice_emails = GetNoticeEmailAddresses($member->{'borrowernumber'});
143
is_deeply( $notice_emails, [ $EMAIL ], "GetNoticeEmailAddresses returns correct value when AutoEmailPrimaryAddress is off" );
142
144
143
my $notice_email = GetNoticeEmailAddress($member->{'borrowernumber'});
145
C4::Context->set_preference( 'AutoEmailPrimaryAddress', 'emailpro,OFF' );
144
is ($notice_email, $EMAIL, "GetNoticeEmailAddress returns correct value when AutoEmailPrimaryAddress is off");
146
C4::Context->clear_syspref_cache();
147
$notice_emails = GetNoticeEmailAddresses($member->{'borrowernumber'});
148
is_deeply( $notice_emails, [ $EMAIL ], "GetNoticeEmailAddresses returns correct value when AutoEmailPrimaryAddress contains off" );
145
149
146
t::lib::Mocks::mock_preference( 'AutoEmailPrimaryAddress', 'emailpro' );
150
t::lib::Mocks::mock_preference( 'AutoEmailPrimaryAddress', 'emailpro' );
147
C4::Context->clear_syspref_cache();
151
C4::Context->clear_syspref_cache();
152
$notice_emails = GetNoticeEmailAddresses($member->{'borrowernumber'});
153
is_deeply ($notice_emails, [ $EMAILPRO ], "GetNoticeEmailAddresses returns correct value when AutoEmailPrimaryAddress is emailpro");
148
154
149
$notice_email = GetNoticeEmailAddress($member->{'borrowernumber'});
155
C4::Context->set_preference( 'AutoEmailPrimaryAddress', 'emailpro,email' );
150
is ($notice_email, $EMAILPRO, "GetNoticeEmailAddress returns correct value when AutoEmailPrimaryAddress is emailpro");
156
C4::Context->clear_syspref_cache();
157
$notice_emails = GetNoticeEmailAddresses($member->{'borrowernumber'});
158
is_deeply ($notice_emails, [ $EMAILPRO, $EMAIL ], "GetNoticeEmailAddresses returns correct value when AutoEmailPrimaryAddress is emailpro|email");
151
159
152
ok(!$member->{is_expired}, "GetMemberDetails() indicates that patron is not expired");
160
ok(!$member->{is_expired}, "GetMemberDetails() indicates that patron is not expired");
153
ModMember(borrowernumber => $member->{'borrowernumber'}, dateexpiry => '2001-01-1');
161
ModMember(borrowernumber => $member->{'borrowernumber'}, dateexpiry => '2001-01-1');
154
- 

Return to bug 12802