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 564-569 sub GetBranchesCount { Link Here
564
    return $row->{'branches_count'};
565
    return $row->{'branches_count'};
565
}
566
}
566
567
568
sub GetBranchEmailFromBorrowernumber {
569
    my ( $borrowernumber ) = @_;
570
    return unless $borrowernumber;
571
    my $rs = Koha::Database->new->schema->resultset('Borrower')->search({ borrowernumber => $borrowernumber }, {join => 'branchcode'});
572
    return $rs->next->branchcode->branchemail;
573
}
574
567
1;
575
1;
568
__END__
576
__END__
569
577
(-)a/C4/Letters.pm (-73 / +63 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 688-694 sub EnqueueLetter { Link Here
688
    my $params = shift or return;
689
    my $params = shift or return;
689
690
690
    return unless exists $params->{'letter'};
691
    return unless exists $params->{'letter'};
691
#   return unless exists $params->{'borrowernumber'};
692
    return unless exists $params->{'message_transport_type'};
692
    return unless exists $params->{'message_transport_type'};
693
693
694
    my $content = $params->{letter}->{content};
694
    my $content = $params->{letter}->{content};
Lines 708-735 sub EnqueueLetter { Link Here
708
        );
708
        );
709
    }
709
    }
710
710
711
    my $dbh       = C4::Context->dbh();
711
    my @to_addresses;
712
    my $statement = << 'ENDSQL';
712
    if ( $params->{to_address} ) {
713
INSERT INTO message_queue
713
        @to_addresses = ( $params->{to_address} );
714
( borrowernumber, subject, content, metadata, letter_code, message_transport_type, status, time_queued, to_address, from_address, content_type )
714
    } elsif ( $params->{borrowernumber} and $params->{message_transport_type} eq 'email' ) {
715
VALUES
715
        @to_addresses = @{ C4::Members::GetNoticeEmailAddresses( $params->{borrowernumber} ) };
716
( ?,              ?,       ?,       ?,        ?,           ?,                      ?,      NOW(),       ?,          ?,            ? )
716
    }
717
ENDSQL
718
717
719
    my $sth    = $dbh->prepare($statement);
718
    my $from_address;
720
    my $result = $sth->execute(
719
    if ( $params->{from_address} ) {
721
        $params->{'borrowernumber'},              # borrowernumber
720
        $from_address = $params->{from_address};
722
        $params->{'letter'}->{'title'},           # subject
721
    } elsif ( $params->{message_transport_type} eq 'email' ) {
723
        $params->{'letter'}->{'content'},         # content
722
        if ( $params->{borrowernumber} ) {
724
        $params->{'letter'}->{'metadata'} || '',  # metadata
723
            $from_address = C4::Branch::GetBranchEmailFromBorrowernumber( $params->{borrowernumber} );
725
        $params->{'letter'}->{'code'}     || '',  # letter_code
724
        }
726
        $params->{'message_transport_type'},      # message_transport_type
725
727
        'pending',                                # status
726
        $from_address ||= C4::Context->preference('KohaAdminEmailAddress');
728
        $params->{'to_address'},                  # to_address
727
    }
729
        $params->{'from_address'},                # from_address
728
730
        $params->{'letter'}->{'content-type'},    # content_type
729
    my $rs = Koha::Database->new->schema->resultset('MessageQueue');
731
    );
730
    for my $to_address ( @to_addresses ) {
732
    return $dbh->last_insert_id(undef,undef,'message_queue', undef);
731
        $rs->create({
732
            borrowernumber => $params->{borrowernumber},
733
            subject => $params->{letter}{title},
734
            content => $params->{letter}{content},
735
            metadata => ( $params->{letter}{metadata} || '' ),
736
            letter_code => ( $params->{letter}{code}     || ''),
737
            message_transport_type => $params->{message_transport_type},
738
            status => 'pending',
739
            to_address => $to_address,
740
            from_address => $from_address,
741
            content_type => $params->{letter}{'content-type'},
742
        });
743
    }
744
    return scalar( @to_addresses );
