From 597170feb25f5c2e5a90a9c0b1fd62001f169afb Mon Sep 17 00:00:00 2001 From: thomascube Date: Tue, 4 Oct 2005 20:28:01 +0000 Subject: Added new languages, hierarchical folder tree and attachments in forwarded messages --- program/steps/mail/func.inc | 165 +++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 156 insertions(+), 9 deletions(-) (limited to 'program/steps/mail/func.inc') diff --git a/program/steps/mail/func.inc b/program/steps/mail/func.inc index 78b61377b..6ffde1c90 100644 --- a/program/steps/mail/func.inc +++ b/program/steps/mail/func.inc @@ -58,6 +58,7 @@ function rcmail_mailbox_list($attrib) { global $IMAP, $CONFIG, $OUTPUT, $JS_OBJECT_NAME, $COMM_PATH; static $s_added_script = FALSE; + static $a_mailboxes; $type = $attrib['type'] ? $attrib['type'] : 'ul'; $add_attrib = $type=='select' ? array('style', 'class', 'id', 'name', 'onchange') : @@ -77,37 +78,63 @@ function rcmail_mailbox_list($attrib) rcube_label($attrib['noselection'])); // get mailbox list - $a_folders = $IMAP->list_mailboxes(); $mbox = $IMAP->get_mailbox_name(); // for these mailboxes we have localized labels $special_mailboxes = array('inbox', 'sent', 'drafts', 'trash', 'junk'); + + // build the folders tree + if (empty($a_mailboxes)) + { + // get mailbox list + $a_folders = $IMAP->list_mailboxes(); + $delimiter = $IMAP->get_hierarchy_delimiter(); + $a_mailboxes = array(); + + foreach ($a_folders as $folder) + rcmail_build_folder_tree($a_mailboxes, $folder, $delimiter); + } + +// var_dump($a_mailboxes); + + if ($type=='select') + $out .= rcmail_render_folder_tree_select($a_mailboxes, $special_mailboxes, $mbox); + else + $out .= rcmail_render_folder_tree_html($a_mailboxes, $special_mailboxes, $mbox); + + +/* foreach ($a_folders as $i => $folder) { $zebra_class = $i%2 ? 'even' : 'odd'; - - $folder_lc = strtolower($folder); + $folder_prop = $a_subfolders[$folder]; + $foldername = isset($folder_prop) ? $folder_prop['name'] : $folder; + + $folder_lc = strtolower($foldername); if (in_array($folder_lc, $special_mailboxes)) $foldername = rcube_label($folder_lc); - else - $foldername = $folder; if ($unread_count = $IMAP->messagecount($folder, 'UNSEEN')) $foldername .= sprintf(' (%d)', $unread_count); - + + $indent = isset($folder_prop) ? sprintf(' indent%d', $folder_prop['level']) : ''; + $indent_str = isset($folder_prop) ? str_repeat('  ', (int)$folder_prop['level']) : ''; + // compose mailbox line if ($type=='select') - $out .= sprintf(''."\n", + $out .= sprintf(''."\n", $folder, + $indent_str, rep_specialchars_output($foldername)); else - $out .= sprintf('
  • %s
  • '."\n", - preg_replace('/[^a-z0-9\-_]/', '', $folder_lc), + $out .= sprintf('
  • %s
  • '."\n", + preg_replace('/[^a-z0-9\-_]/', '', strtolower($folder)), $zebra_class, $unread_count ? ' unread' : '', $folder==$mbox ? ' selected' : '', + $indent, $folder, $JS_OBJECT_NAME, $folder, @@ -115,6 +142,7 @@ function rcmail_mailbox_list($attrib) $folder, rep_specialchars_output($foldername)); } +*/ if ($type=='ul') $OUTPUT->add_script(sprintf("%s.gui_object('mailboxlist', '%s');", $JS_OBJECT_NAME, $attrib['id'])); @@ -132,6 +160,104 @@ function rcmail_mailbox_list($attrib) } + + +// create a hierarchical array of the mailbox list +function rcmail_build_folder_tree(&$arrFolders, $folder, $delm='/', $path='') + { + $pos = strpos($folder, $delm); + if ($pos !== false) + { + $subFolders = substr($folder, $pos+1); + $currentFolder = substr($folder, 0, $pos); + } + else + { + $subFolders = false; + $currentFolder = $folder; + } + + $path .= $currentFolder; + + if (!isset($arrFolders[$currentFolder])) + { + $arrFolders[$currentFolder] = array('id' => $path, + 'name' => $currentFolder, + 'folders' => array()); + } + + if (!empty($subFolders)) + rcmail_build_folder_tree($arrFolders[$currentFolder]['folders'], $subFolders, $delm, $path.$delm); + } + + +// return html for a structured list