- }
- session_register('msort');
- }
- displayMessageArray($imapConnection, $num_msgs, $start_msg, $msgs, $msort, $mailbox, $sort, $color,$show_num);
- session_register('msgs');
- }
-
- /******************************************************************/
- /* Generic function to convert the msgs array into an HTML table. */
- /******************************************************************/
- function displayMessageArray($imapConnection, $num_msgs, $start_msg, &$msgs, $msort, $mailbox, $sort, $color, $show_num) {
- global $folder_prefix, $sent_folder;
- global $imapServerAddress, $data_dir, $username, $use_mailbox_cache;
- global $index_order, $real_endMessage, $real_startMessage, $checkall;
-
- /* If cache isn't already set, do it now. */
- if (!session_is_registered('msgs')) { session_register('msgs'); }
- if (!session_is_registered('msort')) { session_register('msort'); }
-
- if ($start_msg + ($show_num - 1) < $num_msgs) {
- $end_msg = $start_msg + ($show_num-1);
- } else {
- $end_msg = $num_msgs;
- }
-
- if ($end_msg < $start_msg) {
- $start_msg = $start_msg - $show_num;
- if ($start_msg < 1) { $start_msg = 1; }
- }
-
- $urlMailbox = urlencode($mailbox);
-
- do_hook('mailbox_index_before');
-
- $msg_cnt_str = get_msgcnt_str($start_msg, $end_msg, $num_msgs);
- $paginator_str = get_paginator_str($urlMailbox, $start_msg, $end_msg, $num_msgs, $show_num, $sort);
-
- if (! isset($msg)) {
- $msg = '';
- }
-
- mail_message_listing_beginning
- ($imapConnection,
- "move_messages.php?msg=$msg&mailbox=$urlMailbox&startMessage=$start_msg",
- $mailbox, $sort, $msg_cnt_str, $paginator_str, $start_msg);
-
- $groupNum = $start_msg % ($show_num - 1);
- $real_startMessage = $start_msg;
- if ($sort == 6) {
- if ($end_msg - $start_msg < $show_num - 1) {
+ }
+ $msgs = fillMessageArray($imapConnection,$id,$end_loop);
+ }
+ return $msgs;
+}
+
+
+
+/*
+ * This function loops through a group of messages in the mailbox
+ * and shows them to the user.
+ */
+function showMessagesForMailbox($imapConnection, $mailbox, $num_msgs,
+ $start_msg, $sort, $color, $show_num,
+ $use_cache, $mode='') {
+ global $msgs, $msort, $auto_expunge, $thread_sort_messages,
+ $allow_server_sort, $server_sort_order;
+
+ /*
+ * For some reason, on PHP 4.3+, this being unset, and set in the session causes havoc
+ * so setting it to an empty array beforehand seems to clean up the issue, and stopping the
+ * "Your script possibly relies on a session side-effect which existed until PHP 4.2.3" error
+ */
+
+ if (!isset($msort)) {
+ $msort = array();
+ }
+
+ if (!isset($msgs)) {
+ $msgs = array();
+ }
+
+ $start = microtime();
+ /* If autoexpunge is turned on, then do it now. */
+ $mbxresponse = sqimap_mailbox_select($imapConnection, $mailbox);
+ $srt = $sort;
+ /* If autoexpunge is turned on, then do it now. */
+ if ($auto_expunge == true) {
+ $exp_cnt = sqimap_mailbox_expunge($imapConnection, $mailbox, false, '');
+ $mbxresponse['EXISTS'] = $mbxresponse['EXISTS'] - $exp_cnt;
+ $num_msgs = $mbxresponse['EXISTS'];
+ }
+
+ if ($mbxresponse['EXISTS'] > 0) {
+ /* if $start_msg is lower than $num_msgs, we probably deleted all messages
+ * in the last page. We need to re-adjust the start_msg
+ */
+
+ if($start_msg > $num_msgs) {
+ $start_msg -= $show_num;
+ if($start_msg < 1) {
+ $start_msg = 1;
+ }
+ }
+
+ /* This code and the next if() block check for
+ * server-side sorting methods. The $id array is
+ * formatted and $sort is set to 6 to disable
+ * SM internal sorting
+ */
+
+ if ($thread_sort_messages == 1) {
+ $mode = 'thread';
+ } elseif ($allow_server_sort == 1) {
+ $mode = 'serversort';
+ } else {
+ $mode = '';
+ }
+
+ sqsession_unregister('msort');
+ sqsession_unregister('msgs');
+ switch ($mode) {
+ case 'thread':
+ $id = get_thread_sort($imapConnection);
+ $msgs = getServerMessages($imapConnection, $start_msg, $show_num, $num_msgs, $id);
+ 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':
+ $id = sqimap_get_sort_order($imapConnection, $sort, $mbxresponse);
+ $msgs = getServerMessages($imapConnection, $start_msg, $show_num, $num_msgs, $id);
+ 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();
+ } else {
+ $msort = $msgs;
+ $sort = 6;
+ }
+ break;
+ default:
+ if (!$use_cache) {
+ $msgs = getSelfSortMessages($imapConnection, $start_msg, $show_num,
+ $num_msgs, $sort, $mbxresponse);
+ $msort = calc_msort($msgs, $sort);
+ } /* !use cache */
+ break;
+ } // switch
+ sqsession_register($msort, 'msort');
+ sqsession_register($msgs, 'msgs');
+ } /* if exists > 0 */
+
+ $res = getEndMessage($start_msg, $show_num, $num_msgs);
+ $start_msg = $res[0];
+ $end_msg = $res[1];
+
+ $paginator_str = get_paginator_str($mailbox, $start_msg, $end_msg,
+ $num_msgs, $show_num, $sort);
+
+ $msg_cnt_str = get_msgcnt_str($start_msg, $end_msg, $num_msgs);
+
+ do_hook('mailbox_index_before');
+ echo '<table border="0" width="100%" cellpadding="0" cellspacing="0">';
+ echo '<tr><td>';
+
+ mail_message_listing_beginning($imapConnection, $mailbox, $sort,
+ $msg_cnt_str, $paginator_str, $start_msg);
+ echo '</td></tr>';
+ /* line between the button area and the list */
+ echo '<tr><td HEIGHT="5" BGCOLOR="'.$color[4].'"></td></tr>';
+
+ echo '<tr><td>';
+ echo ' <table width="100%" cellpadding="1" cellspacing="0" align="center"'.' border="0" bgcolor="'.$color[9].'">';
+ echo ' <tr><td>';
+ echo ' <table width="100%" cellpadding="1" cellspacing="0" align="center" border="0" bgcolor="'.$color[5].'">';
+ echo '<tr><td>';
+ printHeader($mailbox, $srt, $color, !$thread_sort_messages);
+
+ displayMessageArray($imapConnection, $num_msgs, $start_msg,
+ $msort, $mailbox, $sort, $color, $show_num,0,0);
+ echo '</td></tr></table></td></tr></table>';
+
+ mail_message_listing_end($num_msgs, $paginator_str, $msg_cnt_str, $color);
+ echo '</td></tr></table>';
+ $t = elapsed($start);
+ //echo("elapsed time = $t seconds\n");
+}
+
+function calc_msort($msgs, $sort) {
+
+ /*
+ * 0 = Date (up)
+ * 1 = Date (dn)
+ * 2 = Name (up)
+ * 3 = Name (dn)
+ * 4 = Subject (up)
+ * 5 = Subject (dn)
+ */
+
+ if (($sort == 0) || ($sort == 1)) {
+ foreach ($msgs as $item) {
+ $msort[] = $item['TIME_STAMP'];
+ }
+ } elseif (($sort == 2) || ($sort == 3)) {
+ foreach ($msgs as $item) {
+ $msort[] = $item['FROM-SORT'];
+ }
+ } elseif (($sort == 4) || ($sort == 5)) {
+ foreach ($msgs as $item) {
+ $msort[] = $item['SUBJECT-SORT'];
+ }
+ } else {
+ $msort = $msgs;
+ }
+ if ($sort < 6) {
+ if ($sort % 2) {
+ asort($msort);
+ } else {
+ arsort($msort);
+ }
+ }
+ return $msort;
+}
+
+function fillMessageArray($imapConnection, $id, $count) {
+ return sqimap_get_small_header_list($imapConnection, $id);
+}
+
+
+/* Generic function to convert the msgs array into an HTML table. */
+function displayMessageArray($imapConnection, $num_msgs, $start_msg,
+ $msort, $mailbox, $sort, $color,
+ $show_num, $where=0, $what=0) {
+ global $imapServerAddress, $use_mailbox_cache, $index_order,
+ $indent_array, $thread_sort_messages, $allow_server_sort,
+ $server_sort_order, $PHP_SELF;
+
+ $res = getEndMessage($start_msg, $show_num, $num_msgs);
+ $start_msg = $res[0];
+ $end_msg = $res[1];
+
+ $urlMailbox = urlencode($mailbox);
+
+ /* get indent level for subject display */
+ if ($thread_sort_messages == 1 && $num_msgs) {
+ $indent_array = get_parent_level($imapConnection);
+ }
+
+ $real_startMessage = $start_msg;
+ if ($sort == 6) {
+ if ($end_msg - $start_msg < $show_num - 1) {