|
Lines 34-40
use C4::SMS;
Link Here
|
| 34 |
use C4::Debug; |
34 |
use C4::Debug; |
| 35 |
use Koha::DateUtils; |
35 |
use Koha::DateUtils; |
| 36 |
use Koha::SMS::Providers; |
36 |
use Koha::SMS::Providers; |
| 37 |
|
37 |
use Koha::Database; |
|
|
38 |
use Date::Calc qw( Add_Delta_Days ); |
| 39 |
use Encode; |
| 40 |
use Carp; |
| 38 |
use Koha::Email; |
41 |
use Koha::Email; |
| 39 |
use Koha::DateUtils qw( format_sqldatetime dt_from_string ); |
42 |
use Koha::DateUtils qw( format_sqldatetime dt_from_string ); |
| 40 |
|
43 |
|
|
Lines 974-980
sub EnqueueLetter {
Link Here
|
| 974 |
my $params = shift or return; |
977 |
my $params = shift or return; |
| 975 |
|
978 |
|
| 976 |
return unless exists $params->{'letter'}; |
979 |
return unless exists $params->{'letter'}; |
| 977 |
# return unless exists $params->{'borrowernumber'}; |
|
|
| 978 |
return unless exists $params->{'message_transport_type'}; |
980 |
return unless exists $params->{'message_transport_type'}; |
| 979 |
|
981 |
|
| 980 |
my $content = $params->{letter}->{content}; |
982 |
my $content = $params->{letter}->{content}; |
|
Lines 994-1021
sub EnqueueLetter {
Link Here
|
| 994 |
); |
996 |
); |
| 995 |
} |
997 |
} |
| 996 |
|
998 |
|
| 997 |
my $dbh = C4::Context->dbh(); |
999 |
my @to_addresses; |
| 998 |
my $statement = << 'ENDSQL'; |
1000 |
if ( $params->{to_address} ) { |
| 999 |
INSERT INTO message_queue |
1001 |
@to_addresses = ( $params->{to_address} ); |
| 1000 |
( borrowernumber, subject, content, metadata, letter_code, message_transport_type, status, time_queued, to_address, from_address, content_type ) |
1002 |
} elsif ( $params->{borrowernumber} and $params->{message_transport_type} eq 'email' ) { |
| 1001 |
VALUES |
1003 |
@to_addresses = @{ C4::Members::GetNoticeEmailAddresses( $params->{borrowernumber} ) }; |
| 1002 |
( ?, ?, ?, ?, ?, ?, ?, NOW(), ?, ?, ? ) |
1004 |
} |
| 1003 |
ENDSQL |
|
|
| 1004 |
|
1005 |
|
| 1005 |
my $sth = $dbh->prepare($statement); |
1006 |
my $from_address; |
| 1006 |
my $result = $sth->execute( |
1007 |
if ( $params->{from_address} ) { |
| 1007 |
$params->{'borrowernumber'}, # borrowernumber |
1008 |
$from_address = $params->{from_address}; |
| 1008 |
$params->{'letter'}->{'title'}, # subject |
1009 |
} elsif ( $params->{message_transport_type} eq 'email' ) { |
| 1009 |
$params->{'letter'}->{'content'}, # content |
1010 |
if ( $params->{borrowernumber} ) { |
| 1010 |
$params->{'letter'}->{'metadata'} || '', # metadata |
1011 |
my $rs = Koha::Database->new->schema->resultset('Borrower')->search({ borrowernumber => $params->{borrowernumber} }, {join => 'branchcode'}); |
| 1011 |
$params->{'letter'}->{'code'} || '', # letter_code |
1012 |
$from_address = $rs->next->branchcode->branchemail; |
| 1012 |
$params->{'message_transport_type'}, # message_transport_type |
1013 |
} |
| 1013 |
'pending', # status |
1014 |
|
| 1014 |
$params->{'to_address'}, # to_address |
1015 |
$from_address ||= C4::Context->preference('KohaAdminEmailAddress'); |
| 1015 |
$params->{'from_address'}, # from_address |
1016 |
} |
| 1016 |
$params->{'letter'}->{'content-type'}, # content_type |
1017 |
|
| 1017 |
); |
1018 |
my $rs = Koha::Database->new->schema->resultset('MessageQueue'); |
| 1018 |
return $dbh->last_insert_id(undef,undef,'message_queue', undef); |
1019 |
for my $to_address ( @to_addresses ) { |
|
|
1020 |
$rs->create({ |
| 1021 |
borrowernumber => $params->{borrowernumber}, |
| 1022 |
subject => $params->{letter}{title}, |
| 1023 |
content => $params->{letter}{content}, |
| 1024 |
metadata => ( $params->{letter}{metadata} || '' ), |
| 1025 |
letter_code => ( $params->{letter}{code} || ''), |
| 1026 |
message_transport_type => $params->{message_transport_type}, |
| 1027 |
status => 'pending', |
| 1028 |
to_address => $to_address, |
| 1029 |
from_address => $from_address, |
| 1030 |
content_type => $params->{letter}{'content-type'}, |
| 1031 |
}); |
| 1032 |
} |
| 1033 |
return scalar( @to_addresses ); |
| 1019 |
} |
1034 |
} |
| 1020 |
|
1035 |
|
| 1021 |
=head2 SendQueuedMessages ([$hashref]) |
1036 |
=head2 SendQueuedMessages ([$hashref]) |
|
Lines 1040-1045
sub SendQueuedMessages {
Link Here
|
| 1040 |
if $params->{'verbose'} or $debug; |
1055 |
if $params->{'verbose'} or $debug; |
| 1041 |
# This is just begging for subclassing |
1056 |
# This is just begging for subclassing |
| 1042 |
next MESSAGE if ( lc($message->{'message_transport_type'}) eq 'rss' ); |
1057 |
next MESSAGE if ( lc($message->{'message_transport_type'}) eq 'rss' ); |
|
|
1058 |
|
| 1043 |
if ( lc( $message->{'message_transport_type'} ) eq 'email' ) { |
1059 |
if ( lc( $message->{'message_transport_type'} ) eq 'email' ) { |
| 1044 |
_send_message_by_email( $message, $params->{'username'}, $params->{'password'}, $params->{'method'} ); |
1060 |
_send_message_by_email( $message, $params->{'username'}, $params->{'password'}, $params->{'method'} ); |
| 1045 |
} |
1061 |
} |
|
Lines 1108-1138
list of hashes, each has represents a message in the message queue.
Link Here
|
| 1108 |
sub GetQueuedMessages { |
1124 |
sub GetQueuedMessages { |
| 1109 |
my $params = shift; |
1125 |
my $params = shift; |
| 1110 |
|
1126 |
|
| 1111 |
my $dbh = C4::Context->dbh(); |
1127 |
my $rs = Koha::Database->new->schema->resultset('MessageQueue')->search( |
| 1112 |
my $statement = << 'ENDSQL'; |
1128 |
{ |
| 1113 |
SELECT message_id, borrowernumber, subject, content, message_transport_type, status, time_queued |
1129 |
( |
| 1114 |
FROM message_queue |
1130 |
$params->{borrowernumber} |
| 1115 |
ENDSQL |
1131 |
? ( borrowernumber => $params->{borrowernumber} ) |
| 1116 |
|
1132 |
: () |
| 1117 |
my @query_params; |
1133 |
), |
| 1118 |
my @whereclauses; |
1134 |
}, |
| 1119 |
if ( exists $params->{'borrowernumber'} ) { |
1135 |
{ |
| 1120 |
push @whereclauses, ' borrowernumber = ? '; |
1136 |
( |
| 1121 |
push @query_params, $params->{'borrowernumber'}; |
1137 |
$params->{limit} |
| 1122 |
} |
1138 |
? ( rows => $params->{limit} ) |
| 1123 |
|
1139 |
: () |
| 1124 |
if ( @whereclauses ) { |
1140 |
), |
| 1125 |
$statement .= ' WHERE ' . join( 'AND', @whereclauses ); |
1141 |
}, |
| 1126 |
} |
1142 |
); |
| 1127 |
|
1143 |
$rs->result_class('DBIx::Class::ResultClass::HashRefInflator'); |
| 1128 |
if ( defined $params->{'limit'} ) { |
1144 |
return [ $rs->all ]; |
| 1129 |
$statement .= ' LIMIT ? '; |
|
|
| 1130 |
push @query_params, $params->{'limit'}; |
| 1131 |
} |
| 1132 |
|
| 1133 |
my $sth = $dbh->prepare( $statement ); |
| 1134 |
my $result = $sth->execute( @query_params ); |
| 1135 |
return $sth->fetchall_arrayref({}); |
| 1136 |
} |
1145 |
} |
| 1137 |
|
1146 |
|
| 1138 |
=head2 GetMessageTransportTypes |
1147 |
=head2 GetMessageTransportTypes |
|
Lines 1288-1309
sub _send_message_by_email {
Link Here
|
| 1288 |
my ($username, $password, $method) = @_; |
1297 |
my ($username, $password, $method) = @_; |
| 1289 |
|
1298 |
|
| 1290 |
my $member = C4::Members::GetMember( 'borrowernumber' => $message->{'borrowernumber'} ); |
1299 |
my $member = C4::Members::GetMember( 'borrowernumber' => $message->{'borrowernumber'} ); |
| 1291 |
my $to_address = $message->{'to_address'}; |
1300 |
|
| 1292 |
unless ($to_address) { |
1301 |
unless ( $member and $message->{to_address} ) { |
| 1293 |
unless ($member) { |
1302 |
warn "FAIL: No 'to_address' and INVALID borrowernumber ($message->{borrowernumber})" unless $member; |
| 1294 |
warn "FAIL: No 'to_address' and INVALID borrowernumber ($message->{borrowernumber})"; |
1303 |
_set_message_status({ |
| 1295 |
_set_message_status( { message_id => $message->{'message_id'}, |
1304 |
message_id => $message->{'message_id'}, |
| 1296 |
status => 'failed' } ); |
1305 |
status => 'failed' |
| 1297 |
return; |
1306 |
}); |
| 1298 |
} |
1307 |
return; |
| 1299 |
$to_address = C4::Members::GetNoticeEmailAddress( $message->{'borrowernumber'} ); |
|
|
| 1300 |
unless ($to_address) { |
| 1301 |
# warn "FAIL: No 'to_address' and no email for " . ($member->{surname} ||'') . ", borrowernumber ($message->{borrowernumber})"; |
| 1302 |
# warning too verbose for this more common case? |
| 1303 |
_set_message_status( { message_id => $message->{'message_id'}, |
| 1304 |
status => 'failed' } ); |
| 1305 |
return; |
| 1306 |
} |
| 1307 |
} |
1308 |
} |
| 1308 |
|
1309 |
|
| 1309 |
my $utf8 = decode('MIME-Header', $message->{'subject'} ); |
1310 |
my $utf8 = decode('MIME-Header', $message->{'subject'} ); |
|
Lines 1324-1330
sub _send_message_by_email {
Link Here
|
| 1324 |
my $email = Koha::Email->new(); |
1325 |
my $email = Koha::Email->new(); |
| 1325 |
my %sendmail_params = $email->create_message_headers( |
1326 |
my %sendmail_params = $email->create_message_headers( |
| 1326 |
{ |
1327 |
{ |
| 1327 |
to => $to_address, |
|
|
| 1328 |
from => $message->{'from_address'} || $branch_email, |
1328 |
from => $message->{'from_address'} || $branch_email, |
| 1329 |
replyto => $branch_replyto, |
1329 |
replyto => $branch_replyto, |
| 1330 |
sender => $branch_returnpath, |
1330 |
sender => $branch_returnpath, |
|
Lines 1414-1425
sub _send_message_by_sms {
Link Here
|
| 1414 |
return $success; |
1414 |
return $success; |
| 1415 |
} |
1415 |
} |
| 1416 |
|
1416 |
|
| 1417 |
sub _update_message_to_address { |
|
|
| 1418 |
my ($id, $to)= @_; |
| 1419 |
my $dbh = C4::Context->dbh(); |
| 1420 |
$dbh->do('UPDATE message_queue SET to_address=? WHERE message_id=?',undef,($to,$id)); |
| 1421 |
} |
| 1422 |
|
| 1423 |
sub _set_message_status { |
1417 |
sub _set_message_status { |
| 1424 |
my $params = shift or return; |
1418 |
my $params = shift or return; |
| 1425 |
|
1419 |
|