From cfe4a6baf462c0befa06b283366945130cabfa5b Mon Sep 17 00:00:00 2001
From: thomascube <thomas@roundcube.net>
Date: Thu, 05 Jun 2008 13:35:12 -0400
Subject: [PATCH] Fix structure parsing and html output for multipart messages

---
 program/include/rcube_imap.php |    4 ++--
 skins/default/mail.css         |    3 ++-
 program/steps/mail/func.inc    |    9 +++++++--
 program/lib/imap.inc           |    3 +--
 4 files changed, 12 insertions(+), 7 deletions(-)

diff --git a/program/include/rcube_imap.php b/program/include/rcube_imap.php
index 43c3117..574ed6c 100644
--- a/program/include/rcube_imap.php
+++ b/program/include/rcube_imap.php
@@ -1074,7 +1074,7 @@
       $struct->ctype_primary = 'multipart';
       
       // find first non-array entry
-      for ($i=1; count($part); $i++)
+      for ($i=1; $i<count($part); $i++)
         if (!is_array($part[$i]))
           {
           $struct->ctype_secondary = strtolower($part[$i]);
@@ -1085,7 +1085,7 @@
 
       $struct->parts = array();
       for ($i=0, $count=0; $i<count($part); $i++)
-        if (is_array($part[$i]) && count($part[$i]) > 5)
+        if (is_array($part[$i]) && count($part[$i]) > 3)
           $struct->parts[] = $this->_structure_part($part[$i], ++$count, $struct->mime_id);
           
       return $struct;
diff --git a/program/lib/imap.inc b/program/lib/imap.inc
index 877e8a2..e2cd724 100644
--- a/program/lib/imap.inc
+++ b/program/lib/imap.inc
@@ -2570,8 +2570,7 @@
 				$result .= $line;
 			} while (!preg_match("/^$key/", $line));
 
-			$result = trim(substr($result, strpos($result, 'BODYSTRUCTURE')+13, 
-				    -(strlen($result)-strrpos($result, $key)-2)));
+			$result = trim(substr($result, strpos($result, 'BODYSTRUCTURE')+13, -(strlen($result)-strrpos($result, $key)+1)));
 		}
 	}
 	return $result;
diff --git a/program/steps/mail/func.inc b/program/steps/mail/func.inc
index ddaf290..79a84cc 100644
--- a/program/steps/mail/func.inc
+++ b/program/steps/mail/func.inc
@@ -549,6 +549,7 @@
   }
   // text/enriched
   else if ($part->ctype_secondary=='enriched') {
+    $part->ctype_secondary = 'html';
     return Q(enriched_to_html($body), 'show');
   }
   else
@@ -645,6 +646,10 @@
   // get associative array of headers object
   if (!$headers)
     $headers = is_object($MESSAGE->headers) ? get_object_vars($MESSAGE->headers) : $MESSAGE->headers;
+    
+  // add empty subject if none exsists
+  if (empty($headers['subject']))
+    $headers['subject'] = rcube_label('nosubject');
   
   $header_count = 0;
   
@@ -720,7 +725,7 @@
 
         $body = rcmail_print_body($part, $safe_mode, !$CONFIG['prefer_html']);
         
-        if ($part->ctype_secondary != 'plain')
+        if ($part->ctype_secondary == 'html')
           $out .= html::div('message-htmlpart', rcmail_html4inline($body, $attrib['id']));
         else
           $out .= html::div('message-part', $body);
@@ -728,7 +733,7 @@
       }
     }
   else
-    $out .= html::div('message-part', html::div('pre', $MESSAGE->body));
+    $out .= html::div('message-part', html::div('pre', Q($MESSAGE->body)));
 
 
   $ctype_primary = strtolower($MESSAGE->structure->ctype_primary);
diff --git a/skins/default/mail.css b/skins/default/mail.css
index 3f968da..f5d041f 100644
--- a/skins/default/mail.css
+++ b/skins/default/mail.css
@@ -677,7 +677,8 @@
   border-top: 0;
 }
 
-div.message-part a
+div.message-part a,
+div.message-htmlpart a
 {
   color: #0000CC;
 }

--
Gitblit v1.9.1