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 857-863
sub EnqueueLetter {
Link Here
|
857 |
my $params = shift or return; |
858 |
my $params = shift or return; |
858 |
|
859 |
|
859 |
return unless exists $params->{'letter'}; |
860 |
return unless exists $params->{'letter'}; |
860 |
# return unless exists $params->{'borrowernumber'}; |
|
|
861 |
return unless exists $params->{'message_transport_type'}; |
861 |
return unless exists $params->{'message_transport_type'}; |
862 |
|
862 |
|
863 |
my $content = $params->{letter}->{content}; |
863 |
my $content = $params->{letter}->{content}; |
Lines 877-904
sub EnqueueLetter {
Link Here
|
877 |
); |
877 |
); |
878 |
} |
878 |
} |
879 |
|
879 |
|
880 |
my $dbh = C4::Context->dbh(); |
880 |
my @to_addresses; |
881 |
my $statement = << 'ENDSQL'; |
881 |
if ( $params->{to_address} ) { |
882 |
INSERT INTO message_queue |
882 |
@to_addresses = ( $params->{to_address} ); |
883 |
( borrowernumber, subject, content, metadata, letter_code, message_transport_type, status, time_queued, to_address, from_address, content_type ) |
883 |
} elsif ( $params->{borrowernumber} and $params->{message_transport_type} eq 'email' ) { |
884 |
VALUES |
884 |
@to_addresses = @{ C4::Members::GetNoticeEmailAddresses( $params->{borrowernumber} ) }; |
885 |
( ?, ?, ?, ?, ?, ?, ?, NOW(), ?, ?, ? ) |
885 |
} |
886 |
ENDSQL |
|
|
887 |
|
886 |
|
888 |
my $sth = $dbh->prepare($statement); |
887 |
my $from_address; |
889 |
my $result = $sth->execute( |
888 |
if ( $params->{from_address} ) { |
890 |
$params->{'borrowernumber'}, # borrowernumber |
889 |
$from_address = $params->{from_address}; |
891 |
$params->{'letter'}->{'title'}, # subject |
890 |
} elsif ( $params->{message_transport_type} eq 'email' ) { |
892 |
$params->{'letter'}->{'content'}, # content |
891 |
if ( $params->{borrowernumber} ) { |
893 |
$params->{'letter'}->{'metadata'} || '', # metadata |
892 |
$from_address = C4::Branch::GetBranchEmailFromBorrowernumber( $params->{borrowernumber} ); |
894 |
$params->{'letter'}->{'code'} || '', # letter_code |
893 |
} |
895 |
$params->{'message_transport_type'}, # message_transport_type |
894 |
|
896 |
'pending', # status |
895 |
$from_address ||= C4::Context->preference('KohaAdminEmailAddress'); |
897 |
$params->{'to_address'}, # to_address |
896 |
} |
898 |
$params->{'from_address'}, # from_address |
897 |
|
899 |
$params->{'letter'}->{'content-type'}, # content_type |
898 |
my $rs = Koha::Database->new->schema->resultset('MessageQueue'); |
900 |
); |
899 |
for my $to_address ( @to_addresses ) { |
901 |
return $dbh->last_insert_id(undef,undef,'message_queue', undef); |
900 |
$rs->create({ |
|
|
901 |
borrowernumber => $params->{borrowernumber}, |
902 |
subject => $params->{letter}{title}, |
903 |
content => $params->{letter}{content}, |
904 |
metadata => ( $params->{letter}{metadata} || '' ), |
905 |
letter_code => ( $params->{letter}{code} || ''), |
906 |
message_transport_type => $params->{message_transport_type}, |
907 |
status => 'pending', |
908 |
to_address => $to_address, |
909 |
from_address => $from_address, |
910 |
content_type => $params->{letter}{'content-type'}, |
911 |
}); |
912 |
} |
913 |
return scalar( @to_addresses ); |
902 |
} |
914 |
} |
903 |
|
915 |
|
904 |
=head2 SendQueuedMessages ([$hashref]) |
916 |
=head2 SendQueuedMessages ([$hashref]) |
Lines 923-928
sub SendQueuedMessages {
Link Here
|
923 |
if $params->{'verbose'} or $debug; |
935 |
if $params->{'verbose'} or $debug; |
924 |
# This is just begging for subclassing |
936 |
# This is just begging for subclassing |
925 |
next MESSAGE if ( lc($message->{'message_transport_type'}) eq 'rss' ); |
937 |
next MESSAGE if ( lc($message->{'message_transport_type'}) eq 'rss' ); |
|
|
938 |
|
926 |
if ( lc( $message->{'message_transport_type'} ) eq 'email' ) { |
939 |
if ( lc( $message->{'message_transport_type'} ) eq 'email' ) { |
927 |
_send_message_by_email( $message, $params->{'username'}, $params->{'password'}, $params->{'method'} ); |
940 |
_send_message_by_email( $message, $params->{'username'}, $params->{'password'}, $params->{'method'} ); |
928 |
} |
941 |
} |
Lines 984-1014
list of hashes, each has represents a message in the message queue.
Link Here
|
984 |
sub GetQueuedMessages { |
997 |
sub GetQueuedMessages { |
985 |
my $params = shift; |
998 |
my $params = shift; |
986 |
|
999 |
|
987 |
my $dbh = C4::Context->dbh(); |
1000 |
my $rs = Koha::Database->new->schema->resultset('MessageQueue')->search( |
988 |
my $statement = << 'ENDSQL'; |
1001 |
{ |
989 |
SELECT message_id, borrowernumber, subject, content, message_transport_type, status, time_queued |
1002 |
( |
990 |
FROM message_queue |
1003 |
$params->{borrowernumber} |
991 |
ENDSQL |
1004 |
? ( borrowernumber => $params->{borrowernumber} ) |
992 |
|
1005 |
: () |
993 |
my @query_params; |
1006 |
), |
994 |
my @whereclauses; |
1007 |
}, |
995 |
if ( exists $params->{'borrowernumber'} ) { |
1008 |
{ |
996 |
push @whereclauses, ' borrowernumber = ? '; |
1009 |
( |
997 |
push @query_params, $params->{'borrowernumber'}; |
1010 |
$params->{limit} |
998 |
} |
1011 |
? ( rows => $params->{limit} ) |
999 |
|
1012 |
: () |
1000 |
if ( @whereclauses ) { |
1013 |
), |
1001 |
$statement .= ' WHERE ' . join( 'AND', @whereclauses ); |
1014 |
}, |
1002 |
} |
1015 |
); |
1003 |
|
1016 |
$rs->result_class('DBIx::Class::ResultClass::HashRefInflator'); |
1004 |
if ( defined $params->{'limit'} ) { |
1017 |
return [ $rs->all ]; |
1005 |
$statement .= ' LIMIT ? '; |
|
|
1006 |
push @query_params, $params->{'limit'}; |
1007 |
} |
1008 |
|
1009 |
my $sth = $dbh->prepare( $statement ); |
1010 |
my $result = $sth->execute( @query_params ); |
1011 |
return $sth->fetchall_arrayref({}); |
1012 |
} |
1018 |
} |
1013 |
|
1019 |
|
1014 |
=head2 GetMessageTransportTypes |
1020 |
=head2 GetMessageTransportTypes |
Lines 1114-1135
sub _send_message_by_email {
Link Here
|
1114 |
my ($username, $password, $method) = @_; |
1120 |
my ($username, $password, $method) = @_; |
1115 |
|
1121 |
|
1116 |
my $member = C4::Members::GetMember( 'borrowernumber' => $message->{'borrowernumber'} ); |
1122 |
my $member = C4::Members::GetMember( 'borrowernumber' => $message->{'borrowernumber'} ); |
1117 |
my $to_address = $message->{'to_address'}; |
1123 |
|
1118 |
unless ($to_address) { |
1124 |
unless ( $member and $message->{to_address} ) { |
1119 |
unless ($member) { |
1125 |
warn "FAIL: No 'to_address' and INVALID borrowernumber ($message->{borrowernumber})" unless $member; |
1120 |
warn "FAIL: No 'to_address' and INVALID borrowernumber ($message->{borrowernumber})"; |
1126 |
_set_message_status({ |
1121 |
_set_message_status( { message_id => $message->{'message_id'}, |
1127 |
message_id => $message->{'message_id'}, |
1122 |
status => 'failed' } ); |
1128 |
status => 'failed' |
1123 |
return; |
1129 |
}); |
1124 |
} |
1130 |
return; |
1125 |
$to_address = C4::Members::GetNoticeEmailAddress( $message->{'borrowernumber'} ); |
|
|
1126 |
unless ($to_address) { |
1127 |
# warn "FAIL: No 'to_address' and no email for " . ($member->{surname} ||'') . ", borrowernumber ($message->{borrowernumber})"; |
1128 |
# warning too verbose for this more common case? |
1129 |
_set_message_status( { message_id => $message->{'message_id'}, |
1130 |
status => 'failed' } ); |
1131 |
return; |
1132 |
} |
1133 |
} |
1131 |
} |
1134 |
|
1132 |
|
1135 |
my $utf8 = decode('MIME-Header', $message->{'subject'} ); |
1133 |
my $utf8 = decode('MIME-Header', $message->{'subject'} ); |
Lines 1150-1156
sub _send_message_by_email {
Link Here
|
1150 |
my $email = Koha::Email->new(); |
1148 |
my $email = Koha::Email->new(); |
1151 |
my %sendmail_params = $email->create_message_headers( |
1149 |
my %sendmail_params = $email->create_message_headers( |
1152 |
{ |
1150 |
{ |
1153 |
to => $to_address, |
|
|
1154 |
from => $message->{'from_address'} || $branch_email, |
1151 |
from => $message->{'from_address'} || $branch_email, |
1155 |
replyto => $branch_replyto, |
1152 |
replyto => $branch_replyto, |
1156 |
sender => $branch_returnpath, |
1153 |
sender => $branch_returnpath, |
Lines 1165-1171
sub _send_message_by_email {
Link Here
|
1165 |
$sendmail_params{ Bcc } = $bcc; |
1162 |
$sendmail_params{ Bcc } = $bcc; |
1166 |
} |
1163 |
} |
1167 |
|
1164 |
|
1168 |
_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 |
|
|
1169 |
if ( sendmail( %sendmail_params ) ) { |
1165 |
if ( sendmail( %sendmail_params ) ) { |
1170 |
_set_message_status( { message_id => $message->{'message_id'}, |
1166 |
_set_message_status( { message_id => $message->{'message_id'}, |
1171 |
status => 'sent' } ); |
1167 |
status => 'sent' } ); |
Lines 1239-1250
sub _send_message_by_sms {
Link Here
|
1239 |
return $success; |
1235 |
return $success; |
1240 |
} |
1236 |
} |
1241 |
|
1237 |
|
1242 |
sub _update_message_to_address { |
|
|
1243 |
my ($id, $to)= @_; |
1244 |
my $dbh = C4::Context->dbh(); |
1245 |
$dbh->do('UPDATE message_queue SET to_address=? WHERE message_id=?',undef,($to,$id)); |
1246 |
} |
1247 |
|
1248 |
sub _set_message_status { |
1238 |
sub _set_message_status { |
1249 |
my $params = shift or return; |
1239 |
my $params = shift or return; |
1250 |
|
1240 |
|