Applied patch #102655. Ha! my first commit !
[squirrelmail.git] / functions / imap_messages.php
index 3d6c8f0bb97122f4de742dabf163a80c2a6afe17..a28dc43da6ba7af74eedb7da50b0aee947c473d8 100755 (executable)
       $read = sqimap_read_data ($imap_stream, "a001", true, $response, $message);
    }
 
+
+   /******************************************************************************
+    **  Remove specified flag from specified messages
+    ******************************************************************************/
+   function sqimap_messages_remove_flag ($imap_stream, $start, $end, $flag) {
+      fputs ($imap_stream, "a001 STORE $start:$end -FLAGS (\\$flag)\r\n");
+      $read = sqimap_read_data ($imap_stream, "a001", true, $response, $message);
+   }
+
+
    /******************************************************************************
     **  Returns some general header information -- FROM, DATE, and SUBJECT
     ******************************************************************************/
@@ -46,7 +56,7 @@
         
    function sqimap_get_small_header ($imap_stream, $id, $sent) {
 
-      fputs ($imap_stream, "a001 FETCH $id BODY.PEEK[HEADER.FIELDS (Date To From Cc Subject Message-Id X-Priority)]\r\n");
+      fputs ($imap_stream, "a001 FETCH $id BODY.PEEK[HEADER.FIELDS (Date To From Cc Subject Message-Id X-Priority Content-Type)]\r\n");
       $read = sqimap_read_data ($imap_stream, "a001", true, $response, $message);
 
       $subject = _("(no subject)");
 
       $g = 0;
       for ($i = 0; $i < count($read); $i++) {
-         if (eregi ("^to:", $read[$i])) {
+         if (eregi ("^to:(.*)$", $read[$i], $regs)) {
             //$to = sqimap_find_displayable_name(substr($read[$i], 3));
-            $to = substr($read[$i], 3);
-             } else if (eregi ("^from:", $read[$i])) {
+            $to = $regs[1];
+        } else if (eregi ("^from:(.*)$", $read[$i], $regs)) {
             //$from = sqimap_find_displayable_name(substr($read[$i], 5));
-            $from = substr($read[$i], 5);
-             } else if (eregi ("^x-priority:", $read[$i])) {
-            $priority = trim(substr($read[$i], 11));
-         } else if (eregi ("^message-id:", $read[$i])) {
-            $messageid = trim(substr($read[$i], 11));
-         } else if (eregi ("^cc:", $read[$i])) {
-            $cc = substr($read[$i], 3);
-         } else if (eregi ("^date:", $read[$i])) {
-            $date = substr($read[$i], 5);
-         } else if (eregi ("^subject:", $read[$i])) {
-            $subject = htmlspecialchars(eregi_replace ("^subject: ", "", $read[$i]));
-            if (trim($subject) == "")
+            $from = $regs[1];
+        } else if (eregi ("^x-priority:(.*)$", $read[$i], $regs)) {
+            $priority = trim($regs[1]);
+         } else if (eregi ("^message-id:(.*)$", $read[$i], $regs)) {
+            $messageid = trim($regs[1]);
+         } else if (eregi ("^cc:(.*)$", $read[$i], $regs)) {
+            $cc = $regs[1];
+         } else if (eregi ("^date:(.*)$", $read[$i], $regs)) {
+            $date = $regs[1];
+         } else if (eregi ("^subject:(.*)$", $read[$i], $regs)) {
+            $subject = htmlspecialchars(trim($regs[1]));
+            if ($subject == "")
                $subject = _("(no subject)");
+         } else if (eregi ("^content-type:(.*)$", $read[$i], $regs)) {
+            $type = strtolower(trim($regs[1]));
+            if ($pos = strpos($type, ";"))
+               $type = substr($type, 0, $pos);
+            $type = explode("/", $type);
          }
+         
       }
 
       // If there isn't a date, it takes the internal date and uses
          $date = implode (" ", $date_ary);
       }
 
+      fputs ($imap_stream, "a003 FETCH $id RFC822.SIZE\r\n");
+      $read = sqimap_read_data($imap_stream, "a003", true, $r, $m);
+      preg_match("/([0-9]+)\)\s*$/i", $read[0], $regs);
+      $size = $regs[1];
+      
       $header = new small_header;
       if ($sent == true)
-         $header->from = $to;
+         $header->from = (trim($to) != '')? $to : _('(only Cc/Bcc)');
       else   
          $header->from = $from;
 
       $header->priority = $priority;
       $header->message_id = $messageid;
       $header->cc = $cc;
+      $header->size = $size;
+      $header->type0 = $type[0];
+      $header->type1 = $type[1];
 
       return $header;
    }
    function sqimap_get_flags ($imap_stream, $i) {
       fputs ($imap_stream, "a001 FETCH $i:$i FLAGS\r\n");
       $read = sqimap_read_data ($imap_stream, "a001", true, $response, $message);
-      if (strpos($read[0], "FLAGS")) {
-         $tmp = ereg_replace("\(", "", $read[0]);
-         $tmp = ereg_replace("\)", "", $tmp);
-         $tmp = str_replace("\\", "", $tmp);
-         $tmp = substr($tmp, strpos($tmp, "FLAGS")+6, strlen($tmp));
-         $tmp = trim($tmp);
-         $flags = explode(" ", $tmp);
-      } else {
-         $flags[0] = "None";
-      }
-      return $flags;
+      if (ereg("FLAGS(.*)", $read[0], $regs))
+          return explode(" ", trim(ereg_replace('[\(\)\\]', '', $regs[1])));
+      return Array('None');
    }
 
    /******************************************************************************
       $hdr->type1 = "plain";
       $hdr->charset = "us-ascii";
 
+      preg_match("/\{([0-9]+)\}/", $read[$i], $regs);
+      preg_match("/[0-9]+/", $regs[0], $regs);
+
       while ($i < count($read)) {
          if (substr($read[$i], 0, 17) == "MIME-Version: 1.0") {
             $hdr->mime = true;
             if (strpos(strtolower(trim($line)), "charset=")) {
                $pos = strpos($line, "charset=") + 8;
                $charset = trim($line);
-               if (strpos($line, " ", $pos) > 0) {
-                  $charset = substr($charset, $pos, strpos($line, " ", $pos));
+               if (strpos($line, ";", $pos) > 0) {
+                  $charset = substr($charset, $pos, strpos($line, ";", $pos)-$pos);
                } else {
                   $charset = substr($charset, $pos);
                }