From 60a3e687435735d075246ceaac87963df079a0af Mon Sep 17 00:00:00 2001 From: jmunro Date: Mon, 1 Apr 2002 17:07:44 +0000 Subject: [PATCH] fixes previous/next on read_body when using server or thread sorting git-svn-id: https://svn.code.sf.net/p/squirrelmail/code/trunk/squirrelmail@2660 7612ce4b-ef26-0410-bec9-ea0150e637f0 --- functions/imap_messages.php | 15 ++++++++--- src/read_body.php | 53 ++++++++++++++++++++++++++----------- 2 files changed, 49 insertions(+), 19 deletions(-) diff --git a/functions/imap_messages.php b/functions/imap_messages.php index b3f9c0b9..1835bdb3 100755 --- a/functions/imap_messages.php +++ b/functions/imap_messages.php @@ -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; } diff --git a/src/read_body.php b/src/read_body.php index 92b3f022..4eb6e47b 100644 --- a/src/read_body.php +++ b/src/read_body.php @@ -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 '  ' . ''; if ( !($where && $what) ) { - if ($currentArrayIndex == -1) { echo 'Previous | Next'; } else { -- 2.25.1