Fix for IMAP servers that don't always return a UIDNEXT value
[squirrelmail.git] / functions / imap_messages.php
index 330f5bc4a369a2b3fc9d08d747dbbcb95209b0c5..3b52743e32a7c07ad1e7214e831452c1e9a27654 100755 (executable)
@@ -106,7 +106,7 @@ function sqimap_get_sort_order ($imap_stream, $sort, $mbxresponse) {
             $sent_folder, $mailbox, $uid_support;
 
     if (session_is_registered('server_sort_array')) {
-        session_unregister('server_sort_array');
+        sqsession_unregister('server_sort_array');
     }
 
     $sid = sqimap_session_id($uid_support);
@@ -118,7 +118,11 @@ function sqimap_get_sort_order ($imap_stream, $sort, $mbxresponse) {
 
     if ($sort == 6) {
         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);
@@ -134,7 +138,7 @@ function sqimap_get_sort_order ($imap_stream, $sort, $mbxresponse) {
             $qty = $mbxresponse['EXISTS'];
             $server_sort_array = range(1, $qty);
         }
-        session_register('server_sort_array');
+        sqsession_register($server_sort_array, 'server_sort_array');
         return $server_sort_array;
     }
 
@@ -168,7 +172,7 @@ function sqimap_get_sort_order ($imap_stream, $sort, $mbxresponse) {
     if (!preg_match("/OK/", $response)) {
        $server_sort_array = 'no';
     }
-    session_register('server_sort_array');
+    sqsession_register($server_sort_array, 'server_sort_array');
     return $server_sort_array;
 }
 
@@ -177,7 +181,7 @@ function sqimap_get_php_sort_order ($imap_stream, $mbxresponse) {
     global $uid_support;
 
     if (session_is_registered('php_sort_array')) {
-        session_unregister('php_sort_array');
+        sqsession_unregister('php_sort_array');
     }
 
     $sid = sqimap_session_id($uid_support);
@@ -204,7 +208,7 @@ function sqimap_get_php_sort_order ($imap_stream, $mbxresponse) {
        $qty = $mbxresponse['EXISTS'];
        $php_sort_array = range(1, $qty);
     }
-    session_register('php_sort_array');
+    sqsession_register($php_sort_array, 'php_sort_array');
     return $php_sort_array;
 }
 
@@ -316,10 +320,10 @@ function get_parent_level ($imap_stream) {
 function get_thread_sort ($imap_stream) {
     global $thread_new, $sort_by_ref, $default_charset, $server_sort_array, $uid_support;
     if (session_is_registered('thread_new')) {
-        session_unregister('thread_new');
+        sqsession_unregister('thread_new');
     }
     if (session_is_registered('server_sort_array')) {
-        session_unregister('server_sort_array');
+        sqsession_unregister('server_sort_array');
     }
     $sid = sqimap_session_id($uid_support);
     $thread_temp = array ();
@@ -373,14 +377,14 @@ function get_thread_sort ($imap_stream) {
                     }
             }
     }
-    session_register('thread_new');
+    sqsession_register($thread_new, 'thread_new');
     $thread_new = array_reverse($thread_new);
     $thread_list = implode(" ", $thread_new);
     $thread_list = str_replace("(", " ", $thread_list);
     $thread_list = str_replace(")", " ", $thread_list);
     $thread_list = preg_split("/\s/", $thread_list, -1, PREG_SPLIT_NO_EMPTY);
     $server_sort_array = $thread_list;
-    session_register('server_sort_array');
+    sqsession_register($server_sort_array, 'server_sort_array');
     return $thread_list;
 }
 
@@ -492,9 +496,9 @@ function sqimap_get_small_header_list ($imap_stream, $msg_list) {
 
         foreach ($read as $read_part) {
             //unfold multi-line headers
-            while ($prevline && strspn($read_part, "\t ") > 0) {
-               $read_part = substr($prevline, 0, -2) . ' ' . ltrim($read_part);
-            }
+           if ($prevline && strpos($read_part, "\t ") === true) {
+               $read_part = substr($prevline, 0, -2) . preg_replace('/(\t\s+)/',' ',$read_part);
+           }
             $prevline = $read_part;
             if ($read_part{0} == '*') {
                 if ($internaldate) {
@@ -701,7 +705,7 @@ 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);
-    $rfc822_header = new rfc822_header();
+    $rfc822_header = new Rfc822Header();
     $rfc822_header->parseHeader($read);
     $msg->rfc822_header = $rfc822_header;
     return $msg;