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 676-682 sub EnqueueLetter { Link Here
676
    my $params = shift or return;
677
    my $params = shift or return;
677
678
678
    return unless exists $params->{'letter'};
679
    return unless exists $params->{'letter'};
679
#   return unless exists $params->{'borrowernumber'};
680
    return unless exists $params->{'message_transport_type'};
680
    return unless exists $params->{'message_transport_type'};
681
681
682
    my $content = $params->{letter}->{content};
682
    my $content = $params->{letter}->{content};
Lines 696-723 sub EnqueueLetter { Link Here
696
        );
696
        );
697
    }
697
    }
698
698
699
    my $dbh       = C4::Context->dbh();
699
    my @to_addresses;
700
    my $statement = << 'ENDSQL';
700
    if ( $params->{to_address} ) {
701
INSERT INTO message_queue
701
        @to_addresses = ( $params->{to_address} );
702
( borrowernumber, subject, content, metadata, letter_code, message_transport_type, status, time_queued, to_address, from_address, content_type )
702
    } elsif ( $params->{borrowernumber} and $params->{message_transport_type} eq 'email' ) {
703
VALUES
703
        @to_addresses = @{ GetNoticeEmailAddresses( $params->{borrowernumber} ) };
704
( ?,              ?,       ?,       ?,        ?,           ?,                      ?,      NOW(),       ?,          ?,            ? )
704
    }
705
ENDSQL
706
705
707
    my $sth    = $dbh->prepare($statement);
706
    my $from_address;
708
    my $result = $sth->execute(
707
    if ( $params->{from_address} ) {
709
        $params->{'borrowernumber'},              # borrowernumber
708
        $from_address = $params->{from_address};
710
        $params->{'letter'}->{'title'},           # subject
709
    } elsif ( $params->{message_transport_type} eq 'email' ) {
711
        $params->{'letter'}->{'content'},         # content
710
        if ( $params->{borrowernumber} ) {
712
        $params->{'letter'}->{'metadata'} || '',  # metadata
711
            $from_address = C4::Branch::GetBranchEmailFromBorrowernumber( $params->{borrowernumber} );
713
        $params->{'letter'}->{'code'}     || '',  # letter_code
712
        }
714
        $params->{'message_transport_type'},      # message_transport_type
713
715
        'pending',                                # status
714
        $from_address ||= C4::Context->preference('KohaAdminEmailAddress');
716
        $params->{'to_address'},                  # to_address
715
    }
717
        $params->{'from_address'},                # from_address
716
718
        $params->{'letter'}->{'content-type'},    # content_type
717
    my $rs = Koha::Database->new->schema->resultset('MessageQueue');
719
    );
718
    for my $to_address ( @to_addresses ) {
720
    return $dbh->last_insert_id(undef,undef,'message_queue', undef);
719
        $rs->create({
720
            borrowernumber => $params->{borrowernumber},
721
            subject => $params->{letter}{title},
722
            content => $params->{letter}{content},
723
            metadata => ( $params->{letter}{metadata} || '' ),
724
            letter_code => ( $params->{letter}{code}     || ''),
725
            message_transport_type => $params->{message_transport_type},
726
            status => 'pending',
727
            to_address => $to_address,
728
            from_address => $from_address,
729
            content_type => $params->{letter}{'content-type'},
730
        });
731
    }
732
    return scalar( @to_addresses );
