X-Git-Url: https://vcs.fsf.org/?p=squirrelmail.git;a=blobdiff_plain;f=functions%2Fmailbox_display.php;h=6e93c81ec2ac3ed07dbeaa976740033140bcc3a4;hp=2f14e7b13e64c7c629583e70c3f261e79966bf40;hb=6395c46db0a732860324fa43886b6ca806ad2588;hpb=6c540963c77709619a0670cc733249c8a4162c30
diff --git a/functions/mailbox_display.php b/functions/mailbox_display.php
index 2f14e7b1..6e93c81e 100644
--- a/functions/mailbox_display.php
+++ b/functions/mailbox_display.php
@@ -10,20 +10,25 @@
* table row that has sender, date, subject, etc...
*
* $Id$
+ * @package squirrelmail
*/
+/** 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');
-/* Constants:
- * PG_SEL_MAX: default value for page_selector_max
- * SUBJ_TRIM_AT: the length at which we trim off subjects
+/**
+ * default value for page_selector_max
*/
define('PG_SEL_MAX', 10);
-define('SUBJ_TRIM_AT', 55);
+/**
+ * @param mixed $start UNDOCUMENTED
+ */
function elapsed($start)
{
$end = microtime();
@@ -51,7 +56,11 @@ function printMessageInfo($imapConnection, $t, $not_last=true, $key, $mailbox,
$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) */
+ $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];
@@ -76,36 +85,57 @@ function printMessageInfo($imapConnection, $t, $not_last=true, $key, $mailbox,
}
$urlMailbox = urlencode($mailbox);
- if (handleAsSent($mailbox)) {
- $msg['FROM'] = $msg['TO'];
+ $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));
}
- $msg['FROM'] = parseAddress($msg['FROM'],1);
+ 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 .= ', ';
}
- if ($senderNames_part[1]) {
- $senderName .= decodeHeader($senderNames_part[1]);
+ $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 .= htmlspecialchars($senderNames_part[0]);
+ $senderName .= $sender_address_part;
+ $senderAddress .= $sender_address_part;
}
}
}
- $senderName = str_replace(' ',' ',$senderName);
-
- if ( $truncate_sender > 0 && strlen($senderName) > $truncate_sender ) {
- $senderName = substr_replace($senderName, '... ', $truncate_sender);
+ // 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)) {
@@ -122,7 +152,7 @@ function printMessageInfo($imapConnection, $t, $not_last=true, $key, $mailbox,
$bold = '';
$bold_end = '';
}
- if (handleAsSent($mailbox)) {
+ if ($bHandleAsSent) {
$italic = '';
$italic_end = '';
} else {
@@ -188,9 +218,8 @@ function printMessageInfo($imapConnection, $t, $not_last=true, $key, $mailbox,
}
$checked = ($checkall == 1) ? ' CHECKED' : '';
$col = 0;
- $msg['SUBJECT'] = decodeHeader($msg['SUBJECT']);
+ $msg['SUBJECT'] = str_replace(' ', ' ', decodeHeader($msg['SUBJECT']));
$subject = processSubject($msg['SUBJECT'], $indent_array[$msg['ID']]);
- $subject = str_replace(' ',' ',$subject);
if (sizeof($index_order)) {
foreach ($index_order as $index_order_part) {
switch ($index_order_part) {
@@ -201,11 +230,17 @@ function printMessageInfo($imapConnection, $t, $not_last=true, $key, $mailbox,
$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 );
+ $hlt_color, $title );
break;
case 3: /* date */
$date_string = $msg['DATE_STRING'] . '';
@@ -241,41 +276,102 @@ function printMessageInfo($imapConnection, $t, $not_last=true, $key, $mailbox,
echo html_tag( 'td', $td_str, 'left', $hlt_color );
break;
case 5: /* flags */
- $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;
+ // 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_icon .= '_reply';
+ }
+ $td_str .= '';
+ $td_str .= '';
+ echo html_tag( 'td',
+ $td_str,
+ 'right',
+ $hlt_color,
+ 'nowrap' );
}
- if ($default_use_priority) {
- if ( ($msg['PRIORITY'] == 1) || ($msg['PRIORITY'] == 2) ) {
- $td_str .= "!";
+
+
+ // 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['PRIORITY'] == 5) {
- $td_str .= "?";
+ 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' );
}
- if (isset($msg['FLAG_DELETED']) && $msg['FLAG_DELETED'] == true) {
- $td_str .= "D";
- $stuff = true;
- }
- if (!$stuff) {
- $td_str .= ' ';
- }
- do_hook("msg_envelope");
- $td_str .= '';
- echo html_tag( 'td',
- $td_str,
- 'center',
- $hlt_color,
- 'nowrap' );
break;
case 6: /* size */
echo html_tag( 'td',
@@ -434,8 +530,7 @@ function showMessagesForMailbox($imapConnection, $mailbox, $num_msgs,
sqsession_unregister('msgs'); }
switch ($mode) {
case 'thread':
- $id = get_thread_sort($imapConnection);
- $msgs = getServerMessages($imapConnection, $start_msg, $show_num, $num_msgs, $id);
+ $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.").
@@ -448,8 +543,8 @@ function showMessagesForMailbox($imapConnection, $mailbox, $num_msgs,
}
break;
case 'serversort':
- $id = sqimap_get_sort_order($imapConnection, $sort, $mbxresponse);
- $msgs = getServerMessages($imapConnection, $start_msg, $show_num, $num_msgs, $id);
+ $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.").
@@ -486,28 +581,41 @@ function showMessagesForMailbox($imapConnection, $mailbox, $num_msgs,
$msg_cnt_str = get_msgcnt_str($start_msg, $end_msg, $num_msgs);
do_hook('mailbox_index_before');
- echo '