Added Message details plugin to CVS
[squirrelmail.git] / functions / imap_messages.php
index f2e38335161f49379d9dfecb357063af4839c31c..b91d09c78ae41e84eab0c92e8ae37c18f3fa8b0d 100755 (executable)
@@ -24,19 +24,19 @@ function sqimap_messages_delete ($imap_stream, $start, $end, $mailbox) {
     if (($move_to_trash == true) && (sqimap_mailbox_exists($imap_stream, $trash_folder) && ($mailbox != $trash_folder))) {
         sqimap_messages_copy ($imap_stream, $start, $end, $trash_folder);
     }
-    sqimap_messages_flag ($imap_stream, $start, $end, "Deleted");
+    sqimap_messages_flag ($imap_stream, $start, $end, "Deleted", true);
 }
 
 /* Sets the specified messages with specified flag */
-function sqimap_messages_flag ($imap_stream, $start, $end, $flag) {
+function sqimap_messages_flag ($imap_stream, $start, $end, $flag, $handle_errors) {
     global $uid_support;
-    $read = sqimap_run_command ($imap_stream, "STORE $start:$end +FLAGS (\\$flag)", true, $response, $message, $uid_support);
+    $read = sqimap_run_command ($imap_stream, "STORE $start:$end +FLAGS (\\$flag)", $handle_errors, $response, $message, $uid_support);
 }
 
 /* Remove specified flag from specified messages */
-function sqimap_messages_remove_flag ($imap_stream, $start, $end, $flag) {
+function sqimap_messages_remove_flag ($imap_stream, $start, $end, $flag, $handle_errors) {
     global $uid_support;
-    $read = sqimap_run_command ($imap_stream, "STORE $start:$end -FLAGS (\\$flag)", true, $response, $message, $uid_support);
+    $read = sqimap_run_command ($imap_stream, "STORE $start:$end -FLAGS (\\$flag)", $handle_errors, $response, $message, $uid_support);
 }
 
 /* Returns some general header information -- FROM, DATE, and SUBJECT */
@@ -90,7 +90,7 @@ function get_reference_header ($imap_stream, $message) {
     $responses = sqimap_read_data_list($imap_stream, $sid, true, $responses, $message);
     if (!eregi("^\\* ([0-9]+) FETCH", $responses[0][0], $regs)) {
         $responses = array ();
-    }
+    } 
     return $responses;
 }
 
@@ -121,7 +121,7 @@ function sqimap_get_sort_order ($imap_stream, $sort, $mbxresponse) {
             $uidnext = $mbxresponse['UIDNEXT']-1;
             $uid_query = "$sid SEARCH UID 1:$uidnext\r\n";
             fputs($imap_stream, $uid_query);
-            $uids = sqimap_read_data($imap_stream, $sid, true ,&$response, $message);
+            $uids = sqimap_read_data($imap_stream, $sid, true ,$response, $message);
             if (isset($uids[0])) {
                 if (preg_match("/^\* SEARCH (.+)$/", $uids[0], $regs)) {
                     $server_sort_array = preg_split("/ /", trim($regs[1]));
@@ -155,7 +155,7 @@ function sqimap_get_sort_order ($imap_stream, $sort, $mbxresponse) {
     if (!empty($sort_on[$sort])) {
         $sort_query = "$sid SORT ($sort_on[$sort]) ".strtoupper($default_charset)." ALL\r\n";
         fputs($imap_stream, $sort_query);
-        $sort_test = sqimap_read_data($imap_stream, $sid, true ,&$response, $message);
+        $sort_test = sqimap_read_data($imap_stream, $sid, true ,$response, $message);
     }
     if (isset($sort_test[0])) {
         if (preg_match("/^\* SORT (.+)$/", $sort_test[0], $regs)) {
@@ -184,10 +184,14 @@ function sqimap_get_php_sort_order ($imap_stream, $mbxresponse) {
     $php_sort_array = array();
 
     if ($uid_support) {
-        $uidnext = $mbxresponse['UIDNEXT']-1;
+        if (isset($mbxresponse['UIDNEXT']) && $mbxresponse['UIDNEXT']) {
+           $uidnext = $mbxresponse['UIDNEXT']-1;
+       } else {
+           $uidnext = '*';
+       }
         $uid_query = "$sid SEARCH UID 1:$uidnext\r\n";
         fputs($imap_stream, $uid_query);
-        $uids = sqimap_read_data($imap_stream, $sid, true ,&$response, $message);
+        $uids = sqimap_read_data($imap_stream, $sid, true ,$response, $message);
         if (isset($uids[0])) {
             if (preg_match("/^\* SEARCH (.+)$/", $uids[0], $regs)) {
                 $php_sort_array = preg_split("/ /", trim($regs[1]));
@@ -621,6 +625,60 @@ function sqimap_get_small_header_list ($imap_stream, $msg_list) {
     return $result;
 }
 
+function sqimap_get_headerfield($imap_stream, $field) {
+    $sid = sqimap_session_id(false);
+
+    $results = array();
+    $read_list = array();
+
+    $query = "$sid FETCH 1:* (UID BODY.PEEK[HEADER.FIELDS ($field)])\r\n";
+    fputs ($imap_stream, $query);
+    $readin_list = sqimap_read_data_list($imap_stream, $sid, false, $response, $message);
+    $i = 0;
+
+    foreach ($readin_list as $r) {
+        $r = implode('',$r);
+        /* first we unfold the header */
+       $r = str_replace(array("\r\n\t","\r\n\s"),array('',''),$r);
+       /* 
+        * now we can make a new header array with each element representing 
+        * a headerline
+        */
+       $r = explode("\r\n" , $r);  
+        if (!$uid_support) {
+            if (!preg_match("/^\\*\s+([0-9]+)\s+FETCH/iAU",$r[0], $regs)) {
+                set_up_language($squirrelmail_language);
+                echo '<br><b><font color=$color[2]>' .
+                      _("ERROR : Could not complete request.") .
+                      '</b><br>' .
+                      _("Unknown response from IMAP server: ") . ' 1.' .
+                      $r[0] . "</font><br>\n";
+            } else {
+                $id = $regs[1];
+            }
+        } else {
+            if (!preg_match("/^\\*\s+([0-9]+)\s+FETCH.*UID\s+([0-9]+)\s+/iAU",$r[0], $regs)) {
+                set_up_language($squirrelmail_language);
+                echo '<br><b><font color=$color[2]>' .
+                     _("ERROR : Could not complete request.") .
+                     '</b><br>' .
+                     _("Unknown response from IMAP server: ") . ' 1.' .
+                     $r[0] . "</font><br>\n";
+            } else {
+               $id = $regs[2];
+            }
+        }
+       $field = $r[1];
+       $field = substr($field,strlen($field)+2);
+       $result[] = array($id,$field);
+    }
+    return $result;
+}
+
+
+
+
 /*
  * Returns a message array with all the information about a message.  
  * See the documentation folder for more information about this array.
@@ -643,9 +701,9 @@ function sqimap_get_message ($imap_stream, $id, $mailbox) {
     $bodystructure = implode('',$read);
     $msg =  mime_structure($bodystructure,$flags);
     $read = sqimap_run_command ($imap_stream, "FETCH $id BODY[HEADER]", true, $response, $message, $uid_support);
-    $msg->addRFC822Header($read);
-    $msg->id = $id;
-    $msg->mailbox = $mailbox;
+    $rfc822_header = new Rfc822Header();
+    $rfc822_header->parseHeader($read);
+    $msg->rfc822_header = $rfc822_header;
     return $msg;
 }