* Moved subject handling code into its own function.
authorfidian <fidian@7612ce4b-ef26-0410-bec9-ea0150e637f0>
Fri, 9 Feb 2001 19:40:51 +0000 (19:40 +0000)
committerfidian <fidian@7612ce4b-ef26-0410-bec9-ea0150e637f0>
Fri, 9 Feb 2001 19:40:51 +0000 (19:40 +0000)
* Hopefully simplified the entity-checking loop.

git-svn-id: https://svn.code.sf.net/p/squirrelmail/code/trunk/squirrelmail@1097 7612ce4b-ef26-0410-bec9-ea0150e637f0

functions/mailbox_display.php

index ddbb61298993fa2fd523b8449f0325b4419712ee..44f502f0fe53a7cb9e69dcf8f6544ed63ba20a37 100644 (file)
@@ -22,9 +22,7 @@
 
       $senderName = sqimap_find_displayable_name($msg['FROM']);
       $urlMailbox = urlencode($mailbox);
-      $subject = trim($msg['SUBJECT']);
-      if ($subject == '')
-         $subject = _("(no subject)");
+      $subject = processSubject($msg['SUBJECT']);
 
       echo "<TR>\n";
 
                    if (! isset($search_stuff)) { $search_stuff = ''; }
                echo "<a href=\"read_body.php?mailbox=$urlMailbox&passed_id=".$msg["ID"]."&startMessage=$startMessage&show_more=0$search_stuff\"";
                do_hook("subject_link");
-               echo ">$flag";
-               if (strlen($subject) > 55){
-                 $ent_strlen=strlen($subject);
-                 $trim_val=50;
-                 // see if this is entities-encoded string
-                 if (is_int(strpos($subject, "&#"))){
-                   // Yes. Iterate through the whole string, find out
-                   // the real number of characters, and if more
-                   // than 55, substr with an updated trim value.
-                   $ent_offset=0;
-                   $ent_count=0;
-                   do {
-                     $ent_loc = strpos($subject, "&#", $ent_offset);
-                     $ent_loc_end = strpos($subject, ";", $ent_offset);
-                     if ($ent_loc_end){
-                       $trim_val += ($ent_loc_end-$ent_loc)+1;
-                       $ent_strlen -= $ent_loc_end-$ent_loc;
-                       $ent_offset = $ent_loc_end+1;
-                       $ent_count++;
-                     } else $ent_loc=false;
-                   } while (is_int($ent_loc));
-                 }
-                 if ($ent_strlen>55) echo substr($subject, 0, $trim_val) . '...';
-                else echo $subject;
-               } else echo $subject;
-               
-              echo "$flag_end</a>$bold_end</td>\n";
+               echo ">$flag$subject$flag_end</a>$bold_end</td>\n";
                break;
             case 5: # flags
                $stuff = false;
            echo _("Select All");
        echo "</A>\n";
    }
-   
+
+   function processSubject($subject)
+   {
+      // Shouldn't ever happen -- caught too many times in the IMAP functions
+      if ($subject == '')
+          return _("(no subject)");
+         
+      if (strlen($subject) <= 55)
+          return $subject;
+         
+      $ent_strlen=strlen($subject);
+      $trim_val=50;
+      $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 55, substr with an updated trim value.
+      while (($ent_loc = strpos($subject, '&', $ent_offset)) !== false &&
+             ($ent_loc_end = strpos($subject, ';', $ent_loc)) !== false)
+      {
+        $trim_val += ($ent_loc_end-$ent_loc)+1;
+        $ent_strlen -= $ent_loc_end-$ent_loc;
+        $ent_offset = $ent_loc_end+1;
+      }
+      
+      if ($ent_strlen <= 55)
+          return $subject;
+
+      return substr($subject, 0, $trim_val) . '...';
+   }
+
 ?>