fixes previous/next on read_body when using server or thread sorting
authorjmunro <jmunro@7612ce4b-ef26-0410-bec9-ea0150e637f0>
Mon, 1 Apr 2002 17:07:44 +0000 (17:07 +0000)
committerjmunro <jmunro@7612ce4b-ef26-0410-bec9-ea0150e637f0>
Mon, 1 Apr 2002 17:07:44 +0000 (17:07 +0000)
git-svn-id: https://svn.code.sf.net/p/squirrelmail/code/trunk/squirrelmail@2660 7612ce4b-ef26-0410-bec9-ea0150e637f0

functions/imap_messages.php
src/read_body.php

index b3f9c0b98a095f7b3264ea43f1139dc4bcb6bbed..1835bdb35cf4bfa68028adea84f16a5e1f7e1162 100755 (executable)
@@ -97,7 +97,10 @@ function get_reference_header ($imap_stream, $message) {
  */
  
 function sqimap_get_sort_order ($imap_stream, $sort) {
-    global  $default_charset, $thread_sort_messages, $internal_date_sort;
+    global  $default_charset, $thread_sort_messages, $internal_date_sort, $server_sort_array;
+    if (session_is_registered('server_sort_array')) {
+        session_unregister('server_sort_array');
+    }
     $sid = sqimap_session_id();
     $sort_on = array();
     $reverse = 0;
@@ -126,6 +129,7 @@ function sqimap_get_sort_order ($imap_stream, $sort) {
     if ($sort == 0 || $sort == 2 || $sort == 4) {
        $server_sort_array = array_reverse($server_sort_array);
     }
+    session_register('server_sort_array');
     return $server_sort_array;
 }
        
@@ -207,11 +211,14 @@ function get_parent_level ($imap_stream) {
 */
 
 function get_thread_sort ($imap_stream) {
-    global $thread_new, $sort_by_ref, $default_charset;
+    global $thread_new, $sort_by_ref, $default_charset, $server_sort_array;
 
-    if (session_register('thread_new')) {
+    if (session_is_registered('thread_new')) {
         session_unregister('thread_new');
     }
+    if (session_is_registered('server_sort_array')) {
+        session_unregister('server_srot_array');
+    }
     $sid = sqimap_session_id();
     $thread_temp = array ();
     if ($sort_by_ref == 1) {
@@ -262,6 +269,8 @@ function get_thread_sort ($imap_stream) {
     $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');
     return $thread_list;
 }
 
index 92b3f0225cc9e636214e73cc8738a17296346e96..4eb6e47b9450dcf8145390ec54e3ad9ea51f1b30 100644 (file)
@@ -28,16 +28,29 @@ require_once('../functions/smtp.php');
 */
 function findNextMessage() {
     global $msort, $currentArrayIndex, $msgs, $sort, 
-           $thread_sort_messages, $allow_server_sort;
+           $thread_sort_messages, $allow_server_sort,
+           $server_sort_array;
     $result = -1;
-               if ($thread_sort_messages == 1) {
-                               $sort = 0;
+               if ($thread_sort_messages == 1 || $allow_server_sort == true) {
+        reset($server_sort_array);
+        while(list($key, $value) = each ($server_sort_array)) {
+            if ($currentArrayIndex == $value) {
+                if ($key == (count($server_sort_array) -1)) {
+                    $result = -1;
+                    break;
+                }
+                $result = $server_sort_array[$key +1];
+                break; 
+                                               }
+        }
                }
-    if ($sort == 6 && $allow_server_sort != TRUE) {
+    
+    elseif ($sort == 6 && $allow_server_sort != true && $thread_sort_messages != 1) {
         if ($currentArrayIndex != 1) {
             $result = $currentArrayIndex - 1;
         }
-    } else {
+    } 
+    elseif ($allow_server_sort != true && $thread_sort_messages != 1) {
         if (!is_array($msort)) {
             return -1;
         }
@@ -67,22 +80,31 @@ function RemoveAddress(&$addr_list, $addr) {
 function findPreviousMessage() {
     global $msort, $currentArrayIndex, $sort, $msgs, $imapConnection,
            $mailbox, $data_dir, $username, $thread_sort_messages,
-           $allow_server_sort;
-               if ($thread_sort_messages == 1) {
-                               $sort = 0;
-               }
-
+           $allow_server_sort, $server_sort_array;
     $result = -1;
-
-    if ($sort == 6 && $allow_server_sort != TRUE) {
+               if ($thread_sort_messages == 1 || $allow_server_sort == TRUE) {
+        reset($server_sort_array);
+        while(list($key, $value) = each ($server_sort_array)) {
+            if ($currentArrayIndex == $value) {
+                if ($key == 0) {
+                    $result = -1;
+                    break;
+                }
+                $result = $server_sort_array[$key -1];
+                break;
+                                               }
+        }
+               }
+    elseif ($sort == 6 && $allow_server_sort != TRUE && $thread_sort_messages != 1) {
         $numMessages = sqimap_get_num_messages($imapConnection, $mailbox);
         if ($currentArrayIndex != $numMessages) {
             $result = $currentArrayIndex + 1;
         }
-    } else {
-       if (!is_array($msort)) {
+    } 
+    elseif ($thread_sort_messages != 1 && $allow_server_sort != TRUE) {
+             if (!is_array($msort)) {
             return -1;
-       }
+             }
         for (reset($msort); ($key = key($msort)), (isset($key)); next($msort)) {
             if ($currentArrayIndex == $msgs[$key]['ID']) {
                 prev($msort);
@@ -605,7 +627,6 @@ echo '&nbsp;&nbsp;' .
                    '<SMALL>';
 
 if ( !($where && $what) ) {
-
     if ($currentArrayIndex == -1) {
         echo 'Previous&nbsp;|&nbsp;Next';
     } else {