E-Mails als HTML verschicken: Versand in Einkaufs-/Verkaufsbelegen
authorMoritz Bunkus <m.bunkus@linet.de>
Wed, 12 Jan 2022 11:22:51 +0000 (12:22 +0100)
committerMoritz Bunkus <m.bunkus@linet.de>
Wed, 12 Jan 2022 11:30:24 +0000 (12:30 +0100)
SL/Common.pm
SL/Controller/Order.pm
SL/Form.pm
js/kivi.SalesPurchase.js
templates/webpages/common/_send_email_dialog.html

index 15f8f7b..36635fd 100644 (file)
@@ -25,6 +25,7 @@ use Encode qw(decode);
 
 use SL::DBUtils;
 use SL::DB;
+use SL::HTML::Util;
 
 sub unique_id {
   my ($a, $b) = gettimeofday();
@@ -423,7 +424,7 @@ sub save_email_status {
       . $main::locale->text('To (email)') . ": $form->{email}\n"
       . "${cc}${bcc}"
       . $main::locale->text('Subject') . ": $form->{subject}\n\n"
-      . $main::locale->text('Message') . ": $form->{message}";
+      . $main::locale->text('Message') . ": " . SL::HTML::Util->strip($form->{message});
 
     $intnotes =~ s|\r||g;
 
index 24ad4a5..e709336 100644 (file)
@@ -4,6 +4,7 @@ use strict;
 use parent qw(SL::Controller::Base);
 
 use SL::Helper::Flash qw(flash_later);
+use SL::HTML::Util;
 use SL::Presenter::Tag qw(select_tag hidden_tag div_tag);
 use SL::Locale::String qw(t8);
 use SL::SessionFile::Random;
@@ -522,7 +523,7 @@ sub action_send_email {
   $intnotes   .= t8('Cc')         . ": " . $::form->{cc}                                                              . "\n"    if $::form->{cc};
   $intnotes   .= t8('Bcc')        . ": " . $::form->{bcc}                                                             . "\n"    if $::form->{bcc};
   $intnotes   .= t8('Subject')    . ": " . $::form->{subject}                                                         . "\n\n";
-  $intnotes   .= t8('Message')    . ": " . $::form->{message};
+  $intnotes   .= t8('Message')    . ": " . SL::HTML::Util->strip($::form->{message});
 
   $self->order->update_attributes(intnotes => $intnotes);
 
index 229ad2c..9c05c33 100644 (file)
@@ -952,17 +952,15 @@ sub send_email {
   $mail->{to}     = $self->{EMAIL_RECIPIENT} ? $self->{EMAIL_RECIPIENT} : $self->{email};
   $mail->{from}   = qq|"$myconfig->{name}" <$myconfig->{email}>|;
   $mail->{fileid} = time() . '.' . $$ . '.';
+  $mail->{content_type}  =  "text/html";
   my $full_signature     =  $self->create_email_signature();
-  $full_signature        =~ s/\r//g;
 
   $mail->{attachments} =  [];
   my @attfiles;
   # if we send html or plain text inline
   if (($self->{format} eq 'html') && ($self->{sendmode} eq 'inline')) {
-    $mail->{content_type}   =  "text/html";
     $mail->{message}        =~ s/\r//g;
     $mail->{message}        =~ s{\n}{<br>\n}g;
-    $full_signature         =~ s{\n}{<br>\n}g;
     $mail->{message}       .=  $full_signature;
 
     open(IN, "<", $self->{tmpfile})
@@ -1234,10 +1232,12 @@ sub generate_email_body {
 
   return undef unless $body;
 
+  $body .= GenericTranslations->get(translation_type => "salutation_punctuation_mark", language_id => $self->{language_id});
+  $body  = '<p>' . $::locale->quote_special_chars('HTML', $body) . '</p>';
+
   my $translation_type = $params{translation_type} // "preset_text_$self->{formname}";
   my $main_body        = GenericTranslations->get(translation_type => $translation_type,                  language_id => $self->{language_id});
   $main_body           = GenericTranslations->get(translation_type => $params{fallback_translation_type}, language_id => $self->{language_id}) if !$main_body && $params{fallback_translation_type};
-  $body               .= GenericTranslations->get(translation_type => "salutation_punctuation_mark",      language_id => $self->{language_id}) . "\n\n";
   $body               .= $main_body;
 
   $body = $main::locale->unquote_special_chars('HTML', $body);
@@ -3440,19 +3440,11 @@ sub reformat_numbers {
 }
 
 sub create_email_signature {
-
   my $client_signature = $::instance_conf->get_signature;
   my $user_signature   = $::myconfig{signature};
 
-  my $signature = '';
-  if ( $client_signature or $user_signature ) {
-    $signature  = "\n\n-- \n";
-    $signature .= $user_signature   . "\n" if $user_signature;
-    $signature .= $client_signature . "\n" if $client_signature;
-  };
-  return $signature;
-
-};
+  return join '', grep { $_ } ($user_signature, $client_signature);
+}
 
 sub calculate_tax {
   # this function calculates the net amount and tax for the lines in ar, ap and
index e8a1ba2..771351c 100644 (file)
@@ -241,9 +241,17 @@ namespace('kivi.SalesPurchase', function(ns) {
     if (!kivi.SalesPurchase.check_required_email_fields())
       return false;
 
+    // ckeditor gets de-initialized when removing the children from
+    // the DOM. Therefore we have to manually preserve its content
+    // over the children's relocation.
+
+    var message = $('#email_form_message').val();
+
     $('#send_email_dialog').children().remove().appendTo('#email_inputs');
     $('#send_email_dialog').dialog('close');
 
+    $('#email_form_message').val(message);
+
     kivi.submit_form_with_action('#form', $('#form').data('send-email-action'));
 
     return true;
@@ -255,6 +263,8 @@ namespace('kivi.SalesPurchase', function(ns) {
 
     $('#print_options').children().remove().appendTo('#email_form_print_options');
 
+    kivi.reinit_widgets();
+
     var to_focus = $('#email_form_to').val() === '' ? 'to' : 'subject';
     $('#email_form_' + to_focus).focus();
   };
index b039b25..23cc1a9 100644 (file)
@@ -68,7 +68,7 @@
    <th align="right" nowrap>[% LxERP.t8("Message") %]
     <sup> [% L.link("generictranslations.pl?action=edit_email_strings", "1)", title=LxERP.t8('Tired of copying always nice phrases for this message? Click here to use the new preset message option!'), target="_blank") %]</sup>
   </th>
-   <td>[% L.textarea_tag("email_form.message", email_form.message, rows="15" cols="80" wrap="soft") %]</td>
+   <td>[% L.textarea_tag("email_form.message", email_form.message, rows="15", cols="80", class="texteditor") %]</td>
   </tr>
 
 [% IF INSTANCE_CONF.get_doc_storage %]