X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=functions%2Fmailbox_display.php;h=f728bac07786449d2966a950c18f15ad7b363b1a;hb=3fc1a95fa49610a823d3587357b3d6123c6120ee;hp=6a1fac40057b3807268afa49836d3ef183fcabd9;hpb=e17d0c83d7c34a35e75192461e27850a1b8e102c;p=squirrelmail.git
diff --git a/functions/mailbox_display.php b/functions/mailbox_display.php
index 6a1fac40..f728bac0 100644
--- a/functions/mailbox_display.php
+++ b/functions/mailbox_display.php
@@ -16,8 +16,12 @@ 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');
-/* Default value for page_selector_max. */
+/* Constants:
+ * PG_SEL_MAX: default value for page_selector_max
+ */
define('PG_SEL_MAX', 10);
function elapsed($start)
@@ -41,12 +45,15 @@ function printMessageInfo($imapConnection, $t, $not_last=true, $key, $mailbox,
$default_use_priority,
$message_highlight_list,
$index_order,
- $indent_array, /* indent subject by */
- $pos, /* Search postion (if any) */
+ $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 */
+ $server_sort_order, /* sort value when using server-sorting */
$row_count,
- $allow_server_sort; /* enable/disable server-side sorting */
+ $allow_server_sort, /* enable/disable server-side sorting */
+ $truncate_sender, /* number of characters for From/To field (<= 0 for unchanged) */
+ $email_address;
+
$color_string = $color[4];
if ($GLOBALS['alt_index_colors']) {
@@ -70,31 +77,52 @@ function printMessageInfo($imapConnection, $t, $not_last=true, $key, $mailbox,
}
$urlMailbox = urlencode($mailbox);
- if (handleAsSent($mailbox)) {
- $msg['FROM'] = $msg['TO'];
+ $bSentFolder = handleAsSent($mailbox);
+ // 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 = ($bSentFolder) || ((isset($from_array[0][0])) && ($from_array[0][0] == $email_address));
+ // 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;
}
}
}
+ // If Sent, prefix with To: but only if not Sent folder
+ if ($bHandleAsSent ^ $bSentFolder) {
+ $senderName = _("To:") . ' ' . $senderName;
+ $senderAddress = _("To:") . ' ' . $senderAddress;
+ }
- $subject_full = decodeHeader($msg['SUBJECT']);
- $subject = processSubject($subject_full, $indent_array[$msg['ID']]);
+ if ($truncate_sender > 0)
+ $senderName = truncateWithEntities($senderName, $truncate_sender);
echo html_tag( 'tr','','','','VALIGN="top"') . "\n";
@@ -112,7 +140,7 @@ function printMessageInfo($imapConnection, $t, $not_last=true, $key, $mailbox,
$bold = '';
$bold_end = '';
}
- if (handleAsSent($mailbox)) {
+ if ($bHandleAsSent) {
$italic = '';
$italic_end = '';
} else {
@@ -132,52 +160,42 @@ function printMessageInfo($imapConnection, $t, $not_last=true, $key, $mailbox,
} else {
$searchstr = '';
}
- /**
- * AAAAH! Make my eyes stop bleeding!
- * Who wrote this?!
- */
+
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']);
- switch($match_type) {
- case('TO'):
- case('TO_CC'):
- foreach ($msg['TO'] as $address) {
- if (strstr('^^' . strtolower($address[0]), $high_val) ||
- strstr('^^' . strtolower($address[1]), $high_val)) {
- $hlt_color = $message_highlight_list_part['color'];
- continue;
+ 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;
+ }
}
- }
- if($match_type != 'TO_CC') {
break;
- }
- case('CC'):
- foreach ($msg['CC'] as $address) {
- if( strstr('^^' . strtolower($address[0]), $high_val) ||
- strstr('^^' . strtolower($address[1]), $high_val)) {
+ default:
+ $headertest = strtolower(decodeHeader($msg[$match_type], true, false));
+ if (strstr('^^' . $headertest, $high_val)) {
$hlt_color = $message_highlight_list_part['color'];
- continue;
+ break 3;
}
- }
- break;
- case('FROM'):
- foreach ($msg['FROM'] as $address) {
- if( strstr('^^' . strtolower($address[0]), $high_val) ||
- strstr('^^' . strtolower($address[1]), $high_val)) {
- $hlt_color = $message_highlight_list_part['color'];
- continue;
- }
- }
- break;
- default:
- if (strstr('^^' . strtolower($msg[$match_type]), $high_val)) {
- $hlt_color = $message_highlight_list_part['color'];
- continue;
- }
- break;
+ break;
+ }
}
}
}
@@ -188,6 +206,8 @@ function printMessageInfo($imapConnection, $t, $not_last=true, $key, $mailbox,
}
$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) {
@@ -198,11 +218,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'] . '';
@@ -226,11 +252,11 @@ function printMessageInfo($imapConnection, $t, $not_last=true, $key, $mailbox,
$td_str .= ' 0 */
$res = getEndMessage($start_msg, $show_num, $num_msgs);
@@ -497,7 +531,7 @@ function showMessagesForMailbox($imapConnection, $mailbox, $num_msgs,
mail_message_listing_end($num_msgs, $paginator_str, $msg_cnt_str, $color);
echo '';
- $t = elapsed($start);
+ //$t = elapsed($start);
//echo("elapsed time = $t seconds\n");
}
@@ -537,8 +571,8 @@ function calc_msort($msgs, $sort) {
return $msort;
}
-function fillMessageArray($imapConnection, $id, $count) {
- return sqimap_get_small_header_list($imapConnection, $id);
+function fillMessageArray($imapConnection, $id, $count, $show_num=false) {
+ return sqimap_get_small_header_list($imapConnection, $id, $show_num);
}
@@ -675,7 +709,9 @@ function mail_message_listing_beginning ($imapConnection,
* This is the beginning of the message list table.
* It wraps around all messages
*/
- echo ' '
- , '', '', '' )
+ , '', '', '' ) . html_tag( 'td', _("Bypass Trash") . '','right','','')
+
, '', '', '' );
}
@@ -871,8 +908,9 @@ function ShowSortButton($sort, $mailbox, $Up, $Down ) {
/* Now that we have everything figured out, show the actual button. */
echo '
';
+ . '">
';
}
function get_selectall_link($start_msg, $sort) {
@@ -881,18 +919,23 @@ function get_selectall_link($start_msg, $sort) {
$result = '';
if ($javascript_on) {
+ $safe_name = preg_replace("/[^0-9A-Za-z_]/", '_', $mailbox);
+ $func_name = "CheckAll" . $safe_name;
+ $form_name = "FormMsgs" . $safe_name;
$result = '' . _("Toggle All")
+ . '' . _("Toggle All")
+/* . '' . _("Toggle All")*/
. "\n";
} else {
if (strpos($PHP_SELF, "?")) {
@@ -1169,59 +1212,66 @@ function get_paginator_str($box, $start_msg, $end_msg, $num_msgs,
return ($result);
}
-function processSubject($subject, $threadlevel = 0) {
- global $languages, $squirrelmail_language;
- /* Shouldn't ever happen -- caught too many times in the IMAP functions */
- if ($subject == '')
- return _("(no subject)");
-
- $trim_at = 55;
-
- /* if this is threaded, subtract two chars per indentlevel */
- if($threadlevel > 0 && $threadlevel <= 10)
- $trim_at -= (2*$threadlevel);
-
- if (strlen($subject) <= $trim_at)
+function truncateWithEntities($subject, $trim_at)
+{
+ $ent_strlen = strlen($subject);
+ if (($trim_at <= 0) || ($ent_strlen <= $trim_at))
return $subject;
- $ent_strlen = $orig_len = strlen($subject);
- $trim_val = $trim_at - 5;
- $ent_offset = 0;
+ global $languages, $squirrelmail_language;
+
/*
* see if this is entities-encoded string
* If so, Iterate through the whole string, find out
* the real number of characters, and if more
- * than 55, substr with an updated trim value.
+ * than $trim_at, substr with an updated trim value.
*/
- $step = $ent_loc = 0;
+ $trim_val = $trim_at;
+ $ent_offset = 0;
+ $ent_loc = 0;
while ( $ent_loc < $trim_val && (($ent_loc = strpos($subject, '&', $ent_offset)) !== false) &&
(($ent_loc_end = strpos($subject, ';', $ent_loc+3)) !== false) ) {
$trim_val += ($ent_loc_end-$ent_loc);
$ent_offset = $ent_loc_end+1;
- ++$step;
}
-
- if (($trim_val > 50) && (strlen($subject) > ($trim_val))&& (strpos($subject,';',$trim_val) < ($trim_val +6))) {
+ if (($trim_val > $trim_at) && ($ent_strlen > $trim_val) && (strpos($subject,';',$trim_val) < ($trim_val + 6))) {
$i = strpos($subject,';',$trim_val);
if ($i) {
$trim_val = strpos($subject,';',$trim_val);
}
}
- if ($ent_strlen <= $trim_at){
+ // only print '...' when we're actually dropping part of the subject
+ if ($ent_strlen <= $trim_val)
return $subject;
- }
if (isset($languages[$squirrelmail_language]['XTRA_CODE']) &&
function_exists($languages[$squirrelmail_language]['XTRA_CODE'])) {
return $languages[$squirrelmail_language]['XTRA_CODE']('strimwidth', $subject, $trim_val);
}
- return substr($subject, 0, $trim_val) . '...';
+
+ return substr_replace($subject, '...', $trim_val);
+}
+
+function processSubject($subject, $threadlevel = 0) {
+ /* Shouldn't ever happen -- caught too many times in the IMAP functions */
+ if ($subject == '') {
+ return _("(no subject)");
+ }
+
+ global $truncate_subject; /* number of characters for Subject field (<= 0 for unchanged) */
+ $trim_at = $truncate_subject;
+
+ /* if this is threaded, subtract two chars per indentlevel */
+ if (($threadlevel > 0) && ($threadlevel <= 10))
+ $trim_at -= (2*$threadlevel);
+
+ return truncateWithEntities($subject, $trim_at);
}
-function getMbxList($imapConnection) {
+function getMbxList($imapConnection, $boxes = 0) {
global $lastTargetMailbox;
echo ' ';
}