diff options
author | alecpl <alec@alec.pl> | 2008-09-16 12:53:19 +0000 |
---|---|---|
committer | alecpl <alec@alec.pl> | 2008-09-16 12:53:19 +0000 |
commit | 2f746dcd68433804e00285bd7ac6feece1e91074 (patch) | |
tree | 1a029f36080c441f0de672cf9d69cf199de66c9a | |
parent | 155329b71cf5a15eae4e1d14dbf7e7bdca5c29cc (diff) |
- Fix inline images handling when replying/forwarding html messages
-rw-r--r-- | CHANGELOG | 1 | ||||
-rw-r--r-- | program/steps/mail/compose.inc | 82 |
2 files changed, 57 insertions, 26 deletions
@@ -4,6 +4,7 @@ CHANGELOG RoundCube Webmail 2008/09/16 (alec) ---------- - Reduced memory footprint when forwarding attachments (#1485345) +- Fix inline images handling when replying/forwarding html messages 2008/09/15 (thomasb) ---------- diff --git a/program/steps/mail/compose.inc b/program/steps/mail/compose.inc index b25a7dee6..02d062c1f 100644 --- a/program/steps/mail/compose.inc +++ b/program/steps/mail/compose.inc @@ -35,8 +35,8 @@ if ($RCMAIL->action=='remove-attachment' && preg_match('/^rcmfile([0-9]+)$/', $_ unset($_SESSION['compose']['attachments'][$id]); $OUTPUT->command('remove_from_attachment_list', "rcmfile$id"); $OUTPUT->send(); - exit; } + exit; } if ($RCMAIL->action=='display-attachment' && preg_match('/^rcmfile([0-9]+)$/', $_GET['_file'], $regs)) @@ -401,6 +401,16 @@ function rcmail_compose_body($attrib) // load draft message body else if ($compose_mode == RCUBE_COMPOSE_DRAFT) $body = rcmail_create_draft_body($body, $isHtml); + + if ($isHtml) { + // replace cid with href in inline images links + foreach ((array)$_SESSION['compose']['attachments'] as $pid => $attachment) { + if ($attachment['content_id']) { + $body = str_replace('cid:'. $attachment['content_id'], + $OUTPUT->app->comm_path.'&_action=display-attachment&_file=rcmfile'.$pid, $body); + } + } + } } else if (!empty($_SESSION['compose']['param']['_body'])) { @@ -426,8 +436,8 @@ function rcmail_compose_body($attrib) $msgtype = new html_hiddenfield(array('name' => '_is_html', 'value' => ($isHtml?"1":"0"))); $out .= $msgtype->show(); - // If desired, set this text area to be editable by TinyMCE - if ($isHtml) $attrib['class'] = "mce_editor"; + // If desired, set this textarea to be editable by TinyMCE + if ($isHtml) $attrib['class'] = 'mce_editor'; $textarea = new html_textarea($attrib); $out .= $textarea->show($body); $out .= $form_end ? "\n$form_end" : ''; @@ -500,7 +510,7 @@ function rcmail_create_reply_body($body, $bodyIsHtml) $body = join("\n", $a_lines); // add title line - $prefix = sprintf("\n\n\nOn %s, %s wrote:\n", + $prefix = sprintf("On %s, %s wrote:\n", $MESSAGE->headers->date, $MESSAGE->get_header('from')); @@ -514,11 +524,13 @@ function rcmail_create_reply_body($body, $bodyIsHtml) } else { - $prefix = sprintf("<br /><br />On %s, %s wrote:<br />\n", + $prefix = sprintf("On %s, %s wrote:<br />\n", $MESSAGE->headers->date, htmlspecialchars(Q($MESSAGE->get_header('from'), 'replace'), ENT_COMPAT, $OUTPUT->get_charset(), true)); $prefix .= '<blockquote type="cite" style="padding-left:5px; border-left:#1010ff 2px solid; margin-left:5px; width:100%">'; $suffix = "</blockquote>"; + + rcmail_write_inline_attachments($MESSAGE); } return $prefix.$body.$suffix; @@ -580,31 +592,14 @@ function rcmail_create_draft_body($body, $bodyIsHtml) function rcmail_write_compose_attachments(&$message, $bodyIsHtml) { - global $RCMAIL, $IMAP; - - $temp_dir = unslashify($RCMAIL->config->get('temp_dir')); - - if (!is_array($_SESSION['compose']['attachments'])) - $_SESSION['compose']['attachments'] = array(); - foreach ((array)$message->mime_parts as $pid => $part) { if (($part->ctype_primary != 'message' || !$bodyIsHtml) && - ($part->disposition=='attachment' || $part->disposition=='inline' || $part->headers['content-id'] || - (empty($part->disposition) && $part->filename))) + ($part->disposition=='attachment' || $part->disposition=='inline' || $part->headers['content-id'] + || (empty($part->disposition) && $part->filename))) { - $tmp_path = tempnam($temp_dir, 'rcmAttmnt'); - if ($fp = fopen($tmp_path, 'w')) - { - $message->get_part_content($pid, $fp); - fclose($fp); - - $_SESSION['compose']['attachments'][] = array( - 'mimetype' => $part->ctype_primary . '/' . $part->ctype_secondary, - 'name' => $part->filename, - 'path' => $tmp_path - ); - } + if ($attachment = rcmail_save_attachment($message, $pid)) + $_SESSION['compose']['attachments'][] = $attachment; } } @@ -612,6 +607,41 @@ function rcmail_write_compose_attachments(&$message, $bodyIsHtml) } +function rcmail_write_inline_attachments(&$message) +{ + foreach ((array)$message->mime_parts as $pid => $part) + { + if ($part->content_id && $part->filename) + { + if ($attachment = rcmail_save_attachment($message, $pid)) + $_SESSION['compose']['attachments'][] = $attachment; + } + } +} + +function rcmail_save_attachment(&$message, $pid) +{ + global $RCMAIL; + + $temp_dir = unslashify($RCMAIL->config->get('temp_dir')); + $tmp_path = tempnam($temp_dir, 'rcmAttmnt'); + $part = $message->mime_parts[$pid]; + + if ($fp = fopen($tmp_path, 'w')) + { + $message->get_part_content($pid, $fp); + fclose($fp); + + return array( + 'mimetype' => $part->ctype_primary . '/' . $part->ctype_secondary, + 'name' => $part->filename, + 'path' => $tmp_path, + 'content_id' => $part->content_id + ); + } +} + + function rcmail_compose_subject($attrib) { global $MESSAGE, $compose_mode; |