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

(-)a/C4/Branch.pm (+8 lines)
Lines 20-25 use strict; Link Here
20
#use warnings; FIXME - Bug 2505
20
#use warnings; FIXME - Bug 2505
21
require Exporter;
21
require Exporter;
22
use C4::Context;
22
use C4::Context;
23
use Koha::Database;
23
24
24
use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
25
use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
25
26
Lines 568-573 sub GetBranchesCount { Link Here
568
    return $row->{'branches_count'};
569
    return $row->{'branches_count'};
569
}
570
}
570
571
572
sub GetBranchEmailFromBorrowernumber {
573
    my ( $borrowernumber ) = @_;
574
    return unless $borrowernumber;
575
    my $rs = Koha::Database->new->schema->resultset('Borrower')->search({ borrowernumber => $borrowernumber }, {join => 'branchcode'});
576
    return $rs->next->branchcode->branchemail;
577
}
578
571
1;
579
1;
572
__END__
580
__END__
573
581
(-)a/C4/Letters.pm (-71 / +61 lines)
Lines 31-36 use C4::Log; Link Here
31
use C4::SMS;
31
use C4::SMS;
32
use C4::Debug;
32
use C4::Debug;
33
use Koha::DateUtils;
33
use Koha::DateUtils;
34
use Koha::Database;
34
use Date::Calc qw( Add_Delta_Days );
35
use Date::Calc qw( Add_Delta_Days );
35
use Encode;
36
use Encode;
36
use Carp;
37
use Carp;
Lines 715-721 sub EnqueueLetter { Link Here
715
    my $params = shift or return;
716
    my $params = shift or return;
716
717
717
    return unless exists $params->{'letter'};
718
    return unless exists $params->{'letter'};
718
#   return unless exists $params->{'borrowernumber'};
719
    return unless exists $params->{'message_transport_type'};
719
    return unless exists $params->{'message_transport_type'};
720
720
721
    my $content = $params->{letter}->{content};
721
    my $content = $params->{letter}->{content};
Lines 735-762 sub EnqueueLetter { Link Here
735
        );
735
        );
736
    }
736
    }
737
737
738
    my $dbh       = C4::Context->dbh();
738
    my @to_addresses;
739
    my $statement = << 'ENDSQL';
739
    if ( $params->{to_address} ) {
740
INSERT INTO message_queue
740
        @to_addresses = ( $params->{to_address} );
741
( borrowernumber, subject, content, metadata, letter_code, message_transport_type, status, time_queued, to_address, from_address, content_type )
741
    } elsif ( $params->{borrowernumber} and $params->{message_transport_type} eq 'email' ) {
742
VALUES
742
        @to_addresses = @{ C4::Members::GetNoticeEmailAddresses( $params->{borrowernumber} ) };
743
( ?,              ?,       ?,       ?,        ?,           ?,                      ?,      NOW(),       ?,          ?,            ? )
743
    }
744
ENDSQL
745
744
746
    my $sth    = $dbh->prepare($statement);
745
    my $from_address;
747
    my $result = $sth->execute(
746
    if ( $params->{from_address} ) {
748
        $params->{'borrowernumber'},              # borrowernumber
747
        $from_address = $params->{from_address};
749
        $params->{'letter'}->{'title'},           # subject
748
    } elsif ( $params->{message_transport_type} eq 'email' ) {
750
        $params->{'letter'}->{'content'},         # content
749
        if ( $params->{borrowernumber} ) {
751
        $params->{'letter'}->{'metadata'} || '',  # metadata
750
            $from_address = C4::Branch::GetBranchEmailFromBorrowernumber( $params->{borrowernumber} );
752
        $params->{'letter'}->{'code'}     || '',  # letter_code
751
        }
753
        $params->{'message_transport_type'},      # message_transport_type
752
754
        'pending',                                # status
753
        $from_address ||= C4::Context->preference('KohaAdminEmailAddress');
755
        $params->{'to_address'},                  # to_address
754
    }
756
        $params->{'from_address'},                # from_address
755
757
        $params->{'letter'}->{'content-type'},    # content_type
756
    my $rs = Koha::Database->new->schema->resultset('MessageQueue');
758
    );
757
    for my $to_address ( @to_addresses ) {
759
    return $dbh->last_insert_id(undef,undef,'message_queue', undef);
758
        $rs->create({
759
            borrowernumber => $params->{borrowernumber},
760
            subject => $params->{letter}{title},
761
            content => $params->{letter}{content},
762
            metadata => ( $params->{letter}{metadata} || '' ),
763
            letter_code => ( $params->{letter}{code}     || ''),
764
            message_transport_type => $params->{message_transport_type},
765
            status => 'pending',
766
            to_address => $to_address,
767
            from_address => $from_address,
768
            content_type => $params->{letter}{'content-type'},
769
        });
770
    }
771
    return scalar( @to_addresses );
