1 <?php /* vim: set binary expandtab tabstop=4 shiftwidth=4 textwidth=80:
2 -------------------------------------------------------------------------------
5 -------------------------------------------------------------------------------
6 This file is part of meconlib.
8 meconlib is free software; you can redistribute it and/or modify it under
9 the terms of the GNU General Public License as published by the Free
10 Software Foundation; either version 2 of the License, or (at your option)
13 meconlib is distributed in the hope that it will be useful, but WITHOUT
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
15 FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License; if not,
18 write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
19 Boston, MA 02111-1307 USA
20 -------------------------------------------------------------------------------
21 Creado: jue jul 17 15:32:52 ART 2003
22 Autor: Gonzalo Merayo <gmeray@mecon.gov.ar>
23 Leandro Lucarella <llucar@mecon.gov.ar>
24 -------------------------------------------------------------------------------
26 -----------------------------------------------------------------------------*/
28 require_once 'HTML/Table.php';
29 require_once 'HTML/Image.php';
31 class HTML_Arbol extends HTML_Table
40 * @param array $datos Datos con los cuales construir el árbol.
41 * @param string $titulo Título.
42 * @param int $raiz Nodo raíz (de donde empezar a dibujar el árbol).
44 function HTML_Arbol($datos, $titulo, $link_append = '')
46 parent::HTML_Table(array(
51 'bgcolor' => '#003868'));
52 $this->datos = $datos;
53 $this->titulo = $titulo;
54 $this->link_append = $link_append;
58 return '/MECON/css/arbol';
61 function expandir($dat, $n, &$tabla)
66 '/MECON/images/arbol_bullet_1.gif',
67 '/MECON/images/arbol_bullet_2.gif',
68 '/MECON/images/arbol_bullet_3.gif'
71 $classes = array('menu', 'menu1', 'menu1', 'menu2');
73 $atr = array('border' => '0',
74 'width' => $n * $tabulados,
76 $imagen =& new HTML_Image(@$bullets[$n] ? $bullets[$n] : '', 'bullet', $atr);
77 foreach ($dat as $e) {
78 $titulo = $imagen->toHTML().$e['titulo'];
79 if(isset($e['activado']) && $e['activado'] != 0) $class = 'menu_activo';
80 else $class = $classes[$n];
81 if(!is_null($e['link'])) {
83 if ($this->link_append and @$e['id']) {
84 $link .= $this->link_append . $e['id'];
86 $titulo = '<a href="'.$link.'" class="'.$class.'">'.$titulo.'</a>';
88 $tabla->addRow(array($titulo), array('class' => $class));
89 if(isset($e['sub'])) {
90 $this->expandir($e['sub'], $n+1, $tabla);
97 $this->setRowCount(0);
98 $t_interna = new HTML_Table(array(
101 'cellspacing' => '2',
102 'cellpadding' => '0',
103 'class' => 'bodytext'));
104 $titulo = new HTML_Table(array(
108 'cellspacing' => '0',
109 'cellpadding' => '0',
111 'background' => '/MECON/images/arbol_titulo.gif'));
112 $titulo->addRow(array($this->titulo), array(
114 'class' => 'arboltitulo'));
115 $this->addRow(array($titulo), array('bgcolor' => '#FFFFFF'));
116 $this->expandir($this->datos, 0, $t_interna);
117 $this->addRow(array($t_interna->toHTML()));
118 // FIXME - sacar la style sheet de aca.
119 return '<link rel="stylesheet" href="'.$this->getCSS().'">'.parent::toHTML();
122 function expandirArray($dat, $n, $filtrarActivos)
125 foreach ($dat as $e) {
126 // Si no tiene ID o esta activo y se filtran los activos, se
127 // continua con el proximo item.
128 if (!@$e['id'] or $filtrarActivos and @$e['activado']) {
131 $array[$e['id']] = str_repeat(' ', $n) . $e['titulo'];
133 $array += $this->expandirArray($e['sub'], $n + 1, $filtrarActivos);
139 function toArray($filtrarActivos = true)
141 return $this->expandirArray($this->datos, 0, $filtrarActivos);
145 * Activa un nodo del árbol.
147 * @param int $id Id del nodo a modificar.
148 * @param bool $activado Nuevo valor, true si está activado, false si no.
150 * @return bool True si se pudo modificar.
152 function setActivado($id, $activado = 1) {
153 return $this->modificarNodo($this->datos, $id, 'activado', $activado);
157 * Modifica un nodo del array.
159 * @param array $datos Datos del árbol a modificar.
160 * @param int $id Id del elemento a modificar.
161 * @param string $key Clave del dato a modificar.
162 * @param mixed $val Nuevo valor.
164 * @return bool True si se pudo modificar.
166 function modificarNodo(&$datos, $id, $key, $val) {
167 foreach (array_keys($datos) as $k) {
168 if (@$datos[$k]['id'] == $id) {
169 $datos[$k][$key] = $val;
171 } elseif (@$datos[$k]['sub']
172 and $this->modificarNodo($datos[$k]['sub'], $id, $key, $val)) {