use Carp;
use C4::Members;
+use C4::Branch;
use C4::Log;
use C4::SMS;
use C4::Debug;
parameters :
- alertid : the alert id
deletes the alert
-
+
=cut
sub delalert ($) {
# and parse borrower ...
my $innerletter = $letter;
- my $borinfo = GetMember( 'borrowernumber' => $_->{'borrowernumber'});
+ my $borinfo = C4::Members::GetMember('borrowernumber' => $_->{'borrowernumber'});
parseletter( $innerletter, 'borrowers', $_->{'borrowernumber'} );
# ... then send mail
$letter->{content} =~ s/<<LibrarianSurname>>/$userenv->{surname}/g;
$letter->{content} =~
s/<<LibrarianEmailaddress>>/$userenv->{emailaddress}/g;
- foreach my $data (@$dataorders) {
- my $line = $1 if ( $letter->{content} =~ m/(<<.*>>)/ );
- foreach my $field ( keys %$data ) {
- $line =~ s/(<<[^\.]+.$field>>)/$data->{$field}/;
+ foreach my $data ( @{$dataorders} ) {
+ if ( $letter->{content} =~ m/(<<.*>>)/ ) {
+ my $line = $1;
+ foreach my $field ( keys %{$data} ) {
+ $line =~ s/(<<[^\.]+.$field>>)/$data->{$field}/;
+ }
+ $letter->{content} =~ s/(<<.*>>)/$line\n$1/;
}
- $letter->{content} =~ s/(<<.*>>)/$line\n$1/;
}
$letter->{content} =~ s/<<[^>]*>>//g;
my $innerletter = $letter;
'Content-Type' => 'text/plain; charset="utf8"',
);
sendmail(%mail) or carp $Mail::Sendmail::error;
- warn
-"sending to $mail{To} From $mail{From} subj $mail{Subject} Mess $mail{Message}";
}
if ( C4::Context->preference("LetterLog") ) {
logaction(
$letter->{content} =~ s/<<LibrarianSurname>>/$userenv->{surname}/g;
$letter->{content} =~
s/<<LibrarianEmailaddress>>/$userenv->{emailaddress}/g;
- foreach my $data (@$dataorders) {
- my $line = $1 if ( $letter->{content} =~ m/(<<.*>>)/ );
- foreach my $field ( keys %$data ) {
- $line =~ s/(<<[^\.]+.$field>>)/$data->{$field}/;
+ foreach my $data ( @{$dataorders} ) {
+ if ( $letter->{content} =~ m/(<<.*>>)/ ) {
+ my $line = $1;
+ foreach my $field ( keys %{$data} ) {
+ $line =~ s/(<<[^\.]+.$field>>)/$data->{$field}/;
+ }
+ $letter->{content} =~ s/(<<.*>>)/$line\n$1/;
}
- $letter->{content} =~ s/(<<.*>>)/$line\n$1/;
}
$letter->{content} =~ s/<<[^>]*>>//g;
my $innerletter = $letter;
. $innerletter->{content}
) if C4::Context->preference("LetterLog");
}
- warn
-"sending to From $userenv->{emailaddress} subj $innerletter->{title} Mess $innerletter->{content}";
}
# send an "account details" notice to a newly created user
elsif ( $type eq 'members' ) {
- $letter->{content} =~ s/<<borrowers.title>>/$externalid->{'title'}/g;
- $letter->{content} =~ s/<<borrowers.firstname>>/$externalid->{'firstname'}/g;
- $letter->{content} =~ s/<<borrowers.surname>>/$externalid->{'surname'}/g;
- $letter->{content} =~ s/<<borrowers.userid>>/$externalid->{'userid'}/g;
+ # must parse the password special, before it's hashed.
$letter->{content} =~ s/<<borrowers.password>>/$externalid->{'password'}/g;
+ parseletter( $letter, 'borrowers', $externalid->{'borrowernumber'});
+ parseletter( $letter, 'branches', $externalid->{'branchcode'} );
+
+ my $branchdetails = GetBranchDetail($externalid->{'branchcode'});
my %mail = (
To => $externalid->{'emailaddr'},
- From => C4::Context->preference("KohaAdminEmailAddress"),
+ From => $branchdetails->{'branchemail'} || C4::Context->preference("KohaAdminEmailAddress"),
Subject => $letter->{'title'},
Message => $letter->{'content'},
'Content-Type' => 'text/plain; charset="utf8"',
($table eq 'biblio' ) ? "SELECT * FROM $table WHERE biblionumber = ?" :
($table eq 'biblioitems' ) ? "SELECT * FROM $table WHERE biblionumber = ?" :
($table eq 'items' ) ? "SELECT * FROM $table WHERE itemnumber = ?" :
+ ($table eq 'issues' ) ? "SELECT * FROM $table WHERE itemnumber = ?" :
($table eq 'suggestions' ) ? "SELECT * FROM $table WHERE borrowernumber = ? and biblionumber = ?" :
($table eq 'reserves' ) ? "SELECT * FROM $table WHERE borrowernumber = ? and biblionumber = ?" :
($table eq 'borrowers' ) ? "SELECT * FROM $table WHERE borrowernumber = ?" :
($table eq 'branches' ) ? "SELECT * FROM $table WHERE branchcode = ?" :
- ($table eq 'suggestions' ) ? "SELECT * FROM $table WHERE borrowernumber = ? and biblionumber = ?" :
+ ($table eq 'suggestions' ) ? "SELECT * FROM $table WHERE suggestionid = ?" :
($table eq 'aqbooksellers') ? "SELECT * FROM $table WHERE id = ?" : undef ;
unless ($query) {
warn "ERROR: No parseletter_sth query for table '$table'";
=head2 EnqueueLetter
-=over 4
-
-my $success = EnqueueLetter( { letter => $letter, borrowernumber => '12', message_transport_type => 'email' } )
+ my $success = EnqueueLetter( { letter => $letter,
+ borrowernumber => '12', message_transport_type => 'email' } )
places a letter in the message_queue database table, which will
eventually get processed (sent) by the process_message_queue.pl
return true on success
-=back
-
=cut
sub EnqueueLetter ($) {
=head2 SendQueuedMessages ([$hashref])
-=over 4
+ my $sent = SendQueuedMessages( { verbose => 1 } );
sends all of the 'pending' items in the message queue.
-my $sent = SendQueuedMessages( { verbose => 1 } );
-
returns number of messages sent.
-=back
-
=cut
sub SendQueuedMessages (;$) {
# This is just begging for subclassing
next MESSAGE if ( lc($message->{'message_transport_type'}) eq 'rss' );
if ( lc( $message->{'message_transport_type'} ) eq 'email' ) {
- _send_message_by_email( $message );
+ _send_message_by_email( $message, $params->{'username'}, $params->{'password'}, $params->{'method'} );
}
elsif ( lc( $message->{'message_transport_type'} ) eq 'sms' ) {
_send_message_by_sms( $message );
=head2 GetRSSMessages
-=over 4
-
-my $message_list = GetRSSMessages( { limit => 10, borrowernumber => '14' } )
+ my $message_list = GetRSSMessages( { limit => 10, borrowernumber => '14' } )
returns a listref of all queued RSS messages for a particular person.
-=back
-
=cut
sub GetRSSMessages {
=head2 GetPrintMessages
-=over 4
-
-my $message_list = GetPrintMessages( { borrowernumber => $borrowernumber } )
+ my $message_list = GetPrintMessages( { borrowernumber => $borrowernumber } )
Returns a arrayref of all queued print messages (optionally, for a particular
person).
-=back
-
=cut
sub GetPrintMessages {
=head2 GetQueuedMessages ([$hashref])
-=over 4
-
-my $messages = GetQueuedMessage( { borrowernumber => '123', limit => 20 } );
+ my $messages = GetQueuedMessage( { borrowernumber => '123', limit => 20 } );
fetches messages out of the message queue.
returns:
list of hashes, each has represents a message in the message queue.
-=back
-
=cut
sub GetQueuedMessages {
sub _send_message_by_email ($;$$$) {
my $message = shift or return;
+ my ($username, $password, $method) = @_;
my $to_address = $message->{to_address};
unless ($to_address) {
return;
}
my $which_address = C4::Context->preference('AutoEmailPrimaryAddress');
- $to_address = $member->{$which_address};
+ # If the system preference is set to 'first valid' (value == OFF), look up email address
+ if ($which_address eq 'OFF') {
+ $to_address = GetFirstValidEmailAddress( $message->{'borrowernumber'} );
+ } else {
+ $to_address = $member->{$which_address};
+ }
unless ($to_address) {
# warn "FAIL: No 'to_address' and no email for " . ($member->{surname} ||'') . ", borrowernumber ($message->{borrowernumber})";
# warning too verbose for this more common case?
}
}
- my $content = encode('utf8', $message->{'content'});
+ my $utf8 = decode('MIME-Header', $message->{'subject'} );
+ $message->{subject}= encode('MIME-Header', $utf8);
+ my $content = encode('utf8', $message->{'content'});
my %sendmail_params = (
To => $to_address,
From => $message->{'from_address'} || C4::Context->preference('KohaAdminEmailAddress'),
- Subject => $message->{'subject'},
+ Subject => encode('utf8', $message->{'subject'}),
charset => 'utf8',
Message => $content,
'content-type' => $message->{'content_type'} || 'text/plain; charset="UTF-8"',
);
+ $sendmail_params{'Auth'} = {user => $username, pass => $password, method => $method} if $username;
if ( my $bcc = C4::Context->preference('OverdueNoticeBcc') ) {
$sendmail_params{ Bcc } = $bcc;
}