Added Length of Subject as Display Option (default 50, as before).
[squirrelmail.git] / functions / mailbox_display.php
index e04e0248c4c8c45620861e32a0accfce213c5d7b..f728bac07786449d2966a950c18f15ad7b363b1a 100644 (file)
@@ -21,10 +21,8 @@ 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
  */
 define('PG_SEL_MAX', 10);
-define('SUBJ_TRIM_AT', 55);
 
 function elapsed($start)
 {
@@ -123,9 +121,8 @@ function printMessageInfo($imapConnection, $t, $not_last=true, $key, $mailbox,
         $senderAddress = _("To:") . ' ' . $senderAddress;
     }
 
-    if ( $truncate_sender > 0 && strlen($senderName) > $truncate_sender ) {
-       $senderName = substr_replace($senderName, '... ', $truncate_sender);
-    }
+    if ($truncate_sender > 0)
+       $senderName = truncateWithEntities($senderName, $truncate_sender);
 
     echo html_tag( 'tr','','','','VALIGN="top"') . "\n";
 
@@ -1215,62 +1212,60 @@ 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 = SUBJ_TRIM_AT;
-
-    /* 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);
     }
 
-    // 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);
+}
+
+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, $boxes = 0) {