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

(-)a/C4/Letters.pm (-71 / +62 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 Koha::Email;
38
use Koha::Email;
39
use Koha::DateUtils qw( format_sqldatetime dt_from_string );
39
use Koha::DateUtils qw( format_sqldatetime dt_from_string );
40
40
Lines 977-983 sub EnqueueLetter { Link Here
977
    my $params = shift or return;
977
    my $params = shift or return;
978
978
979
    return unless exists $params->{'letter'};
979
    return unless exists $params->{'letter'};
980
#   return unless exists $params->{'borrowernumber'};
981
    return unless exists $params->{'message_transport_type'};
980
    return unless exists $params->{'message_transport_type'};
982
981
983
    my $content = $params->{letter}->{content};
982
    my $content = $params->{letter}->{content};
Lines 997-1024 sub EnqueueLetter { Link Here
997
        );
996
        );
998
    }
997
    }
999
998
1000
    my $dbh       = C4::Context->dbh();
999
    my @to_addresses;
1001
    my $statement = << 'ENDSQL';
1000
    if ( $params->{to_address} ) {
1002
INSERT INTO message_queue
1001
        @to_addresses = ( $params->{to_address} );
1003
( 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' ) {
1004
VALUES
1003
        @to_addresses = @{ C4::Members::GetNoticeEmailAddresses( $params->{borrowernumber} ) };
1005
( ?,              ?,       ?,       ?,        ?,           ?,                      ?,      NOW(),       ?,          ?,            ? )
1004
    }
1006
ENDSQL
1007
1005
1008
    my $sth    = $dbh->prepare($statement);
1006
    my $from_address;
1009
    my $result = $sth->execute(
1007
    if ( $params->{from_address} ) {
1010
        $params->{'borrowernumber'},              # borrowernumber
1008
        $from_address = $params->{from_address};
1011
        $params->{'letter'}->{'title'},           # subject
1009
    } elsif ( $params->{message_transport_type} eq 'email' ) {
1012
        $params->{'letter'}->{'content'},         # content
1010
        if ( $params->{borrowernumber} ) {
1013
        $params->{'letter'}->{'metadata'} || '',  # metadata
1011
            my $rs = Koha::Database->new->schema->resultset('Borrower')->search({ borrowernumber => $params->{borrowernumber} }, {join => 'branchcode'});
1014
        $params->{'letter'}->{'code'}     || '',  # letter_code
1012
            $from_address = $rs->next->branchcode->branchemail;
1015
        $params->{'message_transport_type'},      # message_transport_type
1013
        }
1016
        'pending',                                # status
1014
1017
        $params->{'to_address'},                  # to_address
1015
        $from_address ||= C4::Context->preference('KohaAdminEmailAddress');
1018
        $params->{'from_address'},                # from_address
1016
    }
1019
        $params->{'letter'}->{'content-type'},    # content_type
1017
1020
    );
1018
    my $rs = Koha::Database->new->schema->resultset('MessageQueue');
1021
    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 );
