public function createTree($name, array $opts = array())
{
global $injector, $registry;
$opts = array_merge(array('parent' => null, 'render_params' => array(), 'render_type' => 'Javascript'), $opts);
$view = $registry->getView();
if ($name instanceof Horde_Tree_Renderer_Base) {
$tree = $name;
$parent = $opts['parent'];
} else {
$tree = $injector->getInstance('Horde_Core_Factory_Tree')->create($name, $opts['render_type'], array_merge(array('alternate' => true, 'lines' => true, 'lines_base' => true, 'nosession' => true), $opts['render_params']));
$parent = null;
}
$iterator = empty($opts['iterator']) ? new IMP_Ftree_IteratorFilter($this) : $opts['iterator'];
foreach ($iterator as $val) {
$after = '';
$elt_parent = null;
$mbox_ob = $val->mbox_ob;
$params = array();
switch ($opts['render_type']) {
case 'IMP_Tree_Flist':
if ($mbox_ob->vfolder_container) {
continue 2;
}
$is_open = true;
$label = $params['orig_label'] = empty($opts['basename']) ? $mbox_ob->abbrev_label : $mbox_ob->basename;
break;
case 'IMP_Tree_Jquerymobile':
$is_open = true;
$label = $mbox_ob->display_html;
$icon = $mbox_ob->icon;
$params['icon'] = $icon->icon;
$params['special'] = $mbox_ob->inbox || $mbox_ob->special;
$params['class'] = 'imp-folder';
$params['urlattributes'] = array('id' => 'imp-mailbox-' . $mbox_ob->form_to);
/* Force to flat tree so that non-polled parents don't cause
* polled children to be skipped by renderer (see Bug
* #11238). */
$elt_parent = $this[self::BASE_ELT];
break;
case 'Javascript':
$is_open = $val->open;
$label = empty($opts['basename']) ? htmlspecialchars($mbox_ob->abbrev_label) : htmlspecialchars($mbox_ob->basename);
$icon = $mbox_ob->icon;
$params['icon'] = $icon->icon;
$params['iconopen'] = $icon->iconopen;
break;
}
if (!empty($opts['poll_info']) && $val->polled) {
$poll_info = $mbox_ob->poll_info;
if ($poll_info->unseen) {
switch ($opts['render_type']) {
case 'IMP_Tree_Jquerymobile':
$after = $poll_info->unseen;
break;
default:
$label = '<strong>' . $label . '</strong> (' . $poll_info->unseen . ')';
}
}
}
if ($val->container) {
$params['container'] = true;
} else {
switch ($view) {
case $registry::VIEW_SMARTMOBILE:
$url = new Horde_Core_Smartmobile_Url();
$url->add('mbox', $mbox_ob->form_to);
$url->setAnchor('mailbox');
$params['url'] = strval($url);
break;
default:
$params['url'] = $mbox_ob->url('mailbox')->setRaw(true);
break;
}
if (!$val->subscribed) {
$params['class'] = 'mboxunsub';
}
}
$checkbox = empty($opts['checkbox']) ? '' : '<input type="checkbox" class="checkbox" name="mbox_list[]" value="' . $mbox_ob->form_to . '"';
if ($val->nonimap) {
$checkbox .= ' disabled="disabled"';
}
if ($val->vfolder && !empty($opts['editvfolder']) && $val->container) {
$after = ' [' . $registry->getServiceLink('prefs', 'imp')->add('group', 'searches')->link(array('title' => _("Edit Virtual Folder"))) . _("Edit") . '</a>' . ']';
}
if (is_null($elt_parent)) {
$elt_parent = $val->parent;
}
$tree->addNode(array('id' => $mbox_ob->form_to, 'parent' => $elt_parent->base_elt ? $parent : $elt_parent->mbox_ob->form_to, 'label' => $label, 'expanded' => isset($opts['open']) ? $opts['open'] : $is_open, 'params' => $params, 'right' => $after, 'left' => empty($opts['checkbox']) ? null : $checkbox . ' />'));
}
return $tree;
}