From feac485000ada0ff9de9b1c6bcd2e4d8ab75b2f1 Mon Sep 17 00:00:00 2001
From: alecpl <alec@alec.pl>
Date: Wed, 15 Jun 2011 07:34:51 -0400
Subject: [PATCH] - Added html_table::get_row_attribs(), extended html_table::set_row_attribs()

---
 program/steps/mail/compose.inc |   71 ++++++++++++++++++++++++++++++++++-
 1 files changed, 68 insertions(+), 3 deletions(-)

diff --git a/program/steps/mail/compose.inc b/program/steps/mail/compose.inc
index 531e698..943c800 100644
--- a/program/steps/mail/compose.inc
+++ b/program/steps/mail/compose.inc
@@ -214,6 +214,9 @@
   {
     $_SESSION['compose']['forward_uid'] = $msg_uid;
     $OUTPUT->set_env('compose_mode', 'forward');
+
+    if (!empty($_SESSION['compose']['param']['attachment']))
+      $MESSAGE->forward_attachment = true;
   }
 }
 
@@ -559,6 +562,13 @@
   else if ($_SESSION['compose']['param']['body']) {
     $body = $_SESSION['compose']['param']['body'];
     $isHtml = false;
+  }
+  // forward as attachment
+  else if ($compose_mode == RCUBE_COMPOSE_FORWARD && $MESSAGE->forward_attachment) {
+    $isHtml = rcmail_compose_editor_mode();
+    $body = '';
+    if (empty($_SESSION['compose']['attachments']))
+      rcmail_write_forward_attachment($MESSAGE);
   }
   // reply/edit/draft/forward
   else if ($compose_mode) {
@@ -960,8 +970,61 @@
   return $cid_map;
 }
 
+// Creates an attachment from the forwarded message
+function rcmail_write_forward_attachment(&$message)
+{
+  global $RCMAIL;
+
+  if (strlen($message->subject)) {
+    $name = mb_substr($message->subject, 0, 64) . '.eml';
+  }
+  else {
+    $name = 'message_rfc822.eml';
+  }
+
+  $mem_limit = parse_bytes(ini_get('memory_limit'));
+  $curr_mem = function_exists('memory_get_usage') ? memory_get_usage() : 16*1024*1024; // safe value: 16MB
+  $data = $path = null;
+
+  // don't load too big attachments into memory
+  if ($mem_limit > 0 && $message->size > $mem_limit - $curr_mem) {
+    $temp_dir = unslashify($RCMAIL->config->get('temp_dir'));
+    $path = tempnam($temp_dir, 'rcmAttmnt');
+    if ($fp = fopen($path, 'w')) {
+      $RCMAIL->imap->get_raw_body($message->uid, $fp);
+      fclose($fp);
+    } else
+      return false;
+  } else {
+    $data = $RCMAIL->imap->get_raw_body($message->uid);
+  }
+
+  $attachment = array(
+    'group' => $_SESSION['compose']['id'],
+    'name' => $name,
+    'mimetype' => 'message/rfc822',
+    'data' => $data,
+    'path' => $path,
+    'size' => $path ? filesize($path) : strlen($data),
+  );
+
+  $attachment = $RCMAIL->plugins->exec_hook('attachment_save', $attachment);
+
+  if ($attachment['status']) {
+    unset($attachment['data'], $attachment['status'], $attachment['content_id'], $attachment['abort']);
+    $_SESSION['compose']['attachments'][$attachment['id']] = $attachment;
+    return true;
+  } else if ($path) {
+    @unlink($path);
+  }
+
+  return false;
+}
+
+
 function rcmail_save_attachment(&$message, $pid)
 {
+  $rcmail = rcmail::get_instance();
   $part = $message->mime_parts[$pid];
   $mem_limit = parse_bytes(ini_get('memory_limit'));
   $curr_mem = function_exists('memory_get_usage') ? memory_get_usage() : 16*1024*1024; // safe value: 16MB
@@ -969,7 +1032,6 @@
 
   // don't load too big attachments into memory
   if ($mem_limit > 0 && $part->size > $mem_limit - $curr_mem) {
-    $rcmail = rcmail::get_instance();
     $temp_dir = unslashify($rcmail->config->get('temp_dir'));
     $path = tempnam($temp_dir, 'rcmAttmnt');
     if ($fp = fopen($path, 'w')) {
@@ -991,7 +1053,7 @@
     'size' => $path ? filesize($path) : strlen($data),
   );
 
-  $attachment = rcmail::get_instance()->plugins->exec_hook('attachment_save', $attachment);
+  $attachment = $rcmail->plugins->exec_hook('attachment_save', $attachment);
 
   if ($attachment['status']) {
     unset($attachment['data'], $attachment['status'], $attachment['content_id'], $attachment['abort']);
@@ -1297,7 +1359,10 @@
 function rcmail_store_target_selection($attrib)
 {
   $attrib['name'] = '_store_target';
-  $select = rcmail_mailbox_select(array_merge($attrib, array('noselection' => '- '.rcube_label('dontsave').' -')));
+  $select = rcmail_mailbox_select(array_merge($attrib, array(
+    'noselection' => '- '.rcube_label('dontsave').' -',
+    'folder_filter' => 'mail'
+  )));
   return $select->show($_SESSION['compose']['param']['sent_mbox'], $attrib);
 }
 

--
Gitblit v1.9.1