From 14b5545c55923291604a2062f0e742b9632b00e9 Mon Sep 17 00:00:00 2001 From: Leandro Lucarella Date: Thu, 24 Jul 2003 21:24:03 +0000 Subject: [PATCH] =?utf8?q?-=20Se=20limpia=20(muy)=20m=C3=ADnimamente=20el?= =?utf8?q?=20c=C3=B3digo=20de=20Arbol=20y=20ArbolDB.=20-=20Arbol:=20=20=20?= =?utf8?q?=20=20-=20Se=20agrega=20un=20m=C3=A9todo=20general=20(protegido?= =?utf8?q?=20probablemente)=20para=20modificar=20=20=20=20=20=20=20cualqui?= =?utf8?q?er=20propiedad=20de=20un=20nodo=20arbitrario.=20=20=20=20=20-=20?= =?utf8?q?Se=20agrega=20un=20m=C3=A9todo=20para=20activar=20(resaltar)=20u?= =?utf8?q?n=20nodo=20arbitrario.=20=20=20=20=20-=20Se=20agrega=20un=20m?= =?utf8?q?=C3=A9todo=20para=20convertirlo=20a=20un=20array=20(apropiado=20?= =?utf8?q?para=20crear=20=20=20=20=20=20=20un=20SELECT=20con=20QuickForm).?= =?utf8?q?=20=20=20=20=20-=20Se=20agrega=20un=20m=C3=A9todo=20getCSS()=20(?= =?utf8?q?futuro=20estandar)=20que=20devuelve=20la=20=20=20=20=20=20=20ubi?= =?utf8?q?caci=C3=B3n=20de=20una=20hoja=20de=20estilos=20necesaria,=20a=20?= =?utf8?q?incluir=20via=20HTML=5FPage.=20-=20Se=20adapta=20ArbolDB=20al=20?= =?utf8?q?nuevo=20Arbol.=20-=20Se=20actualizan=20los=20ejemplos=20(o=20pru?= =?utf8?q?ebas).?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- lib/MECON/HTML/Arbol.php | 188 ++++++++++++++++++++++--------- lib/MECON/HTML/Arbol/ArbolDB.php | 64 ++++++----- test/HTML/arbol.php | 111 ++++++++++++++++++ test/HTML/arboldb.php | 64 +++++++++++ test/prueba_arbol.php | 58 ---------- test/prueba_arboldb.php | 19 ---- 6 files changed, 344 insertions(+), 160 deletions(-) create mode 100644 test/HTML/arbol.php create mode 100644 test/HTML/arboldb.php delete mode 100644 test/prueba_arbol.php delete mode 100644 test/prueba_arboldb.php diff --git a/lib/MECON/HTML/Arbol.php b/lib/MECON/HTML/Arbol.php index cf919b0..fc2cf46 100644 --- a/lib/MECON/HTML/Arbol.php +++ b/lib/MECON/HTML/Arbol.php @@ -20,6 +20,7 @@ Boston, MA 02111-1307 USA ------------------------------------------------------------------------------- Creado: jue jul 17 15:32:52 ART 2003 Autor: Gonzalo Merayo + Leandro Lucarella ------------------------------------------------------------------------------- $Id$ -----------------------------------------------------------------------------*/ @@ -29,68 +30,151 @@ require_once 'HTML/Image.php'; class HTML_Arbol extends HTML_Table { - var $t_interna; + var $datos; + var $titulo; + var $link_append; - function HTML_Arbol($dat, $titulo_str) + /** + * Constructor. + * + * @param array $datos Datos con los cuales construir el árbol. + * @param string $titulo Título. + * @param int $raiz Nodo raíz (de donde empezar a dibujar el árbol). + */ + function HTML_Arbol($datos, $titulo, $link_append = '') { - parent::HTML_Table(array ('width'=>'132', - 'border' => '0', - 'cellspacing' => '0', - 'cellpadding' => '0', - 'bgcolor' => '#003868')); - $this->t_interna = new HTML_Table(array ('width'=>'132', - 'border' => '0', - 'cellspacing' => '2', - 'cellpadding' => '0', - 'class' => 'bodytext')); - $titulo = new HTML_Table(array('width'=>'132', - 'height'=>'26', - 'border' => '0', - 'cellspacing' => '0', - 'cellpadding' => '0', - 'align'=>'center', - 'background'=>'/MECON/images/arbol_titulo.gif')); - $titulo->addRow(array($titulo_str), array('align'=>'center', - 'class'=>'arboltitulo')); - $this->addRow(array($titulo), array('bgcolor' => '#FFFFFF')); - $this->expandir($dat, 0); + parent::HTML_Table(array( + 'width' => '132', + 'border' => '0', + 'cellspacing' => '0', + 'cellpadding' => '0', + 'bgcolor' => '#003868')); + $this->datos = $datos; + $this->titulo = $titulo; + $this->link_append = $link_append; } - - function expandir($dat, $n) + + function getCSS() { + return '/MECON/css/arbol'; + } + + function expandir($dat, $n, &$tabla) { $imagen = ''; - $bullets = array( - '', - '/MECON/images/arbol_bullet_1.gif', - '/MECON/images/arbol_bullet_2.gif', - '/MECON/images/arbol_bullet_3.gif' - ); - $tabulados = 7; - $classes = array('menu', 'menu1', 'menu1', 'menu2'); - - $atr = array('border' => '0', - 'width' => $n * $tabulados, - 'height' => '10'); - $imagen =& new HTML_Image(@$bullets[$n] ? $bullets[$n] : '', 'bullet', $atr); - foreach($dat as $e) - { - $e['titulo'] = $imagen->toHTML().$e['titulo']; - if(isset($e['activado']) && $e['activado'] != 0) $class = 'menu_activo'; - else $class = $classes[$n]; - if(!is_null($e['link'])) - $e['titulo'] = ''.$e['titulo'].''; - $this->t_interna->addRow(array($e['titulo']), array('class' => $class)); - if(isset($e['sub'])) - $this->expandir($e['sub'], $n+1); - } + $bullets = array( + '', + '/MECON/images/arbol_bullet_1.gif', + '/MECON/images/arbol_bullet_2.gif', + '/MECON/images/arbol_bullet_3.gif' + ); + $tabulados = 7; + $classes = array('menu', 'menu1', 'menu1', 'menu2'); + + $atr = array('border' => '0', + 'width' => $n * $tabulados, + 'height' => '10'); + $imagen =& new HTML_Image(@$bullets[$n] ? $bullets[$n] : '', 'bullet', $atr); + foreach ($dat as $e) { + $titulo = $imagen->toHTML().$e['titulo']; + if(isset($e['activado']) && $e['activado'] != 0) $class = 'menu_activo'; + else $class = $classes[$n]; + if(!is_null($e['link'])) { + $link = $e['link']; + if ($this->link_append and @$e['id']) { + $link .= $this->link_append . $e['id']; + } + $titulo = ''.$titulo.''; + } + $tabla->addRow(array($titulo), array('class' => $class)); + if(isset($e['sub'])) { + $this->expandir($e['sub'], $n+1, $tabla); + } + } } function toHTML() { - echo ''; - $this->addRow(array($this->t_interna->toHTML())); - return parent::toHTML(); + $this->setRowCount(0); + $t_interna = new HTML_Table(array( + 'width' =>'132', + 'border' => '0', + 'cellspacing' => '2', + 'cellpadding' => '0', + 'class' => 'bodytext')); + $titulo = new HTML_Table(array( + 'width' => '132', + 'height' => '26', + 'border' => '0', + 'cellspacing' => '0', + 'cellpadding' => '0', + 'align' => 'center', + 'background' => '/MECON/images/arbol_titulo.gif')); + $titulo->addRow(array($this->titulo), array( + 'align' => 'center', + 'class' => 'arboltitulo')); + $this->addRow(array($titulo), array('bgcolor' => '#FFFFFF')); + $this->expandir($this->datos, 0, $t_interna); + $this->addRow(array($t_interna->toHTML())); + return parent::toHTML(); + } + + function expandirArray($dat, $n, $filtrarActivos) + { + $array = array(); + foreach ($dat as $e) { + // Si no tiene ID o esta activo y se filtran los activos, se + // continua con el proximo item. + if (!@$e['id'] or $filtrarActivos and @$e['activado']) { + continue; + } + $array[$e['id']] = str_repeat('   ', $n) . $e['titulo']; + if(@$e['sub']) { + $array += $this->expandirArray($e['sub'], $n + 1, $filtrarActivos); + } + } + return $array; + } + + function toArray($filtrarActivos = true) + { + return $this->expandirArray($this->datos, 0, $filtrarActivos); + } + + /** + * Activa un nodo del árbol. + * + * @param int $id Id del nodo a modificar. + * @param bool $activado Nuevo valor, true si está activado, false si no. + * + * @return bool True si se pudo modificar. + */ + function setActivado($id, $activado = 1) { + return $this->modificarNodo($this->datos, $id, 'activado', $activado); } + + /** + * Modifica un nodo del array. + * + * @param array $datos Datos del árbol a modificar. + * @param int $id Id del elemento a modificar. + * @param string $key Clave del dato a modificar. + * @param mixed $val Nuevo valor. + * + * @return bool True si se pudo modificar. + */ + function modificarNodo(&$datos, $id, $key, $val) { + foreach (array_keys($datos) as $k) { + if (@$datos[$k]['id'] == $id) { + $datos[$k][$key] = $val; + return true; + } elseif (@$datos[$k]['sub'] + and $this->modificarNodo($datos[$k]['sub'], $id, $key, $val)) { + return true; + } + } + return false; + } + }; ?> diff --git a/lib/MECON/HTML/Arbol/ArbolDB.php b/lib/MECON/HTML/Arbol/ArbolDB.php index 111c4e5..c3bafe4 100644 --- a/lib/MECON/HTML/Arbol/ArbolDB.php +++ b/lib/MECON/HTML/Arbol/ArbolDB.php @@ -20,6 +20,7 @@ Boston, MA 02111-1307 USA ------------------------------------------------------------------------------- Creado: jue jul 17 15:33:41 ART 2003 Autor: Gonzalo Merayo + Leandro Lucarella ------------------------------------------------------------------------------- $Id$ -----------------------------------------------------------------------------*/ @@ -29,45 +30,46 @@ require_once 'DB.php'; class HTML_ArbolDB extends HTML_Arbol { - var $padre = null; - var $tabla; - var $nombre; - var $id; - var $link = null; - var $prepend_link = null; - var $where = ''; - var $order = ''; - var $db; + var $padre = ''; + var $tabla; + var $nombre; + var $id; + var $link = ''; + var $link_append = ''; + var $where = ''; + var $order = ''; + var $db; - function HTML_ArbolDB($dbdata, $imagen) + function HTML_ArbolDB($dbdata, $titulo, $link_append = '') { if(isset($dbdata['id_padre'])) - $this->padre = $dbdata['id_padre']; - $this->tabla = $dbdata['tabla']; - $this->nombre = $dbdata['nombre']; - $this->id = $dbdata['id']; + $this->padre = $dbdata['id_padre']; + $this->tabla = $dbdata['tabla']; + $this->nombre = $dbdata['nombre']; + $this->id = $dbdata['id']; + // FIXME - Deprecated! if(isset($dbdata['prepend_link'])) - $this->prepend_link = $dbdata['prepend_link']; + $link_append = $dbdata['prepend_link']; if(isset($dbdata['link'])) - $this->link = $dbdata['link']; + $this->link = $dbdata['link']; if(isset($dbdata['where'])) - $this->where = $dbdata['where']; + $this->where = $dbdata['where']; if(isset($dbdata['order'])) - $this->order = ' ORDER BY '.$dbdata['nombre'].' '.$dbdata['order']; - $this->db = $dbdata['db']; - $dat = $this->BuscarHijos(0); - parent::HTML_Arbol($dat, $imagen); + $this->order = ' ORDER BY '.$dbdata['nombre'].' '.$dbdata['order']; + $this->db = $dbdata['db']; + parent::HTML_Arbol(array(), $titulo, $link_append); + $this->datos = $this->BuscarHijos(0); } function BuscarHijos($id) { $sql = "SELECT $this->nombre, $this->id "; - if(!is_null($this->link)) - $sql .= ", $this->link "; + if($this->link) + $sql .= ", $this->link "; $sql .= "FROM $this->tabla "; - if(!is_null($this->padre) or $this->where) + if($this->padre or $this->where) $sql .= 'WHERE '; - if(!is_null($this->padre)) { + if($this->padre) { $sql .= "$this->padre = '$id'"; if ($this->where) $sql .= ' AND'; @@ -82,14 +84,14 @@ class HTML_ArbolDB extends HTML_Arbol { $titulo = $row[0]; $id = $row[1]; - if(is_null($this->padre)) $sub = array(); + if(!$this->padre) $sub = array(); else $sub = $this->BuscarHijos($id); - if(!is_null($this->link)) $link = $this->prepend_link.$row[2]; - else $link = $this->prepend_link.$id; + $link = strval(@$row[2]); $dat[] = array( - 'titulo'=> $titulo, - 'link' => $link, - 'sub' => $sub + 'titulo'=> $titulo, + 'link' => $link, + 'id' => $id, + 'sub' => $sub ); } return $dat; diff --git a/test/HTML/arbol.php b/test/HTML/arbol.php new file mode 100644 index 0000000..6c9c9b9 --- /dev/null +++ b/test/HTML/arbol.php @@ -0,0 +1,111 @@ + +------------------------------------------------------------------------------- +$Id: Arbol.php 237 2003-07-17 22:41:48Z mmarre $ +-----------------------------------------------------------------------------*/ + +require_once '../../lib/MECON/HTML/Arbol.php'; + +$dat = array( // Datos {{{ + array( + 'titulo' => 'Nivel0a', + 'link' => 'blabla', + 'id' => 1, + 'sub' => array(//sub0 {{{ + array( + 'titulo' => 'Nivel1a', + 'link' => 'blabla', + 'id' => 2, + 'sub' => array(//sub1 {{{ + array( + 'titulo' => 'Nivel3a', + 'link' => 'blabla', + 'id' => 5, + 'activado' => 1 + ), + array( + 'titulo' => 'Nivel3b', + 'link' => 'blabla', + 'id' => 9, + 'sub' => array(//sub2 {{{ + 5 => array( + 'titulo' => 'Nivel4', + 'link' => 'blabla', + 'id' => 8, + ) + )//sub2 }}} + ), + array( + 'titulo' => 'Nivel3c', + 'link' => 'blabla', + 'id' => 7, + ) + )//sub1 }}} + ), + array( + 'titulo' => 'Nivel1b', + 'link' => 'blabla', + 'id' => 13, + 'activado' => 1 + ), + array( + 'titulo' => 'Nivel1c', + 'link' => 'blabla', + 'id' => 45, + ) + )//sub0 }}} + ), + array( + 'titulo' => 'Nivel0b', + 'link' => 'blabla', + 'id' => 16, + ), + array( + 'titulo' => 'Nivel0c', + 'link' => 'blabla', + 'id' => 21, + ) +); // }}} + +$arbol = new HTML_Arbol($dat, 'MI TITULO', '?raiz='); +echo ''; +echo $arbol->toHTML(); +echo ''; +echo ''; +$arbol->setActivado(16); +echo $arbol->toHTML(); +echo ''; + +?> diff --git a/test/HTML/arboldb.php b/test/HTML/arboldb.php new file mode 100644 index 0000000..30e7e02 --- /dev/null +++ b/test/HTML/arboldb.php @@ -0,0 +1,64 @@ + +------------------------------------------------------------------------------- +$Id$ +-----------------------------------------------------------------------------*/ + +require_once '../../lib/MECON/HTML/Arbol/ArbolDB.php'; +require_once 'DB.php'; + +PEAR::setErrorHandling(PEAR_ERROR_TRIGGER); + +$dsn = 'mysql://intranet:intranet@bal747f.mecon.ar/intranet'; +$db =& DB::connect($dsn,true); + +$dbdata = array( + 'db' => &$db, + 'tabla' => 'grupo_secciones', + 'id' => 'grupo', + 'nombre' => 'nombre', + 'id_padre' => 'grupo_padre', +); + +$arbol = new HTML_ArbolDB($dbdata, 'TITULO', 'noticias.php?grupo='); +echo ''; +echo $arbol->toHTML(); +echo ''; +echo ''; +var_dump($arbol->setActivado(34)); +echo $arbol->toHTML(); +echo ''; + +?> diff --git a/test/prueba_arbol.php b/test/prueba_arbol.php deleted file mode 100644 index 4713f10..0000000 --- a/test/prueba_arbol.php +++ /dev/null @@ -1,58 +0,0 @@ - 'Nivel0a', - 'link' => 'blabla', - 'sub' => array(//sub0 - array( - 'titulo' => 'Nivel1a', - 'link' => 'blabla', - 'sub' => array(//sub1 - array( - 'titulo' => 'Nivel3a', - 'link' => 'blabla', - 'activado' => 1 - ), - array( - 'titulo' => 'Nivel3b', - 'link' => 'blabla', - 'sub' => array(//sub2 - array( - 'titulo' => 'Nivel4', - 'link' => 'blabla' - ) - )//sub2 - ), - array( - 'titulo' => 'Nivel3c', - 'link' => 'blabla' - ) - )//sub1 - ), - array( - 'titulo' => 'Nivel1b', - 'link' => 'blabla', - 'activado' => 1 - ), - array( - 'titulo' => 'Nivel1c', - 'link' => 'blabla' - ) - )//sub0 - ), - array( - 'titulo' => 'Nivel0b', - 'link' => 'blabla' - ), - array( - 'titulo' => 'Nivel0c', - 'link' => 'blabla' - ) - ); -?> -toHTML(); -?> diff --git a/test/prueba_arboldb.php b/test/prueba_arboldb.php deleted file mode 100644 index f57d7f5..0000000 --- a/test/prueba_arboldb.php +++ /dev/null @@ -1,19 +0,0 @@ - $db, - 'tabla' => 'grupo_secciones', - 'id' => 'grupo', - 'nombre' => 'nombre', - 'id_padre' => 'grupo_padre', - 'prepend_link' => 'noticias.php?grupo='); - - $arbol = new HTML_ArbolDB($dbdata, '/MECON/images/arbol_noticias.gif'); - echo $arbol->toHTML(); -?> -- 2.43.0