';
} 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 ($truncate_sender > 0)
$senderName = truncateWithEntities($senderName, $truncate_sender);
echo html_tag( 'tr','','','','VALIGN="top"') . "\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 = '';
}
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 = '';
}
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;
}
$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 html_tag( 'td',
addCheckBox("msg[$t]", $checkall, $msg['ID']),
'center',
$hlt_color );
break;
case 2: /* from */
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 */
$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 */
$td_str = $bold;
if ($thread_sort_messages == 1) {
if (isset($indent_array[$msg['ID']])) {
$td_str .= str_repeat(" ",$indent_array[$msg['ID']]);
}
}
$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;
}
++$col;
}
}
if ($not_last) {
echo '' . "\n" . ' |
' . "\n";
} else {
echo ''."\n";
}
}
/**
* FIXME: Undocumented function
*
* @param mixed $imapConnection
* @param mixed $start_msg
* @param mixed $show_num
* @param mixed $num_msgs
* @param mixed $id
* @return array
*/
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;
}
}
/**
* FIXME: Undocumented function
*
* @param mixed $imapConnection
* @param mixed $start_msg
* @param mixed $show_num
* @param mixed $num_msgs
* @return array
*/
function getThreadMessages($imapConnection, $start_msg, $show_num, $num_msgs) {
$id = get_thread_sort($imapConnection);
return getServerMessages($imapConnection, $start_msg, $show_num, $num_msgs, $id);
}
/**
* FIXME: Undocumented function
*
* @param mixed $imapConnection
* @param mixed $start_msg
* @param mixed $show_num
* @param mixed $num_msgs
* @param mixed $server_sort_order
* @param mixed $mbxresponse
* @return array
*/
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);
}
/**
* FIXME: Undocumented function
*
* @param mixed $imapConnection
* @param mixed $start_msg
* @param mixed $show_num
* @param mixed $num_msgs
* @param mixed $sort
* @param mixed $mbxresponse
* @return array
*/
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;
/* 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 {
$end_msg = $num_msgs;
}
if ($end_msg < $start_msg) {
$start_msg = $start_msg - $show_num;
if ($start_msg < 1) {
$start_msg = 1;
}
}
$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;
}
}
$msgs = fillMessageArray($imapConnection,$id,$end_loop, $show_num);
}
return $msgs;
}
/**
* This function loops through a group of messages in the mailbox
* and shows them to the user.
*
* @param mixed $imapConnection
* @param string $mailbox mail folder
* @param mixed $num_msgs
* @param mixed $start_msg
* @param mixed $sort
* @param mixed $color
* @param mixed $show_num
* @param mixed $use_cache
* @param mixed $mode
*/
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 = '';
}
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) {
$end_msg = $show_num;
$start_msg = 1;
}
}
$endVar = $end_msg + 1;
/*
* 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);
}
}
/**
* Displays the standard message list header.
*
* To finish the table, you need to do a "";
*
* @param mixed $imapConnection
* @param array $mbxresponse the array with the results of SELECT against the current mailbox
* @param string $mailbox the current mailbox
* @param mixed $sort the current sorting method (-1 for no sorting available [searches])
* @param mixed $msg_cnt_str
* @param mixed $paginator
* @param mixed $start_msg
*/
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);
if (preg_match('/^(.+)\?.+$/',$php_self,$regs)) {
$source_url = $regs[1];
} else {
$source_url = $php_self;
}
if (!isset($msg)) {
$msg = '';
}
if (!strpos($php_self,'?')) {
$location = $php_self.'?mailbox=INBOX&startMessage=1';
} else {
$location = $php_self;
}
$moveFields = addHidden('msg', $msg).
addHidden('mailbox', $mailbox).
addHidden('startMessage', $start_msg).
addHidden('location', $location);
/* 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 ='';
/*
* 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;
echo '