From 7e43fe55fb35b37913f7d0f2dad9ca895ce3d935 Mon Sep 17 00:00:00 2001 From: Michael M Slusarz Date: Wed, 25 Aug 2010 22:40:18 -0600 Subject: [PATCH] Move Tree driver code into Base class --- framework/Core/lib/Horde/Core/Factory/Tree.php | 2 +- framework/Core/lib/Horde/Core/Tree/Html.php | 2 +- framework/Core/lib/Horde/Core/Tree/Javascript.php | 6 +- framework/Core/lib/Horde/Core/Tree/Simplehtml.php | 4 +- framework/Tree/lib/Horde/Tree.php | 408 +-------------------- framework/Tree/lib/Horde/Tree/Base.php | 420 ++++++++++++++++++++++ framework/Tree/lib/Horde/Tree/Html.php | 22 +- framework/Tree/lib/Horde/Tree/Select.php | 11 +- framework/Tree/lib/Horde/Tree/Simplehtml.php | 16 +- framework/Tree/package.xml | 5 +- imp/lib/Imap/Tree.php | 2 +- imp/lib/Tree/Flist.php | 11 +- 12 files changed, 463 insertions(+), 446 deletions(-) create mode 100644 framework/Tree/lib/Horde/Tree/Base.php diff --git a/framework/Core/lib/Horde/Core/Factory/Tree.php b/framework/Core/lib/Horde/Core/Factory/Tree.php index aecebe6dd..2a0fd981e 100644 --- a/framework/Core/lib/Horde/Core/Factory/Tree.php +++ b/framework/Core/lib/Horde/Core/Factory/Tree.php @@ -59,7 +59,7 @@ class Horde_Core_Factory_Tree * @param array $params Any additional parameters the constructor * needs. * - * @return Horde_Tree The singleton instance. + * @return Horde_Tree_Base The singleton instance. * @throws Horde_Tree_Exception */ public function getTree($name, $renderer, array $params = array()) diff --git a/framework/Core/lib/Horde/Core/Tree/Html.php b/framework/Core/lib/Horde/Core/Tree/Html.php index 793062811..b9a5e7c6c 100644 --- a/framework/Core/lib/Horde/Core/Tree/Html.php +++ b/framework/Core/lib/Horde/Core/Tree/Html.php @@ -48,7 +48,7 @@ class Horde_Core_Tree_Html extends Horde_Tree_Html */ protected function _generateUrlTag($node_id) { - return Horde::link(Horde::selfUrl()->add(self::TOGGLE . $this->_instance, $node_id)); + return Horde::link(Horde::selfUrl()->add(Horde_Tree::TOGGLE . $this->_instance, $node_id)); } /** diff --git a/framework/Core/lib/Horde/Core/Tree/Javascript.php b/framework/Core/lib/Horde/Core/Tree/Javascript.php index f84739aaa..eca7f4622 100644 --- a/framework/Core/lib/Horde/Core/Tree/Javascript.php +++ b/framework/Core/lib/Horde/Core/Tree/Javascript.php @@ -1,7 +1,7 @@ - * @author Michael Slusarz + * @author Michael Slusarz * @category Horde * @license http://www.fsf.org/copyleft/lgpl.html LGPL * @package Core diff --git a/framework/Core/lib/Horde/Core/Tree/Simplehtml.php b/framework/Core/lib/Horde/Core/Tree/Simplehtml.php index a0873da06..3d712c8a4 100644 --- a/framework/Core/lib/Horde/Core/Tree/Simplehtml.php +++ b/framework/Core/lib/Horde/Core/Tree/Simplehtml.php @@ -8,7 +8,7 @@ * See the enclosed file COPYING for license information (LGPL). If you * did not receive this file, see http://www.fsf.org/copyleft/lgpl.html. * - * @author Michael Slusarz + * @author Michael Slusarz * @category Horde * @license http://www.fsf.org/copyleft/lgpl.html LGPL * @package Core @@ -24,7 +24,7 @@ class Horde_Core_Tree_Simplehtml extends Horde_Tree_Simplehtml */ protected function _generateUrlTag($node_id) { - return Horde::link(Horde::selfUrl()->add(self::TOGGLE . $this->_instance, $node_id)); + return Horde::link(Horde::selfUrl()->add(Horde_Tree::TOGGLE . $this->_instance, $node_id)); } } diff --git a/framework/Tree/lib/Horde/Tree.php b/framework/Tree/lib/Horde/Tree.php index 16d8203e6..452eca71a 100644 --- a/framework/Tree/lib/Horde/Tree.php +++ b/framework/Tree/lib/Horde/Tree.php @@ -9,11 +9,12 @@ * did not receive this file, see http://www.fsf.org/copyleft/lgpl.html. * * @author Marko Djukic + * @author Michael Slusarz * @category Horde * @license http://www.fsf.org/copyleft/lgpl.html LGPL * @package Tree */ -class Horde_Tree implements Countable +class Horde_Tree { /* Display extra columns. */ const EXTRA_LEFT = 0; @@ -26,80 +27,6 @@ class Horde_Tree implements Countable const TOGGLE = 'ht_toggle_'; /** - * Allowed parameters for nodes. - * - * @var array - */ - protected $_allowed = array(); - - /** - * The name of this instance. - * - * @var string - */ - protected $_instance = null; - - /** - * Hash with header information. - * - * @var array - */ - protected $_header = array(); - - /** - * An array containing all the tree nodes. - * - * @var array - */ - protected $_nodes = array(); - - /** - * The top-level nodes in the tree. - * - * @var array - */ - protected $_root_nodes = array(); - - /** - * Keep count of how many extra columns there are on the left side - * of the node. - * - * @var integer - */ - protected $_colsLeft = 0; - - /** - * Keep count of how many extra columns there are on the right side - * of the node. - * - * @var integer - */ - protected $_colsRight = 0; - - /** - * Option values. - * - * @var array - */ - protected $_options = array( - 'lines' => true - ); - - /** - * Stores the sorting criteria temporarily. - * - * @var string - */ - protected $_sortCriteria; - - /** - * Should the tree be rendered statically? - * - * @var boolean - */ - protected $_static = false; - - /** * Attempts to return a concrete instance. * * @param string $name The name of this tree instance. @@ -138,335 +65,4 @@ class Horde_Tree implements Countable throw new Horde_Tree_Exception(__CLASS__ . ' renderer not found: ' . $renderer); } - /** - * Constructor. - * - * @param string $name The name of this tree instance. - * @param array $params Additional parameters. - *
-     * session - (string) The name of the session array key to store data.
-     *           If this is an empty string, session storage will be disabled.
-     *           DEFAULT: No session storage
-     * 
- */ - public function __construct($name, array $params = array()) - { - $this->_instance = $name; - $this->setOption($params); - - if (!empty($this->_options['session']) && - !isset($_SESSION[$this->_options['session']][$this->_instance])) { - $_SESSION[$this->_options['session']][$this->_instance] = array(); - } - } - - /** - * Provide a simpler renderer to fallback to. - * - * @return string The next best renderer. - * @throws Horde_Tree_Exception - */ - public function fallback() - { - throw new Horde_Tree_Exception('No fallback renderer found.'); - } - - /** - * Returns the tree. - * - * @param boolean $static If true the tree nodes can't be expanded and - * collapsed and the tree gets rendered expanded. - * - * @return string The HTML code of the rendered tree. - */ - public function getTree($static = false) - { - return ''; - } - - /** - * Renders the tree. - * - * @param boolean $static If true the tree nodes can't be expanded and - * collapsed and the tree gets rendered expanded. - */ - public function renderTree($static = false) - { - echo $this->getTree($static); - } - - /** - * Sets an option. - * - * @param mixed $option The option name -or- an array of option - * name/value pairs. See constructor for available - * options. - * @param mixed $value The option's value. - */ - public function setOption($options, $value = null) - { - if (!is_array($options)) { - $options = array($options => $value); - } - - foreach ($options as $option => $value) { - $this->_options[$option] = $value; - } - } - - /** - * Gets an option's value. - * - * @param string $option The name of the option to fetch. - * - * @return mixed The option's value. - */ - public function getOption($option) - { - return isset($this->_options[$option]) - ? $this->_options[$option] - : null; - } - - /** - * Adds a node to the node tree array. - * - * @param string $id The unique node id. - * @param string $parent The parent's unique node id. - * @param string $label The text label for the node. - * @param string $indent Deprecated, this is calculated automatically - * based on the parent node. - * @param boolean $expanded Is this level expanded or not. - * @param array $params Any other parameters to set (@see - * self::addNodeParams() for full details). - * @param array $extra_right Any other columns to display to the right of - * the tree. - * @param array $extra_left Any other columns to display to the left of - * the tree. - */ - public function addNode($id, $parent, $label, $indent = null, - $expanded = true, $params = array(), - $extra_right = array(), $extra_left = array()) - { - $nodeid = $this->_nodeId($id); - - if (!empty($this->_options['session'])) { - $sess = &$_SESSION[$this->_options['session']][$this->_instance]; - $toggle_id = Horde_Util::getFormData(self::TOGGLE . $this->_instance); - - if ($nodeid == $toggle_id) { - /* We have a URL toggle request for this node. */ - $expanded = $sess['expanded'][$nodeid] = isset($sess['expanded'][$id]) - /* Use session state if it is set. */ - ? (!$sess['expanded'][$nodeid]) - /* Otherwise use what was passed through the function. */ - : (!$expanded); - } elseif (isset($sess['expanded'][$nodeid])) { - /* If we have a saved session state use it. */ - $expanded = $sess['expanded'][$nodeid]; - } - } - - $this->_nodes[$nodeid]['label'] = $label; - $this->_nodes[$nodeid]['expanded'] = $expanded; - - /* If any params included here add them now. */ - if (!empty($params)) { - $this->addNodeParams($id, $params); - } - - /* If any extra columns included here add them now. */ - if (!empty($extra_right)) { - $this->addNodeExtra($id, self::EXTRA_RIGHT, $extra_right); - } - if (!empty($extra_left)) { - $this->addNodeExtra($id, self::EXTRA_LEFT, $extra_left); - } - - if (is_null($parent)) { - if (!in_array($nodeid, $this->_root_nodes)) { - $this->_root_nodes[] = $nodeid; - } - } else { - $parent = $this->_nodeId($parent); - if (empty($this->_nodes[$parent]['children'])) { - $this->_nodes[$parent]['children'] = array(); - } - if (!in_array($nodeid, $this->_nodes[$parent]['children'])) { - $this->_nodes[$parent]['children'][] = $nodeid; - } - } - } - - /** - * Adds additional parameters to a node. - * - * @param string $id The unique node id. - * @param array $params Parameters to set (key/value pairs). - */ - public function addNodeParams($id, $params = array()) - { - $id = $this->_nodeId($id); - - if (!is_array($params)) { - $params = array($params); - } - - foreach ($params as $p_id => $p_val) { - // Set only allowed and non-null params. - if (!is_null($p_val) && in_array($p_id, $this->_allowed)) { - $this->_nodes[$id][$p_id] = is_object($p_val) - ? strval($p_val) - : $p_val; - } - } - } - - /** - * Adds extra columns to be displayed to the side of the node. - * - * @param mixed $id The unique node id. - * @param integer $side Which side to place the extra columns on. - * @param array $extra Extra columns to display. - */ - public function addNodeExtra($id, $side, $extra) - { - $id = $this->_nodeId($id); - - if (!is_array($extra)) { - $extra = array($extra); - } - - $col_count = count($extra); - - switch ($side) { - case self::EXTRA_LEFT: - $this->_nodes[$id]['extra'][self::EXTRA_LEFT] = $extra; - if ($col_count > $this->_colsLeft) { - $this->_colsLeft = $col_count; - } - break; - - case self::EXTRA_RIGHT: - $this->_nodes[$id]['extra'][self::EXTRA_RIGHT] = $extra; - if ($col_count > $this->_colsRight) { - $this->_colsRight = $col_count; - } - break; - } - } - - /** - * Sorts the tree by the specified node property. - * - * @param string $criteria The node property to sort by. - * @param integer $id Used internally for recursion. - */ - public function sort($criteria, $id = -1) - { - if (!isset($this->_nodes[$id]['children'])) { - return; - } - - if ($criteria == 'key') { - ksort($this->_nodes[$id]['children']); - } else { - $this->_sortCriteria = $criteria; - usort($this->_nodes[$id]['children'], array($this, 'sortHelper')); - } - - foreach ($this->_nodes[$id]['children'] as $child) { - $this->sort($criteria, $child); - } - } - - /** - * Helper method for sort() to compare two tree elements. - */ - public function sortHelper($a, $b) - { - if (!isset($this->_nodes[$a][$this->_sortCriteria])) { - return 1; - } - - if (!isset($this->_nodes[$b][$this->_sortCriteria])) { - return -1; - } - - return strcoll($this->_nodes[$a][$this->_sortCriteria], - $this->_nodes[$b][$this->_sortCriteria]); - } - - /** - * Returns whether the specified node is currently expanded. - * - * @param mixed $id The unique node id. - * - * @return boolean True if the specified node is expanded. - */ - public function isExpanded($id) - { - $id = $this->_nodeId($id); - - return isset($this->_nodes[$id]) - ? $this->_nodes[$id]['expanded'] - : false; - } - - /** - * Adds column headers to the tree table. - * - * @param array $header An array containing hashes with header - * information. - */ - public function setHeader($header) - { - $this->_header = $header; - } - - /** - * Set the indent level for each node in the tree. - * - * @param array $nodes TODO - * @param integer $indent TODO - */ - protected function _buildIndents($nodes, $indent = 0) - { - foreach ($nodes as $id) { - $this->_nodes[$id]['indent'] = $indent; - if (!empty($this->_nodes[$id]['children'])) { - $this->_buildIndents($this->_nodes[$id]['children'], $indent + 1); - } - } - } - - /** - * Check the current environment to see if we can render the tree. - * - * @return boolean Whether or not this backend will function. - */ - public function isSupported() - { - return true; - } - - /** - * Returns the escaped node ID. - * - * @param string $id Node ID. - * - * @return string Escaped node ID. - */ - protected function _nodeId($id) - { - return rawurlencode($id); - } - - /* Countable methods. */ - - public function count() - { - return count($this->_nodes); - } - } diff --git a/framework/Tree/lib/Horde/Tree/Base.php b/framework/Tree/lib/Horde/Tree/Base.php new file mode 100644 index 000000000..36dd90fc6 --- /dev/null +++ b/framework/Tree/lib/Horde/Tree/Base.php @@ -0,0 +1,420 @@ + + * @category Horde + * @license http://www.fsf.org/copyleft/lgpl.html LGPL + * @package Tree + */ +abstract class Horde_Tree_Base implements Countable +{ + /** + * Allowed parameters for nodes. + * + * @var array + */ + protected $_allowed = array(); + + /** + * The name of this instance. + * + * @var string + */ + protected $_instance = null; + + /** + * Hash with header information. + * + * @var array + */ + protected $_header = array(); + + /** + * An array containing all the tree nodes. + * + * @var array + */ + protected $_nodes = array(); + + /** + * The top-level nodes in the tree. + * + * @var array + */ + protected $_root_nodes = array(); + + /** + * Keep count of how many extra columns there are on the left side + * of the node. + * + * @var integer + */ + protected $_colsLeft = 0; + + /** + * Keep count of how many extra columns there are on the right side + * of the node. + * + * @var integer + */ + protected $_colsRight = 0; + + /** + * Option values. + * + * @var array + */ + protected $_options = array( + 'lines' => true + ); + + /** + * Stores the sorting criteria temporarily. + * + * @var string + */ + protected $_sortCriteria; + + /** + * Should the tree be rendered statically? + * + * @var boolean + */ + protected $_static = false; + + /** + * Constructor. + * + * @param string $name The name of this tree instance. + * @param array $params Additional parameters. + *
+     * session - (string) The name of the session array key to store data.
+     *           If this is an empty string, session storage will be disabled.
+     *           DEFAULT: No session storage
+     * 
+ */ + public function __construct($name, array $params = array()) + { + $this->_instance = $name; + $this->setOption($params); + + if (!empty($this->_options['session']) && + !isset($_SESSION[$this->_options['session']][$this->_instance])) { + $_SESSION[$this->_options['session']][$this->_instance] = array(); + } + } + + /** + * Provide a simpler renderer to fallback to. + * + * @return string The next best renderer. + * @throws Horde_Tree_Exception + */ + public function fallback() + { + throw new Horde_Tree_Exception('No fallback renderer found.'); + } + + /** + * Returns the tree. + * + * @param boolean $static If true the tree nodes can't be expanded and + * collapsed and the tree gets rendered expanded. + * + * @return string The HTML code of the rendered tree. + */ + abstract public function getTree($static = false); + + /** + * Renders the tree. + * + * @param boolean $static If true the tree nodes can't be expanded and + * collapsed and the tree gets rendered expanded. + */ + public function renderTree($static = false) + { + echo $this->getTree($static); + } + + /** + * Sets an option. + * + * @param mixed $option The option name -or- an array of option + * name/value pairs. See constructor for available + * options. + * @param mixed $value The option's value. + */ + public function setOption($options, $value = null) + { + if (!is_array($options)) { + $options = array($options => $value); + } + + foreach ($options as $option => $value) { + $this->_options[$option] = $value; + } + } + + /** + * Gets an option's value. + * + * @param string $option The name of the option to fetch. + * + * @return mixed The option's value. + */ + public function getOption($option) + { + return isset($this->_options[$option]) + ? $this->_options[$option] + : null; + } + + /** + * Adds a node to the node tree array. + * + * @param string $id The unique node id. + * @param string $parent The parent's unique node id. + * @param string $label The text label for the node. + * @param string $indent Deprecated, this is calculated automatically + * based on the parent node. + * @param boolean $expanded Is this level expanded or not. + * @param array $params Any other parameters to set (@see + * self::addNodeParams() for full details). + * @param array $extra_right Any other columns to display to the right of + * the tree. + * @param array $extra_left Any other columns to display to the left of + * the tree. + */ + public function addNode($id, $parent, $label, $indent = null, + $expanded = true, $params = array(), + $extra_right = array(), $extra_left = array()) + { + $nodeid = $this->_nodeId($id); + + if (!empty($this->_options['session'])) { + $sess = &$_SESSION[$this->_options['session']][$this->_instance]; + $toggle_id = Horde_Util::getFormData(Horde_Tree::TOGGLE . $this->_instance); + + if ($nodeid == $toggle_id) { + /* We have a URL toggle request for this node. */ + $expanded = $sess['expanded'][$nodeid] = isset($sess['expanded'][$id]) + /* Use session state if it is set. */ + ? (!$sess['expanded'][$nodeid]) + /* Otherwise use what was passed through the function. */ + : (!$expanded); + } elseif (isset($sess['expanded'][$nodeid])) { + /* If we have a saved session state use it. */ + $expanded = $sess['expanded'][$nodeid]; + } + } + + $this->_nodes[$nodeid]['label'] = $label; + $this->_nodes[$nodeid]['expanded'] = $expanded; + + /* If any params included here add them now. */ + if (!empty($params)) { + $this->addNodeParams($id, $params); + } + + /* If any extra columns included here add them now. */ + if (!empty($extra_right)) { + $this->addNodeExtra($id, Horde_Tree::EXTRA_RIGHT, $extra_right); + } + if (!empty($extra_left)) { + $this->addNodeExtra($id, Horde_Tree::EXTRA_LEFT, $extra_left); + } + + if (is_null($parent)) { + if (!in_array($nodeid, $this->_root_nodes)) { + $this->_root_nodes[] = $nodeid; + } + } else { + $parent = $this->_nodeId($parent); + if (empty($this->_nodes[$parent]['children'])) { + $this->_nodes[$parent]['children'] = array(); + } + if (!in_array($nodeid, $this->_nodes[$parent]['children'])) { + $this->_nodes[$parent]['children'][] = $nodeid; + } + } + } + + /** + * Adds additional parameters to a node. + * + * @param string $id The unique node id. + * @param array $params Parameters to set (key/value pairs). + */ + public function addNodeParams($id, $params = array()) + { + $id = $this->_nodeId($id); + + if (!is_array($params)) { + $params = array($params); + } + + foreach ($params as $p_id => $p_val) { + // Set only allowed and non-null params. + if (!is_null($p_val) && in_array($p_id, $this->_allowed)) { + $this->_nodes[$id][$p_id] = is_object($p_val) + ? strval($p_val) + : $p_val; + } + } + } + + /** + * Adds extra columns to be displayed to the side of the node. + * + * @param mixed $id The unique node id. + * @param integer $side Which side to place the extra columns on. + * @param array $extra Extra columns to display. + */ + public function addNodeExtra($id, $side, $extra) + { + $id = $this->_nodeId($id); + + if (!is_array($extra)) { + $extra = array($extra); + } + + $col_count = count($extra); + + switch ($side) { + case Horde_Tree::EXTRA_LEFT: + $this->_nodes[$id]['extra'][Horde_Tree::EXTRA_LEFT] = $extra; + if ($col_count > $this->_colsLeft) { + $this->_colsLeft = $col_count; + } + break; + + case Horde_Tree::EXTRA_RIGHT: + $this->_nodes[$id]['extra'][Horde_Tree::EXTRA_RIGHT] = $extra; + if ($col_count > $this->_colsRight) { + $this->_colsRight = $col_count; + } + break; + } + } + + /** + * Sorts the tree by the specified node property. + * + * @param string $criteria The node property to sort by. + * @param integer $id Used internally for recursion. + */ + public function sort($criteria, $id = -1) + { + if (!isset($this->_nodes[$id]['children'])) { + return; + } + + if ($criteria == 'key') { + ksort($this->_nodes[$id]['children']); + } else { + $this->_sortCriteria = $criteria; + usort($this->_nodes[$id]['children'], array($this, 'sortHelper')); + } + + foreach ($this->_nodes[$id]['children'] as $child) { + $this->sort($criteria, $child); + } + } + + /** + * Helper method for sort() to compare two tree elements. + */ + public function sortHelper($a, $b) + { + if (!isset($this->_nodes[$a][$this->_sortCriteria])) { + return 1; + } + + if (!isset($this->_nodes[$b][$this->_sortCriteria])) { + return -1; + } + + return strcoll($this->_nodes[$a][$this->_sortCriteria], + $this->_nodes[$b][$this->_sortCriteria]); + } + + /** + * Returns whether the specified node is currently expanded. + * + * @param mixed $id The unique node id. + * + * @return boolean True if the specified node is expanded. + */ + public function isExpanded($id) + { + $id = $this->_nodeId($id); + + return isset($this->_nodes[$id]) + ? $this->_nodes[$id]['expanded'] + : false; + } + + /** + * Adds column headers to the tree table. + * + * @param array $header An array containing hashes with header + * information. + */ + public function setHeader($header) + { + $this->_header = $header; + } + + /** + * Set the indent level for each node in the tree. + * + * @param array $nodes TODO + * @param integer $indent TODO + */ + protected function _buildIndents($nodes, $indent = 0) + { + foreach ($nodes as $id) { + $this->_nodes[$id]['indent'] = $indent; + if (!empty($this->_nodes[$id]['children'])) { + $this->_buildIndents($this->_nodes[$id]['children'], $indent + 1); + } + } + } + + /** + * Check the current environment to see if we can render the tree. + * + * @return boolean Whether or not this backend will function. + */ + public function isSupported() + { + return true; + } + + /** + * Returns the escaped node ID. + * + * @param string $id Node ID. + * + * @return string Escaped node ID. + */ + protected function _nodeId($id) + { + return rawurlencode($id); + } + + /* Countable methods. */ + + public function count() + { + return count($this->_nodes); + } + +} diff --git a/framework/Tree/lib/Horde/Tree/Html.php b/framework/Tree/lib/Horde/Tree/Html.php index 24ef09c02..2357c39d4 100644 --- a/framework/Tree/lib/Horde/Tree/Html.php +++ b/framework/Tree/lib/Horde/Tree/Html.php @@ -1,7 +1,6 @@ _addColumn($column) . $extra[$column] . ''; @@ -293,8 +285,8 @@ class Horde_Tree_Html extends Horde_Tree $line .= ''; - if (isset($node['extra'][self::EXTRA_RIGHT])) { - $extra = $node['extra'][self::EXTRA_RIGHT]; + if (isset($node['extra'][Horde_Tree::EXTRA_RIGHT])) { + $extra = $node['extra'][Horde_Tree::EXTRA_RIGHT]; $cMax = count($extra); for ($c = 0, $cMax = count($extra); $c < $cMax; ++$c) { $line .= $this->_addColumn($column++) . $extra[$c] . ''; @@ -495,7 +487,7 @@ class Horde_Tree_Html extends Horde_Tree protected function _generateUrlTag($node_id) { $url = new Horde_Url($_SERVER['PHP_SELF']); - return $url->add(self::TOGGLE . $this->_instance, $node_id)->link(); + return $url->add(Horde_Tree::TOGGLE . $this->_instance, $node_id)->link(); } /** diff --git a/framework/Tree/lib/Horde/Tree/Select.php b/framework/Tree/lib/Horde/Tree/Select.php index d55036c24..2b9633aee 100644 --- a/framework/Tree/lib/Horde/Tree/Select.php +++ b/framework/Tree/lib/Horde/Tree/Select.php @@ -1,7 +1,6 @@ tag rendering. + * The Horde_Tree_Select:: class provides