Example #1
0
 /**
  * Return a string containing an <option> listing of the given
  * gallery array.
  *
  * @param array $params  An array of options:
  *   <pre>
  *     (integer)selected  The gallery_id of the gallery that is selected
  *     (integer)perm      The permissions filter to use [Horde_Perms::SHOW]
  *     (mixed)attributes  Restrict the galleries returned to those matching
  *                        the filters. Can be an array of attribute/values
  *                        pairs or a gallery owner username.
  *     (boolean)all_levels
  *     (integer)from      The gallery to start listing at.
  *     (integer)count     The number of galleries to return.
  *     (integer)ignore    An Ansel_Gallery id to ignore when building the tree.
  *   </pre>
  *
  * @return string  The HTML to display the option list.
  */
 public static function selectGalleries($params = array())
 {
     $galleries = $GLOBALS['injector']->getInstance('Ansel_Storage')->listGalleries($params);
     $params = new Horde_Support_Array($params);
     $tree = $GLOBALS['injector']->getInstance('Horde_Core_Factory_Tree')->create('gallery_tree', 'Select');
     // Remove the ignored gallery, make sure it's also not the selected
     if ($params->ignore) {
         if ($params->selected == $params->ignore) {
             $params->selected = null;
         }
     }
     foreach ($galleries as $gallery) {
         $gallery_id = $gallery->id;
         $gallery_name = $gallery->get('name');
         $label = Horde_String::abbreviate($gallery_name);
         $len = Horde_String::length($gallery_name);
         $treeparams = array();
         $treeparams['selected'] = $gallery_id == $params->selected;
         $parent = $gallery->getParent();
         $parent = empty($parent) ? null : $parent->id;
         $tree->addNode(array('id' => $gallery->id, 'parent' => $parent, 'label' => $label, 'params' => $treeparams));
     }
     return $tree->getTree();
 }
Example #2
0
 /**
  */
 protected function _buildTree($node_id)
 {
     if (isset($this->_filter[$node_id])) {
         return '';
     }
     $node =& $this->_nodes[$node_id];
     if ($abbrev = $this->getOption('abbrev')) {
         $orig_label = $node['label'];
         $node['label'] = Horde_String::abbreviate($node['orig_label'], $abbrev - $node['indent'] * 2);
     } else {
         $orig_label = null;
     }
     /* Ignore container elements. */
     if (!$this->getOption('container_select') && !empty($node['container'])) {
         if (!empty($node['vfolder'])) {
             return '';
         }
         $node_id = '';
         $this->_nodes[$node_id] = $node;
     }
     $out = parent::_buildTree($node_id);
     if ($orig_label) {
         $node['label'] = $orig_label;
     }
     return $out;
 }
Example #3
0
 /**
  * AJAX action: Generate the sent-mail select list.
  *
  * Variables used: NONE
  *
  * @return object  An object with the following properties:
  *   - flist: (array) TODO
  */
 public function sentMailList()
 {
     global $injector;
     /* Check to make sure the sent-mail mailboxes are created; they need
      * to exist to show up in drop-down list. */
     $identity = $injector->getInstance('IMP_Identity');
     foreach ($identity->getAllSentmail() as $mbox) {
         $mbox->create();
     }
     $flist = array();
     $iterator = new IMP_Ftree_IteratorFilter($injector->getInstance('IMP_Ftree'));
     $iterator->add($iterator::NONIMAP);
     foreach ($iterator as $val) {
         $mbox_ob = $val->mbox_ob;
         $tmp = array('f' => $mbox_ob->display, 'l' => Horde_String::abbreviate(str_repeat(' ', 2 * $val->level) . $mbox_ob->basename, 30), 'v' => $val->container ? '' : $mbox_ob->form_to);
         if ($tmp['f'] == $tmp['v']) {
             unset($tmp['f']);
         }
         $flist[] = $tmp;
     }
     $ret = new stdClass();
     $ret->flist = $flist;
     return $ret;
 }
Example #4
0
 /**
  * Creates a Horde_Tree representation of the current tree.
  *
  * @param string|Horde_Tree $name  Either the tree name, or a Horde_Tree
  *                                 object to add nodes to.
  * @param array $opts              Additional options:
  *   - basename: (boolean) Use raw basename instead of abbreviated label?
  *               DEFAULT: false
  *   - checkbox: (boolean) Display checkboxes?
  *               DEFAULT: false
  *   - editvfolder: (boolean) Display vfolder edit links?
  *                  DEFAULT: false
  *   - iterator: (Iterator) Tree iterator to use.
  *               DEFAULT: Base iterator.
  *   - open: (boolean) Force child mailboxes to this status.
  *           DEFAULT: null
  *   - parent: (string) The parent object of the current level.
  *             DEFAULT: null (add to base level)
  *   - poll_info: (boolean) Include poll information in output?
  *                DEFAULT: false
  *   - render_params: (array) List of params to pass to renderer if
  *                    auto-creating.
  *                    DEFAULT: 'alternate', 'lines', and 'lines_base'
  *                             are passed in with true values.
  *   - render_type: (string) The renderer name.
  *                  DEFAULT: Javascript
  *
  * @return Horde_Tree  The tree object.
  */
 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 'IMP_Tree_Simplehtml':
                 $is_open = $val->open;
                 if ($tree->shouldToggle($mbox_ob->form_to)) {
                     if ($is_open) {
                         $this->collapse($val);
                     } else {
                         $this->expand($val);
                     }
                     $is_open = !$is_open;
                 }
                 $label = htmlspecialchars(Horde_String::abbreviate($mbox_ob->abbrev_label, 30 - $val->level * 2));
                 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>&nbsp;(' . $poll_info->unseen . ')';
                 }
             }
         }
         if ($val->container) {
             $params['container'] = true;
         } else {
             switch ($view) {
                 case $registry::VIEW_MINIMAL:
                     $params['url'] = IMP_Minimal_Mailbox::url(array('mailbox' => $mbox_ob));
                     break;
                 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 = '&nbsp[' . $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;
 }