Bug 11248: fix encoding issue on emailing a list (OPAC)
authorJonathan Druart <jonathan.druart@biblibre.com>
Thu, 14 Nov 2013 13:05:53 +0000 (14:05 +0100)
committerKyle M Hall <kyle@bywatersolutions.com>
Wed, 13 Aug 2014 18:35:28 +0000 (14:35 -0400)
Test plan:
- send a list via email with the english version.
- translate templates and retry with another language.

Signed-off-by: Katrin Fischer <Katrin.Fischer.83@web.de>
Works nicely. Links to the OPAC are correct.

Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
Signed-off-by: Galen Charlton <gmc@esilibrary.com>
(cherry picked from commit 394ece2e1012aebdc5543f739c5438f91c66d477)
Signed-off-by: Fridolin Somers <fridolin.somers@biblibre.com>

Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
(cherry picked from commit 51d7f2da3a59a06bd0089cad5f34077c1811ca8a)

opac/opac-sendshelf.pl

index 80b54e2..3f9b719 100755 (executable)
@@ -21,7 +21,7 @@ use strict;
 use warnings;
 
 use CGI;
-use Encode;
+use Encode qw(decode encode);
 use Carp;
 
 use Mail::Sendmail;
@@ -122,19 +122,32 @@ if ( $email ) {
 
     # Getting template result
     my $template_res = $template2->output();
+    my $body;
 
     # Analysing information and getting mail properties
-    $mail{'subject'} = $template_res =~ /<SUBJECT>\n(.*)\n?<END_SUBJECT>/s
-        ? $1 : "no subject";
+    if ( $template_res =~ /<SUBJECT>(.*)<END_SUBJECT>/s ) {
+        $mail{subject} = $1;
+        $mail{subject} =~ s|\n?(.*)\n?|$1|;
+    }
+    else { $mail{'subject'} = "no subject"; }
 
-    my ($email_header) = $template_res =~ /<HEADER>\n(.*)\n?<END_HEADER>/s;
+    my $email_header = "";
+    if ( $template_res =~ /<HEADER>(.*)<END_HEADER>/s ) {
+        $email_header = $1;
+        $email_header =~ s|\n?(.*)\n?|$1|;
+    }
 
-    my $email_file = $template_res =~ /<FILENAME>\n(.*)\n?<END_FILENAME>/s
-        ? $1
-        : "list.txt";
+    my $email_file = "list.txt";
+    if ( $template_res =~ /<FILENAME>(.*)<END_FILENAME>/s ) {
+        $email_file = $1;
+        $email_file =~ s|\n?(.*)\n?|$1|;
+    }
 
-    my ($body) = $template_res =~ /<MESSAGE>\n(.*)\n?<END_MESSAGE>/s;
-    $body = encode_qp($body);
+    if ( $template_res =~ /<MESSAGE>(.*)<END_MESSAGE>/s ) {
+        $body = $1;
+        $body =~ s|\n?(.*)\n?|$1|;
+        $body = encode("UTF-8", encode_qp($body));
+    }
 
     my $boundary = "====" . time() . "====";