|
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 |
|