1022
}
1034
}
1023
1035
1024
=head2 SendQueuedMessages ([$hashref]) 
1036
=head2 SendQueuedMessages ([$hashref]) 
Lines 1043-1048 sub SendQueuedMessages { Link Here
1043
          if $params->{'verbose'} or $debug;
1055
          if $params->{'verbose'} or $debug;
1044
        # This is just begging for subclassing
1056
        # This is just begging for subclassing
1045
        next MESSAGE if ( lc($message->{'message_transport_type'}) eq 'rss' );
1057
        next MESSAGE if ( lc($message->{'message_transport_type'}) eq 'rss' );
1058
1046
        if ( lc( $message->{'message_transport_type'} ) eq 'email' ) {
1059
        if ( lc( $message->{'message_transport_type'} ) eq 'email' ) {
1047
            _send_message_by_email( $message, $params->{'username'}, $params->{'password'}, $params->{'method'} );
1060
            _send_message_by_email( $message, $params->{'username'}, $params->{'password'}, $params->{'method'} );
1048
        }
1061
        }
Lines 1111-1141 list of hashes, each has represents a message in the message queue. Link Here
1111
sub GetQueuedMessages {
1124
sub GetQueuedMessages {
1112
    my $params = shift;
1125
    my $params = shift;
1113
1126
1114
    my $dbh = C4::Context->dbh();
1127
    my $rs = Koha::Database->new->schema->resultset('MessageQueue')->search(
1115
    my $statement = << 'ENDSQL';
1128
        {
1116
SELECT message_id, borrowernumber, subject, content, message_transport_type, status, time_queued
1129
            (
1117
FROM message_queue
1130
                $params->{borrowernumber}
1118
ENDSQL
1131
                ? ( borrowernumber => $params->{borrowernumber} )
1119
1132
                : ()
1120
    my @query_params;
1133
            ),
1121
    my @whereclauses;
1134
        },
1122
    if ( exists $params->{'borrowernumber'} ) {
1135
        {
1123
        push @whereclauses, ' borrowernumber = ? ';
1136
            (
1124
        push @query_params, $params->{'borrowernumber'};
1137
                $params->{limit}
1125
    }
1138
                ? ( rows => $params->{limit} )
1126
1139
                : ()
1127
    if ( @whereclauses ) {
1140
            ),
1128
        $statement .= ' WHERE ' . join( 'AND', @whereclauses );
1141
        },
1129
    }
1142
    );
1130
1143
    $rs->result_class('DBIx::Class::ResultClass::HashRefInflator');
1131
    if ( defined $params->{'limit'} ) {
1144
    return [ $rs->all ];
1132
        $statement .= ' LIMIT ? ';
1133
        push @query_params, $params->{'limit'};
1134
    }
1135
1136
    my $sth = $dbh->prepare( $statement );
1137
    my $result = $sth->execute( @query_params );
1138
    return $sth->fetchall_arrayref({});
1139
}
1145
}
1140
1146
1141
=head2 GetMessageTransportTypes
1147
=head2 GetMessageTransportTypes
Lines 1291-1312 sub _send_message_by_email { Link Here
1291
    my ($username, $password, $method) = @_;
1297
    my ($username, $password, $method) = @_;
1292
1298
1293
    my $member = C4::Members::GetMember( 'borrowernumber' => $message->{'borrowernumber'} );
1299
    my $member = C4::Members::GetMember( 'borrowernumber' => $message->{'borrowernumber'} );
1294
    my $to_address = $message->{'to_address'};
1300
1295
    unless ($to_address) {
1301
    unless ( $member and $message->{to_address} ) {
1296
        unless ($member) {
1302
        warn "FAIL: No 'to_address' and INVALID borrowernumber ($message->{borrowernumber})" unless $member;
1297
            warn "FAIL: No 'to_address' and INVALID borrowernumber ($message->{borrowernumber})";
1303
        _set_message_status({
1298
            _set_message_status( { message_id => $message->{'message_id'},
1304
            message_id => $message->{'message_id'},
1299
                                   status     => 'failed' } );
1305
            status     => 'failed'
1300
            return;
1306
        });
1301
        }
1307
        return;
1302
        $to_address = C4::Members::GetNoticeEmailAddress( $message->{'borrowernumber'} );
1303
        unless ($to_address) {  
1304
            # warn "FAIL: No 'to_address' and no email for " . ($member->{surname} ||'') . ", borrowernumber ($message->{borrowernumber})";
1305
            # warning too verbose for this more common case?
1306
            _set_message_status( { message_id => $message->{'message_id'},
1307
                                   status     => 'failed' } );
1308
            return;
1309
        }
1310
    }
1308
    }
1311
1309
1312
    my $utf8   = decode('MIME-Header', $message->{'subject'} );
1310
    my $utf8   = decode('MIME-Header', $message->{'subject'} );
Lines 1327-1333 sub _send_message_by_email { Link Here
1327
    my $email = Koha::Email->new();
1325
    my $email = Koha::Email->new();
1328
    my %sendmail_params = $email->create_message_headers(
1326
    my %sendmail_params = $email->create_message_headers(
1329
        {
1327
        {
1330
            to      => $to_address,
1331
            from    => $message->{'from_address'} || $branch_email,
1328
            from    => $message->{'from_address'} || $branch_email,
1332
            replyto => $branch_replyto,
1329
            replyto => $branch_replyto,
1333
            sender  => $branch_returnpath,
1330
            sender  => $branch_returnpath,
Lines 1417-1428 sub _send_message_by_sms { Link Here
1417
    return $success;
1414
    return $success;
1418
}
1415
}
1419
1416
1420
sub _update_message_to_address {
1421
    my ($id, $to)= @_;
1422
    my $dbh = C4::Context->dbh();
1423
    $dbh->do('UPDATE message_queue SET to_address=? WHERE message_id=?',undef,($to,$id));
1424
}
1425
1426
sub _set_message_status {
1417
sub _set_message_status {
1427
    my $params = shift or return;
1418
    my $params = shift or return;
1428
1419
(-)a/C4/Members.pm (-20 / +25 lines)
Lines 66-72 BEGIN { Link Here
66
        &GetAllIssues
66
        &GetAllIssues
67
67
68
        &GetFirstValidEmailAddress
68
        &GetFirstValidEmailAddress
69
        &GetNoticeEmailAddress
69
        &GetNoticeEmailAddresses
70
70
71
        &GetMemberAccountRecords
71
        &GetMemberAccountRecords
72
        &GetBorNotifyAcctRecord
72
        &GetBorNotifyAcctRecord
Lines 990-1022 sub GetFirstValidEmailAddress { Link Here
990
    }
990
    }
991
}
991
}
992
992
993
=head2 GetNoticeEmailAddress
993
=head2 GetNoticeEmailAddresses
994
994
995
  $email = GetNoticeEmailAddress($borrowernumber);
995
  $emails = GetNoticeEmailAddresses( borrowernumber );
996
996
997
Return the email address of borrower used for notices, given the borrowernumber.
997
Return the email addresses of borrower used for notices, given the borrowernumber.
998
Returns the empty string if no email address.
998
Returns an empty arrayref if no email address.
999
999
1000
=cut
1000
=cut
1001
1001
1002
sub GetNoticeEmailAddress {
1002
sub GetNoticeEmailAddresses {
1003
    my $borrowernumber = shift;
1003
    my $borrowernumber = shift;
1004
1004
1005
    my $which_address = C4::Context->preference("AutoEmailPrimaryAddress");
1005
    my $which_addresses = C4::Context->preference("AutoEmailPrimaryAddress");
1006
    # if syspref is set to 'first valid' (value == OFF), look up email address
1006
    my @email_addresses;
1007
    if ( $which_address eq 'OFF' ) {
1007
    for my $email_address_field ( split /,/, $which_addresses ) {
1008
        return GetFirstValidEmailAddress($borrowernumber);
1008
1009
        # if syspref is set to 'first valid' (value == OFF), look up email address
1010
        if ( $email_address_field eq 'OFF' ) {
1011
            return [ GetFirstValidEmailAddress($borrowernumber) ];
1012
        }
1013
1014
        # specified email address field
1015
        my $email_address = C4::Context->dbh->selectcol_arrayref(
1016
            qq|
1017
                SELECT $email_address_field AS email
1018
                FROM borrowers
1019
                WHERE borrowernumber = ?
1020
            |, {}, $borrowernumber
1021
        );
1022
        push @email_addresses, $email_address->[0] if $email_address->[0];
1009
    }
1023
    }
1010
    # specified email address field
1024
    return \@email_addresses;
1011
    my $dbh = C4::Context->dbh;
1012
    my $sth = $dbh->prepare( qq{
1013
        SELECT $which_address AS primaryemail
1014
        FROM borrowers
1015
        WHERE borrowernumber=?
1016
    } );
1017
    $sth->execute($borrowernumber);
1018
    my $data = $sth->fetchrow_hashref;
1019
    return $data->{'primaryemail'} || '';
1020
}
1025
}
1021
1026
1022
=head2 GetBorrowersToExpunge
1027
=head2 GetBorrowersToExpunge
(-)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 250-257 sub AddReserve { Link Here
250
                {   letter                 => $letter,
250
                {   letter                 => $letter,
251
                    borrowernumber         => $borrowernumber,
251
                    borrowernumber         => $borrowernumber,
252
                    message_transport_type => 'email',
252
                    message_transport_type => 'email',
253
                    from_address           => $admin_email_address,
253
                    to_address             => $admin_email_address,
254
                    to_address           => $admin_email_address,
255
                }
254
                }
256
            );
255
            );
257
        }
256
        }
Lines 1927-1935 sub _koha_notify_reserve { Link Here
1927
1926
1928
    my $borrower = C4::Members::GetMember(borrowernumber => $borrowernumber);
1927
    my $borrower = C4::Members::GetMember(borrowernumber => $borrowernumber);
1929
1928
1930
    # Try to get the borrower's email address
1931
    my $to_address = C4::Members::GetNoticeEmailAddress($borrowernumber);
1932
1933
    my $messagingprefs = C4::Members::Messaging::GetMessagingPreferences( {
1929
    my $messagingprefs = C4::Members::Messaging::GetMessagingPreferences( {
1934
            borrowernumber => $borrowernumber,
1930
            borrowernumber => $borrowernumber,
1935
            message_name => 'Hold_Filled'
1931
            message_name => 'Hold_Filled'
Lines 1968-1981 sub _koha_notify_reserve { Link Here
1968
        C4::Letters::EnqueueLetter( {
1964
        C4::Letters::EnqueueLetter( {
1969
            letter => $letter,
1965
            letter => $letter,
1970
            borrowernumber => $borrowernumber,
1966
            borrowernumber => $borrowernumber,
1971
            from_address => $admin_email_address,
1972
            message_transport_type => $mtt,
1967
            message_transport_type => $mtt,
1973
        } );
1968
        } );
1974
    };
1969
    };
1975
1970
1971
    # Try to get the borrower's email addresses
1972
    my $to_addresses = C4::Members::GetNoticeEmailAddresses($borrowernumber);
1973
1976
    while ( my ( $mtt, $letter_code ) = each %{ $messagingprefs->{transports} } ) {
1974
    while ( my ( $mtt, $letter_code ) = each %{ $messagingprefs->{transports} } ) {
1977
        next if (
1975
        next if (
1978
               ( $mtt eq 'email' and not $to_address ) # No email address
1976
               ( $mtt eq 'email' and not @$to_addresses ) # No email address
1979
            or ( $mtt eq 'sms'   and not $borrower->{smsalertnumber} ) # No SMS number
1977
            or ( $mtt eq 'sms'   and not $borrower->{smsalertnumber} ) # No SMS number
1980
            or ( $mtt eq 'phone' and C4::Context->preference('TalkingTechItivaPhoneNotification') ) # Notice is handled by TalkingTech_itiva_outbound.pl
1978
            or ( $mtt eq 'phone' and C4::Context->preference('TalkingTechItivaPhoneNotification') ) # Notice is handled by TalkingTech_itiva_outbound.pl
1981
        );
1979
        );
(-)a/misc/cronjobs/overdue_notices.pl (-5 / +5 lines)
Lines 579-586 END_SQL Link Here
579
                  and warn "borrower $borr has items triggering level $i.";
579
                  and warn "borrower $borr has items triggering level $i.";
580
580
581
                @emails_to_use = ();
581
                @emails_to_use = ();
582
                my $notice_email =
583
                    C4::Members::GetNoticeEmailAddress($borrowernumber);
584
                unless ($nomail) {
582
                unless ($nomail) {
585
                    if (@emails) {
583
                    if (@emails) {
586
                        foreach (@emails) {
584
                        foreach (@emails) {
Lines 588-594 END_SQL Link Here
588
                        }
586
                        }
589
                    }
587
                    }
590
                    else {
588
                    else {
591
                        push @emails_to_use, $notice_email if ($notice_email);
589
                        my $notice_emails =
590
                            C4::Members::GetNoticeEmailAddresses($borrowernumber);
591
                        push @emails_to_use, @$notice_emails;
592
                    }
592
                    }
593
                }
593
                }
594
594
Lines 733-739 END_SQL Link Here
733
                              letternumber   => $i,
733
                              letternumber   => $i,
734
                              postcode       => $data->{'zipcode'},
734
                              postcode       => $data->{'zipcode'},
735
                              country        => $data->{'country'},
735
                              country        => $data->{'country'},
736
                              email          => $notice_email,
736
                              email          => $notice_emails,
737
                              itemcount      => $itemcount,
737
                              itemcount      => $itemcount,
738
                              titles         => $titles,
738
                              titles         => $titles,
739
                              outputformat   => defined $csvfilename ? 'csv' : defined $htmlfilename ? 'html' : defined $text_filename ? 'text' : '',
739
                              outputformat   => defined $csvfilename ? 'csv' : defined $htmlfilename ? 'html' : defined $text_filename ? 'text' : '',
Lines 752-758 END_SQL Link Here
752
                                  city           => $data->{'city'},
752
                                  city           => $data->{'city'},
753
                                  postcode       => $data->{'zipcode'},
753
                                  postcode       => $data->{'zipcode'},
754
                                  country        => $data->{'country'},
754
                                  country        => $data->{'country'},
755
                                  email          => $notice_email,
755
                                  email          => ( scalar( @emails_to_use ) ? $emails_to_use[0] : undef ),
756
                                  itemcount      => $itemcount,
756
                                  itemcount      => $itemcount,
757
                                  titles         => $titles,
757
                                  titles         => $titles,
758
                                  outputformat   => defined $csvfilename ? 'csv' : defined $htmlfilename ? 'html' : defined $text_filename ? 'text' : '',
758
                                  outputformat   => defined $csvfilename ? 'csv' : defined $htmlfilename ? 'html' : defined $text_filename ? 'text' : '',
(-)a/opac/opac-memberentry.pl (-3 / +1 lines)
Lines 181-191 if ( $action eq 'create' ) { Link Here
181
181
182
            C4::Letters::EnqueueLetter(
182
            C4::Letters::EnqueueLetter(
183
                {
183
                {
184
                    borrowernumber         => $borrower{borrowernumber},
184
                    letter                 => $letter,
185
                    letter                 => $letter,
185
                    message_transport_type => 'email',
186
                    message_transport_type => 'email',
186
                    to_address             => $borrower{'email'},
187
                    from_address =>
188
                      C4::Context->preference('KohaAdminEmailAddress'),
189
                }
187
                }
190
            );
188
            );
191
        }
189
        }
(-)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 64-75 my $library = $builder->build({ Link Here
64
});
64
});
65
my $patron_category = $builder->build({ source => 'Category' });
65
my $patron_category = $builder->build({ source => 'Category' });
66
my $date = dt_from_string;
66
my $date = dt_from_string;
67
my ( $email, $emailpro ) = ( 'email@example.org', 'emailpro@example.org' );
67
my $borrowernumber = AddMember(
68
my $borrowernumber = AddMember(
68
    firstname    => 'Jane',
69
    firstname    => 'Jane',
69
    surname      => 'Smith',
70
    surname      => 'Smith',
70
    categorycode => $patron_category,,
71
    categorycode => $patron_category,,
71
    branchcode   => $library->{branchcode},
72
    branchcode   => $library->{branchcode},
72
    dateofbirth  => $date,
73
    dateofbirth  => $date,
74
    email        => $email,
75
    emailpro     => $emailpro,
73
);
76
);
74
77
75
my $marc_record = MARC::Record->new;
78
my $marc_record = MARC::Record->new;
Lines 95-102 my $my_message = { Link Here
95
    to_address             => 'to@example.com',
98
    to_address             => 'to@example.com',
96
    from_address           => 'from@example.com',
99
    from_address           => 'from@example.com',
97
};
100
};
98
my $message_id = C4::Letters::EnqueueLetter($my_message);
101
is( C4::Letters::EnqueueLetter($my_message), undef, 'EnqueueLetter without the letter argument returns undef' );
99
is( $message_id, undef, 'EnqueueLetter without the letter argument returns undef' );
100
102
101
delete $my_message->{message_transport_type};
103
delete $my_message->{message_transport_type};
102
$my_message->{letter} = {
104
$my_message->{letter} = {
Lines 106-118 $my_message->{letter} = { Link Here
106
    code         => 'TEST_MESSAGE',
108
    code         => 'TEST_MESSAGE',
107
    content_type => 'text/plain',
109
    content_type => 'text/plain',
108
};
110
};
109
$message_id = C4::Letters::EnqueueLetter($my_message);
111
is( C4::Letters::EnqueueLetter($my_message), undef, 'EnqueueLetter without the message_transport_type argument returns undef' );
110
is( $message_id, undef, 'EnqueueLetter without the message type argument argument returns undef' );
111
112
112
$my_message->{message_transport_type} = 'sms';
113
$my_message->{message_transport_type} = 'sms';
113
$message_id = C4::Letters::EnqueueLetter($my_message);
114
my $messages_queued = C4::Letters::EnqueueLetter($my_message);
114
ok(defined $message_id && $message_id > 0, 'new message successfully queued');
115
is($messages_queued, 1, 'new message successfully queued');
115
116
116
117
# GetQueuedMessages
117
# GetQueuedMessages
118
my $messages = C4::Letters::GetQueuedMessages();
118
my $messages = C4::Letters::GetQueuedMessages();
Lines 120-126 is( @$messages, 1, 'GetQueuedMessages without argument returns all the entries' Link Here
120
120
121
$messages = C4::Letters::GetQueuedMessages({ borrowernumber => $borrowernumber });
121
$messages = C4::Letters::GetQueuedMessages({ borrowernumber => $borrowernumber });
122
is( @$messages, 1, 'one message stored for the borrower' );
122
is( @$messages, 1, 'one message stored for the borrower' );
123
is( $messages->[0]->{message_id}, $message_id, 'EnqueueLetter returns the message id correctly' );
124
is( $messages->[0]->{borrowernumber}, $borrowernumber, 'EnqueueLetter stores the borrower number correctly' );
123
is( $messages->[0]->{borrowernumber}, $borrowernumber, 'EnqueueLetter stores the borrower number correctly' );
125
is( $messages->[0]->{subject}, $my_message->{letter}->{title}, 'EnqueueLetter stores the subject correctly' );
124
is( $messages->[0]->{subject}, $my_message->{letter}->{title}, 'EnqueueLetter stores the subject correctly' );
126
is( $messages->[0]->{content}, $my_message->{letter}->{content}, 'EnqueueLetter stores the content correctly' );
125
is( $messages->[0]->{content}, $my_message->{letter}->{content}, 'EnqueueLetter stores the content correctly' );
Lines 490-495 is($mail{'To'}, 'testemail@mydomain.com', "mailto correct in sent claim"); Link Here
490
is($mail{'Message'}, 'my vendor|John Smith|Ordernumber ' . $ordernumber . ' (Silence in the library) (1 ordered)', 'Claim notice text constructed successfully');
489
is($mail{'Message'}, 'my vendor|John Smith|Ordernumber ' . $ordernumber . ' (Silence in the library) (1 ordered)', 'Claim notice text constructed successfully');
491
}
490
}
492
491
492
# EnqueueLetter and AutoEmailPrimaryAddress
493
$my_message = {
494
    borrowernumber         => $borrowernumber,
495
    message_transport_type => 'email',
496
    to_address             => 'to@example.com',
497
    from_address           => 'from@example.com',
498
    letter                 => {
499
        content      => 'a message',
500
        title        => 'message title',
501
        metadata     => 'metadata',
502
        code         => 'TEST_MESSAGE',
503
        content_type => 'text/plain',
504
    },
505
};
506
507
$dbh->do(q|DELETE FROM message_queue|);
508
t::lib::Mocks::mock_preference('AutoEmailPrimaryAddress', 'email');
509
is( C4::Letters::EnqueueLetter($my_message), 1, 'message successfully queued' );
510
$messages = C4::Letters::GetQueuedMessages({ borrowernumber => $borrowernumber });
511
is( scalar( @$messages ), 1, 'The message has been queued for the expected patron' );
512
is( $messages->[0]{to_address}, 'to@example.com', 'AutoEmailPrimaryAddress=email, EnqueueLetter used the to_address given in parameter' );
513
514
$dbh->do(q|DELETE FROM message_queue|);
515
delete $my_message->{to_address};
516
is( C4::Letters::EnqueueLetter($my_message), 1, 'message successfully queued' );
517
$messages = C4::Letters::GetQueuedMessages({ borrowernumber => $borrowernumber });
518
is( scalar( @$messages ), 1, 'The message has been queued for the expected patron' );
519
is( $messages->[0]{to_address}, $email, 'AutoEmailPrimaryAddress=email, EnqueueLetter used the patron email address if no to_address is given in parameter' );
520
521
$dbh->do(q|DELETE FROM message_queue|);
522
t::lib::Mocks::mock_preference('AutoEmailPrimaryAddress', 'emailpro');
523
is( C4::Letters::EnqueueLetter($my_message), 1, 'message successfully queued' );
524
$messages = C4::Letters::GetQueuedMessages({ borrowernumber => $borrowernumber });
525
is( scalar( @$messages ), 1, 'The message has been queued for the expected patron' );
526
is( $messages->[0]{to_address}, $emailpro, 'AutoEmailPrimaryAddress=emailpro, EnqueueLetter used the patron emailpro address if no to_address is given in parameter' );
527
528
$dbh->do(q|DELETE FROM message_queue|);
529
t::lib::Mocks::mock_preference('AutoEmailPrimaryAddress', 'OFF');
530
is( C4::Letters::EnqueueLetter($my_message), 1, 'message successfully queued' );
531
$messages = C4::Letters::GetQueuedMessages({ borrowernumber => $borrowernumber });
532
is( scalar( @$messages ), 1, 'The message has been queued for the expected patron' );
533
is( $messages->[0]{to_address}, $email, 'AutoEmailPrimaryAddress=OFF, EnqueueLetter used the patron email address if no to_address is given in parameter' );
534
535
$dbh->do(q|DELETE FROM message_queue|);
536
t::lib::Mocks::mock_preference('AutoEmailPrimaryAddress', 'email|OFF|emailpro'); # This is no consistent. OFF should be alone.
537
is( C4::Letters::EnqueueLetter($my_message), 1, 'message successfully queued' );
538
$messages = C4::Letters::GetQueuedMessages({ borrowernumber => $borrowernumber });
539
is( scalar( @$messages ), 1, 'The message has been queued for the expected patron' );
540
is( $messages->[0]{to_address}, $email, 'AutoEmailPrimaryAddress=email|OFF|emailpro, EnqueueLetter used the patron email address if no to_address is given in parameter' );
541
542
$dbh->do(q|DELETE FROM message_queue|);
543
t::lib::Mocks::mock_preference('AutoEmailPrimaryAddress', 'email|emailpro');
544
is( C4::Letters::EnqueueLetter($my_message), 2, 'messages successfully queued' );
545
$messages = C4::Letters::GetQueuedMessages({ borrowernumber => $borrowernumber });
546
is( scalar( @$messages ), 2, 'The messages have been queued for the expected patron' );
547
is( $messages->[0]{to_address}, $email, 'AutoEmailPrimaryAddress=email|emailpro, EnqueueLetter used the patron email address for the first letter' );
548
is( $messages->[1]{to_address}, $emailpro, 'AutoEmailPrimaryAddress=email|emailpro, EnqueueLetter used the patron emailpro address for the second letter' );
549
493
{
550
{
494
use C4::Serials;
551
use C4::Serials;
495
552
(-)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
# Check_Userid tests
160
# Check_Userid tests
153
%data = (
161
%data = (
154
- 

Return to bug 12802