phase 1 of interface improvements -- alternating row colors (needs some work)
[squirrelmail.git] / functions / mailbox_display.php
index 1e4b69c82c6697d464a9b835cfe228030ce32c89..ed3bf981cea18c8d67dc06888251f373d531cdf2 100644 (file)
       global $message_highlight_list;
       global $index_order;
 
+      if (!isset($GLOBALS["row_count"])) {
+        $GLOBALS["row_count"] = 0;
+      }
+      $GLOBALS["row_count"]++;
+      if ($GLOBALS["row_count"] % 2) {
+        if (!isset($color[12])) $color[12] = "#EAEAEA";
+        $color_string = $color[12];
+      } else {
+        $color_string = $color[4];
+      }
+
       $msg = $msgs[$key];
 
       $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";
 
@@ -84,7 +93,7 @@
       }
 
       if (!isset($hlt_color))
-         $hlt_color = $color[4];
+         $hlt_color = $color_string;
 
       if ($where && $what) {
          $search_stuff = '&where='.urlencode($where).'&what='.urlencode($what);
                    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)
-                   echo substr($subject, 0, 50) . '...';
-               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 '<table width="100%" cellpadding="0" cellspacing="0" border="0"><tr><td>';
       echo "$More</td><td align=right>\n";
       if (!$startMessage) $startMessage=1;
-      if ( $checkall == '1')
-         echo "\n<A HREF=\"right_main.php?mailbox=$urlMailbox&startMessage=$real_startMessage&sort=$sort\">" . _("Unselect All") . "</A>\n";
-      else
-         echo "\n<A HREF=\"right_main.php?mailbox=$urlMailbox&startMessage=$real_startMessage&sort=$sort&checkall=1\">" . _("Select All") . "</A>\n";
+      ShowSelectAllLink($startMessage, $sort);
 
       echo '</td></tr></table>';
       echo '</td></tr>';
       global $color, $index_order, $auto_expunge, $move_to_trash;
       global $checkall, $sent_folder;
       $urlMailbox = urlencode($mailbox);
-
          /** This is the beginning of the message list table.  It wraps around all messages */
       echo '<TABLE WIDTH="100%" BORDER="0" CELLPADDING="2" CELLSPACING="0">';
 
       echo "<TR BGCOLOR=\"$color[4]\"><TD>";
       echo '<table width="100%" cellpadding="0" cellspacing="0" border="0"><tr><td>';
       echo "$More</td><td align=right>\n";
-      if ( $checkall == '1')
-         echo "\n<A HREF=\"right_main.php?mailbox=$urlMailbox&startMessage=$startMessage&sort=$sort\">" . _("Unselect All") . "</A>\n";
-      else
-         echo "\n<A HREF=\"right_main.php?mailbox=$urlMailbox&startMessage=$startMessage&sort=$sort&checkall=1\">" . _("Select All") . "</A>\n";
+      ShowSelectAllLink($startMessage, $sort);
 
       echo '</td></tr></table>';
       echo '</td></tr>';
 
       $boxes = sqimap_mailbox_list($imapConnection);
       for ($i = 0; $i < count($boxes); $i++) {
-         if (!is_array($boxes[$i]['flags']) ||
-            !in_array("noselect", $boxes[$i]['flags'])) {
+         if (!in_array("noselect", $boxes[$i]['flags'])) {
             $box = $boxes[$i]['unformatted'];
-            $box2 = replace_spaces($boxes[$i]['unformatted-disp']);
+            $box2 = str_replace(' ', '&nbsp;', $boxes[$i]['unformatted-disp']);
             echo "         <OPTION VALUE=\"$box\">$box2</option>\n";
          }
       }
       echo '</TD></TR>';
 
       echo "<TR><TD BGCOLOR=\"$color[0]\">";
-      echo "<TABLE WIDTH=100% BORDER=0 CELLPADDING=2 CELLSPACING=1 BGCOLOR=\"$color[0]\">";
+      echo "<TABLE WIDTH=100% BORDER=0 CELLPADDING=1 CELLSPACING=0 BGCOLOR=\"$color[0]\">";
       echo "<TR BGCOLOR=\"$color[5]\" ALIGN=\"center\">";
 
       $urlMailbox=urlencode($mailbox);
       }
       echo "</TR>\n";
    }
+   
+   function ShowSelectAllLink($startMessage, $sort)
+   {
+       global $checkall, $PHP_SELF, $what, $where, $mailbox;
+       
+       echo "\n<A HREF=\"$PHP_SELF?mailbox=" . urlencode($mailbox) .
+           "&startMessage=$startMessage&sort=$sort&";
+       if ( isset($checkall) && $checkall == '1')
+           echo "checkall=0";
+       else
+           echo "checkall=1";
+       if (isset($where) && isset($what))
+           echo "&where=" . urlencode($where) . "&what=" . urlencode($what);
+       echo "\">";
+       if (isset($checkall) && $checkall == '1')
+           echo _("Unselect All");
+       else
+           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) . '...';
+   }
+
 ?>