733
}
745
}
734
746
735
=head2 SendQueuedMessages ([$hashref]) 
747
=head2 SendQueuedMessages ([$hashref]) 
Lines 754-759 sub SendQueuedMessages { Link Here
754
          if $params->{'verbose'} or $debug;
766
          if $params->{'verbose'} or $debug;
755
        # This is just begging for subclassing
767
        # This is just begging for subclassing
756
        next MESSAGE if ( lc($message->{'message_transport_type'}) eq 'rss' );
768
        next MESSAGE if ( lc($message->{'message_transport_type'}) eq 'rss' );
769
757
        if ( lc( $message->{'message_transport_type'} ) eq 'email' ) {
770
        if ( lc( $message->{'message_transport_type'} ) eq 'email' ) {
758
            _send_message_by_email( $message, $params->{'username'}, $params->{'password'}, $params->{'method'} );
771
            _send_message_by_email( $message, $params->{'username'}, $params->{'password'}, $params->{'method'} );
759
        }
772
        }
Lines 815-845 list of hashes, each has represents a message in the message queue. Link Here
815
sub GetQueuedMessages {
828
sub GetQueuedMessages {
816
    my $params = shift;
829
    my $params = shift;
817
830
818
    my $dbh = C4::Context->dbh();
831
    my $rs = Koha::Database->new->schema->resultset('MessageQueue')->search(
819
    my $statement = << 'ENDSQL';
832
        {
820
SELECT message_id, borrowernumber, subject, content, message_transport_type, status, time_queued
833
            (
821
FROM message_queue
834
                $params->{borrowernumber}
822
ENDSQL
835
                ? ( borrowernumber => $params->{borrowernumber} )
823
836
                : ()
824
    my @query_params;
837
            ),
825
    my @whereclauses;
838
        },
826
    if ( exists $params->{'borrowernumber'} ) {
839
        {
827
        push @whereclauses, ' borrowernumber = ? ';
840
            (
828
        push @query_params, $params->{'borrowernumber'};
841
                $params->{limit}
829
    }
842
                ? ( rows => $params->{limit} )
830
843
                : ()
831
    if ( @whereclauses ) {
844
            ),
832
        $statement .= ' WHERE ' . join( 'AND', @whereclauses );
845
        },
833
    }
846
    );
834
847
    $rs->result_class('DBIx::Class::ResultClass::HashRefInflator');
835
    if ( defined $params->{'limit'} ) {
848
    return [ $rs->all ];
836
        $statement .= ' LIMIT ? ';
837
        push @query_params, $params->{'limit'};
838
    }
839
840
    my $sth = $dbh->prepare( $statement );
841
    my $result = $sth->execute( @query_params );
842
    return $sth->fetchall_arrayref({});
843
}
849
}
844
850
845
=head2 GetMessageTransportTypes
851
=head2 GetMessageTransportTypes
Lines 945-966 sub _send_message_by_email { Link Here
945
    my ($username, $password, $method) = @_;
951
    my ($username, $password, $method) = @_;
946
952
947
    my $member = C4::Members::GetMember( 'borrowernumber' => $message->{'borrowernumber'} );
953
    my $member = C4::Members::GetMember( 'borrowernumber' => $message->{'borrowernumber'} );
948
    my $to_address = $message->{'to_address'};
954
949
    unless ($to_address) {
955
    unless ( $member and $message->{to_address} ) {
950
        unless ($member) {
956
        warn "FAIL: No 'to_address' and INVALID borrowernumber ($message->{borrowernumber})" unless $member;
951
            warn "FAIL: No 'to_address' and INVALID borrowernumber ($message->{borrowernumber})";
957
        _set_message_status({
952
            _set_message_status( { message_id => $message->{'message_id'},
958
            message_id => $message->{'message_id'},
953
                                   status     => 'failed' } );
959
            status     => 'failed'
954
            return;
960
        });
955
        }
961
        return;
956
        $to_address = C4::Members::GetNoticeEmailAddress( $message->{'borrowernumber'} );
957
        unless ($to_address) {  
958
            # warn "FAIL: No 'to_address' and no email for " . ($member->{surname} ||'') . ", borrowernumber ($message->{borrowernumber})";
959
            # warning too verbose for this more common case?
960
            _set_message_status( { message_id => $message->{'message_id'},
961
                                   status     => 'failed' } );
962
            return;
963
        }
964
    }
962
    }
965
963
966
    my $utf8   = decode('MIME-Header', $message->{'subject'} );
964
    my $utf8   = decode('MIME-Header', $message->{'subject'} );
Lines 970-980 sub _send_message_by_email { Link Here
970
    my $content_type = $message->{'content_type'} || 'text/plain; charset="UTF-8"';
968
    my $content_type = $message->{'content_type'} || 'text/plain; charset="UTF-8"';
971
    my $is_html = $content_type =~ m/html/io;
969
    my $is_html = $content_type =~ m/html/io;
972
970
973
    my $branch_email = ( $member ) ? GetBranchDetail( $member->{'branchcode'} )->{'branchemail'} : undef;
974
971
975
    my %sendmail_params = (
972
    my %sendmail_params = (
976
        To   => $to_address,
973
        To   => $message->{to_address},
977
        From => $message->{'from_address'} || $branch_email || C4::Context->preference('KohaAdminEmailAddress'),
974
        From => $message->{from_address},
978
        Subject => $subject,
975
        Subject => $subject,
979
        charset => 'utf8',
976
        charset => 'utf8',
980
        Message => $is_html ? _wrap_html($content, $subject) : $content,
977
        Message => $is_html ? _wrap_html($content, $subject) : $content,
Lines 985-991 sub _send_message_by_email { Link Here
985
       $sendmail_params{ Bcc } = $bcc;
982
       $sendmail_params{ Bcc } = $bcc;
986
    }
983
    }
987
984
988
    _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
989
    if ( sendmail( %sendmail_params ) ) {
985
    if ( sendmail( %sendmail_params ) ) {
990
        _set_message_status( { message_id => $message->{'message_id'},
986
        _set_message_status( { message_id => $message->{'message_id'},
991
                status     => 'sent' } );
987
                status     => 'sent' } );
Lines 1059-1070 sub _send_message_by_sms { Link Here
1059
    return $success;
1055
    return $success;
1060
}
1056
}
1061
1057
1062
sub _update_message_to_address {
1063
    my ($id, $to)= @_;
1064
    my $dbh = C4::Context->dbh();
1065
    $dbh->do('UPDATE message_queue SET to_address=? WHERE message_id=?',undef,($to,$id));
1066
}
1067
1068
sub _set_message_status {
1058
sub _set_message_status {
1069
    my $params = shift or return;
1059
    my $params = shift or return;
1070
1060
(-)a/C4/Members.pm (-20 / +25 lines)
Lines 67-73 BEGIN { Link Here
67
        &getidcity
67
        &getidcity
68
68
69
        &GetFirstValidEmailAddress
69
        &GetFirstValidEmailAddress
70
        &GetNoticeEmailAddress
70
        &GetNoticeEmailAddresses
71
71
72
        &GetAge
72
        &GetAge
73
        &GetCities
73
        &GetCities
Lines 1490-1522 sub GetFirstValidEmailAddress { Link Here
1490
    }
1490
    }
1491
}
1491
}
1492
1492
1493
=head2 GetNoticeEmailAddress
1493
=head2 GetNoticeEmailAddresses
1494
1494
1495
  $email = GetNoticeEmailAddress($borrowernumber);
1495
  $emails = GetNoticeEmailAddresses( borrowernumber );
1496
1496
1497
Return the email address of borrower used for notices, given the borrowernumber.
1497
Return the email addresses of borrower used for notices, given the borrowernumber.
1498
Returns the empty string if no email address.
1498
Returns an empty arrayref if no email address.
1499
1499
1500
=cut
1500
=cut
1501
1501
1502
sub GetNoticeEmailAddress {
1502
sub GetNoticeEmailAddresses {
1503
    my $borrowernumber = shift;
1503
    my $borrowernumber = shift;
1504
1504
1505
    my $which_address = C4::Context->preference("AutoEmailPrimaryAddress");
1505
    my $which_addresses = C4::Context->preference("AutoEmailPrimaryAddress");
1506
    # if syspref is set to 'first valid' (value == OFF), look up email address
1506
    my @email_addresses;
1507
    if ( $which_address eq 'OFF' ) {
1507
    for my $email_address_field ( split /\|/, $which_addresses ) {
1508
        return GetFirstValidEmailAddress($borrowernumber);
1508
1509
        # if syspref is set to 'first valid' (value == OFF), look up email address
1510
        if ( $email_address_field eq 'OFF' ) {
1511
            return [ GetFirstValidEmailAddress($borrowernumber) ];
1512
        }
1513
1514
        # specified email address field
1515
        my $email_address = C4::Context->dbh->selectcol_arrayref(
1516
            qq|
1517
                SELECT $email_address_field AS email
1518
                FROM borrowers
1519
                WHERE borrowernumber = ?
1520
            |, {}, $borrowernumber
1521
        );
1522
        push @email_addresses, $email_address->[0] if $email_address->[0];
1509
    }
1523
    }
1510
    # specified email address field
1524
    return \@email_addresses;
1511
    my $dbh = C4::Context->dbh;
1512
    my $sth = $dbh->prepare( qq{
1513
        SELECT $which_address AS primaryemail
1514
        FROM borrowers
1515
        WHERE borrowernumber=?
1516
    } );
1517
    $sth->execute($borrowernumber);
1518
    my $data = $sth->fetchrow_hashref;
1519
    return $data->{'primaryemail'} || '';
1520
}
1525
}
1521
1526
1522
=head2 GetExpiryDate 
1527
=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 225-232 sub AddReserve { Link Here
225
                {   letter                 => $letter,
225
                {   letter                 => $letter,
226
                    borrowernumber         => $borrowernumber,
226
                    borrowernumber         => $borrowernumber,
227
                    message_transport_type => 'email',
227
                    message_transport_type => 'email',
228
                    from_address           => $admin_email_address,
228
                    to_address             => $admin_email_address,
229
                    to_address           => $admin_email_address,
230
                }
229
                }
231
            );
230
            );
232
        }
231
        }
Lines 1887-1895 sub _koha_notify_reserve { Link Here
1887
1886
1888
    my $dbh = C4::Context->dbh;
1887
    my $dbh = C4::Context->dbh;
1889
    my $borrower = C4::Members::GetMember(borrowernumber => $borrowernumber);
1888
    my $borrower = C4::Members::GetMember(borrowernumber => $borrowernumber);
1890
    
1891
    # Try to get the borrower's email address
1892
    my $to_address = C4::Members::GetNoticeEmailAddress($borrowernumber);
1893
1889
1894
    my $messagingprefs = C4::Members::Messaging::GetMessagingPreferences( {
1890
    my $messagingprefs = C4::Members::Messaging::GetMessagingPreferences( {
1895
            borrowernumber => $borrowernumber,
1891
            borrowernumber => $borrowernumber,
Lines 1906-1913 sub _koha_notify_reserve { Link Here
1906
    my $reserve = $sth->fetchrow_hashref;
1902
    my $reserve = $sth->fetchrow_hashref;
1907
    my $branch_details = GetBranchDetail( $reserve->{'branchcode'} );
1903
    my $branch_details = GetBranchDetail( $reserve->{'branchcode'} );
1908
1904
1909
    my $admin_email_address = $branch_details->{'branchemail'} || C4::Context->preference('KohaAdminEmailAddress');
1910
1911
    my %letter_params = (
1905
    my %letter_params = (
1912
        module => 'reserves',
1906
        module => 'reserves',
1913
        branchcode => $reserve->{branchcode},
1907
        branchcode => $reserve->{branchcode},
Lines 1936-1948 sub _koha_notify_reserve { Link Here
1936
        C4::Letters::EnqueueLetter( {
1930
        C4::Letters::EnqueueLetter( {
1937
            letter => $letter,
1931
            letter => $letter,
1938
            borrowernumber => $borrowernumber,
1932
            borrowernumber => $borrowernumber,
1939
            from_address => $admin_email_address,
1940
            message_transport_type => $mtt,
1933
            message_transport_type => $mtt,
1941
        } );
1934
        } );
1942
    };
1935
    };
1943
1936
1937
    # Try to get the borrower's email addresses
1938
    my $to_addresses = C4::Members::GetNoticeEmailAddresses($borrowernumber);
1939
1944
    while ( my ( $mtt, $letter_code ) = each %{ $messagingprefs->{transports} } ) {
1940
    while ( my ( $mtt, $letter_code ) = each %{ $messagingprefs->{transports} } ) {
1945
        if ( ($mtt eq 'email' and not $to_address) or ($mtt eq 'sms' and not $borrower->{smsalertnumber}) ) {
1941
        if ( ($mtt eq 'email' and not @$to_addresses) or ($mtt eq 'sms' and not $borrower->{smsalertnumber}) ) {
1946
            # email or sms is requested but not exist
1942
            # email or sms is requested but not exist
1947
            next;
1943
            next;
1948
        }
1944
        }
(-)a/misc/cronjobs/overdue_notices.pl (-5 / +4 lines)
Lines 551-558 END_SQL Link Here
551
                  and warn "borrower $borr has items triggering level $i.";
551
                  and warn "borrower $borr has items triggering level $i.";
552
552
553
                @emails_to_use = ();
553
                @emails_to_use = ();
554
                my $notice_email =
555
                    C4::Members::GetNoticeEmailAddress($borrowernumber);
556
                unless ($nomail) {
554
                unless ($nomail) {
557
                    if (@emails) {
555
                    if (@emails) {
558
                        foreach (@emails) {
556
                        foreach (@emails) {
Lines 560-566 END_SQL Link Here
560
                        }
558
                        }
561
                    }
559
                    }
562
                    else {
560
                    else {
563
                        push @emails_to_use, $notice_email if ($notice_email);
561
                        my $notice_emails =
562
                            C4::Members::GetNoticeEmailAddresses($borrowernumber);
563
                        push @emails_to_use, @$notice_emails;
564
                    }
564
                    }
565
                }
565
                }
566
566
Lines 682-688 END_SQL Link Here
682
                              city           => $data->{'city'},
682
                              city           => $data->{'city'},
683
                              postcode       => $data->{'zipcode'},
683
                              postcode       => $data->{'zipcode'},
684
                              country        => $data->{'country'},
684
                              country        => $data->{'country'},
685
                              email          => $notice_email,
685
                              email          => $notice_emails,
686
                              itemcount      => $itemcount,
686
                              itemcount      => $itemcount,
687
                              titles         => $titles,
687
                              titles         => $titles,
688
                              outputformat   => defined $csvfilename ? 'csv' : defined $htmlfilename ? 'html' : defined $text_filename ? 'text' : '',
688
                              outputformat   => defined $csvfilename ? 'csv' : defined $htmlfilename ? 'html' : defined $text_filename ? 'text' : '',
Lines 716-722 END_SQL Link Here
716
                                {   letter                 => $letter,
716
                                {   letter                 => $letter,
717
                                    borrowernumber         => $borrowernumber,
717
                                    borrowernumber         => $borrowernumber,
718
                                    message_transport_type => $mtt,
718
                                    message_transport_type => $mtt,
719
                                    from_address           => $admin_email_address,
720
                                    to_address             => join(',', @emails_to_use),
719
                                    to_address             => join(',', @emails_to_use),
721
                                }
720
                                }
722
                            );
721
                            );
(-)a/opac/opac-memberentry.pl (-3 / +1 lines)
Lines 122-132 if ( $action eq 'create' ) { Link Here
122
122
123
            C4::Letters::EnqueueLetter(
123
            C4::Letters::EnqueueLetter(
124
                {
124
                {
125
                    borrowernumber         => $borrower{borrowernumber},
125
                    letter                 => $letter,
126
                    letter                 => $letter,
126
                    message_transport_type => 'email',
127
                    message_transport_type => 'email',
127
                    to_address             => $borrower{'email'},
128
                    from_address =>
129
                      C4::Context->preference('KohaAdminEmailAddress'),
130
                }
128
                }
131
            );
129
            );
132
        }
130
        }
(-)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 297-302 my $brCat1 = GetBranchesInCategory( $cat1->{categorycode} ); Link Here
297
my @b      = ( $b2->{branchcode} );
298
my @b      = ( $b2->{branchcode} );
298
is_deeply( $brCat1, \@b, 'CAT1 has branch BRB' );
299
is_deeply( $brCat1, \@b, 'CAT1 has branch BRB' );
299
300
301
my $b3_email = 'email_b3@example.org';
300
my $b3 = {
302
my $b3 = {
301
    add            => 1,
303
    add            => 1,
302
    branchcode     => 'BRC',
304
    branchcode     => 'BRC',
Lines 310-316 my $b3 = { Link Here
310
    branchcountry  => 'countryC',
312
    branchcountry  => 'countryC',
311
    branchphone    => 'phoneC',
313
    branchphone    => 'phoneC',
312
    branchfax      => 'faxC',
314
    branchfax      => 'faxC',
313
    branchemail    => 'emailC',
315
    branchemail    => $b3_email,
314
    branchurl      => 'urlC',
316
    branchurl      => 'urlC',
315
    branchip       => 'ipC',
317
    branchip       => 'ipC',
316
    branchprinter  => undef,
318
    branchprinter  => undef,
Lines 347-352 is_deeply($categories, [ {%$cat1}, {%$cat2},{ %new_category, selected => 1 } ], Link Here
347
my $loop = GetBranchesLoop;
349
my $loop = GetBranchesLoop;
348
is( scalar(@$loop), GetBranchesCount(), 'There is the right number of branches' );
350
is( scalar(@$loop), GetBranchesCount(), 'There is the right number of branches' );
349
351
350
# End transaction
352
# Test GetBranchEmailFromBorrowernumber
351
$dbh->rollback;
353
my $borrowernumber = C4::Members::AddMember(
352
354
    cardnumber   => 'CARDNUMBER42_TEST',
355
    firstname    => 'fn',
356
    surname      => 'surname',
357
    categorycode => 'S',
358
    branchcode   => $b3->{branchcode},
359
    dateofbirth  => '',
360
    dateexpiry   => '9999-12-31',
361
    userid       => 'userid'
362
);
363
is( C4::Branch::GetBranchEmailFromBorrowernumber($borrowernumber), $b3_email,
364
'GetBranchEmailFromBorrowernumber returns the branchemail from a borrowernumber'
365
);
366
is( C4::Branch::GetBranchEmailFromBorrowernumber(), undef,
367
'GetBranchEmailFromBorrowernumber returns undef if no parameter is given'
368
);
(-)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 55-66 $dbh->do(q|DELETE FROM message_queue|); Link Here
55
$dbh->do(q|DELETE FROM message_transport_types|);
55
$dbh->do(q|DELETE FROM message_transport_types|);
56
56
57
my $date = dt_from_string;
57
my $date = dt_from_string;
58
my ( $email, $emailpro ) = ( 'email@example.org', 'emailpro@example.org' );
58
my $borrowernumber = AddMember(
59
my $borrowernumber = AddMember(
59
    firstname    => 'Jane',
60
    firstname    => 'Jane',
60
    surname      => 'Smith',
61
    surname      => 'Smith',
61
    categorycode => 'PT',
62
    categorycode => 'PT',
62
    branchcode   => 'CPL',
63
    branchcode   => 'CPL',
63
    dateofbirth  => $date,
64
    dateofbirth  => $date,
65
    email        => $email,
66
    emailpro     => $emailpro,
64
);
67
);
65
68
66
my $marc_record = MARC::Record->new;
69
my $marc_record = MARC::Record->new;
Lines 86-93 my $my_message = { Link Here
86
    to_address             => 'to@example.com',
89
    to_address             => 'to@example.com',
87
    from_address           => 'from@example.com',
90
    from_address           => 'from@example.com',
88
};
91
};
89
my $message_id = C4::Letters::EnqueueLetter($my_message);
92
is( C4::Letters::EnqueueLetter($my_message), undef, 'EnqueueLetter without the letter argument returns undef' );
90
is( $message_id, undef, 'EnqueueLetter without the letter argument returns undef' );
91
93
92
delete $my_message->{message_transport_type};
94
delete $my_message->{message_transport_type};
93
$my_message->{letter} = {
95
$my_message->{letter} = {
Lines 97-109 $my_message->{letter} = { Link Here
97
    code         => 'TEST_MESSAGE',
99
    code         => 'TEST_MESSAGE',
98
    content_type => 'text/plain',
100
    content_type => 'text/plain',
99
};
101
};
100
$message_id = C4::Letters::EnqueueLetter($my_message);
102
is( C4::Letters::EnqueueLetter($my_message), undef, 'EnqueueLetter without the message_transport_type argument returns undef' );
101
is( $message_id, undef, 'EnqueueLetter without the message type argument argument returns undef' );
102
103
103
$my_message->{message_transport_type} = 'sms';
104
$my_message->{message_transport_type} = 'sms';
104
$message_id = C4::Letters::EnqueueLetter($my_message);
105
my $messages_queued = C4::Letters::EnqueueLetter($my_message);
105
ok(defined $message_id && $message_id > 0, 'new message successfully queued');
106
is($messages_queued, 1, 'new message successfully queued');
106
107
107
108
# GetQueuedMessages
108
# GetQueuedMessages
109
my $messages = C4::Letters::GetQueuedMessages();
109
my $messages = C4::Letters::GetQueuedMessages();
Lines 111-117 is( @$messages, 1, 'GetQueuedMessages without argument returns all the entries' Link Here
111
111
112
$messages = C4::Letters::GetQueuedMessages({ borrowernumber => $borrowernumber });
112
$messages = C4::Letters::GetQueuedMessages({ borrowernumber => $borrowernumber });
113
is( @$messages, 1, 'one message stored for the borrower' );
113
is( @$messages, 1, 'one message stored for the borrower' );
114
is( $messages->[0]->{message_id}, $message_id, 'EnqueueLetter returns the message id correctly' );
115
is( $messages->[0]->{borrowernumber}, $borrowernumber, 'EnqueueLetter stores the borrower number correctly' );
114
is( $messages->[0]->{borrowernumber}, $borrowernumber, 'EnqueueLetter stores the borrower number correctly' );
116
is( $messages->[0]->{subject}, $my_message->{letter}->{title}, 'EnqueueLetter stores the subject correctly' );
115
is( $messages->[0]->{subject}, $my_message->{letter}->{title}, 'EnqueueLetter stores the subject correctly' );
117
is( $messages->[0]->{content}, $my_message->{letter}->{content}, 'EnqueueLetter stores the content correctly' );
116
is( $messages->[0]->{content}, $my_message->{letter}->{content}, 'EnqueueLetter stores the content correctly' );
Lines 339-342 is($err, 1, "Successfully sent claim"); Link Here
339
is($mail{'To'}, 'testemail@mydomain.com', "mailto correct in sent claim");
338
is($mail{'To'}, 'testemail@mydomain.com', "mailto correct in sent claim");
340
is($mail{'Message'}, 'my vendor|John Smith|<order>Ordernumber ' . $ordernumber . ' (Silence in the library) (1 ordered)</order>', 'Claim notice text constructed successfully');
339
is($mail{'Message'}, 'my vendor|John Smith|<order>Ordernumber ' . $ordernumber . ' (Silence in the library) (1 ordered)</order>', 'Claim notice text constructed successfully');
341
340
342
$dbh->rollback;
341
# EnqueueLetter and AutoEmailPrimaryAddress
342
$my_message = {
343
    borrowernumber         => $borrowernumber,
344
    message_transport_type => 'email',
345
    to_address             => 'to@example.com',
346
    from_address           => 'from@example.com',
347
    letter                 => {
348
        content      => 'a message',
349
        title        => 'message title',
350
        metadata     => 'metadata',
351
        code         => 'TEST_MESSAGE',
352
        content_type => 'text/plain',
353
    },
354
};
355
356
$dbh->do(q|DELETE FROM message_queue|);
357
t::lib::Mocks::mock_preference('AutoEmailPrimaryAddress', 'email');
358
is( C4::Letters::EnqueueLetter($my_message), 1, 'message successfully queued' );
359
$messages = C4::Letters::GetQueuedMessages({ borrowernumber => $borrowernumber });
360
is( scalar( @$messages ), 1, 'The message has been queued for the expected patron' );
361
is( $messages->[0]{to_address}, 'to@example.com', 'AutoEmailPrimaryAddress=email, EnqueueLetter used the to_address given in parameter' );
362
363
$dbh->do(q|DELETE FROM message_queue|);
364
delete $my_message->{to_address};
365
is( C4::Letters::EnqueueLetter($my_message), 1, 'message successfully queued' );
366
$messages = C4::Letters::GetQueuedMessages({ borrowernumber => $borrowernumber });
367
is( scalar( @$messages ), 1, 'The message has been queued for the expected patron' );
368
is( $messages->[0]{to_address}, $email, 'AutoEmailPrimaryAddress=email, EnqueueLetter used the patron email address if no to_address is given in parameter' );
369
370
$dbh->do(q|DELETE FROM message_queue|);
371
t::lib::Mocks::mock_preference('AutoEmailPrimaryAddress', 'emailpro');
372
is( C4::Letters::EnqueueLetter($my_message), 1, 'message successfully queued' );
373
$messages = C4::Letters::GetQueuedMessages({ borrowernumber => $borrowernumber });
374
is( scalar( @$messages ), 1, 'The message has been queued for the expected patron' );
375
is( $messages->[0]{to_address}, $emailpro, 'AutoEmailPrimaryAddress=emailpro, EnqueueLetter used the patron emailpro address if no to_address is given in parameter' );
376
377
$dbh->do(q|DELETE FROM message_queue|);
378
t::lib::Mocks::mock_preference('AutoEmailPrimaryAddress', 'OFF');
379
is( C4::Letters::EnqueueLetter($my_message), 1, 'message successfully queued' );
380
$messages = C4::Letters::GetQueuedMessages({ borrowernumber => $borrowernumber });
381
is( scalar( @$messages ), 1, 'The message has been queued for the expected patron' );
382
is( $messages->[0]{to_address}, $email, 'AutoEmailPrimaryAddress=OFF, EnqueueLetter used the patron email address if no to_address is given in parameter' );
383
384
$dbh->do(q|DELETE FROM message_queue|);
385
t::lib::Mocks::mock_preference('AutoEmailPrimaryAddress', 'email|OFF|emailpro'); # This is no consistent. OFF should be alone.
386
is( C4::Letters::EnqueueLetter($my_message), 1, 'message successfully queued' );
387
$messages = C4::Letters::GetQueuedMessages({ borrowernumber => $borrowernumber });
388
is( scalar( @$messages ), 1, 'The message has been queued for the expected patron' );
389
is( $messages->[0]{to_address}, $email, 'AutoEmailPrimaryAddress=email|OFF|emailpro, EnqueueLetter used the patron email address if no to_address is given in parameter' );
390
391
$dbh->do(q|DELETE FROM message_queue|);
392
t::lib::Mocks::mock_preference('AutoEmailPrimaryAddress', 'email|emailpro');
393
is( C4::Letters::EnqueueLetter($my_message), 2, 'messages successfully queued' );
394
$messages = C4::Letters::GetQueuedMessages({ borrowernumber => $borrowernumber });
395
is( scalar( @$messages ), 2, 'The messages have been queued for the expected patron' );
396
is( $messages->[0]{to_address}, $email, 'AutoEmailPrimaryAddress=email|emailpro, EnqueueLetter used the patron email address for the first letter' );
397
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 => 56;
20
use Test::More tests => 58;
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 190-204 is ($age, "-19", "Birthday In the Future"); Link Here
190
190
191
C4::Context->set_preference( 'AutoEmailPrimaryAddress', 'OFF' );
191
C4::Context->set_preference( 'AutoEmailPrimaryAddress', 'OFF' );
192
C4::Context->clear_syspref_cache();
192
C4::Context->clear_syspref_cache();
193
my $notice_emails = GetNoticeEmailAddresses($member->{'borrowernumber'});
194
is_deeply( $notice_emails, [ $EMAIL ], "GetNoticeEmailAddresses returns correct value when AutoEmailPrimaryAddress is off" );
193
195
194
my $notice_email = GetNoticeEmailAddress($member->{'borrowernumber'});
196
C4::Context->set_preference( 'AutoEmailPrimaryAddress', 'emailpro|OFF' );
195
is ($notice_email, $EMAIL, "GetNoticeEmailAddress returns correct value when AutoEmailPrimaryAddress is off");
197
C4::Context->clear_syspref_cache();
198
$notice_emails = GetNoticeEmailAddresses($member->{'borrowernumber'});
199
is_deeply( $notice_emails, [ $EMAIL ], "GetNoticeEmailAddresses returns correct value when AutoEmailPrimaryAddress contains off" );
196
200
197
C4::Context->set_preference( 'AutoEmailPrimaryAddress', 'emailpro' );
201
C4::Context->set_preference( 'AutoEmailPrimaryAddress', 'emailpro' );
198
C4::Context->clear_syspref_cache();
202
C4::Context->clear_syspref_cache();
203
$notice_emails = GetNoticeEmailAddresses($member->{'borrowernumber'});
204
is_deeply ($notice_emails, [ $EMAILPRO ], "GetNoticeEmailAddresses returns correct value when AutoEmailPrimaryAddress is emailpro");
199
205
200
$notice_email = GetNoticeEmailAddress($member->{'borrowernumber'});
206
C4::Context->set_preference( 'AutoEmailPrimaryAddress', 'emailpro|email' );
201
is ($notice_email, $EMAILPRO, "GetNoticeEmailAddress returns correct value when AutoEmailPrimaryAddress is emailpro");
207
C4::Context->clear_syspref_cache();
208
$notice_emails = GetNoticeEmailAddresses($member->{'borrowernumber'});
209
is_deeply ($notice_emails, [ $EMAILPRO, $EMAIL ], "GetNoticeEmailAddresses returns correct value when AutoEmailPrimaryAddress is emailpro|email");
202
210
203
ok(!$member->{is_expired}, "GetMemberDetails() indicates that patron is not expired");
211
ok(!$member->{is_expired}, "GetMemberDetails() indicates that patron is not expired");
204
ModMember(borrowernumber => $member->{'borrowernumber'}, dateexpiry => '2001-01-1');
212
ModMember(borrowernumber => $member->{'borrowernumber'}, dateexpiry => '2001-01-1');
205
- 

Return to bug 12802