- // don't replace quotes and html tags
- if (($mode=='show' || $mode=='') && $ltpos!==false && strpos($str, '>', $ltpos)!==false)
- {
- unset($encode_arr['"']);
- unset($encode_arr['<']);
- unset($encode_arr['>']);
- unset($encode_arr['&']);
- }
- else if ($mode=='remove')
- $str = strip_tags($str);
-
- // avoid douple quotation of &
- $out = preg_replace('/&([a-z]{2,5}|#[0-9]{2,4});/', '&\\1;', strtr($str, $encode_arr));
-
- return $newlines ? nl2br($out) : $out;
+ if (empty($attrib['folder_name']))
+ $attrib['folder_name'] = '*';
+
+ // get mailbox list
+ $mbox_name = $RCMAIL->imap->get_mailbox_name();
+
+ // build the folders tree
+ if (empty($a_mailboxes)) {
+ // get mailbox list
+ $a_folders = $RCMAIL->imap->list_mailboxes('', $attrib['folder_name'], $attrib['folder_filter']);
+ $delimiter = $RCMAIL->imap->get_hierarchy_delimiter();
+ $a_mailboxes = array();
+
+ foreach ($a_folders as $folder)
+ rcmail_build_folder_tree($a_mailboxes, $folder, $delimiter);
+ }
+
+ // allow plugins to alter the folder tree or to localize folder names
+ $hook = $RCMAIL->plugins->exec_hook('render_mailboxlist', array('list' => $a_mailboxes, 'delimiter' => $delimiter));
+
+ if ($type == 'select') {
+ $select = new html_select($attrib);
+
+ // add no-selection option
+ if ($attrib['noselection'])
+ $select->add(rcube_label($attrib['noselection']), '');
+
+ rcmail_render_folder_tree_select($hook['list'], $mbox_name, $attrib['maxlength'], $select, $attrib['realnames']);
+ $out = $select->show();
+ }
+ else {
+ $js_mailboxlist = array();
+ $out = html::tag('ul', $attrib, rcmail_render_folder_tree_html($hook['list'], $mbox_name, $js_mailboxlist, $attrib), html::$common_attrib);
+
+ $RCMAIL->output->add_gui_object('mailboxlist', $attrib['id']);
+ $RCMAIL->output->set_env('mailboxes', $js_mailboxlist);
+ $RCMAIL->output->set_env('collapsed_folders', (string)$RCMAIL->config->get('collapsed_folders'));
+ }
+
+ return $out;
+}
+
+
+/**
+ * Return the mailboxlist as html_select object
+ *
+ * @param array Named parameters
+ * @return html_select HTML drop-down object
+ */
+function rcmail_mailbox_select($p = array())
+{
+ global $RCMAIL;
+
+ $p += array('maxlength' => 100, 'realnames' => false);
+ $a_mailboxes = array();
+
+ if (empty($p['folder_name']))
+ $p['folder_name'] = '*';
+
+ if ($p['unsubscribed'])
+ $list = $RCMAIL->imap->list_unsubscribed('', $p['folder_name'], $p['folder_filter']);
+ else
+ $list = $RCMAIL->imap->list_mailboxes('', $p['folder_name'], $p['folder_filter']);
+
+ $delimiter = $RCMAIL->imap->get_hierarchy_delimiter();
+
+ foreach ($list as $folder) {
+ if (empty($p['exceptions']) || !in_array($folder, $p['exceptions']))
+ rcmail_build_folder_tree($a_mailboxes, $folder, $delimiter);
+ }
+
+ $select = new html_select($p);
+
+ if ($p['noselection'])
+ $select->add($p['noselection'], '');
+
+ rcmail_render_folder_tree_select($a_mailboxes, $mbox, $p['maxlength'], $select, $p['realnames'], 0, $p['exceptions']);
+
+ return $select;
+}
+
+
+/**
+ * Create a hierarchical array of the mailbox list
+ * @access private
+ * @return void
+ */
+function rcmail_build_folder_tree(&$arrFolders, $folder, $delm='/', $path='')
+{
+ global $RCMAIL;
+
+ // Handle namespace prefix
+ $prefix = '';
+ if (!$path) {
+ $n_folder = $folder;
+ $folder = $RCMAIL->imap->mod_mailbox($folder);
+
+ if ($n_folder != $folder) {
+ $prefix = substr($n_folder, 0, -strlen($folder));