Same story as THREAD fix. Skip the unsollicited responses
[squirrelmail.git] / functions / mailbox_display.php
index efce2944c4773bddd1000a677778ad4a1807467b..c746a0aa96511be711ddd0759a3a5f0196a627d6 100644 (file)
@@ -17,8 +17,12 @@ require_once(SM_PATH . 'functions/html.php');
 require_once(SM_PATH . 'class/html.class.php');
 require_once(SM_PATH . 'functions/imap_mailbox.php');
 
-/* Default value for page_selector_max. */
+/* Constants:
+ *   PG_SEL_MAX:   default value for page_selector_max
+ *   SUBJ_TRIM_AT: the length at which we trim off subjects
+ */
 define('PG_SEL_MAX', 10);
+define('SUBJ_TRIM_AT', 55);
 
 function elapsed($start)
 {
@@ -74,7 +78,7 @@ function printMessageInfo($imapConnection, $t, $not_last=true, $key, $mailbox,
        $msg['FROM'] = $msg['TO'];
     }
     $msg['FROM'] = parseAddress($msg['FROM'],1);
-    
+
        /*
         * This is done in case you're looking into Sent folders,
         * because you can have multiple receivers.
@@ -94,10 +98,7 @@ function printMessageInfo($imapConnection, $t, $not_last=true, $key, $mailbox,
             }
         }
     }
-
-    $msg['SUBJECT'] = decodeHeader($msg['SUBJECT']);
-    $subject = processSubject($msg['SUBJECT'], $indent_array[$msg['ID']]);
-    
+    $senderName = str_replace(' ',' ',$senderName);
     echo html_tag( 'tr','','','','VALIGN="top"') . "\n";
 
     if (isset($msg['FLAG_FLAGGED']) && ($msg['FLAG_FLAGGED'] == true)) {
@@ -134,7 +135,7 @@ function printMessageInfo($imapConnection, $t, $not_last=true, $key, $mailbox,
     } else {
         $searchstr = '';
     }
-    
+
     if (is_array($message_highlight_list) && count($message_highlight_list)) {
         $msg['TO'] = parseAddress($msg['TO']);
         $msg['CC'] = parseAddress($msg['CC']);
@@ -153,8 +154,8 @@ function printMessageInfo($imapConnection, $t, $not_last=true, $key, $mailbox,
                         case('CC'):
                         case('FROM'):
                             foreach ($msg[$match_type] as $address) {
-                                $address[0] = decodeHeader($address[0]);
-                                $address[1] = decodeHeader($address[1]);
+                                $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'];
@@ -163,7 +164,8 @@ function printMessageInfo($imapConnection, $t, $not_last=true, $key, $mailbox,
                             }
                             break;
                         default:
-                            if (strstr('^^' . strtolower($msg[$match_type]), $high_val)) {
+                            $headertest = strtolower(decodeHeader($msg[$match_type], true, false));
+                            if (strstr('^^' . $headertest, $high_val)) {
                                 $hlt_color = $message_highlight_list_part['color'];
                                 break 3; 
                             }
@@ -179,6 +181,9 @@ function printMessageInfo($imapConnection, $t, $not_last=true, $key, $mailbox,
     }
     $checked = ($checkall == 1) ? ' CHECKED' : '';
     $col = 0;
+    $msg['SUBJECT'] = 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) {
@@ -217,7 +222,7 @@ function printMessageInfo($imapConnection, $t, $not_last=true, $key, $mailbox,
                 $td_str .= '<a href="read_body.php?mailbox='.$urlMailbox
                         .  '&amp;passed_id='. $msg["ID"]
                         .  '&amp;startMessage='.$start_msg.$searchstr.'"';
-                $td_str .= ' ' .concat_hook_function('subject_link'); 
+                $td_str .= ' ' .concat_hook_function('subject_link', array($start_msg, $searchstr));
                 if ($subject != $msg['SUBJECT']) {
                     $title = get_html_translation_table(HTML_SPECIALCHARS);
                     $title = array_flip($title);
@@ -419,8 +424,7 @@ function showMessagesForMailbox($imapConnection, $mailbox, $num_msgs,
            sqgetGlobalVar('msort', $msort, SQ_SESSION);
        } else {
            sqsession_unregister('msort');
-           sqsession_unregister('msgs');
-       }
+           sqsession_unregister('msgs');       }
         switch ($mode) {
             case 'thread':
                 $id   = get_thread_sort($imapConnection);
@@ -675,7 +679,9 @@ function mail_message_listing_beginning ($imapConnection,
      * This is the beginning of the message list table.
      * It wraps around all messages
      */
-    echo '<form name="messageList" method="post" action="move_messages.php">' ."\n"
+    $safe_name = preg_replace("/[^0-9A-Za-z_]/", '_', $mailbox);
+    $form_name = "FormMsgs" . $safe_name;
+    echo '<form name="' . $form_name . '" method="post" action="move_messages.php">' ."\n"
        . $moveFields
         . html_tag( 'table' ,
             html_tag( 'tr',
@@ -717,7 +723,7 @@ function mail_message_listing_beginning ($imapConnection,
         echo getButton('SUBMIT', 'expungeButton',_("Expunge"))
              .'&nbsp;' . _("mailbox") . "\n";
     }
-
+    do_hook('mailbox_display_buttons');
     echo getButton('SUBMIT', 'markRead',_("Read"));
     echo getButton('SUBMIT', 'markUnread',_("Unread"));
     echo getButton('SUBMIT', 'delete',_("Delete")) ."&nbsp;\n";
@@ -871,8 +877,9 @@ function ShowSortButton($sort, $mailbox, $Up, $Down ) {
     /* Now that we have everything figured out, show the actual button. */
     echo ' <a href="' . $source_url .'?newsort=' . $which
          . '&amp;startMessage=1&amp;mailbox=' . urlencode($mailbox)
-         . '"><IMG SRC="../images/' . $img
-         . '" BORDER=0 WIDTH=12 HEIGHT=10 ALT="sort"></a>';
+         . '"><img src="../images/' . $img
+         . '" border="0" width="12" height="10" alt="sort" title="'
+         . _("Click here to change the sorting of the message list") .'"></a>';
 }
 
 function get_selectall_link($start_msg, $sort) {
@@ -881,18 +888,22 @@ 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 = '<script language="JavaScript" type="text/javascript">'
                 . "\n<!-- \n"
-                . "function CheckAll() {\n"
-                . "  for (var i = 0; i < document.messageList.elements.length; i++) {\n"
-                . "    if(document.messageList.elements[i].type == 'checkbox'){\n"
-                . "      document.messageList.elements[i].checked = "
-                . "        !(document.messageList.elements[i].checked);\n"
+                . "function " . $func_name . "() {\n"
+                . "  for (var i = 0; i < document." . $form_name . ".elements.length; i++) {\n"
+                . "    if(document." . $form_name . ".elements[i].type == 'checkbox'){\n"
+                . "      document." . $form_name . ".elements[i].checked = "
+                . "        !(document." . $form_name . ".elements[i].checked);\n"
                 . "    }\n"
                 . "  }\n"
                 . "}\n"
                 . "//-->\n"
-                . '</script><a href="#" onClick="CheckAll();">' . _("Toggle All")
+                . '</script><a href="javascript:void(0)" onClick="' . $func_name . '();">' . _("Toggle All")
+/*                . '</script><a href="javascript:' . $func_name . '()">' . _("Toggle All")*/
                 . "</a>\n";
     } else {
         if (strpos($PHP_SELF, "?")) {
@@ -1172,17 +1183,20 @@ function get_paginator_str($box, $start_msg, $end_msg, $num_msgs,
 function processSubject($subject, $threadlevel = 0) {
     global $languages, $squirrelmail_language;
     /* Shouldn't ever happen -- caught too many times in the IMAP functions */
-    if ($subject == '')
+    if ($subject == '') {
         return _("(no subject)");
+    }
 
-    $trim_at = 55;
+    $trim_at = SUBJ_TRIM_AT;
 
     /* if this is threaded, subtract two chars per indentlevel */
-    if($threadlevel > 0 && $threadlevel <= 10)
+    if($threadlevel > 0 && $threadlevel <= 10) {
         $trim_at -= (2*$threadlevel);
+    }
 
-    if (strlen($subject) <= $trim_at)
+    if (strlen($subject) <= $trim_at) {
         return $subject;
+    }
 
     $ent_strlen = $orig_len = strlen($subject);
     $trim_val = $trim_at - 5;
@@ -1215,7 +1229,13 @@ function processSubject($subject, $threadlevel = 0) {
         function_exists($languages[$squirrelmail_language]['XTRA_CODE'])) {
         return $languages[$squirrelmail_language]['XTRA_CODE']('strimwidth', $subject, $trim_val);
     }
-    return substr($subject, 0, $trim_val) . '...';
+
+    // only print '...' when we're actually dropping part of the subject
+    if(strlen($subject) <= $trim_val) {
+        return $subject;
+    } else {
+        return substr($subject, 0, $trim_val) . '...';
+    }
 }
 
 function getMbxList($imapConnection) {