- if ($use_cache) {
- sqgetGlobalVar('msgs', $msgs, SQ_SESSION);
- sqgetGlobalVar('msort', $msort, SQ_SESSION);
- } else {
- sqsession_unregister('msort');
- sqsession_unregister('msgs'); }
- switch ($mode) {
- case 'thread':
- $msgs = getThreadMessages($imapConnection, $start_msg, $show_num, $num_msgs);
- if ($msgs === false) {
- echo '<b><small><center><font color=red>' .
- _("Thread sorting is not supported by your IMAP server.<br>Please report this to the system administrator.").
- '</center></small></b>';
- $thread_sort_messages = 0;
- $msort = $msgs = array();
- } else {
- $msort= $msgs;
- $sort = 6;
- }
- break;
- case 'serversort':
- $msgs = getServerSortMessages($imapConnection, $start_msg, $show_num,
- $num_msgs, $sort, $mbxresponse);
- if ($msgs === false) {
- echo '<b><small><center><font color=red>' .
- _( "Server-side sorting is not supported by your IMAP server.<br>Please report this to the system administrator.").
- '</center></small></b>';
- $sort = $server_sort_order;
- $allow_server_sort = FALSE;
- $msort = $msgs = array();
- $id = array();
+ if (isset($mbxresponse['SORT_ARRAY']) && is_array($mbxresponse['SORT_ARRAY'])) {
+ $id = $mbxresponse['SORT_ARRAY'];
+ if (sqsession_is_registered('msgs')) {
+ sqsession_unregister('msgs');
+ }
+ $id_slice = array_slice($id,$start_msg-1, $show_num);
+ if (count($id_slice)) {
+ $msgs = sqimap_get_small_header_list($imapConnection,$id_slice,$show_num);
+ } else {
+ return false;
+ }
+ sqsession_register($msgs, 'msgs');
+ } else {
+ if (sqsession_is_registered('server_sort_array')) {
+ sqsession_unregister('server_sort_array');
+ }
+ $id = get_sorted_msgs_list($imapConnection,$sort,$mode,$error);
+ if ($id !== false) {
+ sqsession_register($id, 'server_sort_array');
+ $id_slice = array_slice($id,$start_msg-1, $show_num);
+ if (count($id_slice)) {
+ $msgs = sqimap_get_small_header_list($imapConnection,$id_slice,$show_num);