From: Michael M Slusarz Date: Mon, 28 Sep 2009 20:47:32 +0000 (-0600) Subject: Abstract out folder tree image generation. X-Git-Url: https://git.internetallee.de/?a=commitdiff_plain;h=3dbe22020d3fae879d21f0ada99251a12edf7e25;p=horde.git Abstract out folder tree image generation. Use this nicer tree in the advanced search page. --- diff --git a/imp/folders.php b/imp/folders.php index f266bca44..bf1f2e1ce 100644 --- a/imp/folders.php +++ b/imp/folders.php @@ -417,11 +417,16 @@ if (!empty($newmsgs)) { } } +/* 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") . ''; @@ -445,65 +450,8 @@ foreach ($raw_rows as $val) { $val['name'] = Horde::link(Horde_Util::addParameter($name_url, 'mailbox', $val['value']), $val['vfolder'] ? $val['base_elt']['l'] : $val['display']) . $val['name'] . ''; } - $dir2 = $val['user_icon'] - ? Horde::img($val['icon'], $val['alt'], null, $val['icondir']) - : ''; - - 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) . '' . $dir2; - } else { - if (($val['value'] == 'INBOX') && !$val['peek']) { - $dir = '' . $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 = '' . $dir2; - } - } + $val['line'] = $tree_imgs[$key]; - $line = ''; - $morembox[$val['level']] = $val['peek']; - for ($i = 0; $i < $val['level']; $i++) { - if ($morembox[$i]) { - $line .= ''; - } else { - $line .= ''; - } - } - $val['line'] = $line . $dir; $rows[] = $val; } diff --git a/imp/js/search.js b/imp/js/search.js index 53fb3170b..0d67c0008 100644 --- a/imp/js/search.js +++ b/imp/js/search.js @@ -33,11 +33,13 @@ var ImpSearch = { 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) @@ -351,7 +353,7 @@ var ImpSearch = { 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'); diff --git a/imp/lib/UI/Folder.php b/imp/lib/UI/Folder.php new file mode 100644 index 000000000..bb19e14f4 --- /dev/null +++ b/imp/lib/UI/Folder.php @@ -0,0 +1,131 @@ + + * @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: + *
+     * 'expand_url' - (string) The URL to use for expand/collapse links.
+     * 
+ * + * @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']) + : ''; + $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) . '' . $dir2; + } + } else { + if (($elt['value'] == 'INBOX') && !$elt['peek']) { + $dir = '' . $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 = '' . $dir2; + } + } + + $line = ''; + $this->_moreMbox[$elt['level']] = $elt['peek']; + for ($i = 0; $i < $elt['level']; $i++) { + if ($this->_moreMbox[$i]) { + $line .= ''; + } else { + $line .= ''; + } + } + + return $line . $dir; + } + +} diff --git a/imp/search.php b/imp/search.php index c63db6431..c07a6f4fa 100644 --- a/imp/search.php +++ b/imp/search.php @@ -80,17 +80,25 @@ if (!empty($criteria)) { } /* 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) { @@ -190,6 +198,7 @@ Horde::addInlineScript($on_domload, 'dom'); $title = _("Search"); Horde::addScriptFile('horde.js', 'horde', true); +Horde::addScriptFile('stripe.js', 'horde', true); Horde::addScriptFile('search.js', 'imp', true); if ($dimp_view) { diff --git a/imp/templates/search/search.html b/imp/templates/search/search.html index 5255f216e..ba4382a32 100644 --- a/imp/templates/search/search.html +++ b/imp/templates/search/search.html @@ -54,7 +54,7 @@ -