parsing $message to magicHTML for better handling message/rfc822 attachments
[squirrelmail.git] / functions / mime.php
index bbf3953c2d0298791d902629235738eb14afefd2..23fa3ce1146bf2f7f9d2afd829906aa93cff7ef8 100644 (file)
@@ -229,6 +229,21 @@ function mime_get_element (&$structure, $msg, $ent_id) {
            $pos++;
         }
         $structure = substr($structure, strlen($text) + 2);
+     } else if ($char == '{') {
+         /**
+          * loop through until we find the matching quote, 
+          * and return that as a string
+          */
+         $pos = 1;
+         $len = '';
+         while (($char = $structure{$pos}) != '}' 
+                && $pos < strlen($structure)) {
+             $len .= $char;
+             $pos++;
+         }
+         $structure = substr($structure, strlen($len) + 4);
+         $text = substr($structure, 0, $len);
+         $structure = substr($structure, $len + 1);
      } else if ($char == '(') {
         // comment me
         $end = mime_match_parenthesis (0, $structure);
@@ -779,7 +794,7 @@ function formatBody($imap_stream, $message, $color, $wrap_at) {
                 $body = strip_tags( $body );
                 translateText($body, $wrap_at, $body_message->header->charset);
             } else {
-                $body = MagicHTML( $body, $id );
+                $body = MagicHTML( $body, $id, $message );
             }
         } else {
             translateText($body, $wrap_at, $body_message->header->charset);
@@ -931,6 +946,7 @@ function formatAttachments($message, $ent_id, $mailbox, $id) {
             $DefaultLink =
                 "../src/download.php?startMessage=$startMessage&amp;passed_id=$id&amp;mailbox=$urlMailbox&amp;passed_ent_id=$ent";
             if ($where && $what) {
+              $DefaultLink = '&amp;where='. urlencode($where).'&amp;what='.urlencode($what);
             }
             $Links['download link']['text'] = _("download");
             $Links['download link']['href'] =
@@ -995,7 +1011,8 @@ function decodeBody($body, $encoding) {
 
   global $show_html_default;
 
-  if ($encoding == 'quoted-printable') {
+  if ($encoding == 'quoted-printable' ||
+      $encoding == 'quoted_printable') {
      $body = quoted_printable_decode($body);
 
 
@@ -1169,8 +1186,6 @@ function sq_skipspace($body, $offset){
     if (sizeof($matches{1})){
         $count = strlen($matches{1});
         $offset += $count;
-        //if ($pos >= strlen($body)){
-        //}
     }
     return $offset;
 }
@@ -1371,18 +1386,16 @@ function sq_getnxtag($body, $offset){
          */
         $matches = Array();
         if (preg_match("%^(\s*)(>|/>)%s", substr($body, $pos), $matches)) {
-           if ($matches{0}){
-               /**
-                * Yep. So we did.
-                */
-               $pos += strlen($matches{1});
-               if ($matches{2} == "/>"){
-                   $tagtype = 3;
-                   $pos++;
-               }
-               return Array($tagname, $attary, $tagtype, $lt, $pos);
-           }
-       }
+            /**
+             * Yep. So we did.
+             */
+            $pos += strlen($matches{1});
+            if ($matches{2} == "/>"){
+                $tagtype = 3;
+                $pos++;
+            }
+            return Array($tagname, $attary, $tagtype, $lt, $pos);
+        }
 
         /**
          * There are several types of attributes, with optional
@@ -1429,7 +1442,7 @@ function sq_getnxtag($body, $offset){
                 $pos++;
                 $tagtype = 3;
             } else {
-                $gt = getnxstr($body, $pos, ">");
+                $gt = sq_findnxstr($body, $pos, ">");
                 $retary = Array(false, false, false, $lt, $gt);
                 return $retary;
             }
@@ -1814,11 +1827,6 @@ function sq_sanitize($body,
              * content before we apply it.
              */
             $free_content = sq_fixstyle($message, $id, $free_content);
-        } else if ($tagname == "body"){
-            $tagname = "div";
-            if ($tagtype == 1){
-                $attary = sq_body2div($attary);
-            }
         }
         if ($skip_content == false){
             $trusted .= $free_content;
@@ -1834,11 +1842,15 @@ function sq_sanitize($body,
                     $skip_content = false;
                 } else {
                     if ($skip_content == false){
-                        if (isset($open_tags{$tagname}) && 
-                            $open_tags{$tagname} > 0){
-                            $open_tags{$tagname}--;
+                        if ($tagname == "body"){
+                            $tagname = "div";
                         } else {
-                            $tagname = false;
+                            if (isset($open_tags{$tagname}) && 
+                                $open_tags{$tagname} > 0){
+                                $open_tags{$tagname}--;
+                            } else {
+                                $tagname = false;
+                            }
                         }
                     } else {
                     }
@@ -1890,6 +1902,13 @@ function sq_sanitize($body,
                                                      $id
                                                      );
                             }
+                            /**
+                             * Convert body into div.
+                             */
+                            if ($tagname == "body"){
+                                $tagname = "div";
+                                $attary = sq_body2div($attary, $message, $id);
+                            }
                         }
                     }
                 } else {
@@ -1923,7 +1942,7 @@ function sq_sanitize($body,
  * @param  $id    the id of the message
  * @return        a string with html safe to display in the browser.
  */
-function magicHTML($body, $id){
+function magicHTML($body, $id, $message){
     global $attachment_common_show_images, $view_unsafe_images,
         $has_unsafe_images, $message;
     /**