add purge link when folder contains subfolders.
[squirrelmail.git] / templates / default / left_main.tpl
1 <?php
2 /**
3  * left_main.tpl
4  *
5  * Basic template to the left main window.  
6  * 
7  * The following variables are avilable in this template:
8  *      $clock           - formatted string containing last refresh
9  *      $settings        - Array containing user perferences needed by this
10  *                         template.  Indexes are as follows:
11  *          $settings['imapConnection'] - IMAP connection handle.  Needed to
12  *                         allow plugins to read the mailbox.
13  *          $settings['iconThemePath'] - Path to the desired icon theme.  If
14  *                         the user has disabled icons, this will be NULL.
15  *          $settings['templateDirectory'] - contains the path to the current
16  *                         template directory.  This may be needed by third
17  *                         party packages that don't integrate easily.
18  *          $settings['unreadNotificationEnabled'] - Boolean TRUE if the user
19  *                         wants to see unread message count on mailboxes
20  *          $settings['unreadNotificationCummulative'] - Boolean TRUE if the
21  *                         user has enabled cummulative message counts.
22  *          $settings['unreadNotificationAllFolders'] - Boolean TRUE if the
23  *                         user wants to see unread message count on ALL
24  *                         folders or just the Inbox.
25  *          $settings['unreadNotificationDisplayTotal'] - Boolean TRUE if the
26  *                         user wants to see the total number of messages in
27  *                         addition to the unread message count.
28  *          $settings['collapsableFoldersEnabled'] - Boolean TRUE if the user
29  *                         has enabled collapsable folders.
30  *          $settings['useSpecialFolderColor'] - Boolean TRUE if the use has
31  *                         chosen to tag "Special" folders in a different color
32  *          $settings['messageRecyclingEnabled'] - Boolean TRUE if messages
33  *                         that get deleted go to the Trash folder.  FALSE if
34  *                          they are permanently deleted.
35  *
36  *      $mailboxes       - Associative array of current mailbox structure.
37  *                         Provided so template authors know what they have to
38  *                         work with when building a custom mailbox tree.
39  *                         Array contains the following elements:
40  *          $a['MailboxName']   = String containing the name of the mailbox
41  *          $a['MailboxFullName'] = String containing full IMAP name of mailbox
42  *          $a['MessageCount']  = integer of all messages in the mailbox
43  *          $a['UnreadCount']   = integer of unseen message in the mailbox
44  *          $a['ViewLink']      = array containing elements needed to view the
45  *                                mailbox.  Elements are:
46  *                                  'Target' = target frame for link
47  *                                  'URL'    = target URL for link
48  *          $a['IsRecent']      = boolean TRUE if the mailbox is tagged "recent"
49  *          $a['IsSpecial']     = boolean TRUE if the mailbox is tagged "special"
50  *          $a['IsRoot']        = boolean TRUE if the mailbox is the root mailbox
51  *          $a['IsNoSelect']    = boolean TRUE if the mailbox is tagged "noselect"
52  *          $a['IsCollapsed']   = boolean TRUE if the mailbox is currently collapsed
53  *          $a['CollapseLink']  = array containg elements needed to expand/collapse
54  *                                the mailbox.  Elements are:
55  *                                  'Target' = target frame for link
56  *                                  'URL'    = target URL for link
57  *                                  'Icon'   = the icon to use, based on user prefs
58  *          $a['ChildBoxes']    = array containing this same data structure for
59  *                                each child folder/mailbox of the current
60  *                                mailbox.
61  *          $a['CummulativeMessageCount']   = integer of total messages in all
62  *                                            folders in this mailbox, exlcuding
63  *                                            trash folders.
64  *          $a['CummulativeUnreadCount']    = integer of total unseen messages
65  *                                            in all folders in this mailbox,
66  *                                            excluding trash folders.
67  *
68  * @copyright &copy; 1999-2006 The SquirrelMail Project Team
69  * @license http://opensource.org/licenses/gpl-license.php GNU Public License
70  * @version $Id$
71  * @package squirrelmail
72  * @subpackage templates
73  * @author Steve Brown
74  */
75
76 /** include required files */
77 include_once(SM_PATH . 'templates/util_global.php');
78
79 /*
80  * Recursively parse the mailbox structure to build the navigation tree.
81  *
82  * @since 1.5.2
83  */
84 function buildMailboxTree ($box, $settings, $indent_factor=0) {
85     // stop condition
86     if (empty($box)) {
87         return '';
88     }
89
90     $pre = '<span style="white-space: nowrap;">';
91     $end = '';
92     $indent = str_repeat('&nbsp;&nbsp;',$indent_factor);
93
94     // Get unseeen/total message info if needed
95     $unseen_str = '';
96     if ($settings['unreadNotificationEnabled'])   {
97         // We only display the unread count if we on the Inbox or we are told
98         // to display it on all folders AND there is more than 1 unread message
99         if ( $settings['unreadNotificationAllFolders'] ||
100              (!$settings['unreadNotificationAllFolders'] && strtolower($box['MailboxFullName'])=='inbox')
101            )  {
102             $unseen = $settings['unreadNotificationCummulative'] ?
103                             $box['CummulativeUnreadCount'] :
104                             $box['UnreadCount'];
105             
106             if (!$box['IsNoSelect'] && ($unseen > 0 || $settings['unreadNotificationDisplayTotal'])) {
107                 $unseen_str = $unseen;
108     
109                 // Add the total messages if desired
110                 if ($settings['unreadNotificationDisplayTotal'])    {
111                     $unseen_str .= '/' . ($settings['unreadNotificationCummulative'] ?
112                                             $box['CummulativeMessageCount'] :
113                                             $box['MessageCount']);
114                 }
115
116                 $unseen_str = '<span class="'.
117                               ($box['IsRecent'] ? 'leftrecent' : 'leftunseen') .
118                               '">' . $unseen_str .
119                               '</span>';
120             }
121         }
122     }
123
124     /*
125      * If the box has any children, and collapsable folders have been enabled
126      * we need to output the expand/collapse link.
127      */
128     if (sizeof($box['ChildBoxes'])>0 && $settings['collapsableFoldersEnabled'])    {
129         $link = $indent .
130                 '<a href="'.$box['CollapseLink']['URL'].'" ' .
131                 'target="'.$box['CollapseLink']['Target'].'" ' .
132                 'style="text-decoration:none" ' .
133                 '>' .
134                 $box['CollapseLink']['Icon'] .
135                 '</a>';
136         $pre .= $link;
137     } else {
138         $pre .= $indent . '&nbsp;&nbsp;';
139     }
140
141     /**
142      * Add folder icon.  Template authors may choose to display a different
143      * image based on whatever logic they see fit here.
144      */
145     $folder_icon = '';
146     if (!is_null($settings['iconThemePath'])) {
147         switch (true) {
148             case $box['IsInbox']:
149                 $folder_icon = getIcon($settings['iconThemePath'], 'inbox.png', '', $box['MailboxName']);
150                 break; 
151             case $box['IsSent']:
152                 $folder_icon = getIcon($settings['iconThemePath'], 'senti.png', '', $box['MailboxName']);
153                 break; 
154             case $box['IsTrash']:
155                 $folder_icon = getIcon($settings['iconThemePath'], 'delitem.png', '', $box['MailboxName']);
156                 break; 
157             case $box['IsDraft']:
158                 $folder_icon = getIcon($settings['iconThemePath'], 'draft.png', '', $box['MailboxName']);
159                 break; 
160             case $box['IsNoInferiors']:
161                 $folder_icon = getIcon($settings['iconThemePath'], 'folder_noinf.png', '', $box['MailboxName']);
162                 break;
163             default: 
164                 $folder_icon = getIcon($settings['iconThemePath'], 'folder.png', '', $box['MailboxName']);
165                 break;
166         }
167         $folder_icon .= '&nbsp;';
168     }
169     $pre .= $folder_icon;
170
171     /*
172      * The Trash folder should only be displayed if message recycling has
173      * been enabled, i.e. when deleted is a message moved to the trash or
174      * deleted forever?
175      */
176     $view_link = '<a href="'.$box['ViewLink']['URL'].'" ' .
177                  'target="'.$box['ViewLink']['Target'].'" ' .
178                  'style="text-decoration:none">';
179
180     if ($settings['messageRecyclingEnabled'] && $box['IsTrash']) {
181         $pre .= $view_link;
182
183         // Boxes with unread messages should be emphasized
184         if ($box['UnreadCount'] > 0) {
185             $pre .= '<em>';
186             $end .= '</em>';
187         }
188         $end .= '</a>';
189
190         // Print unread info
191         if ($box['MessageCount'] > 0 || count($box['ChildBoxes'])) {
192             if (!empty($unseen_str)) {
193                 $end .= '&nbsp;<small>('.$unseen_str.')</small>';
194             }
195             $end .= "\n<small>" .
196                     '&nbsp;&nbsp;[<a href="empty_trash.php">'. _("Purge").'</a>]' .
197                     '</small>';
198         }
199     } else {
200         // Add a few other things for all other folders...
201         if (!$box['IsNoSelect']) {
202             $pre .= $view_link;
203
204             // Boxes with unread messages should be emphasized
205             if ($box['UnreadCount'] > 0) {
206                 $pre .= '<em>';
207                 $end .= '</em>';
208             }
209             $end .= '</a>';
210         }
211
212         // Display unread info...
213         if (!empty($unseen_str)) {
214             $end .= '&nbsp;<small>('.$unseen_str.')</small>';
215         }
216     }
217
218     $span = '';
219     $spanend = '';
220     if ($settings['useSpecialFolderColor'] && $box['IsSpecial']) {
221         $span = '<span class="leftspecial">';
222         $spanend = '</span>';
223     } elseif ( $box['IsNoSelect'] ) {
224         $span = '<span class="leftnoselect">';
225         $spanend = '</span>';
226     }
227
228     // let plugins fiddle with end of line
229     $end .= concat_hook_function('left_main_after_each_folder',
230             array(isset($numMessages) ? $numMessages : '',
231             $box['MailboxFullName'], $settings['imapConnection']));
232
233     $end .= '</span>';
234
235     $out = '';
236     if (!$box['IsRoot']) {
237         $out = $span . $pre .
238                str_replace(
239                     array(' ','<','>'),
240                     array('&nbsp;','&lt;','&gt;'),
241                     $box['MailboxName']) .
242                $end . $spanend . '<br />' . "\n";
243         $indent_factor++;
244     }
245
246     if (!$box['IsCollapsed'] || $box['IsRoot']) {
247         for ($i = 0; $i<sizeof($box['ChildBoxes']); $i++) {
248             $out .= buildMailboxTree($box['ChildBoxes'][$i], $settings, $indent_factor);
249         }
250     }
251
252     return $out;
253 }
254
255 // Retrieve the template vars
256 extract($t);
257
258 ?>
259 <body class="sqm_leftMain">
260 <div class="sqm_leftMain">
261 <?php do_hook('left_main_before'); ?>
262 <table class="sqm_wrapperTable" cellspacing="0">
263  <tr>
264   <td>
265    <table cellspacing="0">
266     <tr>
267      <td style="text-align:center">
268       <span class="sqm_folderHeader"><?php echo _("Folders"); ?></span><br />
269       <span class="sqm_clock"><?php echo $clock; ?></span>
270       <span class="sqm_refreshButton"><small>[<a href="../src/left_main.php" target="left"><?php echo _("Check mail"); ?></a>]</small></span>
271      </td>
272     </tr>
273    </table>
274    <br />
275    <?php echo buildMailboxTree($mailboxes, $settings); ?>
276   </td>
277  </tr>
278 </table>
279 <?php do_hook('left_main_after'); ?>
280 </div>