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