Added Message details plugin to CVS
[squirrelmail.git] / functions / imap_general.php
index 11586a1853888a134669a487fa59ffbba099aad1..2b4b9e9dd8ee77e671867292940177134abf33fc 100755 (executable)
@@ -87,15 +87,19 @@ function sqimap_read_data_list ($imap_stream, $pre, $handle_errors, &$response,
             case preg_match("/^\* (OK \[PARSE\])(.*)$/", $read):
                 $read = sqimap_fgets($imap_stream);
                 break 1;
-            case preg_match('/^\* [0-9]+ FETCH.*/', $read):
+            case preg_match('/^\* ([0-9]+) FETCH.*/', $read, $regs):
                 $fetch_data = array();
                 $fetch_data[] = $read;
                 $read = sqimap_fgets($imap_stream);
-                while (!preg_match('/^\* [0-9]+ FETCH.*/', $read) && 
+                while (!preg_match('/^\* [0-9]+ FETCH.*/', $read) &&
                        !preg_match("/^$pre (OK|BAD|NO)(.*)$/", $read)) {
                     $fetch_data[] = $read;
+                    $last = $read;
                     $read = sqimap_fgets($imap_stream);
                 }
+                if (isset($last) && preg_match('/^\)/', $last)) {
+                    array_pop($fetch_data);
+                }
                 $resultlist[] = $fetch_data;
                 break 1;
             default:
@@ -145,7 +149,27 @@ function sqimap_read_data_list ($imap_stream, $pre, $handle_errors, &$response,
 
 function sqimap_read_data ($imap_stream, $pre, $handle_errors, &$response, &$message, $query = '') {
     $res = sqimap_read_data_list($imap_stream, $pre, $handle_errors, $response, $message, $query);
-    return $res[0];
+  
+    /* sqimap_read_data should be called for one response
+       but since it just calls sqimap_read_data_list which 
+       handles multiple responses we need to check for that
+       and merge the $res array IF they are seperated and 
+       IF it was a FETCH response. */
+  
+    if (isset($res[1]) && is_array($res[1]) && isset($res[1][0]) 
+        && preg_match('/^\* \d+ FETCH/', $res[1][0])) {
+        $result = array();
+        foreach($res as $index=>$value) {
+            $result = array_merge($result, $res["$index"]);
+        }
+    }
+    if (isset($result)) {
+        return $result;
+    }
+    else {
+        return $res[0];
+    }
+
 }
 
 /*