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