X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=functions%2Fmailbox_display.php;h=fa5c3b6ad24c07581ee8d72e71d893819b67fe37;hb=2d1073c7200998690a3643eb357f4e606c14248d;hp=20c740c11adc4468994553df93ccd599135e8dda;hpb=355861846a51d35efe50848869d680fd3b4a5316;p=squirrelmail.git
diff --git a/functions/mailbox_display.php b/functions/mailbox_display.php
index 20c740c1..33aa3049 100644
--- a/functions/mailbox_display.php
+++ b/functions/mailbox_display.php
@@ -3,771 +3,1420 @@
/**
* mailbox_display.php
*
- * Copyright (c) 1999-2001 The SquirrelMail Development Team
+ * Copyright (c) 1999-2004 The SquirrelMail Project Team
* Licensed under the GNU GPL. For full terms see the file COPYING.
*
* This contains functions that display mailbox information, such as the
* table row that has sender, date, subject, etc...
*
* $Id$
+ * @package squirrelmail
*/
-/*****************************************************************/
-/*** THIS FILE NEEDS TO HAVE ITS FORMATTING FIXED!!! ***/
-/*** PLEASE DO SO AND REMOVE THIS COMMENT SECTION. ***/
-/*** + Base level indent should begin at left margin, as ***/
-/*** the first line of the function definition below. ***/
-/*** + All identation should consist of four space blocks ***/
-/*** + Tab characters are evil. ***/
-/*** + all comments should use "slash-star ... star-slash" ***/
-/*** style -- no pound characters, no slash-slash style ***/
-/*** + FLOW CONTROL STATEMENTS (if, while, etc) SHOULD ***/
-/*** ALWAYS USE { AND } CHARACTERS!!! ***/
-/*** + Please use ' instead of ", when possible. Note " ***/
-/*** should always be used in _( ) function calls. ***/
-/*** Thank you for your help making the SM code more readable. ***/
-/*****************************************************************/
-
-define('PG_SEL_MAX', 10); /* Default value for page_selector_max. */
-
-function printMessageInfo($imapConnection, $t, $i, $key, $mailbox, $sort, $start_msg, $where, $what) {
- global $checkall;
- global $color, $msgs, $msort;
- global $sent_folder, $draft_folder;
- global $default_use_priority;
- global $message_highlight_list;
- global $index_order;
-
- $color_string = $color[4];
- if ($GLOBALS['alt_index_colors']) {
- if (!isset($GLOBALS["row_count"])) {
- $GLOBALS["row_count"] = 0;
- }
- $GLOBALS["row_count"]++;
- if ($GLOBALS["row_count"] % 2) {
- if (!isset($color[12])) $color[12] = '#EAEAEA';
- $color_string = $color[12];
- }
- }
- $msg = $msgs[$key];
-
- $senderName = htmlspecialchars(sqimap_find_displayable_name($msg['FROM']));
- if( $mailbox == 'None' ) {
- // $imapConnection = sqimap_login($username, $key, $imapServerAddress, $imapPort, 0);
- $boxes = sqimap_mailbox_list($imapConnection);
- // sqimap_logout($imapConnection);
- $mailbox = $boxes[0]['unformatted'];
- unset( $boxes );
- }
- $urlMailbox = urlencode($mailbox);
- $subject = processSubject($msg['SUBJECT']);
- echo "
\n";
-
- if (isset($msg['FLAG_FLAGGED']) && ($msg['FLAG_FLAGGED'] == true)) {
- $flag = "";
- $flag_end = ' ';
- } else {
- $flag = '';
- $flag_end = '';
- }
- if (!isset($msg['FLAG_SEEN']) || ($msg['FLAG_SEEN'] == false)) {
- $bold = '';
- $bold_end = ' ';
- } else {
- $bold = '';
- $bold_end = '';
- }
+/** The standard includes.. */
+require_once(SM_PATH . 'functions/strings.php');
+require_once(SM_PATH . 'functions/html.php');
+require_once(SM_PATH . 'class/html.class.php');
+require_once(SM_PATH . 'functions/imap_mailbox.php');
+require_once(SM_PATH . 'functions/imap_messages.php');
+require_once(SM_PATH . 'functions/mime.php');
- if (($mailbox == $sent_folder) || ($mailbox == $draft_folder)) {
- $italic = '';
- $italic_end = ' ';
- } else {
- $italic = '';
- $italic_end = '';
- }
+/**
+ * default value for page_selector_max
+ */
+define('PG_SEL_MAX', 10);
- if (isset($msg['FLAG_DELETED']) && $msg['FLAG_DELETED']) {
- $fontstr = "";
- $fontstr_end = ' ';
- } else {
- $fontstr = '';
- $fontstr_end = '';
- }
+/**
+ * @param mixed $start UNDOCUMENTED
+ */
+function elapsed($start)
+{
+ $end = microtime();
+ list($start2, $start1) = explode(" ", $start);
+ list($end2, $end1) = explode(" ", $end);
+ $diff1 = $end1 - $start1;
+ $diff2 = $end2 - $start2;
+ if( $diff2 < 0 ){
+ $diff1 -= 1;
+ $diff2 += 1.0;
+ }
+ return $diff2 + $diff1;
+}
+
+function printMessageInfo($imapConnection, $t, $not_last=true, $key, $mailbox,
+ $start_msg, $where, $what) {
+ global $checkall,
+ $color, $msgs, $msort, $td_str, $msg,
+ $default_use_priority,
+ $message_highlight_list,
+ $index_order,
+ $indent_array, /* indent subject by */
+ $pos, /* Search postion (if any) */
+ $thread_sort_messages, /* thread sorting on/off */
+ $server_sort_order, /* sort value when using server-sorting */
+ $row_count,
+ $allow_server_sort, /* enable/disable server-side sorting */
+ $truncate_sender, /* number of characters for From/To field (<= 0 for unchanged) */
+ $email_address,
+ $show_recipient_instead, /* show recipient name instead of default identity */
+ $use_icons, /* indicates to use icons or text markers */
+ $icon_theme; /* icons theming */
+
+ $color_string = $color[4];
+
+ if ($GLOBALS['alt_index_colors']) {
+ if (!isset($row_count)) {
+ $row_count = 0;
+ }
+ $row_count++;
+ if ($row_count % 2) {
+ if (!isset($color[12])) {
+ $color[12] = '#EAEAEA';
+ }
+ $color_string = $color[12];
+ }
+ }
+ $msg = $msgs[$key];
- for ($i=0; $i < count($message_highlight_list); $i++) {
- if (trim($message_highlight_list[$i]['value']) != '') {
- if ($message_highlight_list[$i]['match_type'] == 'to_cc') {
- if (strpos('^^'.strtolower($msg['TO']), strtolower($message_highlight_list[$i]['value'])) || strpos('^^'.strtolower($msg['CC']), strtolower($message_highlight_list[$i]['value']))) {
- $hlt_color = $message_highlight_list[$i]['color'];
- continue;
- }
- } else if (strpos('^^'.strtolower($msg[strtoupper($message_highlight_list[$i]['match_type'])]),strtolower($message_highlight_list[$i]['value']))) {
- $hlt_color = $message_highlight_list[$i]['color'];
- continue;
+ if($mailbox == 'None') {
+ $boxes = sqimap_mailbox_list($imapConnection);
+ $mailbox = $boxes[0]['unformatted'];
+ unset($boxes);
+ }
+ $urlMailbox = urlencode($mailbox);
+
+ $bSentFolder = handleAsSent($mailbox);
+ if ((!$bSentFolder) && ($show_recipient_instead)) {
+ // If the From address is the same as $email_address, then handle as Sent
+ $from_array = parseAddress($msg['FROM'], 1);
+ if (!isset($email_address)) {
+ global $datadir, $username;
+ $email_address = getPref($datadir, $username, 'email_address');
+ }
+ $bHandleAsSent = ((isset($from_array[0][0])) && ($from_array[0][0] == $email_address));
+ }
+ else
+ $bHandleAsSent = $bSentFolder;
+ // If this is a Sent message, display To address instead of From
+ if ($bHandleAsSent)
+ $msg['FROM'] = $msg['TO'];
+ // Passing 1 below results in only 1 address being parsed, thus defeating the following code
+ $msg['FROM'] = parseAddress($msg['FROM']/*,1*/);
+
+ /*
+ * This is done in case you're looking into Sent folders,
+ * because you can have multiple receivers.
+ */
+ $senderNames = $msg['FROM'];
+ $senderName = '';
+ $senderAddress = '';
+ if (sizeof($senderNames)){
+ foreach ($senderNames as $senderNames_part) {
+ if ($senderName != '') {
+ $senderName .= ', ';
+ $senderAddress .= ', ';
}
- }
- }
+ $sender_address_part = htmlspecialchars($senderNames_part[0]);
+ $sender_name_part = str_replace(' ',' ', decodeHeader($senderNames_part[1]));
+ if ($sender_name_part) {
+ $senderName .= $sender_name_part;
+ $senderAddress .= $sender_name_part . ' <' . $sender_address_part . '>';
+ } else {
+ $senderName .= $sender_address_part;
+ $senderAddress .= $sender_address_part;
+ }
+ }
+ }
+ // If Sent, prefix with To: but only if not Sent folder
+ if ($bHandleAsSent ^ $bSentFolder) {
+ $senderName = _("To:") . ' ' . $senderName;
+ $senderAddress = _("To:") . ' ' . $senderAddress;
+ }
- if (!isset($hlt_color)) {
- $hlt_color = $color_string;
- }
+ if ($truncate_sender > 0)
+ $senderName = truncateWithEntities($senderName, $truncate_sender);
- if ($where && $what) {
- $search_stuff = '&where='.urlencode($where).'&what='.urlencode($what);
- }
+ echo html_tag( 'tr','','','','VALIGN="top"') . "\n";
- $checked = ($checkall == 1 ?' checked' : '');
+ if (isset($msg['FLAG_FLAGGED']) && ($msg['FLAG_FLAGGED'] == true)) {
+ $flag = "";
+ $flag_end = ' ';
+ } else {
+ $flag = '';
+ $flag_end = '';
+ }
+ if (!isset($msg['FLAG_SEEN']) || ($msg['FLAG_SEEN'] == false)) {
+ $bold = '';
+ $bold_end = ' ';
+ } else {
+ $bold = '';
+ $bold_end = '';
+ }
+ if ($bHandleAsSent) {
+ $italic = '';
+ $italic_end = ' ';
+ } else {
+ $italic = '';
+ $italic_end = '';
+ }
+ if (isset($msg['FLAG_DELETED']) && $msg['FLAG_DELETED']) {
+ $fontstr = "";
+ $fontstr_end = ' ';
+ } else {
+ $fontstr = '';
+ $fontstr_end = '';
+ }
+
+ if ($where && $what) {
+ $searchstr = '&where='.$where.'&what='.$what;
+ } else {
+ $searchstr = '';
+ }
- for ($i=1; $i <= count($index_order); $i++) {
- switch ($index_order[$i]) {
+ if (is_array($message_highlight_list) && count($message_highlight_list)) {
+ $msg['TO'] = parseAddress($msg['TO']);
+ $msg['CC'] = parseAddress($msg['CC']);
+ foreach ($message_highlight_list as $message_highlight_list_part) {
+ if (trim($message_highlight_list_part['value']) != '') {
+ $high_val = strtolower($message_highlight_list_part['value']);
+ $match_type = strtoupper($message_highlight_list_part['match_type']);
+ if($match_type == 'TO_CC') {
+ $match = array('TO', 'CC');
+ } else {
+ $match = array($match_type);
+ }
+ foreach($match as $match_type) {
+ switch($match_type) {
+ case('TO'):
+ case('CC'):
+ case('FROM'):
+ foreach ($msg[$match_type] as $address) {
+ $address[0] = decodeHeader($address[0], true, false);
+ $address[1] = decodeHeader($address[1], true, false);
+ if (strstr('^^' . strtolower($address[0]), $high_val) ||
+ strstr('^^' . strtolower($address[1]), $high_val)) {
+ $hlt_color = $message_highlight_list_part['color'];
+ break 4;
+ }
+ }
+ break;
+ default:
+ $headertest = strtolower(decodeHeader($msg[$match_type], true, false));
+ if (strstr('^^' . $headertest, $high_val)) {
+ $hlt_color = $message_highlight_list_part['color'];
+ break 3;
+ }
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ if (!isset($hlt_color)) {
+ $hlt_color = $color_string;
+ }
+ $checked = ($checkall == 1) ? ' CHECKED' : '';
+ $col = 0;
+ $msg['SUBJECT'] = str_replace(' ', ' ', decodeHeader($msg['SUBJECT']));
+ $subject = processSubject($msg['SUBJECT'], $indent_array[$msg['ID']]);
+ if (sizeof($index_order)) {
+ foreach ($index_order as $index_order_part) {
+ switch ($index_order_part) {
case 1: /* checkbox */
- echo " \n";
- break;
+ echo html_tag( 'td',
+ " ",
+ 'center',
+ $hlt_color );
+ break;
case 2: /* from */
- echo " $italic$bold$flag$fontstr$senderName$fontstr_end$flag_end$bold_end$italic_end \n";
- break;
+ if ($senderAddress != $senderName) {
+ $senderAddress = strtr($senderAddress, array_flip(get_html_translation_table(HTML_SPECIALCHARS)));
+ $title = ' title="' . str_replace('"', "''", $senderAddress) . '"';
+ }
+ else
+ $title = '';
+ echo html_tag( 'td',
+ $italic . $bold . $flag . $fontstr . $senderName .
+ $fontstr_end . $flag_end . $bold_end . $italic_end,
+ 'left',
+ $hlt_color, $title );
+ break;
case 3: /* date */
- echo " $bold$flag$fontstr".$msg["DATE_STRING"]."$fontstr_end$flag_end$bold_end \n";
- break;
+ $date_string = $msg['DATE_STRING'] . '';
+ if ($date_string == '') {
+ $date_string = _("Unknown date");
+ }
+ echo html_tag( 'td',
+ $bold . $flag . $fontstr . $date_string .
+ $fontstr_end . $flag_end . $bold_end,
+ 'center',
+ $hlt_color,
+ 'nowrap' );
+ break;
case 4: /* subject */
- echo " $bold";
- if (! isset($search_stuff)) { $search_stuff = ''; }
- echo "$flag$subject$flag_end $bold_end \n";
- break;
+ $td_str = $bold;
+ if ($thread_sort_messages == 1) {
+ if (isset($indent_array[$msg['ID']])) {
+ $td_str .= str_repeat(" ",$indent_array[$msg['ID']]);
+ }
+ }
+ $td_str .= '\n";
- if (isset($msg['FLAG_ANSWERED']) &&
- $msg['FLAG_ANSWERED'] == true) {
- echo "A\n";
- $stuff = true;
- }
- if ($msg['TYPE0'] == 'multipart') {
- echo "+\n";
- $stuff = true;
- }
- if ($default_use_priority) {
- if (ereg('(1|2)',substr($msg['PRIORITY'],0,1))) {
- echo "! \n";
- $stuff = true;
- }
- if (ereg('(5)',substr($msg['PRIORITY'],0,1))) {
- echo "? \n";
- $stuff = true;
- }
- }
- if (isset($msg['FLAG_DELETED']) && $msg['FLAG_DELETED']) {
- echo "D \n";
- $stuff = true;
- }
-
- if (!$stuff) echo " \n";
- echo " \n";
- break;
- case 6: /* size */
- echo " $bold$fontstr".show_readable_size($msg['SIZE'])."$fontstr_end$bold_end \n";
- break;
- }
- }
- echo " \n";
- }
-
- /**
- * 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) {
- global $msgs, $msort;
- global $sent_folder, $draft_folder;
- global $message_highlight_list;
- global $auto_expunge;
-
- /* If autoexpunge is turned on, then do it now. */
- if ($auto_expunge == true) {
- sqimap_mailbox_expunge($imapConnection, $mailbox, false);
- }
- sqimap_mailbox_select($imapConnection, $mailbox);
-
- $issent = (($mailbox == $sent_folder) || ($mailbox == $draft_folder));
- if (!$use_cache) {
- /* If it is sorted... */
- if ($num_msgs >= 1) {
- if ($sort < 6) {
- $id = range(1, $num_msgs);
- } else {
- // if it's not sorted
- 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;
- }
- }
-
- $real_startMessage = $num_msgs - $start_msg + 1;
- $real_endMessage = $num_msgs - $start_msg - $show_num + 2;
- if ($real_endMessage <= 0) {
- $real_endMessage = 1;
- }
- $id = array_reverse(range($real_endMessage, $real_startMessage));
- }
- $msgs_list = sqimap_get_small_header_list($imapConnection, $id, $issent);
- $flags = sqimap_get_flags_list($imapConnection, $id, $issent);
- foreach ($msgs_list as $hdr) {
- $from[] = $hdr->from;
- $date[] = $hdr->date;
- $subject[] = $hdr->subject;
- $to[] = $hdr->to;
- $priority[] = $hdr->priority;
- $cc[] = $hdr->cc;
- $size[] = $hdr->size;
- $type[] = $hdr->type0;
+ // icon message markers
+ //
+ if ($use_icons && $icon_theme != 'none') {
+ $td_str = "";
+ if (isset($msg['FLAG_FLAGGED']) && $msg['FLAG_FLAGGED'] == true) {
+ $td_str .= ' ';
+ }
+ if ($default_use_priority) {
+ if ( ($msg['PRIORITY'] == 1) || ($msg['PRIORITY'] == 2) ) {
+ $td_str .= ' ';
+ }
+ else if ($msg['PRIORITY'] == 5) {
+ $td_str .= ' ';
+ }
+ else
+ {
+ $td_str .= ' ';
+ }
+ }
+ if ($msg['TYPE0'] == 'multipart') {
+ $td_str .= ' ';
+ }
+ else
+ {
+ $td_str .= ' ';
+ }
+
+ $msg_icon = '';
+ if (!isset($msg['FLAG_SEEN']) || ($msg['FLAG_SEEN']) == false)
+ {
+ $msg_alt = '(' . _("New") . ')';
+ $msg_title = '(' . _("New") . ')';
+ $msg_icon .= SM_PATH . 'images/themes/' . $icon_theme . '/msg_new';
+ }
+ else
+ {
+ $msg_alt = '(' . _("Read") . ')';
+ $msg_title = '(' . _("Read") . ')';
+ $msg_icon .= SM_PATH . 'images/themes/' . $icon_theme . '/msg_read';
+ }
+ if (isset($msg['FLAG_DELETED']) && ($msg['FLAG_DELETED']) == true)
+ {
+ $msg_icon .= '_deleted';
+ }
+ if (isset($msg['FLAG_ANSWERED']) && ($msg['FLAG_ANSWERED']) == true)
+ {
+ $msg_alt = '(' . _("Answered") . ')';
+ $msg_title = '(' . _("Answered") . ')';
+ $msg_icon .= '_reply';
+ }
+ $td_str .= ' ';
+ $td_str .= ' ';
+ echo html_tag( 'td',
+ $td_str,
+ 'right',
+ $hlt_color,
+ 'nowrap' );
+ }
+
+
+ // plain text message markers
+ //
+ else {
+ $stuff = false;
+ $td_str = "";
+ if (isset($msg['FLAG_ANSWERED']) && $msg['FLAG_ANSWERED'] == true) {
+ $td_str .= _("A");
+ $stuff = true;
+ }
+ if ($msg['TYPE0'] == 'multipart') {
+ $td_str .= '+';
+ $stuff = true;
+ }
+ if ($default_use_priority) {
+ if ( ($msg['PRIORITY'] == 1) || ($msg['PRIORITY'] == 2) ) {
+ $td_str .= "! ";
+ $stuff = true;
+ }
+ if ($msg['PRIORITY'] == 5) {
+ $td_str .= "? ";
+ $stuff = true;
+ }
+ }
+ if (isset($msg['FLAG_DELETED']) && $msg['FLAG_DELETED'] == true) {
+ $td_str .= "D ";
+ $stuff = true;
+ }
+ if (!$stuff) {
+ $td_str .= ' ';
+ }
+ $td_str .= ' ';
+ echo html_tag( 'td',
+ $td_str,
+ 'center',
+ $hlt_color,
+ 'nowrap' );
+ }
+ break;
+ case 6: /* size */
+ echo html_tag( 'td',
+ $bold . $fontstr . show_readable_size($msg['SIZE']) .
+ $fontstr_end . $bold_end,
+ 'right',
+ $hlt_color );
+ break;
}
- }
-
- $j = 0;
- if ($sort == 6) {
- $end = $start_msg + $show_num - 1;
- if ($num_msgs < $show_num) {
- $end_loop = $num_msgs;
- } else if ($end > $num_msgs) {
- $end_loop = $num_msgs - $start_msg + 1;
- } else {
- $end_loop = $show_num;
- }
- } else {
+ ++$col;
+ }
+ }
+ if ($not_last) {
+ echo '' . "\n" . ' ' . "\n";
+ } else {
+ echo ''."\n";
+ }
+}
+
+function getServerMessages($imapConnection, $start_msg, $show_num, $num_msgs, $id) {
+ if ($id != 'no') {
+ $id = array_slice($id, ($start_msg-1), $show_num);
+ $end = $start_msg + $show_num - 1;
+ if ($num_msgs < $show_num) {
+ $end_loop = $num_msgs;
+ } else if ($end > $num_msgs) {
+ $end_loop = $num_msgs - $start_msg + 1;
+ } else {
+ $end_loop = $show_num;
+ }
+ return fillMessageArray($imapConnection,$id,$end_loop,$show_num);
+ } else {
+ return false;
+ }
+}
+
+function getThreadMessages($imapConnection, $start_msg, $show_num, $num_msgs) {
+ $id = get_thread_sort($imapConnection);
+ return getServerMessages($imapConnection, $start_msg, $show_num, $num_msgs, $id);
+}
+
+function getServerSortMessages($imapConnection, $start_msg, $show_num,
+ $num_msgs, $server_sort_order, $mbxresponse) {
+ $id = sqimap_get_sort_order($imapConnection, $server_sort_order,$mbxresponse);
+ return getServerMessages($imapConnection, $start_msg, $show_num, $num_msgs, $id);
+}
+
+function getSelfSortMessages($imapConnection, $start_msg, $show_num,
+ $num_msgs, $sort, $mbxresponse) {
+ $msgs = array();
+ if ($num_msgs >= 1) {
+ $id = sqimap_get_php_sort_order ($imapConnection, $mbxresponse);
+ if ($sort < 6 ) {
$end = $num_msgs;
$end_loop = $end;
- }
-
- while ($j < $end_loop) {
- if (isset($date[$j])) {
- $date[$j] = ereg_replace(' ', ' ', $date[$j]);
- $tmpdate = explode(' ', trim($date[$j]));
+ /* set shownum to 999999 to fool sqimap_get_small_header_list
+ and rebuild the msgs_str to 1:* */
+ $show_num = 999999;
+ } else {
+ /* if it's not sorted */
+ if ($start_msg + ($show_num - 1) < $num_msgs) {
+ $end_msg = $start_msg + ($show_num - 1);
} else {
- $tmpdate = $date = array("","","","","","");
+ $end_msg = $num_msgs;
}
-
- $messages[$j]['TIME_STAMP'] = getTimeStamp($tmpdate);
- $messages[$j]['DATE_STRING'] = getDateString($messages[$j]['TIME_STAMP']);
- $messages[$j]['ID'] = $id[$j];
- $messages[$j]['FROM'] = decodeHeader($from[$j]);
- $messages[$j]['FROM-SORT'] = strtolower(sqimap_find_displayable_name(decodeHeader($from[$j])));
- $messages[$j]['SUBJECT'] = decodeHeader($subject[$j]);
- $messages[$j]['SUBJECT-SORT'] = strtolower(decodeHeader($subject[$j]));
- $messages[$j]['TO'] = decodeHeader($to[$j]);
- $messages[$j]['PRIORITY'] = $priority[$j];
- $messages[$j]['CC'] = $cc[$j];
- $messages[$j]['SIZE'] = $size[$j];
- $messages[$j]['TYPE0'] = $type[$j];
-
- # fix SUBJECT-SORT to remove Re:
- $re_abbr = # Add more here!
- 'vedr|sv|' . # Danish
- 're|aw'; # English
-
- if (eregi( "^($re_abbr):[ ]*(.*)$", $messages[$j]['SUBJECT-SORT'], $regs))
- $messages[$j]['SUBJECT-SORT'] = $regs[2];
-
- $num = 0;
- while ($num < count($flags[$j])) {
- if ($flags[$j][$num] == 'Deleted') {
- $messages[$j]['FLAG_DELETED'] = true;
- } else if ($flags[$j][$num] == 'Answered') {
- $messages[$j]['FLAG_ANSWERED'] = true;
- } else if ($flags[$j][$num] == 'Seen') {
- $messages[$j]['FLAG_SEEN'] = true;
- } else if ($flags[$j][$num] == 'Flagged') {
- $messages[$j]['FLAG_FLAGGED'] = true;
- }
- $num++;
+ if ($end_msg < $start_msg) {
+ $start_msg = $start_msg - $show_num;
+ if ($start_msg < 1) {
+ $start_msg = 1;
+ }
}
- $j++;
- }
-
- /* Only ignore messages flagged as deleted if we are using a
- * trash folder or auto_expunge */
- if (((isset($move_to_trash) && $move_to_trash)
- || (isset($auto_expunge) && $auto_expunge)) && $sort != 6) {
-
- /** Find and remove the ones that are deleted */
- $i = 0;
- $j = 0;
-
- while ($j < $num_msgs) {
- if (isset($messages[$j]['FLAG_DELETED']) && $messages[$j]['FLAG_DELETED'] == true) {
- $j++;
- continue;
- }
- $msgs[$i] = $messages[$j];
-
- $i++;
- $j++;
+ $id = array_slice(array_reverse($id), ($start_msg-1), $show_num);
+ $end = $start_msg + $show_num - 1;
+ if ($num_msgs < $show_num) {
+ $end_loop = $num_msgs;
+ } else if ($end > $num_msgs) {
+ $end_loop = $num_msgs - $start_msg + 1;
+ } else {
+ $end_loop = $show_num;
}
- $num_msgs = $i;
- } else {
- if (!isset($messages)) {
- $messages = array();
- }
- $msgs = $messages;
- }
- }
+ }
+ $msgs = fillMessageArray($imapConnection,$id,$end_loop, $show_num);
+ }
+ return $msgs;
+}
- // There's gotta be messages in the array for it to sort them.
- if ($num_msgs > 0 && ! $use_cache) {
- /** 0 = Date (up) 4 = Subject (up)
- ** 1 = Date (dn) 5 = Subject (dn)
- ** 2 = Name (up)
- ** 3 = Name (dn)
- **/
- session_unregister("msgs");
- if (($sort == 0) || ($sort == 1))
- $msort = array_cleave ($msgs, 'TIME_STAMP');
- elseif (($sort == 2) || ($sort == 3))
- $msort = array_cleave ($msgs, 'FROM-SORT');
- elseif (($sort == 4) || ($sort == 5))
- $msort = array_cleave ($msgs, 'SUBJECT-SORT');
- else // ($sort == 6)
- $msort = $msgs;
-
- if ($sort < 6) {
- if ($sort % 2) {
- asort($msort);
- } else {
- arsort($msort);
+
+
+/*
+ * 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;
}
- }
- 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; }
- }
+ /* 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 = '';
+ }
- $urlMailbox = urlencode($mailbox);
+ 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 '' .
+ _("Thread sorting is not supported by your IMAP server. Please report this to the system administrator.").
+ ' ';
+ $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 '' .
+ _( "Server-side sorting is not supported by your IMAP server. Please report this to the system administrator.").
+ ' ';
+ $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');
+?>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ $show_num) {
+ } else if ($start_msg > $show_num) {
$end_msg = $show_num;
$start_msg = 1;
- }
- }
- $endVar = $end_msg + 1;
-
- /* Loop through and display the info for each message. */
- $t = 0; // $t is used for the checkbox number
- if ($num_msgs == 0) { // if there's no messages in this folder
- echo "\n".
- " ". _("THIS FOLDER IS EMPTY") ." \n".
- " ";
- } else if ($start_msg == $end_msg) {
- /* If there's only one message in the box, handle it differently. */
- if ($sort != 6) {
- $i = $start_msg;
- } else {
- $i = 1;
- }
-
- reset($msort);
- $k = 0;
- do {
- $key = key($msort);
- next($msort);
- $k++;
- } while (isset ($key) && ($k < $i));
- printMessageInfo($imapConnection, $t, $i, $key, $mailbox, $sort, $real_startMessage, 0, 0);
- } else {
- $i = $start_msg;
-
- reset($msort);
- $k = 0;
- do {
- $key = key($msort);
- next($msort);
- $k++;
- } while (isset ($key) && ($k < $i));
-
- do {
- printMessageInfo($imapConnection, $t, $i, $key, $mailbox, $sort, $real_startMessage, 0, 0);
- $key = key($msort);
- $t++;
- $i++;
- next($msort);
- } while ($i && $i < $endVar);
- }
+ }
+ }
+ $endVar = $end_msg + 1;
- echo ''.
- "" .
- "" .
- "$paginator_str ".
- "$msg_cnt_str
".
- " ".
- "
";
- /** End of message-list table */
-
- do_hook('mailbox_index_after');
- echo "\n";
- }
-
- /**
- * Displays the standard message list header. To finish the table,
- * you need to do a "";
- *
- * $moveURL is the URL to submit the delete/move form to
- * $mailbox is the current mailbox
- * $sort is the current sorting method (-1 for no sorting available [searches])
- * $Message is a message that is centered on top of the list
- * $More is a second line that is left aligned
- */
- function mail_message_listing_beginning
- ($imapConnection, $moveURL, $mailbox = '', $sort = -1,
- $msg_cnt_str = '', $paginator = ' ', $start_msg = 1) {
- global $color, $index_order, $auto_expunge, $move_to_trash;
- global $checkall, $sent_folder, $draft_folder;
- $urlMailbox = urlencode($mailbox);
-
- /****************************************************
- * This is the beginning of the message list table. *
- * It wraps around all messages *
- ****************************************************/
- echo "\n".
- "".
- "\n".
- " $paginator \n".
- ' ' . get_selectall_link($start_msg, $sort) . " \n".
- " $msg_cnt_str \n".
- "
\n".
- ' '.
- "\n".
- " '.
-
- "".
- "".
- "";
+ /*
+ * Loop through and display the info for each message.
+ * ($t is used for the checkbox number)
+ */
+ $t = 0;
+
+ /* messages display */
+
+ if (!$num_msgs) {
+ /* if there's no messages in this folder */
+ echo html_tag( 'tr',
+ html_tag( 'td',
+ "" . _("THIS FOLDER IS EMPTY") . " ",
+ 'center',
+ $color[4],
+ 'COLSPAN="' . count($index_order) . '"'
+ )
+ );
+ } elseif ($start_msg == $end_msg) {
+ /* if there's only one message in the box, handle it differently. */
+ if ($sort != 6) {
+ $i = $start_msg;
+ } else {
+ $i = 1;
+ }
+ reset($msort);
+ $k = 0;
+ do {
+ $key = key($msort);
+ next($msort);
+ $k++;
+ } while (isset ($key) && ($k < $i));
+ printMessageInfo($imapConnection, $t, true, $key, $mailbox,
+ $real_startMessage, $where, $what);
+ } else {
+ $i = $start_msg;
+ reset($msort);
+ $k = 0;
+ do {
+ $key = key($msort);
+ next($msort);
+ $k++;
+ } while (isset ($key) && ($k < $i));
+ $not_last = true;
+ do {
+ if (!$i || $i == $endVar-1) $not_last = false;
+ printMessageInfo($imapConnection, $t, $not_last, $key, $mailbox,
+ $real_startMessage, $where, $what);
+ $key = key($msort);
+ $t++;
+ $i++;
+ next($msort);
+ } while ($i && $i < $endVar);
+ }
+}
- /* Print the headers. */
- for ($i=1; $i <= count($index_order); $i++) {
- switch ($index_order[$i]) {
- case 1: /* checkbox */
- case 5: /* flags */
- echo ' ';
- break;
+/*
+ * Displays the standard message list header. To finish the table,
+ * you need to do a "
";
+ *
+ * $moveURL is the URL to submit the delete/move form to
+ * $mbxresponse is the array with the results of SELECT against the current mailbox
+ * $mailbox is the current mailbox
+ * $sort is the current sorting method (-1 for no sorting available [searches])
+ * $Message is a message that is centered on top of the list
+ * $More is a second line that is left aligned
+ */
- case 2: /* from */
- if (($mailbox == $sent_folder)
- || ($mailbox == $draft_folder)) {
- echo ' '. _("To") .' ';
- } else {
- echo ' '. _("From") .' ';
- }
+function mail_message_listing_beginning ($imapConnection,
+ $mbxresponse,
+ $mailbox = '', $sort = -1,
+ $msg_cnt_str = '',
+ $paginator = ' ',
+ $start_msg = 1) {
+ global $color, $auto_expunge, $base_uri, $show_flag_buttons,
+ $allow_server_sort, $server_sort_order,
+ $PHP_SELF, $allow_thread_sort, $thread_sort_messages;
+
+ $php_self = $PHP_SELF;
+ /* fix for incorrect $PHP_SELF */
+ if (strpos($php_self, 'move_messages.php')) {
+ $php_self = str_replace('move_messages.php', 'right_main.php', $php_self);
+ }
+ $urlMailbox = urlencode($mailbox);
- ShowSortButton($sort, $mailbox, 2, 3);
- echo " \n";
- break;
+ if (preg_match('/^(.+)\?.+$/',$php_self,$regs)) {
+ $source_url = $regs[1];
+ } else {
+ $source_url = $php_self;
+ }
- case 3: /* date */
- echo ' '. _("Date") .' ';
- ShowSortButton($sort, $mailbox, 0, 1);
- echo " \n";
- break;
+ if (!isset($msg)) {
+ $msg = '';
+ }
- case 4: /* subject */
- echo ' '. _("Subject") .' ';
- ShowSortButton($sort, $mailbox, 4, 5);
- echo " \n";
- break;
+ if (!strpos($php_self,'?')) {
+ $location = $php_self.'?mailbox=INBOX&startMessage=1';
+ } else {
+ $location = $php_self;
+ }
- case 6: /* size */
- echo ' ' . _("Size")." \n";
- break;
- }
- }
- echo "\n";
- }
-
- /*******************************************************************/
- /* This function shows the sort button. Isn't this a good comment? */
- /*******************************************************************/
- function ShowSortButton($sort, $mailbox, $Up, $Down) {
- /* Figure out which image we want to use. */
- if ($sort != $Up && $sort != $Down) {
- $img = 'sort_none.gif';
- $which = $Up;
- } elseif ($sort == $Up) {
- $img = 'up_pointer.gif';
- $which = $Down;
- } else {
- $img = 'down_pointer.gif';
- $which = 6;
+ $moveFields = ' ' .
+ ' ' .
+ ' '.
+ ' ';
+
+ /* build thread sorting links */
+ if ($allow_thread_sort == TRUE) {
+ if ($thread_sort_messages == 1 ) {
+ $set_thread = 2;
+ $thread_name = _("Unthread View");
+ } elseif ($thread_sort_messages == 0) {
+ $set_thread = 1;
+ $thread_name = _("Thread View");
}
+ $thread_link_str = '[' . $thread_name
+ . ' ] ';
+ }
+ else
+ $thread_link_str ='';
- /* Now that we have everything figured out, show the actual button. */
- echo ' ';
- }
-
- function get_selectall_link($start_msg, $sort) {
- global $checkall, $PHP_SELF, $what, $where, $mailbox, $javascript_on;
-
- if ($javascript_on) {
- $result =
- ' ' . _("Toggle All") . " \n";
- } else {
- $result .= "";
-
- if (isset($checkall) && ($checkall == '1')) {
- $result .= _("Unselect All");
- } else {
- $result .= _("Select All");
- }
-
- $result .= " \n";
- }
-
- /* Return our final result. */
- return ($result);
- }
+ /*
+ * This is the beginning of the message list table.
+ * It wraps around all messages
+ */
+ $safe_name = preg_replace("/[^0-9A-Za-z_]/", '_', $mailbox);
+ $form_name = "FormMsgs" . $safe_name;
- /**
- * This function computes the "Viewing Messages..." string.
+ echo '