Use this nicer tree in the advanced search page.
}
}
+/* Get the tree images. */
+$imp_ui_folder = new IMP_UI_Folder();
+$tree_imgs = $imp_ui_folder->getTreeImages($raw_rows, array('expand_url' => $folders_url));
+
/* Add some further information to the $raw_rows array. */
+$rows = array();
$name_url = Horde_Util::addParameter(Horde::applicationUrl('mailbox.php'), 'no_newmail_popup', 1);
$rowct = 0;
-$morembox = $rows = array();
-foreach ($raw_rows as $val) {
+
+foreach ($raw_rows as $key => $val) {
$val['nocheckbox'] = !empty($val['vfolder']);
if (!empty($val['vfolder']) && $val['editvfolder']) {
$val['delvfolder'] = Horde::link($imp_search->deleteUrl($val['value']), _("Delete Virtual Folder")) . _("Delete") . '</a>';
$val['name'] = Horde::link(Horde_Util::addParameter($name_url, 'mailbox', $val['value']), $val['vfolder'] ? $val['base_elt']['l'] : $val['display']) . $val['name'] . '</a>';
}
- $dir2 = $val['user_icon']
- ? Horde::img($val['icon'], $val['alt'], null, $val['icondir'])
- : '<span class="foldersImg ' . $val['class'] . '"></span>';
-
- if ($val['children']) {
- $dir = Horde_Util::addParameter($folders_url, 'folder', $val['value']);
- if ($imaptree->isOpen($val['base_elt'])) {
- $dir = Horde_Util::addParameter($dir, 'actionID', 'collapse_folder');
- $alt = _("Collapse Folder");
- if (empty($GLOBALS['nls']['rtl'][$GLOBALS['language']])) {
- $tree_img = ($val['value'] == 'INBOX')
- ? 9
- : ($val['peek'] ? 10 : 11);
- } else {
- $tree_img = ($val['value'] == 'INBOX')
- ? 12
- : ($val['peek'] ? 13 : 14);
- }
- } else {
- $dir = Horde_Util::addParameter($dir, 'actionID', 'expand_folder');
- $alt = _("Expand Folder");
- if (empty($GLOBALS['nls']['rtl'][$GLOBALS['language']])) {
- $tree_img = ($val['value'] == 'INBOX')
- ? 15
- : ($val['peek'] ? 16 : 17);
- } else {
- $tree_img = ($val['value'] == 'INBOX')
- ? 18
- : ($val['peek'] ? 19 : 20);
- }
- }
- $dir = Horde::link($dir, $alt) . '<span class="treeImg treeImg' . $tree_img . '"></span></a>' . $dir2;
- } else {
- if (($val['value'] == 'INBOX') && !$val['peek']) {
- $dir = '<span class="treeImg"></span>' . $dir2;
- } else {
- if (empty($GLOBALS['nls']['rtl'][$GLOBALS['language']])) {
- $tree_img = ($val['value'] == 'INBOX')
- ? 3
- : ($val['peek'] ? 2 : 4);
- } else {
- $tree_img = ($val['value'] == 'INBOX')
- ? 7
- : ($val['peek'] ? 6 : 8);
- }
- $dir = '<span class="treeImg treeImg' . $tree_img . '"></span>' . $dir2;
- }
- }
+ $val['line'] = $tree_imgs[$key];
- $line = '';
- $morembox[$val['level']] = $val['peek'];
- for ($i = 0; $i < $val['level']; $i++) {
- if ($morembox[$i]) {
- $line .= '<span class="treeImg treeImg' . (empty($GLOBALS['nls']['rtl'][$GLOBALS['language']]) ? 1 : 5) . '"></span>';
- } else {
- $line .= '<span class="treeImg"></span>';
- }
- }
- $val['line'] = $line . $dir;
$rows[] = $val;
}
folders.each(function(f) {
var n = $(node.cloneNode(true));
- n.down().writeAttribute({ disabled: !Boolean(f.v), value: (f.v ? f.v.escapeHTML() : null) }).insert({ after: f.l });
+ n.down().writeAttribute({ disabled: Boolean(f.c), value: (f.co ? null : f.v.escapeHTML()) }).insert({ after: f.l });
fragment.appendChild(n);
});
$('search_folders_hdr').next('DIV').update('').appendChild(fragment);
+
+ stripeAllElements();
},
updateSavedSearches: function(searches)
elt.hasClassName('arrowCollapsed')) {
elt.up().down().toggle().next().toggle().up().next().toggle();
if (elt.descendantOf('search_folders_hdr')) {
- elt.next('SPAN.searchFoldersActions').toggle();
+ elt.next('SPAN.searchuiFoldersActions').toggle();
}
} else if (elt.hasClassName('searchuiDelete')) {
tmp = elt.up('TR');
--- /dev/null
+<?php
+/**
+ * The IMP_UI_Folder:: class is designed to provide a place to store common
+ * code shared among IMP's various UI views for folders.
+ *
+ * Copyright 2009 The Horde Project (http://www.horde.org/)
+ *
+ * See the enclosed file COPYING for license information (GPL). If you
+ * did not receive this file, see http://www.fsf.org/copyleft/gpl.html.
+ *
+ * @author Michael Slusarz <slusarz@horde.org>
+ * @package IMP
+ */
+class IMP_UI_Folder
+{
+ /**
+ * Temporary array used to determine tree levels.
+ *
+ * @var array
+ */
+ var $_moreMbox = array();
+
+ /**
+ * Create the tree images for a list of folder elements.
+ *
+ * @var array $rows Folder rows returned from IMP_Imap_Tree::build().
+ * @var array $options Additional options:
+ * <pre>
+ * 'expand_url' - (string) The URL to use for expand/collapse links.
+ * </pre>
+ *
+ * @return array An array of tree image strings.
+ */
+ public function getTreeImages($rows, $options = array())
+ {
+ $this->_moreMbox = array();
+ $out = array();
+
+ reset($rows);
+ while (list($key, $elt) = each($rows)) {
+ $out[$key] = $this->_getTreeImage($elt, $options);
+ }
+
+ return $out;
+ }
+
+ /**
+ * Create a tree image from a folder element entry.
+ *
+ * @var array $elt An entry returned from IMP_Imap_Tree::element().
+ * @var array $options See self::getTreeImages().
+ *
+ * @return string The image string.
+ */
+ protected function _getTreeImage($elt, $options = array())
+ {
+ $alt = $dir = null;
+ $dir2 = $elt['user_icon']
+ ? Horde::img($elt['icon'], $elt['alt'], null, $elt['icondir'])
+ : '<span class="foldersImg ' . $elt['class'] . '"></span>';
+ $imaptree = IMP_Imap_Tree::singleton();
+
+ if ($elt['children'] && isset($options['expand_url'])) {
+ $dir = Horde_Util::addParameter($options['expand_url'], 'folder', $elt['value']);
+
+ if ($imaptree->isOpen($elt['base_elt'])) {
+ if (!is_null($dir)) {
+ $dir = Horde_Util::addParameter($dir, 'actionID', 'collapse_folder');
+ $alt = _("Collapse Folder");
+ }
+
+ if (empty($GLOBALS['nls']['rtl'][$GLOBALS['language']])) {
+ $tree_img = ($elt['value'] == 'INBOX')
+ ? 9
+ : ($elt['peek'] ? 10 : 11);
+ } else {
+ $tree_img = ($elt['value'] == 'INBOX')
+ ? 12
+ : ($elt['peek'] ? 13 : 14);
+ }
+ } else {
+ if (!is_null($dir)) {
+ $dir = Horde_Util::addParameter($dir, 'actionID', 'expand_folder');
+ $alt = _("Expand Folder");
+ }
+
+ if (empty($GLOBALS['nls']['rtl'][$GLOBALS['language']])) {
+ $tree_img = ($elt['value'] == 'INBOX')
+ ? 15
+ : ($elt['peek'] ? 16 : 17);
+ } else {
+ $tree_img = ($elt['value'] == 'INBOX')
+ ? 18
+ : ($elt['peek'] ? 19 : 20);
+ }
+ }
+
+ if (!is_null($dir)) {
+ $dir = Horde::link($dir, $alt) . '<span class="treeImg treeImg' . $tree_img . '"></span></a>' . $dir2;
+ }
+ } else {
+ if (($elt['value'] == 'INBOX') && !$elt['peek']) {
+ $dir = '<span class="treeImg"></span>' . $dir2;
+ } else {
+ if (empty($GLOBALS['nls']['rtl'][$GLOBALS['language']])) {
+ $tree_img = ($elt['value'] == 'INBOX')
+ ? 3
+ : ($elt['peek'] ? 2 : 4);
+ } else {
+ $tree_img = ($elt['value'] == 'INBOX')
+ ? 7
+ : ($elt['peek'] ? 6 : 8);
+ }
+ $dir = '<span class="treeImg treeImg' . $tree_img . '"></span>' . $dir2;
+ }
+ }
+
+ $line = '';
+ $this->_moreMbox[$elt['level']] = $elt['peek'];
+ for ($i = 0; $i < $elt['level']; $i++) {
+ if ($this->_moreMbox[$i]) {
+ $line .= '<span class="treeImg treeImg' . (empty($GLOBALS['nls']['rtl'][$GLOBALS['language']]) ? 1 : 5) . '"></span>';
+ } else {
+ $line .= '<span class="treeImg"></span>';
+ }
+ }
+
+ return $line . $dir;
+ }
+
+}
}
/* Generate master folder list. */
-$show_unsub = ($subscribe = $prefs->getValue('subscribe'))
- ? Horde_Util::getFormData('show_unsub', false)
- : false;
+$imp_imap_tree = IMP_Imap_Tree::singleton();
+$mask = IMP_Imap_Tree::NEXT_SHOWCLOSED;
+$subscribe = $prefs->getValue('subscribe');
+if ($subscribe || !Horde_Util::getFormData('show_unsub')) {
+ $mask |= IMP_Imap_Tree::NEXT_SHOWSUB;
+}
+
+list($raw_rows,) = $imp_imap_tree->build($mask);
+
+$imp_ui_folder = new IMP_UI_Folder();
+$tree_imgs = $imp_ui_folder->getTreeImages($raw_rows);
-$imp_folder = IMP_Folder::singleton();
$folders = array();
-foreach ($imp_folder->flist(array(), $subscribe && !$show_unsub) as $val) {
- $folders[] = array_filter(array(
- 'l' => Horde_Text_Filter::filter($val['label'], 'space2html', array('charset' => $charset, 'encode' => true)),
- 'v' => $val['val']
- ));
+foreach ($raw_rows as $key => $val) {
+ $folders[] = array(
+ 'c' => intval($val['container']),
+ 'l' => $tree_imgs[$key] . ' ' . $val['name'],
+ 'v' => $val['value']
+ );
}
if (Horde_Util::getFormData('show_unsub') !== null) {
$title = _("Search");
Horde::addScriptFile('horde.js', 'horde', true);
+Horde::addScriptFile('stripe.js', 'horde', true);
Horde::addScriptFile('search.js', 'imp', true);
if ($dimp_view) {
</span>
</div>
- <div class="item" style="display:none">
+ <div class="item striped" style="display:none">
</div>
<if:virtualfolder>
}
/* Folder view. */
-#fmanager div, #fmanager div input {
+#checkAll0, #checkAll1 {
vertical-align: middle;
}
#fmanager div.folderChoose {
width: 20px;
display: -moz-inline-stack;
display: inline-block;
- vertical-align: middle;
+ vertical-align: bottom;
}
span.treeImg1 {