721
}
733
}
722
734
723
=head2 SendQueuedMessages ([$hashref]) 
735
=head2 SendQueuedMessages ([$hashref]) 
Lines 742-747 sub SendQueuedMessages { Link Here
742
          if $params->{'verbose'} or $debug;
754
          if $params->{'verbose'} or $debug;
743
        # This is just begging for subclassing
755
        # This is just begging for subclassing
744
        next MESSAGE if ( lc($message->{'message_transport_type'}) eq 'rss' );
756
        next MESSAGE if ( lc($message->{'message_transport_type'}) eq 'rss' );
757
745
        if ( lc( $message->{'message_transport_type'} ) eq 'email' ) {
758
        if ( lc( $message->{'message_transport_type'} ) eq 'email' ) {
746
            _send_message_by_email( $message, $params->{'username'}, $params->{'password'}, $params->{'method'} );
759
            _send_message_by_email( $message, $params->{'username'}, $params->{'password'}, $params->{'method'} );
747
        }
760
        }
Lines 803-833 list of hashes, each has represents a message in the message queue. Link Here
803
sub GetQueuedMessages {
816
sub GetQueuedMessages {
804
    my $params = shift;
817
    my $params = shift;
805
818
806
    my $dbh = C4::Context->dbh();
819
    my $rs = Koha::Database->new->schema->resultset('MessageQueue')->search(
807
    my $statement = << 'ENDSQL';
820
        {
808
SELECT message_id, borrowernumber, subject, content, message_transport_type, status, time_queued
821
            (
809
FROM message_queue
822
                $params->{borrowernumber}
810
ENDSQL
823
                ? ( borrowernumber => $params->{borrowernumber} )
811
824
                : ()
812
    my @query_params;
825
            ),
813
    my @whereclauses;
826
        },
814
    if ( exists $params->{'borrowernumber'} ) {
827
        {
815
        push @whereclauses, ' borrowernumber = ? ';
828
            (
816
        push @query_params, $params->{'borrowernumber'};
829
                $params->{limit}
817
    }
830
                ? ( rows => $params->{limit} )
818
831
                : ()
819
    if ( @whereclauses ) {
832
            ),
820
        $statement .= ' WHERE ' . join( 'AND', @whereclauses );
833
        },
821
    }
834
    );
822
835
    $rs->result_class('DBIx::Class::ResultClass::HashRefInflator');
823
    if ( defined $params->{'limit'} ) {
836
    return [ $rs->all ];
824
        $statement .= ' LIMIT ? ';
825
        push @query_params, $params->{'limit'};
826
    }
827
828
    my $sth = $dbh->prepare( $statement );
829
    my $result = $sth->execute( @query_params );
830
    return $sth->fetchall_arrayref({});
831
}
837
}
832
838
833
=head2 GetMessageTransportTypes
839
=head2 GetMessageTransportTypes
Lines 933-954 sub _send_message_by_email { Link Here
933
    my ($username, $password, $method) = @_;
939
    my ($username, $password, $method) = @_;
934
940
935
    my $member = C4::Members::GetMember( 'borrowernumber' => $message->{'borrowernumber'} );
941
    my $member = C4::Members::GetMember( 'borrowernumber' => $message->{'borrowernumber'} );
936
    my $to_address = $message->{'to_address'};
942
937
    unless ($to_address) {
943
    unless ( $member and $message->{to_address} ) {
938
        unless ($member) {
944
        warn "FAIL: No 'to_address' and INVALID borrowernumber ($message->{borrowernumber})" unless $member;
939
            warn "FAIL: No 'to_address' and INVALID borrowernumber ($message->{borrowernumber})";
945
        _set_message_status({
940
            _set_message_status( { message_id => $message->{'message_id'},
946
            message_id => $message->{'message_id'},
941
                                   status     => 'failed' } );
947
            status     => 'failed'
942
            return;
948
        });
943
        }
949
        return;
944
        $to_address = C4::Members::GetNoticeEmailAddress( $message->{'borrowernumber'} );
945
        unless ($to_address) {  
946
            # warn "FAIL: No 'to_address' and no email for " . ($member->{surname} ||'') . ", borrowernumber ($message->{borrowernumber})";
947
            # warning too verbose for this more common case?
948
            _set_message_status( { message_id => $message->{'message_id'},
949
                                   status     => 'failed' } );
950
            return;
951
        }
952
    }
950
    }
953
951
954
    my $utf8   = decode('MIME-Header', $message->{'subject'} );
952
    my $utf8   = decode('MIME-Header', $message->{'subject'} );
Lines 958-968 sub _send_message_by_email { Link Here
958
    my $content_type = $message->{'content_type'} || 'text/plain; charset="UTF-8"';
956
    my $content_type = $message->{'content_type'} || 'text/plain; charset="UTF-8"';
959
    my $is_html = $content_type =~ m/html/io;
957
    my $is_html = $content_type =~ m/html/io;
960
958
961
    my $branch_email = ( $member ) ? GetBranchDetail( $member->{'branchcode'} )->{'branchemail'} : undef;
962
959
963
    my %sendmail_params = (
960
    my %sendmail_params = (
964
        To   => $to_address,
961
        To   => $message->{to_address},
965
        From => $message->{'from_address'} || $branch_email || C4::Context->preference('KohaAdminEmailAddress'),
962
        From => $message->{from_address},
966
        Subject => $subject,
963
        Subject => $subject,
967
        charset => 'utf8',
964
        charset => 'utf8',
968
        Message => $is_html ? _wrap_html($content, $subject) : $content,
965
        Message => $is_html ? _wrap_html($content, $subject) : $content,
Lines 973-979 sub _send_message_by_email { Link Here
973
       $sendmail_params{ Bcc } = $bcc;
970
       $sendmail_params{ Bcc } = $bcc;
974
    }
971
    }
975
972
976
    _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
977
    if ( sendmail( %sendmail_params ) ) {
973
    if ( sendmail( %sendmail_params ) ) {
978
        _set_message_status( { message_id => $message->{'message_id'},
974
        _set_message_status( { message_id => $message->{'message_id'},
979
                status     => 'sent' } );
975
                status     => 'sent' } );
Lines 1047-1058 sub _send_message_by_sms { Link Here
1047
    return $success;
1043
    return $success;
1048
}
1044
}
1049
1045
1050
sub _update_message_to_address {
1051
    my ($id, $to)= @_;
1052
    my $dbh = C4::Context->dbh();
1053
    $dbh->do('UPDATE message_queue SET to_address=? WHERE message_id=?',undef,($to,$id));
1054
}
1055
1056
sub _set_message_status {
1046
sub _set_message_status {
1057
    my $params = shift or return;
1047
    my $params = shift or return;
1058
1048
(-)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 1489-1521 sub GetFirstValidEmailAddress { Link Here
1489
    }
1489
    }
1490
}
1490
}
1491
1491
1492
=head2 GetNoticeEmailAddress
1492
=head2 GetNoticeEmailAddresses
1493
1493
1494
  $email = GetNoticeEmailAddress($borrowernumber);
1494
  $emails = GetNoticeEmailAddresses( borrowernumber );
1495
1495
1496
Return the email address of borrower used for notices, given the borrowernumber.
1496
Return the email addresses of borrower used for notices, given the borrowernumber.
1497
Returns the empty string if no email address.
1497
Returns an empty arrayref if no email address.
1498
1498
1499
=cut
1499
=cut
1500
1500
1501
sub GetNoticeEmailAddress {
1501
sub GetNoticeEmailAddresses {
1502
    my $borrowernumber = shift;
1502
    my $borrowernumber = shift;
1503
1503
1504
    my $which_address = C4::Context->preference("AutoEmailPrimaryAddress");
1504
    my $which_addresses = C4::Context->preference("AutoEmailPrimaryAddress");
1505
    # if syspref is set to 'first valid' (value == OFF), look up email address
1505
    my @email_addresses;
1506
    if ( $which_address eq 'OFF' ) {
1506
    for my $email_address_field ( split /\|/, $which_addresses ) {
1507
        return GetFirstValidEmailAddress($borrowernumber);
1507
1508
        # if syspref is set to 'first valid' (value == OFF), look up email address
1509
        if ( $email_address_field eq 'OFF' ) {
1510
            return [ GetFirstValidEmailAddress($borrowernumber) ];
1511
        }
1512
1513
        # specified email address field
1514
        my $email_address = C4::Context->dbh->selectcol_arrayref(
1515
            qq|
1516
                SELECT $email_address_field AS email
1517
                FROM borrowers
1518
                WHERE borrowernumber = ?
1519
            |, {}, $borrowernumber
1520
        );
1521
        push @email_addresses, $email_address->[0] if $email_address->[0];
1508
    }
1522
    }
1509
    # specified email address field
1523
    return \@email_addresses;
1510
    my $dbh = C4::Context->dbh;
1511
    my $sth = $dbh->prepare( qq{
1512
        SELECT $which_address AS primaryemail
1513
        FROM borrowers
1514
        WHERE borrowernumber=?
1515
    } );
1516
    $sth->execute($borrowernumber);
1517
    my $data = $sth->fetchrow_hashref;
1518
    return $data->{'primaryemail'} || '';
1519
}
1524
}
1520
1525
1521
=head2 GetExpiryDate 
1526
=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 699-705 END_SQL Link Here
699
                                {   letter                 => $letter,
699
                                {   letter                 => $letter,
700
                                    borrowernumber         => $borrowernumber,
700
                                    borrowernumber         => $borrowernumber,
701
                                    message_transport_type => $mtt,
701
                                    message_transport_type => $mtt,
702
                                    from_address           => $admin_email_address,
703
                                    to_address             => join(',', @emails_to_use),
702
                                    to_address             => join(',', @emails_to_use),
704
                                }
703
                                }
705
                            );
704
                            );
(-)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 / +66 lines)
Lines 19-25 Link Here
19
19
20
use Modern::Perl;
20
use Modern::Perl;
21
21
22
use Test::More tests => 45;
22
use Test::More tests => 63;
23
23
24
use MARC::Record;
24
use MARC::Record;
25
use C4::Biblio qw( AddBiblio );
25
use C4::Biblio qw( AddBiblio );
Lines 41-52 $dbh->do(q|DELETE FROM message_queue|); Link Here
41
$dbh->do(q|DELETE FROM message_transport_types|);
41
$dbh->do(q|DELETE FROM message_transport_types|);
42
42
43
my $date = dt_from_string;
43
my $date = dt_from_string;
44
my ( $email, $emailpro ) = ( 'email@example.org', 'emailpro@example.org' );
44
my $borrowernumber = AddMember(
45
my $borrowernumber = AddMember(
45
    firstname    => 'Jane',
46
    firstname    => 'Jane',
46
    surname      => 'Smith',
47
    surname      => 'Smith',
47
    categorycode => 'PT',
48
    categorycode => 'PT',
48
    branchcode   => 'CPL',
49
    branchcode   => 'CPL',
49
    dateofbirth  => $date,
50
    dateofbirth  => $date,
51
    email        => $email,
52
    emailpro     => $emailpro,
50
);
53
);
51
54
52
my $marc_record = MARC::Record->new;
55
my $marc_record = MARC::Record->new;
Lines 72-79 my $my_message = { Link Here
72
    to_address             => 'to@example.com',
75
    to_address             => 'to@example.com',
73
    from_address           => 'from@example.com',
76
    from_address           => 'from@example.com',
74
};
77
};
75
my $message_id = C4::Letters::EnqueueLetter($my_message);
78
is( C4::Letters::EnqueueLetter($my_message), undef, 'EnqueueLetter without the letter argument returns undef' );
76
is( $message_id, undef, 'EnqueueLetter without the letter argument returns undef' );
77
79
78
delete $my_message->{message_transport_type};
80
delete $my_message->{message_transport_type};
79
$my_message->{letter} = {
81
$my_message->{letter} = {
Lines 83-95 $my_message->{letter} = { Link Here
83
    code         => 'TEST_MESSAGE',
85
    code         => 'TEST_MESSAGE',
84
    content_type => 'text/plain',
86
    content_type => 'text/plain',
85
};
87
};
86
$message_id = C4::Letters::EnqueueLetter($my_message);
88
is( C4::Letters::EnqueueLetter($my_message), undef, 'EnqueueLetter without the message_transport_type argument returns undef' );
87
is( $message_id, undef, 'EnqueueLetter without the message type argument argument returns undef' );
88
89
89
$my_message->{message_transport_type} = 'sms';
90
$my_message->{message_transport_type} = 'sms';
90
$message_id = C4::Letters::EnqueueLetter($my_message);
91
my $messages_queued = C4::Letters::EnqueueLetter($my_message);
91
ok(defined $message_id && $message_id > 0, 'new message successfully queued');
92
is($messages_queued, 1, 'new message successfully queued');
92
93
93
94
# GetQueuedMessages
94
# GetQueuedMessages
95
my $messages = C4::Letters::GetQueuedMessages();
95
my $messages = C4::Letters::GetQueuedMessages();
Lines 97-103 is( @$messages, 1, 'GetQueuedMessages without argument returns all the entries' Link Here
97
97
98
$messages = C4::Letters::GetQueuedMessages({ borrowernumber => $borrowernumber });
98
$messages = C4::Letters::GetQueuedMessages({ borrowernumber => $borrowernumber });
99
is( @$messages, 1, 'one message stored for the borrower' );
99
is( @$messages, 1, 'one message stored for the borrower' );
100
is( $messages->[0]->{message_id}, $message_id, 'EnqueueLetter returns the message id correctly' );
101
is( $messages->[0]->{borrowernumber}, $borrowernumber, 'EnqueueLetter stores the borrower number correctly' );
100
is( $messages->[0]->{borrowernumber}, $borrowernumber, 'EnqueueLetter stores the borrower number correctly' );
102
is( $messages->[0]->{subject}, $my_message->{letter}->{title}, 'EnqueueLetter stores the subject correctly' );
101
is( $messages->[0]->{subject}, $my_message->{letter}->{title}, 'EnqueueLetter stores the subject correctly' );
103
is( $messages->[0]->{content}, $my_message->{letter}->{content}, 'EnqueueLetter stores the content correctly' );
102
is( $messages->[0]->{content}, $my_message->{letter}->{content}, 'EnqueueLetter stores the content correctly' );
Lines 260-263 $prepared_letter = GetPreparedLetter(( Link Here
260
$my_content_letter = qq|This is a SMS for an $substitute->{status}|;
259
$my_content_letter = qq|This is a SMS for an $substitute->{status}|;
261
is( $prepared_letter->{content}, $my_content_letter, 'GetPreparedLetter returns the content correctly' );
260
is( $prepared_letter->{content}, $my_content_letter, 'GetPreparedLetter returns the content correctly' );
262
261
263
$dbh->rollback;
262
263
# EnqueueLetter and AutoEmailPrimaryAddress
264
$my_message = {
265
    borrowernumber         => $borrowernumber,
266
    message_transport_type => 'email',
267
    to_address             => 'to@example.com',
268
    from_address           => 'from@example.com',
269
    letter                 => {
270
        content      => 'a message',
271
        title        => 'message title',
272
        metadata     => 'metadata',
273
        code         => 'TEST_MESSAGE',
274
        content_type => 'text/plain',
275
    },
276
};
277
278
$dbh->do(q|DELETE FROM message_queue|);
279
t::lib::Mocks::mock_preference('AutoEmailPrimaryAddress', 'email');
280
is( C4::Letters::EnqueueLetter($my_message), 1, 'message successfully queued' );
281
$messages = C4::Letters::GetQueuedMessages({ borrowernumber => $borrowernumber });
282
is( scalar( @$messages ), 1, 'The message has been queued for the expected patron' );
283
is( $messages->[0]{to_address}, 'to@example.com', 'AutoEmailPrimaryAddress=email, EnqueueLetter used the to_address given in parameter' );
284
285
$dbh->do(q|DELETE FROM message_queue|);
286
delete $my_message->{to_address};
287
is( C4::Letters::EnqueueLetter($my_message), 1, 'message successfully queued' );
288
$messages = C4::Letters::GetQueuedMessages({ borrowernumber => $borrowernumber });
289
is( scalar( @$messages ), 1, 'The message has been queued for the expected patron' );
290
is( $messages->[0]{to_address}, $email, 'AutoEmailPrimaryAddress=email, EnqueueLetter used the patron email address if no to_address is given in parameter' );
291
292
$dbh->do(q|DELETE FROM message_queue|);
293
t::lib::Mocks::mock_preference('AutoEmailPrimaryAddress', 'emailpro');
294
is( C4::Letters::EnqueueLetter($my_message), 1, 'message successfully queued' );
295
$messages = C4::Letters::GetQueuedMessages({ borrowernumber => $borrowernumber });
296
is( scalar( @$messages ), 1, 'The message has been queued for the expected patron' );
297
is( $messages->[0]{to_address}, $emailpro, 'AutoEmailPrimaryAddress=emailpro, EnqueueLetter used the patron emailpro address if no to_address is given in parameter' );
298
299
$dbh->do(q|DELETE FROM message_queue|);
300
t::lib::Mocks::mock_preference('AutoEmailPrimaryAddress', 'OFF');
301
is( C4::Letters::EnqueueLetter($my_message), 1, 'message successfully queued' );
302
$messages = C4::Letters::GetQueuedMessages({ borrowernumber => $borrowernumber });
303
is( scalar( @$messages ), 1, 'The message has been queued for the expected patron' );
304
is( $messages->[0]{to_address}, $email, 'AutoEmailPrimaryAddress=OFF, EnqueueLetter used the patron email address if no to_address is given in parameter' );
305
306
$dbh->do(q|DELETE FROM message_queue|);
307
t::lib::Mocks::mock_preference('AutoEmailPrimaryAddress', 'email|OFF|emailpro'); # This is no consistent. OFF should be alone.
308
is( C4::Letters::EnqueueLetter($my_message), 1, 'message successfully queued' );
309
$messages = C4::Letters::GetQueuedMessages({ borrowernumber => $borrowernumber });
310
is( scalar( @$messages ), 1, 'The message has been queued for the expected patron' );
311
is( $messages->[0]{to_address}, $email, 'AutoEmailPrimaryAddress=email|OFF|emailpro, EnqueueLetter used the patron email address if no to_address is given in parameter' );
312
313
$dbh->do(q|DELETE FROM message_queue|);
314
t::lib::Mocks::mock_preference('AutoEmailPrimaryAddress', 'email|emailpro');
315
is( C4::Letters::EnqueueLetter($my_message), 2, 'messages successfully queued' );
316
$messages = C4::Letters::GetQueuedMessages({ borrowernumber => $borrowernumber });
317
is( scalar( @$messages ), 2, 'The messages have been queued for the expected patron' );
318
is( $messages->[0]{to_address}, $email, 'AutoEmailPrimaryAddress=email|emailpro, EnqueueLetter used the patron email address for the first letter' );
319
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 => 55;
20
use Test::More tests => 57;
21
use Data::Dumper;
21
use Data::Dumper;
22
use C4::Context;
22
use C4::Context;
23
23
Lines 189-203 is ($age, "-19", "Birthday In the Future"); Link Here
189
189
190
C4::Context->set_preference( 'AutoEmailPrimaryAddress', 'OFF' );
190
C4::Context->set_preference( 'AutoEmailPrimaryAddress', 'OFF' );
191
C4::Context->clear_syspref_cache();
191
C4::Context->clear_syspref_cache();
192
my $notice_emails = GetNoticeEmailAddresses($member->{'borrowernumber'});
193
is_deeply( $notice_emails, [ $EMAIL ], "GetNoticeEmailAddresses returns correct value when AutoEmailPrimaryAddress is off" );
192
194
193
my $notice_email = GetNoticeEmailAddress($member->{'borrowernumber'});
195
C4::Context->set_preference( 'AutoEmailPrimaryAddress', 'emailpro|OFF' );
194
is ($notice_email, $EMAIL, "GetNoticeEmailAddress returns correct value when AutoEmailPrimaryAddress is off");
196
C4::Context->clear_syspref_cache();
197
$notice_emails = GetNoticeEmailAddresses($member->{'borrowernumber'});
198
is_deeply( $notice_emails, [ $EMAIL ], "GetNoticeEmailAddresses returns correct value when AutoEmailPrimaryAddress contains off" );
195
199
196
C4::Context->set_preference( 'AutoEmailPrimaryAddress', 'emailpro' );
200
C4::Context->set_preference( 'AutoEmailPrimaryAddress', 'emailpro' );
197
C4::Context->clear_syspref_cache();
201
C4::Context->clear_syspref_cache();
202
$notice_emails = GetNoticeEmailAddresses($member->{'borrowernumber'});
203
is_deeply ($notice_emails, [ $EMAILPRO ], "GetNoticeEmailAddresses returns correct value when AutoEmailPrimaryAddress is emailpro");
198
204
199
$notice_email = GetNoticeEmailAddress($member->{'borrowernumber'});
205
C4::Context->set_preference( 'AutoEmailPrimaryAddress', 'emailpro|email' );
200
is ($notice_email, $EMAILPRO, "GetNoticeEmailAddress returns correct value when AutoEmailPrimaryAddress is emailpro");
206
C4::Context->clear_syspref_cache();
207
$notice_emails = GetNoticeEmailAddresses($member->{'borrowernumber'});
208
is_deeply ($notice_emails, [ $EMAILPRO, $EMAIL ], "GetNoticeEmailAddresses returns correct value when AutoEmailPrimaryAddress is emailpro|email");
201
209
202
ok(!$member->{is_expired}, "GetMemberDetails() indicates that patron is not expired");
210
ok(!$member->{is_expired}, "GetMemberDetails() indicates that patron is not expired");
203
ModMember(borrowernumber => $member->{'borrowernumber'}, dateexpiry => '2001-01-1');
211
ModMember(borrowernumber => $member->{'borrowernumber'}, dateexpiry => '2001-01-1');
204
- 

Return to bug 12802