X-Git-Url: http://koha-dev.rot13.org:8081/gitweb/?a=blobdiff_plain;f=C4%2FLetters.pm;h=2420e4a0ecb50c3408c5cf812f3ebbf2eacd5aa9;hb=47b7b91d148faa62a8d0bb257bec2b3fa716d234;hp=62b339aefb44e09bd6b0a38d82d96f8f64a94710;hpb=e1952c8ad737b8dd731f1c3995967e5ecc315d19;p=koha_fer diff --git a/C4/Letters.pm b/C4/Letters.pm index 62b339aefb..2420e4a0ec 100644 --- a/C4/Letters.pm +++ b/C4/Letters.pm @@ -26,6 +26,7 @@ use Encode; use Carp; use C4::Members; +use C4::Branch; use C4::Log; use C4::SMS; use C4::Debug; @@ -322,12 +323,14 @@ sub SendAlerts { $letter->{content} =~ s/<>/$userenv->{surname}/g; $letter->{content} =~ s/<>/$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; @@ -390,12 +393,14 @@ sub SendAlerts { $letter->{content} =~ s/<>/$userenv->{surname}/g; $letter->{content} =~ s/<>/$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; @@ -440,15 +445,16 @@ sub SendAlerts { } # send an "account details" notice to a newly created user elsif ( $type eq 'members' ) { - $letter->{content} =~ s/<>/$externalid->{'title'}/g; - $letter->{content} =~ s/<>/$externalid->{'firstname'}/g; - $letter->{content} =~ s/<>/$externalid->{'surname'}/g; - $letter->{content} =~ s/<>/$externalid->{'userid'}/g; + # must parse the password special, before it's hashed. $letter->{content} =~ s/<>/$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"', @@ -483,11 +489,11 @@ sub parseletter_sth { ($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 'suggestions' ) ? "SELECT * FROM $table WHERE borrowernumber = ? and biblionumber = ?" : + ($table eq 'issues' ) ? "SELECT * FROM $table WHERE itemnumber = ?" : ($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'"; @@ -623,7 +629,7 @@ 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 ); @@ -788,6 +794,7 @@ ENDSQL sub _send_message_by_email ($;$$$) { my $message = shift or return; + my ($username, $password, $method) = @_; my $to_address = $message->{to_address}; unless ($to_address) { @@ -814,20 +821,23 @@ sub _send_message_by_email ($;$$$) { } } - 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; } - + _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 if ( sendmail( %sendmail_params ) ) { _set_message_status( { message_id => $message->{'message_id'}, status => 'sent' } ); @@ -853,6 +863,12 @@ sub _send_message_by_sms ($) { return $success; } +sub _update_message_to_address { + my ($id, $to)= @_; + my $dbh = C4::Context->dbh(); + $dbh->do('UPDATE message_queue SET to_address=? WHERE message_id=?',undef,($to,$id)); +} + sub _set_message_status ($) { my $params = shift or return undef;