760
}
772
}
761
773
762
=head2 SendQueuedMessages ([$hashref]) 
774
=head2 SendQueuedMessages ([$hashref]) 
Lines 781-786 sub SendQueuedMessages { Link Here
781
          if $params->{'verbose'} or $debug;
793
          if $params->{'verbose'} or $debug;
782
        # This is just begging for subclassing
794
        # This is just begging for subclassing
783
        next MESSAGE if ( lc($message->{'message_transport_type'}) eq 'rss' );
795
        next MESSAGE if ( lc($message->{'message_transport_type'}) eq 'rss' );
796
784
        if ( lc( $message->{'message_transport_type'} ) eq 'email' ) {
797
        if ( lc( $message->{'message_transport_type'} ) eq 'email' ) {
785
            _send_message_by_email( $message, $params->{'username'}, $params->{'password'}, $params->{'method'} );
798
            _send_message_by_email( $message, $params->{'username'}, $params->{'password'}, $params->{'method'} );
786
        }
799
        }
Lines 842-872 list of hashes, each has represents a message in the message queue. Link Here
842
sub GetQueuedMessages {
855
sub GetQueuedMessages {
843
    my $params = shift;
856
    my $params = shift;
844
857
845
    my $dbh = C4::Context->dbh();
858
    my $rs = Koha::Database->new->schema->resultset('MessageQueue')->search(
846
    my $statement = << 'ENDSQL';
859
        {
847
SELECT message_id, borrowernumber, subject, content, message_transport_type, status, time_queued
860
            (
848
FROM message_queue
861
                $params->{borrowernumber}
849
ENDSQL
862
                ? ( borrowernumber => $params->{borrowernumber} )
850
863
                : ()
851
    my @query_params;
864
            ),
852
    my @whereclauses;
865
        },
853
    if ( exists $params->{'borrowernumber'} ) {
866
        {
854
        push @whereclauses, ' borrowernumber = ? ';
867
            (
855
        push @query_params, $params->{'borrowernumber'};
868
                $params->{limit}
856
    }
869
                ? ( rows => $params->{limit} )
857
870
                : ()
858
    if ( @whereclauses ) {
871
            ),
859
        $statement .= ' WHERE ' . join( 'AND', @whereclauses );
872
        },
860
    }
873
    );
861
874
    $rs->result_class('DBIx::Class::ResultClass::HashRefInflator');
862
    if ( defined $params->{'limit'} ) {
875
    return [ $rs->all ];
863
        $statement .= ' LIMIT ? ';
864
        push @query_params, $params->{'limit'};
865
    }
866
867
    my $sth = $dbh->prepare( $statement );
868
    my $result = $sth->execute( @query_params );
869
    return $sth->fetchall_arrayref({});
870
}
876
}
871
877
872
=head2 GetMessageTransportTypes
878
=head2 GetMessageTransportTypes
Lines 972-993 sub _send_message_by_email { Link Here
972
    my ($username, $password, $method) = @_;
978
    my ($username, $password, $method) = @_;
973
979
974
    my $member = C4::Members::GetMember( 'borrowernumber' => $message->{'borrowernumber'} );
980
    my $member = C4::Members::GetMember( 'borrowernumber' => $message->{'borrowernumber'} );
975
    my $to_address = $message->{'to_address'};
981
976
    unless ($to_address) {
982
    unless ( $member and $message->{to_address} ) {
977
        unless ($member) {
983
        warn "FAIL: No 'to_address' and INVALID borrowernumber ($message->{borrowernumber})" unless $member;
978
            warn "FAIL: No 'to_address' and INVALID borrowernumber ($message->{borrowernumber})";
984
        _set_message_status({
979
            _set_message_status( { message_id => $message->{'message_id'},
985
            message_id => $message->{'message_id'},
980
                                   status     => 'failed' } );
986
            status     => 'failed'
981
            return;
987
        });
982
        }
988
        return;
983
        $to_address = C4::Members::GetNoticeEmailAddress( $message->{'borrowernumber'} );
984
        unless ($to_address) {  
985
            # warn "FAIL: No 'to_address' and no email for " . ($member->{surname} ||'') . ", borrowernumber ($message->{borrowernumber})";
986
            # warning too verbose for this more common case?
987
            _set_message_status( { message_id => $message->{'message_id'},
988
                                   status     => 'failed' } );
989
            return;
990
        }
991
    }
989
    }
992
990
993
    my $utf8   = decode('MIME-Header', $message->{'subject'} );
991
    my $utf8   = decode('MIME-Header', $message->{'subject'} );
Lines 1008-1014 sub _send_message_by_email { Link Here
1008
    my $email = Koha::Email->new();
1006
    my $email = Koha::Email->new();
1009
    my %sendmail_params = $email->create_message_headers(
1007
    my %sendmail_params = $email->create_message_headers(
1010
        {
1008
        {
1011
            to      => $to_address,
1012
            from    => $message->{'from_address'} || $branch_email,
1009
            from    => $message->{'from_address'} || $branch_email,
1013
            replyto => $branch_replyto,
1010
            replyto => $branch_replyto,
1014
            sender  => $branch_returnpath,
1011
            sender  => $branch_returnpath,
Lines 1023-1029 sub _send_message_by_email { Link Here
1023
       $sendmail_params{ Bcc } = $bcc;
1020
       $sendmail_params{ Bcc } = $bcc;
1024
    }
1021
    }
1025
1022
1026
    _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
1027
    if ( sendmail( %sendmail_params ) ) {
1023
    if ( sendmail( %sendmail_params ) ) {
1028
        _set_message_status( { message_id => $message->{'message_id'},
1024
        _set_message_status( { message_id => $message->{'message_id'},
1029
                status     => 'sent' } );
1025
                status     => 'sent' } );
Lines 1097-1108 sub _send_message_by_sms { Link Here
1097
    return $success;
1093
    return $success;
1098
}
1094
}
1099
1095
1100
sub _update_message_to_address {
1101
    my ($id, $to)= @_;
1102
    my $dbh = C4::Context->dbh();
1103
    $dbh->do('UPDATE message_queue SET to_address=? WHERE message_id=?',undef,($to,$id));
1104
}
1105
1106
sub _set_message_status {
1096
sub _set_message_status {
1107
    my $params = shift or return;
1097
    my $params = shift or return;
1108
1098
(-)a/C4/Members.pm (-20 / +25 lines)
Lines 72-78 BEGIN { Link Here
72
        &getidcity
72
        &getidcity
73
73
74
        &GetFirstValidEmailAddress
74
        &GetFirstValidEmailAddress
75
        &GetNoticeEmailAddress
75
        &GetNoticeEmailAddresses
76
76
77
        &GetAge
77
        &GetAge
78
        &GetCities
78
        &GetCities
Lines 1534-1566 sub GetFirstValidEmailAddress { Link Here
1534
    }
1534
    }
1535
}
1535
}
1536
1536
1537
=head2 GetNoticeEmailAddress
1537
=head2 GetNoticeEmailAddresses
1538
1538
1539
  $email = GetNoticeEmailAddress($borrowernumber);
1539
  $emails = GetNoticeEmailAddresses( borrowernumber );
1540
1540
1541
Return the email address of borrower used for notices, given the borrowernumber.
1541
Return the email addresses of borrower used for notices, given the borrowernumber.
1542
Returns the empty string if no email address.
1542
Returns an empty arrayref if no email address.
1543
1543
1544
=cut
1544
=cut
1545
1545
1546
sub GetNoticeEmailAddress {
1546
sub GetNoticeEmailAddresses {
1547
    my $borrowernumber = shift;
1547
    my $borrowernumber = shift;
1548
1548
1549
    my $which_address = C4::Context->preference("AutoEmailPrimaryAddress");
1549
    my $which_addresses = C4::Context->preference("AutoEmailPrimaryAddress");
1550
    # if syspref is set to 'first valid' (value == OFF), look up email address
1550
    my @email_addresses;
1551
    if ( $which_address eq 'OFF' ) {
1551
    for my $email_address_field ( split /\|/, $which_addresses ) {
1552
        return GetFirstValidEmailAddress($borrowernumber);
1552
1553
        # if syspref is set to 'first valid' (value == OFF), look up email address
1554
        if ( $email_address_field eq 'OFF' ) {
1555
            return [ GetFirstValidEmailAddress($borrowernumber) ];
1556
        }
1557
1558
        # specified email address field
1559
        my $email_address = C4::Context->dbh->selectcol_arrayref(
1560
            qq|
1561
                SELECT $email_address_field AS email
1562
                FROM borrowers
1563
                WHERE borrowernumber = ?
1564
            |, {}, $borrowernumber
1565
        );
1566
        push @email_addresses, $email_address->[0] if $email_address->[0];
1553
    }
1567
    }
1554
    # specified email address field
1568
    return \@email_addresses;
1555
    my $dbh = C4::Context->dbh;
1556
    my $sth = $dbh->prepare( qq{
1557
        SELECT $which_address AS primaryemail
1558
        FROM borrowers
1559
        WHERE borrowernumber=?
1560
    } );
1561
    $sth->execute($borrowernumber);
1562
    my $data = $sth->fetchrow_hashref;
1563
    return $data->{'primaryemail'} || '';
1564
}
1569
}
1565
1570
1566
=head2 GetExpiryDate 
1571
=head2 GetExpiryDate 
(-)a/C4/Message.pm (-27 / +1 lines)
Lines 158-198 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
    $letter->{metadata} = Dump($metadata);
161
    $letter->{metadata} = Dump($metadata);
163
    #carp "enqueuing... to $to_address";
162
164
    C4::Letters::EnqueueLetter({
163
    C4::Letters::EnqueueLetter({
165
        letter                 => $letter,
164
        letter                 => $letter,
166
        borrowernumber         => $borrower->{borrowernumber},
165
        borrowernumber         => $borrower->{borrowernumber},
167
        message_transport_type => $transport,
166
        message_transport_type => $transport,
168
        to_address             => $to_address,
169
    });
167
    });
170
}
168
}
171
169
172
# based on message $transport, pick an appropriate address to send to
173
sub _to_address {
174
    my ($borrower, $transport) = @_;
175
    my $address;
176
    if ($transport eq 'email') {
177
        $address = $borrower->{email}
178
            || $borrower->{emailpro}
179
            || $borrower->{B_email};
180
    } elsif ($transport eq 'sms') {
181
        $address = $borrower->{smsalertnumber}
182
            || $borrower->{phone}
183
            || $borrower->{phonepro}
184
            || $borrower->{B_phone};
185
    } else {
186
        warn "'$transport' is an unknown message transport.";
187
    }
188
    if (not defined $address) {
189
        warn "An appropriate $transport address "
190
            . "for borrower $borrower->{userid} "
191
            . "could not be found.";
192
    }
193
    return $address;
194
}
195
196
# _metadata($letter) -- return the letter split into head/body/footer
170
# _metadata($letter) -- return the letter split into head/body/footer
197
sub _metadata {
171
sub _metadata {
198
    my ($letter) = @_;
172
    my ($letter) = @_;
(-)a/C4/Reserves.pm (-9 / +5 lines)
Lines 231-238 sub AddReserve { Link Here
231
                {   letter                 => $letter,
231
                {   letter                 => $letter,
232
                    borrowernumber         => $borrowernumber,
232
                    borrowernumber         => $borrowernumber,
233
                    message_transport_type => 'email',
233
                    message_transport_type => 'email',
234
                    from_address           => $admin_email_address,
234
                    to_address             => $admin_email_address,
235
                    to_address           => $admin_email_address,
236
                }
235
                }
237
            );
236
            );
238
        }
237
        }
Lines 1999-2007 sub _koha_notify_reserve { Link Here
1999
1998
2000
    my $dbh = C4::Context->dbh;
1999
    my $dbh = C4::Context->dbh;
2001
    my $borrower = C4::Members::GetMember(borrowernumber => $borrowernumber);
2000
    my $borrower = C4::Members::GetMember(borrowernumber => $borrowernumber);
2002
    
2003
    # Try to get the borrower's email address
2004
    my $to_address = C4::Members::GetNoticeEmailAddress($borrowernumber);
2005
2001
2006
    my $messagingprefs = C4::Members::Messaging::GetMessagingPreferences( {
2002
    my $messagingprefs = C4::Members::Messaging::GetMessagingPreferences( {
2007
            borrowernumber => $borrowernumber,
2003
            borrowernumber => $borrowernumber,
Lines 2018-2025 sub _koha_notify_reserve { Link Here
2018
    my $reserve = $sth->fetchrow_hashref;
2014
    my $reserve = $sth->fetchrow_hashref;
2019
    my $branch_details = GetBranchDetail( $reserve->{'branchcode'} );
2015
    my $branch_details = GetBranchDetail( $reserve->{'branchcode'} );
2020
2016
2021
    my $admin_email_address = $branch_details->{'branchemail'} || C4::Context->preference('KohaAdminEmailAddress');
2022
2023
    my %letter_params = (
2017
    my %letter_params = (
2024
        module => 'reserves',
2018
        module => 'reserves',
2025
        branchcode => $reserve->{branchcode},
2019
        branchcode => $reserve->{branchcode},
Lines 2048-2060 sub _koha_notify_reserve { Link Here
2048
        C4::Letters::EnqueueLetter( {
2042
        C4::Letters::EnqueueLetter( {
2049
            letter => $letter,
2043
            letter => $letter,
2050
            borrowernumber => $borrowernumber,
2044
            borrowernumber => $borrowernumber,
2051
            from_address => $admin_email_address,
2052
            message_transport_type => $mtt,
2045
            message_transport_type => $mtt,
2053
        } );
2046
        } );
2054
    };
2047
    };
2055
2048
2049
    # Try to get the borrower's email addresses
2050
    my $to_addresses = C4::Members::GetNoticeEmailAddresses($borrowernumber);
2051
2056
    while ( my ( $mtt, $letter_code ) = each %{ $messagingprefs->{transports} } ) {
2052
    while ( my ( $mtt, $letter_code ) = each %{ $messagingprefs->{transports} } ) {
2057
        if ( ($mtt eq 'email' and not $to_address) or ($mtt eq 'sms' and not $borrower->{smsalertnumber}) ) {
2053
        if ( ($mtt eq 'email' and not @$to_addresses) or ($mtt eq 'sms' and not $borrower->{smsalertnumber}) ) {
2058
            # email or sms is requested but not exist
2054
            # email or sms is requested but not exist
2059
            next;
2055
            next;
2060
        }
2056
        }
(-)a/misc/cronjobs/overdue_notices.pl (-5 / +4 lines)
Lines 555-562 END_SQL Link Here
555
                  and warn "borrower $borr has items triggering level $i.";
555
                  and warn "borrower $borr has items triggering level $i.";
556
556
557
                @emails_to_use = ();
557
                @emails_to_use = ();
558
                my $notice_email =
559
                    C4::Members::GetNoticeEmailAddress($borrowernumber);
560
                unless ($nomail) {
558
                unless ($nomail) {
561
                    if (@emails) {
559
                    if (@emails) {
562
                        foreach (@emails) {
560
                        foreach (@emails) {
Lines 564-570 END_SQL Link Here
564
                        }
562
                        }
565
                    }
563
                    }
566
                    else {
564
                    else {
567
                        push @emails_to_use, $notice_email if ($notice_email);
565
                        my $notice_emails =
566
                            C4::Members::GetNoticeEmailAddresses($borrowernumber);
567
                        push @emails_to_use, @$notice_emails;
568
                    }
568
                    }
569
                }
569
                }
570
570
Lines 690-696 END_SQL Link Here
690
                              letternumber   => $i,
690
                              letternumber   => $i,
691
                              postcode       => $data->{'zipcode'},
691
                              postcode       => $data->{'zipcode'},
692
                              country        => $data->{'country'},
692
                              country        => $data->{'country'},
693
                              email          => $notice_email,
693
                              email          => $notice_emails,
694
                              itemcount      => $itemcount,
694
                              itemcount      => $itemcount,
695
                              titles         => $titles,
695
                              titles         => $titles,
696
                              outputformat   => defined $csvfilename ? 'csv' : defined $htmlfilename ? 'html' : defined $text_filename ? 'text' : '',
696
                              outputformat   => defined $csvfilename ? 'csv' : defined $htmlfilename ? 'html' : defined $text_filename ? 'text' : '',
Lines 724-730 END_SQL Link Here
724
                                {   letter                 => $letter,
724
                                {   letter                 => $letter,
725
                                    borrowernumber         => $borrowernumber,
725
                                    borrowernumber         => $borrowernumber,
726
                                    message_transport_type => $mtt,
726
                                    message_transport_type => $mtt,
727
                                    from_address           => $admin_email_address,
728
                                    to_address             => join(',', @emails_to_use),
727
                                    to_address             => join(',', @emails_to_use),
729
                                }
728
                                }
730
                            );
729
                            );
(-)a/opac/opac-memberentry.pl (-3 / +1 lines)
Lines 121-131 if ( $action eq 'create' ) { Link Here
121
121
122
            C4::Letters::EnqueueLetter(
122
            C4::Letters::EnqueueLetter(
123
                {
123
                {
124
                    borrowernumber         => $borrower{borrowernumber},
124
                    letter                 => $letter,
125
                    letter                 => $letter,
125
                    message_transport_type => 'email',
126
                    message_transport_type => 'email',
126
                    to_address             => $borrower{'email'},
127
                    from_address =>
128
                      C4::Context->preference('KohaAdminEmailAddress'),
129
                }
127
                }
130
            );
128
            );
131
        }
129
        }
(-)a/opac/opac-shareshelf.pl (-6 / +4 lines)
Lines 133-140 sub show_accept { Link Here
133
sub notify_owner {
133
sub notify_owner {
134
    my ($param) = @_;
134
    my ($param) = @_;
135
135
136
    my $toaddr = C4::Members::GetNoticeEmailAddress( $param->{owner} );
136
    my $toaddr = C4::Members::GetNoticeEmailAddresses( $param->{owner} );
137
    return if !$toaddr;
137
    return unless scalar( @$toaddr );
138
138
139
139
    #prepare letter
140
    #prepare letter
140
    my $letter = C4::Letters::GetPreparedLetter(
141
    my $letter = C4::Letters::GetPreparedLetter(
Lines 148-157 sub notify_owner { Link Here
148
    #send letter to queue
149
    #send letter to queue
149
    C4::Letters::EnqueueLetter(
150
    C4::Letters::EnqueueLetter(
150
        {
151
        {
152
            borrowernumber         => $param->{owner},
151
            letter                 => $letter,
153
            letter                 => $letter,
152
            message_transport_type => 'email',
154
            message_transport_type => 'email',
153
            from_address => C4::Context->preference('KohaAdminEmailAddress'),
154
            to_address   => $toaddr,
155
        }
155
        }
156
    );
156
    );
157
}
157
}
Lines 177-183 sub process_addrlist { Link Here
177
177
178
sub send_invitekey {
178
sub send_invitekey {
179
    my ($param) = @_;
179
    my ($param) = @_;
180
    my $fromaddr = C4::Context->preference('KohaAdminEmailAddress');
181
    my $url =
180
    my $url =
182
        'http://'
181
        'http://'
183
      . C4::Context->preference('OPACBaseURL')
182
      . C4::Context->preference('OPACBaseURL')
Lines 215-221 sub send_invitekey { Link Here
215
            {
214
            {
216
                letter                 => $letter,
215
                letter                 => $letter,
217
                message_transport_type => 'email',
216
                message_transport_type => 'email',
218
                from_address           => $fromaddr,
219
                to_address             => $a,
217
                to_address             => $a,
220
            }
218
            }
221
        );
219
        );
(-)a/t/db_dependent/Branch.t (-5 / +21 lines)
Lines 21-29 use Modern::Perl; Link Here
21
use C4::Context;
21
use C4::Context;
22
use Data::Dumper;
22
use Data::Dumper;
23
23
24
use Test::More tests => 36;
24
use Test::More tests => 38;
25
25
26
use C4::Branch;
26
use C4::Branch;
27
use C4::Members qw( AddMember );
27
28
28
BEGIN {
29
BEGIN {
29
    use FindBin;
30
    use FindBin;
Lines 305-310 my $brCat1 = GetBranchesInCategory( $cat1->{categorycode} ); Link Here
305
my @b      = ( $b2->{branchcode} );
306
my @b      = ( $b2->{branchcode} );
306
is_deeply( $brCat1, \@b, 'CAT1 has branch BRB' );
307
is_deeply( $brCat1, \@b, 'CAT1 has branch BRB' );
307
308
309
my $b3_email = 'email_b3@example.org';
308
my $b3 = {
310
my $b3 = {
309
    add            => 1,
311
    add            => 1,
310
    branchcode     => 'BRC',
312
    branchcode     => 'BRC',
Lines 318-324 my $b3 = { Link Here
318
    branchcountry  => 'countryC',
320
    branchcountry  => 'countryC',
319
    branchphone    => 'phoneC',
321
    branchphone    => 'phoneC',
320
    branchfax      => 'faxC',
322
    branchfax      => 'faxC',
321
    branchemail    => 'emailC',
323
    branchemail    => $b3_email,
322
    branchurl      => 'urlC',
324
    branchurl      => 'urlC',
323
    branchip       => 'ipC',
325
    branchip       => 'ipC',
324
    branchprinter  => undef,
326
    branchprinter  => undef,
Lines 355-360 is_deeply($categories, [ {%$cat1}, {%$cat2},{ %new_category, selected => 1 } ], Link Here
355
my $loop = GetBranchesLoop;
357
my $loop = GetBranchesLoop;
356
is( scalar(@$loop), GetBranchesCount(), 'There is the right number of branches' );
358
is( scalar(@$loop), GetBranchesCount(), 'There is the right number of branches' );
357
359
358
# End transaction
360
# Test GetBranchEmailFromBorrowernumber
359
$dbh->rollback;
361
my $borrowernumber = C4::Members::AddMember(
360
362
    cardnumber   => 'CARDNUMBER42_TEST',
363
    firstname    => 'fn',
364
    surname      => 'surname',
365
    categorycode => 'S',
366
    branchcode   => $b3->{branchcode},
367
    dateofbirth  => '',
368
    dateexpiry   => '9999-12-31',
369
    userid       => 'userid'
370
);
371
is( C4::Branch::GetBranchEmailFromBorrowernumber($borrowernumber), $b3_email,
372
'GetBranchEmailFromBorrowernumber returns the branchemail from a borrowernumber'
373
);
374
is( C4::Branch::GetBranchEmailFromBorrowernumber(), undef,
375
'GetBranchEmailFromBorrowernumber returns undef if no parameter is given'
376
);
(-)a/t/db_dependent/Letters.t (-10 / +65 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 => 58;
21
use Test::More tests => 76;
22
use Test::MockModule;
22
use Test::MockModule;
23
use Test::Warn;
23
use Test::Warn;
24
24
Lines 56-67 $dbh->do(q|DELETE FROM message_queue|); Link Here
56
$dbh->do(q|DELETE FROM message_transport_types|);
56
$dbh->do(q|DELETE FROM message_transport_types|);
57
57
58
my $date = dt_from_string;
58
my $date = dt_from_string;
59
my ( $email, $emailpro ) = ( 'email@example.org', 'emailpro@example.org' );
59
my $borrowernumber = AddMember(
60
my $borrowernumber = AddMember(
60
    firstname    => 'Jane',
61
    firstname    => 'Jane',
61
    surname      => 'Smith',
62
    surname      => 'Smith',
62
    categorycode => 'PT',
63
    categorycode => 'PT',
63
    branchcode   => 'CPL',
64
    branchcode   => 'CPL',
64
    dateofbirth  => $date,
65
    dateofbirth  => $date,
66
    email        => $email,
67
    emailpro     => $emailpro,
65
);
68
);
66
69
67
my $marc_record = MARC::Record->new;
70
my $marc_record = MARC::Record->new;
Lines 87-94 my $my_message = { Link Here
87
    to_address             => 'to@example.com',
90
    to_address             => 'to@example.com',
88
    from_address           => 'from@example.com',
91
    from_address           => 'from@example.com',
89
};
92
};
90
my $message_id = C4::Letters::EnqueueLetter($my_message);
93
is( C4::Letters::EnqueueLetter($my_message), undef, 'EnqueueLetter without the letter argument returns undef' );
91
is( $message_id, undef, 'EnqueueLetter without the letter argument returns undef' );
92
94
93
delete $my_message->{message_transport_type};
95
delete $my_message->{message_transport_type};
94
$my_message->{letter} = {
96
$my_message->{letter} = {
Lines 98-110 $my_message->{letter} = { Link Here
98
    code         => 'TEST_MESSAGE',
100
    code         => 'TEST_MESSAGE',
99
    content_type => 'text/plain',
101
    content_type => 'text/plain',
100
};
102
};
101
$message_id = C4::Letters::EnqueueLetter($my_message);
103
is( C4::Letters::EnqueueLetter($my_message), undef, 'EnqueueLetter without the message_transport_type argument returns undef' );
102
is( $message_id, undef, 'EnqueueLetter without the message type argument argument returns undef' );
103
104
104
$my_message->{message_transport_type} = 'sms';
105
$my_message->{message_transport_type} = 'sms';
105
$message_id = C4::Letters::EnqueueLetter($my_message);
106
my $messages_queued = C4::Letters::EnqueueLetter($my_message);
106
ok(defined $message_id && $message_id > 0, 'new message successfully queued');
107
is($messages_queued, 1, 'new message successfully queued');
107
108
108
109
# GetQueuedMessages
109
# GetQueuedMessages
110
my $messages = C4::Letters::GetQueuedMessages();
110
my $messages = C4::Letters::GetQueuedMessages();
Lines 112-118 is( @$messages, 1, 'GetQueuedMessages without argument returns all the entries' Link Here
112
112
113
$messages = C4::Letters::GetQueuedMessages({ borrowernumber => $borrowernumber });
113
$messages = C4::Letters::GetQueuedMessages({ borrowernumber => $borrowernumber });
114
is( @$messages, 1, 'one message stored for the borrower' );
114
is( @$messages, 1, 'one message stored for the borrower' );
115
is( $messages->[0]->{message_id}, $message_id, 'EnqueueLetter returns the message id correctly' );
116
is( $messages->[0]->{borrowernumber}, $borrowernumber, 'EnqueueLetter stores the borrower number correctly' );
115
is( $messages->[0]->{borrowernumber}, $borrowernumber, 'EnqueueLetter stores the borrower number correctly' );
117
is( $messages->[0]->{subject}, $my_message->{letter}->{title}, 'EnqueueLetter stores the subject correctly' );
116
is( $messages->[0]->{subject}, $my_message->{letter}->{title}, 'EnqueueLetter stores the subject correctly' );
118
is( $messages->[0]->{content}, $my_message->{letter}->{content}, 'EnqueueLetter stores the content correctly' );
117
is( $messages->[0]->{content}, $my_message->{letter}->{content}, 'EnqueueLetter stores the content correctly' );
Lines 340-343 is($err, 1, "Successfully sent claim"); Link Here
340
is($mail{'To'}, 'testemail@mydomain.com', "mailto correct in sent claim");
339
is($mail{'To'}, 'testemail@mydomain.com', "mailto correct in sent claim");
341
is($mail{'Message'}, 'my vendor|John Smith|<order>Ordernumber ' . $ordernumber . ' (Silence in the library) (1 ordered)</order>', 'Claim notice text constructed successfully');
340
is($mail{'Message'}, 'my vendor|John Smith|<order>Ordernumber ' . $ordernumber . ' (Silence in the library) (1 ordered)</order>', 'Claim notice text constructed successfully');
342
341
343
$dbh->rollback;
342
# EnqueueLetter and AutoEmailPrimaryAddress
343
$my_message = {
344
    borrowernumber         => $borrowernumber,
345
    message_transport_type => 'email',
346
    to_address             => 'to@example.com',
347
    from_address           => 'from@example.com',
348
    letter                 => {
349
        content      => 'a message',
350
        title        => 'message title',
351
        metadata     => 'metadata',
352
        code         => 'TEST_MESSAGE',
353
        content_type => 'text/plain',
354
    },
355
};
356
357
$dbh->do(q|DELETE FROM message_queue|);
358
t::lib::Mocks::mock_preference('AutoEmailPrimaryAddress', 'email');
359
is( C4::Letters::EnqueueLetter($my_message), 1, 'message successfully queued' );
360
$messages = C4::Letters::GetQueuedMessages({ borrowernumber => $borrowernumber });
361
is( scalar( @$messages ), 1, 'The message has been queued for the expected patron' );
362
is( $messages->[0]{to_address}, 'to@example.com', 'AutoEmailPrimaryAddress=email, EnqueueLetter used the to_address given in parameter' );
363
364
$dbh->do(q|DELETE FROM message_queue|);
365
delete $my_message->{to_address};
366
is( C4::Letters::EnqueueLetter($my_message), 1, 'message successfully queued' );
367
$messages = C4::Letters::GetQueuedMessages({ borrowernumber => $borrowernumber });
368
is( scalar( @$messages ), 1, 'The message has been queued for the expected patron' );
369
is( $messages->[0]{to_address}, $email, 'AutoEmailPrimaryAddress=email, EnqueueLetter used the patron email address if no to_address is given in parameter' );
370
371
$dbh->do(q|DELETE FROM message_queue|);
372
t::lib::Mocks::mock_preference('AutoEmailPrimaryAddress', 'emailpro');
373
is( C4::Letters::EnqueueLetter($my_message), 1, 'message successfully queued' );
374
$messages = C4::Letters::GetQueuedMessages({ borrowernumber => $borrowernumber });
375
is( scalar( @$messages ), 1, 'The message has been queued for the expected patron' );
376
is( $messages->[0]{to_address}, $emailpro, 'AutoEmailPrimaryAddress=emailpro, EnqueueLetter used the patron emailpro address if no to_address is given in parameter' );
377
378
$dbh->do(q|DELETE FROM message_queue|);
379
t::lib::Mocks::mock_preference('AutoEmailPrimaryAddress', 'OFF');
380
is( C4::Letters::EnqueueLetter($my_message), 1, 'message successfully queued' );
381
$messages = C4::Letters::GetQueuedMessages({ borrowernumber => $borrowernumber });
382
is( scalar( @$messages ), 1, 'The message has been queued for the expected patron' );
383
is( $messages->[0]{to_address}, $email, 'AutoEmailPrimaryAddress=OFF, EnqueueLetter used the patron email address if no to_address is given in parameter' );
384
385
$dbh->do(q|DELETE FROM message_queue|);
386
t::lib::Mocks::mock_preference('AutoEmailPrimaryAddress', 'email|OFF|emailpro'); # This is no consistent. OFF should be alone.
387
is( C4::Letters::EnqueueLetter($my_message), 1, 'message successfully queued' );
388
$messages = C4::Letters::GetQueuedMessages({ borrowernumber => $borrowernumber });
389
is( scalar( @$messages ), 1, 'The message has been queued for the expected patron' );
390
is( $messages->[0]{to_address}, $email, 'AutoEmailPrimaryAddress=email|OFF|emailpro, EnqueueLetter used the patron email address if no to_address is given in parameter' );
391
392
$dbh->do(q|DELETE FROM message_queue|);
393
t::lib::Mocks::mock_preference('AutoEmailPrimaryAddress', 'email|emailpro');
394
is( C4::Letters::EnqueueLetter($my_message), 2, 'messages successfully queued' );
395
$messages = C4::Letters::GetQueuedMessages({ borrowernumber => $borrowernumber });
396
is( scalar( @$messages ), 2, 'The messages have been queued for the expected patron' );
397
is( $messages->[0]{to_address}, $email, 'AutoEmailPrimaryAddress=email|emailpro, EnqueueLetter used the patron email address for the first letter' );
398
is( $messages->[1]{to_address}, $emailpro, 'AutoEmailPrimaryAddress=email|emailpro, EnqueueLetter used the patron emailpro address for the second letter' );
(-)a/t/db_dependent/Members.t (-6 / +13 lines)
Lines 17-23 Link Here
17
17
18
use Modern::Perl;
18
use Modern::Perl;
19
19
20
use Test::More tests => 69;
20
use Test::More tests => 71;
21
use Test::MockModule;
21
use Test::MockModule;
22
use Data::Dumper;
22
use Data::Dumper;
23
use C4::Context;
23
use C4::Context;
Lines 202-216 is ($checkcardnum, "2", "Card number is too long"); Link Here
202
202
203
C4::Context->set_preference( 'AutoEmailPrimaryAddress', 'OFF' );
203
C4::Context->set_preference( 'AutoEmailPrimaryAddress', 'OFF' );
204
C4::Context->clear_syspref_cache();
204
C4::Context->clear_syspref_cache();
205
my $notice_emails = GetNoticeEmailAddresses($member->{'borrowernumber'});
206
is_deeply( $notice_emails, [ $EMAIL ], "GetNoticeEmailAddresses returns correct value when AutoEmailPrimaryAddress is off" );
205
207
206
my $notice_email = GetNoticeEmailAddress($member->{'borrowernumber'});
208
C4::Context->set_preference( 'AutoEmailPrimaryAddress', 'emailpro|OFF' );
207
is ($notice_email, $EMAIL, "GetNoticeEmailAddress returns correct value when AutoEmailPrimaryAddress is off");
209
C4::Context->clear_syspref_cache();
210
$notice_emails = GetNoticeEmailAddresses($member->{'borrowernumber'});
211
is_deeply( $notice_emails, [ $EMAIL ], "GetNoticeEmailAddresses returns correct value when AutoEmailPrimaryAddress contains off" );
208
212
209
C4::Context->set_preference( 'AutoEmailPrimaryAddress', 'emailpro' );
213
C4::Context->set_preference( 'AutoEmailPrimaryAddress', 'emailpro' );
210
C4::Context->clear_syspref_cache();
214
C4::Context->clear_syspref_cache();
215
$notice_emails = GetNoticeEmailAddresses($member->{'borrowernumber'});
216
is_deeply ($notice_emails, [ $EMAILPRO ], "GetNoticeEmailAddresses returns correct value when AutoEmailPrimaryAddress is emailpro");
211
217
212
$notice_email = GetNoticeEmailAddress($member->{'borrowernumber'});
218
C4::Context->set_preference( 'AutoEmailPrimaryAddress', 'emailpro|email' );
213
is ($notice_email, $EMAILPRO, "GetNoticeEmailAddress returns correct value when AutoEmailPrimaryAddress is emailpro");
219
C4::Context->clear_syspref_cache();
220
$notice_emails = GetNoticeEmailAddresses($member->{'borrowernumber'});
221
is_deeply ($notice_emails, [ $EMAILPRO, $EMAIL ], "GetNoticeEmailAddresses returns correct value when AutoEmailPrimaryAddress is emailpro|email");
214
222
215
ok(!$member->{is_expired}, "GetMemberDetails() indicates that patron is not expired");
223
ok(!$member->{is_expired}, "GetMemberDetails() indicates that patron is not expired");
216
ModMember(borrowernumber => $member->{'borrowernumber'}, dateexpiry => '2001-01-1');
224
ModMember(borrowernumber => $member->{'borrowernumber'}, dateexpiry => '2001-01-1');
217
- 

Return to bug 12802