separate multiple addresses with ",", put as much on a line
[squirrelmail.git] / templates / default / left_main.tpl
index 200de304a5d542c1cf69be2973690fbe9bd95695..27fada32e99638b8a2c02ae5363c503a25cf0d49 100644 (file)
@@ -2,39 +2,32 @@
 /**
  * left_main.tpl
  *
- * Basic template to the left main window.  The following variables are
- * avilable in this template:
+ * Basic template to the left main window.  
+ * 
+ * The following variables are avilable in this template:
  *      $clock           - formatted string containing last refresh
- *      $mailbox_listing - string containing HTML to display default mailbox tree
- *      $location_of_bar - string "left" or "right" indicating where the frame
- *                         is located.  Currently only used in
- *                         left_main_advanced.tpl
- *      $left_size       - width of left column in pixels.  Currently only used
- *                         in left_main_advanced.tpl
- *      $imapConnection  - IMAP connection handle.  Needed to allow plugins to
- *                         read the mailbox.
- *      $icon_theme_path - Path to the desired icon theme.  If no icon theme has
- *                         been chosen, this will be the template directory.  If
- *                         the user has disabled icons, this will be NULL.
- *
- *      $unread_notification_enabled - Boolean TRUE if the user wants to see unread
- *                             message count on mailboxes
- *      $unread_notification_cummulative - Boolean TRUE if the user has enabled
- *                             cummulative message counts.
- *      $unread_notification_allFolders - Boolean TRUE if the user wants to see
- *                             unread message count on ALL folders or just the
- *                             mailbox.
- *      $unread_notification_displayTotal - Boolean TRUE if the user wants to
- *                             see the total number of messages in addition to
- *                             the unread message count.
- *      $collapsable_folders_enabled - Boolean TRUE if the user has enabled collapsable
- *                             folders.
- *      $use_special_folder_color - Boolean TRUE if the use has chosen to tag
- *                             "Special" folders in a different color.
- *      $message_recycling_enabled - Boolean TRUE if messages that get deleted go to
- *                             the Trash folder.  FALSE if they are permanently
- *                             deleted.
- *      $trash_folder_name   - Name of the Trash folder.
+ *      $settings        - Array containing user perferences needed by this
+ *                         template.  Indexes are as follows:
+ *          $settings['templateID'] - contains the ID of the current
+ *                         template set.  This may be needed by third
+ *                         party packages that don't integrate easily.
+ *          $settings['unreadNotificationEnabled'] - Boolean TRUE if the user
+ *                         wants to see unread message count on mailboxes
+ *          $settings['unreadNotificationCummulative'] - Boolean TRUE if the
+ *                         user has enabled cummulative message counts.
+ *          $settings['unreadNotificationAllFolders'] - Boolean TRUE if the
+ *                         user wants to see unread message count on ALL
+ *                         folders or just the Inbox.
+ *          $settings['unreadNotificationDisplayTotal'] - Boolean TRUE if the
+ *                         user wants to see the total number of messages in
+ *                         addition to the unread message count.
+ *          $settings['collapsableFoldersEnabled'] - Boolean TRUE if the user
+ *                         has enabled collapsable folders.
+ *          $settings['useSpecialFolderColor'] - Boolean TRUE if the use has
+ *                         chosen to tag "Special" folders in a different color
+ *          $settings['messageRecyclingEnabled'] - Boolean TRUE if messages
+ *                         that get deleted go to the Trash folder.  FALSE if
+ *                          they are permanently deleted.
  *
  *      $mailboxes       - Associative array of current mailbox structure.
  *                         Provided so template authors know what they have to
  *                                            in all folders in this mailbox,
  *                                            excluding trash folders.
  *
- *
  * @copyright © 1999-2006 The SquirrelMail Project Team
  * @license http://opensource.org/licenses/gpl-license.php GNU Public License
  * @version $Id$
  * @package squirrelmail
  * @subpackage templates
+ * @author Steve Brown
  */
 
-// include required files
-include_once(SM_PATH . 'templates/util_global.php');
 
 /*
  * Recursively parse the mailbox structure to build the navigation tree.
  *
  * @since 1.5.2
  */
