Fix from stable that should have gone in here too.
[squirrelmail.git] / functions / mailbox_display.php
index 34dd89de69dbb1d5623c5dff7b2a5f6ed7acb921..e3539e0be1c0e09d0bd4fe45607c21e43d15aff8 100644 (file)
  * 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');
@@ -19,13 +21,14 @@ 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();
@@ -54,7 +57,8 @@ function printMessageInfo($imapConnection, $t, $not_last=true, $key, $mailbox,
            $row_count,
            $allow_server_sort,    /* enable/disable server-side sorting */
            $truncate_sender,      /* number of characters for From/To field (<= 0 for unchanged) */
-           $email_address;
+           $email_address,
+           $show_recipient_instead;    /* show recipient name instead of default identity */
 
     $color_string = $color[4];
 
@@ -80,13 +84,17 @@ function printMessageInfo($imapConnection, $t, $not_last=true, $key, $mailbox,
     $urlMailbox = urlencode($mailbox);
 
     $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');
+    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));
     }
-    $bHandleAsSent = ($bSentFolder) || ((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'];
@@ -759,7 +767,7 @@ function mail_message_listing_beginning ($imapConnection,
     echo getButton('SUBMIT', 'markRead',_("Read"));
     echo getButton('SUBMIT', 'markUnread',_("Unread"));
     echo getButton('SUBMIT', 'delete',_("Delete")) ."&nbsp;\n";
-    if (!strpos($php_self,'mailbox')) {
+    if (!strpos($php_self,'?')) {
         $location = $php_self.'?mailbox=INBOX&amp;startMessage=1';
     } else {
         $location = $php_self;
@@ -1105,8 +1113,8 @@ function get_paginator_str($box, $start_msg, $end_msg, $num_msgs,
             /* Adjust if the first and second quarters intersect. */
             } else if (($cur_pg - $q2_pgs - ceil($q2_pgs/3)) <= $q1_pgs) {
                 $extra_pgs = $q2_pgs;
-                $extra_pgs -= ceil(($cur_pg - $q1_pgs - 1) * 0.75);
-                $q2_pgs = ceil(($cur_pg - $q1_pgs - 1) * 0.75);
+                $extra_pgs -= ceil(($cur_pg - $q1_pgs - 1) * 3/4);
+                $q2_pgs = ceil(($cur_pg - $q1_pgs - 1) * 3/4);
                 $q3_pgs += ceil($extra_pgs / 2);
                 $q4_pgs += floor($extra_pgs / 2);
 
@@ -1121,8 +1129,8 @@ function get_paginator_str($box, $start_msg, $end_msg, $num_msgs,
             /* Adjust if the third and fourth quarter intersect. */
             } else if (($cur_pg + $q3_pgs + 1) >= ($tot_pgs - $q4_pgs + 1)) {
                 $extra_pgs = $q3_pgs;
-                $extra_pgs -= ceil(($tot_pgs - $cur_pg - $q4_pgs) * 0.75);
-                $q3_pgs = ceil(($tot_pgs - $cur_pg - $q4_pgs) * 0.75);
+                $extra_pgs -= ceil(($tot_pgs - $cur_pg - $q4_pgs) * 3/4);
+                $q3_pgs = ceil(($tot_pgs - $cur_pg - $q4_pgs) * 3/4);
                 $q1_pgs += floor($extra_pgs / 2);
                 $q2_pgs += ceil($extra_pgs / 2);
             }
@@ -1216,50 +1224,42 @@ function get_paginator_str($box, $start_msg, $end_msg, $num_msgs,
 
 function truncateWithEntities($subject, $trim_at)
 {
-    if (($trim_at == 0) || (strlen($subject) <= $trim_at))
+    $ent_strlen = strlen($subject);
+    if (($trim_at <= 0) || ($ent_strlen <= $trim_at))
         return $subject;
 
     global $languages, $squirrelmail_language;
 
-    $ent_strlen = $orig_len = strlen($subject);
-    $trim_val = $trim_at - 5;
-    $ent_offset = 0;
     /*
      * 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 $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 > ($trim_at - 5)) && (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);
     }
 
-    // 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) . '...';
-        return substr_replace($subject, '...', $trim_val);
-    }
+    return substr_replace($subject, '...', $trim_val);
 }
 
 function processSubject($subject, $threadlevel = 0) {
@@ -1268,7 +1268,8 @@ function processSubject($subject, $threadlevel = 0) {
         return _("(no subject)");
     }
 
-    $trim_at = SUBJ_TRIM_AT;
+    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))
@@ -1312,6 +1313,7 @@ function getEndMessage($start_msg, $show_num, $num_msgs) {
     return (array($start_msg,$end_msg));
 }
 
+// This should go in imap_mailbox.php
 function handleAsSent($mailbox) {
     global $handleAsSent_result;