Browse Source

fixes previous/next on read_body when using server or thread sorting

jmunro 23 years ago
parent
commit
77ff1554fe
2 changed files with 49 additions and 19 deletions
  1. 12 3
      functions/imap_messages.php
  2. 37 16
      src/read_body.php

+ 12 - 3
functions/imap_messages.php

@@ -97,7 +97,10 @@ function get_reference_header ($imap_stream, $message) {
  */
  */
  
  
 function sqimap_get_sort_order ($imap_stream, $sort) {
 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();
     $sid = sqimap_session_id();
     $sort_on = array();
     $sort_on = array();
     $reverse = 0;
     $reverse = 0;
@@ -126,6 +129,7 @@ function sqimap_get_sort_order ($imap_stream, $sort) {
     if ($sort == 0 || $sort == 2 || $sort == 4) {
     if ($sort == 0 || $sort == 2 || $sort == 4) {
        $server_sort_array = array_reverse($server_sort_array);
        $server_sort_array = array_reverse($server_sort_array);
     }
     }
+    session_register('server_sort_array');
     return $server_sort_array;
     return $server_sort_array;
 }
 }
 	
 	
@@ -207,11 +211,14 @@ function get_parent_level ($imap_stream) {
 */
 */
 
 
 function get_thread_sort ($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');
         session_unregister('thread_new');
     }
     }
+    if (session_is_registered('server_sort_array')) {
+        session_unregister('server_srot_array');
+    }
     $sid = sqimap_session_id();
     $sid = sqimap_session_id();
     $thread_temp = array ();
     $thread_temp = array ();
     if ($sort_by_ref == 1) {
     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 = str_replace(")", " ", $thread_list);
     $thread_list = str_replace(")", " ", $thread_list);
     $thread_list = preg_split("/\s/", $thread_list, -1, PREG_SPLIT_NO_EMPTY);
     $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;
     return $thread_list;
 }
 }
 
 

+ 37 - 16
src/read_body.php

@@ -28,16 +28,29 @@ require_once('../functions/smtp.php');
 */
 */
 function findNextMessage() {
 function findNextMessage() {
     global $msort, $currentArrayIndex, $msgs, $sort, 
     global $msort, $currentArrayIndex, $msgs, $sort, 
-           $thread_sort_messages, $allow_server_sort;
+           $thread_sort_messages, $allow_server_sort,
+           $server_sort_array;
     $result = -1;
     $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) {
         if ($currentArrayIndex != 1) {
             $result = $currentArrayIndex - 1;
             $result = $currentArrayIndex - 1;
         }
         }
-    } else {
+    } 
+    elseif ($allow_server_sort != true && $thread_sort_messages != 1) {
         if (!is_array($msort)) {
         if (!is_array($msort)) {
             return -1;
             return -1;
         }
         }
@@ -67,22 +80,31 @@ function RemoveAddress(&$addr_list, $addr) {
 function findPreviousMessage() {
 function findPreviousMessage() {
     global $msort, $currentArrayIndex, $sort, $msgs, $imapConnection,
     global $msort, $currentArrayIndex, $sort, $msgs, $imapConnection,
            $mailbox, $data_dir, $username, $thread_sort_messages,
            $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;
     $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);
         $numMessages = sqimap_get_num_messages($imapConnection, $mailbox);
         if ($currentArrayIndex != $numMessages) {
         if ($currentArrayIndex != $numMessages) {
             $result = $currentArrayIndex + 1;
             $result = $currentArrayIndex + 1;
         }
         }
-    } else {
-	if (!is_array($msort)) {
+    } 
+    elseif ($thread_sort_messages != 1 && $allow_server_sort != TRUE) {
+	      if (!is_array($msort)) {
             return -1;
             return -1;
-	}
+	      }
         for (reset($msort); ($key = key($msort)), (isset($key)); next($msort)) {
         for (reset($msort); ($key = key($msort)), (isset($key)); next($msort)) {
             if ($currentArrayIndex == $msgs[$key]['ID']) {
             if ($currentArrayIndex == $msgs[$key]['ID']) {
                 prev($msort);
                 prev($msort);
@@ -605,7 +627,6 @@ echo '  ' .
                    '<SMALL>';
                    '<SMALL>';
 
 
 if ( !($where && $what) ) {
 if ( !($where && $what) ) {
-
     if ($currentArrayIndex == -1) {
     if ($currentArrayIndex == -1) {
         echo 'Previous&nbsp;|&nbsp;Next';
         echo 'Previous&nbsp;|&nbsp;Next';
     } else {
     } else {