-function buildMailboxTree ($box, $settings, $indent_factor=0) {
+function buildMailboxTree ($box, $settings, $icon_theme_path, $indent_factor=0) {
     // stop condition
     if (empty($box)) {
         return '';
     }
 
-#    echo '<b>'.$box['MailboxName'].':</b> '.dump_array($box).'<hr>';
     $pre = '<span style="white-space: nowrap;">';
     $end = '';
     $indent = str_repeat('&nbsp;&nbsp;',$indent_factor);
@@ -99,25 +89,29 @@ function buildMailboxTree ($box, $settings, $indent_factor=0) {
     $unseen_str = '';
     if ($settings['unreadNotificationEnabled'])   {
         // We only display the unread count if we on the Inbox or we are told
-        // to display it on all folders.
+        // to display it on all folders AND there is more than 1 unread message
         if ( $settings['unreadNotificationAllFolders'] ||
              (!$settings['unreadNotificationAllFolders'] && strtolower($box['MailboxFullName'])=='inbox')
            )  {
-            $unseen_str = $settings['unreadNotificationCummulative'] ?
+            $unseen = $settings['unreadNotificationCummulative'] ?
                             $box['CummulativeUnreadCount'] :
                             $box['UnreadCount'];
+            
+            if (!$box['IsNoSelect'] && ($unseen > 0 || $settings['unreadNotificationDisplayTotal'])) {
+                $unseen_str = $unseen;
+    
+                // Add the total messages if desired
+                if ($settings['unreadNotificationDisplayTotal'])    {
+                    $unseen_str .= '/' . ($settings['unreadNotificationCummulative'] ?
+                                            $box['CummulativeMessageCount'] :
+                                            $box['MessageCount']);
+                }
 
-            // Add the total messages if desired
-            if ($settings['unreadNotificationDisplayTotal'])    {
-                $unseen_str .= '/' . ($settings['unreadNotificationCummulative'] ?
-                                        $box['CummulativeMessageCount'] :
-                                        $box['MessageCount']);
+                $unseen_str = '<span class="'.
+                              ($box['IsRecent'] ? 'leftrecent' : 'leftunseen') .
+                              '">' . $unseen_str .
+                              '</span>';
             }
-
-            $unseen_str = '<span class="'.
-                          ($box['IsRecent'] ? 'leftrecent' : 'leftunseen') .
-                          '">' . $unseen_str .
-                          '</span>';
         }
     }
 
@@ -130,8 +124,6 @@ function buildMailboxTree ($box, $settings, $indent_factor=0) {
                 '<a href="'.$box['CollapseLink']['URL'].'" ' .
                 'target="'.$box['CollapseLink']['Target'].'" ' .
                 'style="text-decoration:none" ' .
-#                'alt="'.$box['CollapseLink']['Alt'].'" ' .
-#                'title="'.$box['CollapseLink']['Alt'].'">' .
                 '>' .
                 $box['CollapseLink']['Icon'] .
                 '</a>';
@@ -140,6 +132,36 @@ function buildMailboxTree ($box, $settings, $indent_factor=0) {
         $pre .= $indent . '&nbsp;&nbsp;';
     }
 
+    /**
+     * Add folder icon.  Template authors may choose to display a different
+     * image based on whatever logic they see fit here.
+     */
+    $folder_icon = '';
+    if (!is_null($icon_theme_path)) {
+        switch (true) {
+            case $box['IsInbox']:
+                $folder_icon = getIcon($icon_theme_path, 'inbox.png', '', $box['MailboxName']);
+                break; 
+            case $box['IsSent']:
+                $folder_icon = getIcon($icon_theme_path, 'senti.png', '', $box['MailboxName']);
+                break; 
+            case $box['IsTrash']:
+                $folder_icon = getIcon($icon_theme_path, 'delitem.png', '', $box['MailboxName']);
+                break; 
+            case $box['IsDraft']:
+                $folder_icon = getIcon($icon_theme_path, 'draft.png', '', $box['MailboxName']);
+                break; 
+            case $box['IsNoInferiors']:
+                $folder_icon = getIcon($icon_theme_path, 'folder_noinf.png', '', $box['MailboxName']);
+                break;
+            default: 
+                $folder_icon = getIcon($icon_theme_path, 'folder.png', '', $box['MailboxName']);
+                break;
+        }
+        $folder_icon .= '&nbsp;';
+    }
+    $pre .= $folder_icon;
+
     /*
      * The Trash folder should only be displayed if message recycling has
      * been enabled, i.e. when deleted is a message moved to the trash or
@@ -149,7 +171,7 @@ function buildMailboxTree ($box, $settings, $indent_factor=0) {
                  'target="'.$box['ViewLink']['Target'].'" ' .
                  'style="text-decoration:none">';
 
-    if ($settings['messageRecyclingEnabled'] && $box['MailboxFullName'] == $settings['trashFolderName']) {
+    if ($settings['messageRecyclingEnabled'] && $box['IsTrash']) {
         $pre .= $view_link;
 
         // Boxes with unread messages should be emphasized
@@ -160,7 +182,7 @@ function buildMailboxTree ($box, $settings, $indent_factor=0) {
         $end .= '</a>';
 
         // Print unread info
-        if ($box['UnreadCount'] > 0) {
+        if ($box['MessageCount'] > 0 || count($box['ChildBoxes'])) {
             if (!empty($unseen_str)) {
                 $end .= '&nbsp;<small>('.$unseen_str.')</small>';
             }
@@ -197,10 +219,21 @@ function buildMailboxTree ($box, $settings, $indent_factor=0) {
         $spanend = '</span>';
     }
 
+/********
+ * Pulling imapConnection due to segfaults that cannot be tracked down.  Best
+ * we can determine, it's some combination of this var and >= 4 plugins enabled.
+ * No further clue from anyone.
+ ********
+ * Update: syntax of this hook call changed a bit, so if the error is so anomalous,
+ * it might be worth trying this again to see if it is still segfaulting
+ ********
+    
     // let plugins fiddle with end of line
+// FIXME: no hooks in templates! Although note that I'm not sure we can avoid it here because the context of which folder we are displaying is important to the hook, unless we preemptively iterate through all folders and collect the output from the hook call for that and give that to the template.... seems like overkill; I say this hook remains
     $end .= concat_hook_function('left_main_after_each_folder',
-            array(isset($numMessages) ? $numMessages : '',
-            $box['MailboxFullName'], $settings['imapConnection']));
+            $temp=array(isset($numMessages) ? &$numMessages : '',
+            &$box['MailboxFullName'], &$settings['imapConnection']));
+*/
 
     $end .= '</span>';
 
@@ -217,7 +250,7 @@ function buildMailboxTree ($box, $settings, $indent_factor=0) {
 
     if (!$box['IsCollapsed'] || $box['IsRoot']) {
         for ($i = 0; $i<sizeof($box['ChildBoxes']); $i++) {
-            $out .= buildMailboxTree($box['ChildBoxes'][$i], $settings, $indent_factor);
+            $out .= buildMailboxTree($box['ChildBoxes'][$i], $settings, $icon_theme_path, $indent_factor);
         }
     }
 
@@ -227,26 +260,10 @@ function buildMailboxTree ($box, $settings, $indent_factor=0) {
 // Retrieve the template vars
 extract($t);
 
-/*
- * Build an array to pass user prefs to the function that builds the tree in
- * order to avoid using globals, which are dirty, filthy things in templates. :)
- */
-$settings = array();
-$settings['imapConnection'] = $imapConnection;
-$settings['iconThemePath'] = $icon_theme_path;
-$settings['unreadNotificationEnabled'] = $unread_notification_enabled;
-$settings['unreadNotificationAllFolders'] = $unread_notification_allFolders;
-$settings['unreadNotificationDisplayTotal'] = $unread_notification_displayTotal;
-$settings['unreadNotificationCummulative'] = $unread_notification_cummulative;
-$settings['useSpecialFolderColor'] = $use_special_folder_color;
-$settings['messageRecyclingEnabled'] = $message_recycling_enabled;
-$settings['trashFolderName'] = $trash_folder_name;
-$settings['collapsableFoldersEnabled'] = $collapsable_folders_enabled;
-
 ?>
 <body class="sqm_leftMain">
 <div class="sqm_leftMain">
-<?php do_hook('left_main_before'); ?>
+<?php if (!empty($plugin_output['left_main_before'])) echo $plugin_output['left_main_before']; ?>
 <table class="sqm_wrapperTable" cellspacing="0">
  <tr>
   <td>
@@ -260,9 +277,9 @@ $settings['collapsableFoldersEnabled'] = $collapsable_folders_enabled;
     </tr>
    </table>
    <br />
-   <?php echo buildMailboxTree($mailboxes, $settings); ?>
-  </tr>
- </td>
+   <?php echo buildMailboxTree($mailboxes, $settings, $icon_theme_path); ?>
+  </td>
+ </tr>
 </table>
-<?php do_hook('left_main_after'); ?>
+<?php if (!empty($plugin_output['left_main_after'])) echo $plugin_output['left_main_after']; ?>
 </div>