alecpl
2009-01-15 24ed4133280788fd6dd7affd5a20181e0455eef1
- Allow absolute URLs to images in HTML messages/sigs (#1485666)
- Fix message body which contains both inline attachments and emotions


3 files modified
59 ■■■■ changed files
CHANGELOG 5 ●●●●● patch | view | raw | blame | history
program/js/editor.js 4 ●●●● patch | view | raw | blame | history
program/steps/mail/sendmail.inc 50 ●●●● patch | view | raw | blame | history
CHANGELOG
@@ -1,6 +1,11 @@
CHANGELOG RoundCube Webmail
---------------------------
2009/01/15 (alec)
----------
- Allow absolute URLs to images in HTML messages/sigs (#1485666)
- Fix message body which contains both inline attachments and emotions
2009/01/08 (alec)
----------
- Improve messages display performance
program/js/editor.js
@@ -28,6 +28,8 @@
      theme_advanced_buttons1 : 'bold,italic,underline,strikethrough,justifyleft,justifycenter,justifyright,justifyfull,separator,outdent,indent,charmap,hr,link,unlink,code,forecolor',
      theme_advanced_buttons2 : ',fontselect,fontsizeselect',
      theme_advanced_buttons3 : '',
      relative_urls : false,
      remove_script_host : false,
      gecko_spellcheck : true
    });
  else // mail compose
@@ -49,6 +51,8 @@
      external_image_list_url : 'program/js/editor_images.js',
      spellchecker_languages : (rcmail.env.spellcheck_langs ? rcmail.env.spellcheck_langs : 'Dansk=da,Deutsch=de,+English=en,Espanol=es,Francais=fr,Italiano=it,Nederlands=nl,Polski=pl,Portugues=pt,Suomi=fi,Svenska=sv'),
      gecko_spellcheck : true,
      relative_urls : false,
      remove_script_host : false ,
      rc_client: rcube_webmail_client,
      oninit : 'rcmail_editor_callback'
    });
program/steps/mail/sendmail.inc
@@ -98,47 +98,43 @@
{
  global $CONFIG;
  $htmlContents = $mime_message->getHtmlBody();
  $body = $mime_message->getHtmlBody();
  // remove any null-byte characters before parsing
  $body = preg_replace('/\x00/', '', $htmlContents);
  $body = preg_replace('/\x00/', '', $body);
  
  $last_img_pos = 0;
  $searchstr = 'program/js/tiny_mce/plugins/emotions/img/';
  $path_len = strlen(INSTALL_PATH . '/');
  $offset = 0;
  // keep track of added images, so they're only added once
  $included_images = array();
  // find emoticon image tags
  while ($pos = strpos($body, $searchstr, $last_img_pos))
    {
    $pos2 = strpos($body, '"', $pos);
    $body_pre = substr($body, 0, $pos);
    $body_post = substr($body, $pos2);
  if (preg_match_all('# src=[\'"]([^\'"]+)#', $body, $matches, PREG_OFFSET_CAPTURE)) {
    foreach ($matches[1] as $m) {
      // find emoticon image tags
      if (preg_match('#'.$searchstr.'(.*)$#', $m[0], $imatches)) {
        $image_name = $imatches[1];
    $image_name = substr($body,
                         $pos + strlen($searchstr),
                         $pos2 - ($pos + strlen($searchstr)));
        // sanitize image name so resulting attachment doesn't leave images dir
        $image_name = preg_replace('/[^a-zA-Z0-9_\.\-]/i', '', $image_name);
        $img_file = INSTALL_PATH . '/' . $searchstr . $image_name;
    // sanitize image name so resulting attachment doesn't leave images dir
    $image_name = preg_replace('/[^a-zA-Z0-9_\.\-]/i','',$image_name);
    $img_file = INSTALL_PATH . '/' . $searchstr . $image_name;
        if (! in_array($image_name, $included_images)) {
          // add the image to the MIME message
          if(! $mime_message->addHTMLImage($img_file, 'image/gif', '', true, $image_name))
            $OUTPUT->show_message("emoticonerror", 'error');
          array_push($included_images, $image_name);
        }
    if (! in_array($image_name, $included_images))
      {
      // add the image to the MIME message
      if(! $mime_message->addHTMLImage($img_file, 'image/gif', '', true, $image_name))
        $OUTPUT->show_message("emoticonerror", 'error');
      array_push($included_images, $image_name);
        $body = substr_replace($body, $img_file, $m[1] + $offset, strlen($m[0]));
        $offset += strlen($img_file) - strlen($m[0]);
      }
    $body = $body_pre . $img_file . $body_post;
    $last_img_pos = $pos2 + $path_len;
    }
  }
  $mime_message->setHTMLBody($body);
  return $body;
}
@@ -276,7 +272,7 @@
  $MAIL_MIME->setTXTBody($plainTextPart);
  // look for "emoticon" images from TinyMCE and copy into message as attachments
  rcmail_attach_emoticons($MAIL_MIME);
  $message_body = rcmail_attach_emoticons($MAIL_MIME);
  }
else
  {