source: admin/WebConsole/clases/ArbolVistaXML.php

qndtest
Last change on this file was e32794a, checked in by Ramón M. Gómez <ramongomez@…>, 5 years ago

#834: Fixing more code cleanup: file encoding, CSS units, HTML tags, and trailing spaces.

  • Property mode set to 100644
File size: 12.3 KB
Line 
1<?php
2include_once("XmlPhp.php");
3/*===============================================================
4Esta clase implementa la apariencia y comportamiento de un treeview en código HTML y javascript.
5La clase utiliza la clase XmlPhp.php para acceder al documento XML.
6
7        Parámetros del constructor:
8                -fXML=Fichero XML
9                -fileocade=Indica si el dato anterior es un fichero o una variable con el contenido del árbol   
10                        0: Es una cadena
11                        1: Es un fichero
12                -baseurlimg= Url base de las imágenes de los nodos de contracción-expansión
13                -clasedefault=Clase por defecto de los literales de los nodos
14                -nivelexp= Máximo nivel que aparecera expandido
15                -x= Posición x donde aparecerá la tabla
16                -y= Posición y donde aparecerá la tabla
17=================================================================*/
18class ArbolVistaXML{
19        var $baseurlimg;        // Base de la URL de las imágenes de los nodos de contracción-expansión
20        var $clasedefault;      // Clase por defecto de los literales de los nodos
21        var $gXML;                      // Objeto gestor del documento XML
22        var $nivelexp;          // Nivel máximo que aprecerá visible
23        var $x;         // Posición x donde aparecerá la tabla
24        var $y;         // Posición y donde aparecerá la tabla
25        var $c_imgnivel=array();        // Imagenes de expansión y contracción para los distintos niveles
26        var $v_imgnivel=array();        // Valores de expansión y contracción para los distintos niveles
27        var $nodos_count;       // Contador de nodo
28
29        Function __construct($fXML, $fileocade, $baseurlimg="/.images/", $clasedefault, $nivelexp=0, $x=0, $y=0, $tipotabla=0, $titulotabla=""){
30                // Constructor
31                $this->gXML=new XmlPhp($fXML,$fileocade);
32                $this->baseurlimg=$baseurlimg;
33                $this->clasedefault=$clasedefault;
34                $this->nivelexp=$nivelexp;
35                $this->x=$x;
36                $this->y=$y;
37                $this->tipotabla=$tipotabla;
38                $this->titulotabla=$titulotabla;
39
40                // Anchura de los distibtos tipos de tablas
41                if($this->tipotabla>0){
42                        $this->anchoM=" width=100% ";
43                        $this->ancho=" width=100% ";
44                }
45                else{
46                        $this->anchoM=" width=100% ";
47                        $this->ancho="";
48                }
49                for($i=0;$i<=5;$i++){ // Inicializar
50                        $this->c_imgnivel[$i]=$this->baseurlimg.'/nada.gif';
51                        $this->v_imgnivel[$i]="nada";
52                }
53                $this->nodos_count=0;
54        }
55        /*------------------------------------------------------------------------------------------------
56                Esta función devuelve una cadena con el contenido de un treeview en código HTML
57        ------------------------------------------------------------------------------------------------*/
58        Function CreaArbolVistaXML(){
59                if (!$this->gXML->NodoRaiz()) return; // No existe documento XML que analizar
60                $arbol_total='<TABLE  border=0 '.$this->anchoM.' class="'.$this->clasedefault. '" style="POSITION:absolute;TOP:'.$this->y.'px;LEFT:'.$this->x.'px" class=texto_arbol cellspacing=0 cellpadding=0 border=0>';
61                if($this->tipotabla>0) $arbol_total.='<TR><TH>'. $this->titulotabla .'</TH></TR>';
62                        $arbol_total.='<TR style="display:block">';
63                                $arbol_total.='<TD>';
64                                        $arbol_total.='<TABLE id=tablanivel-0 border=0 cellspacing=0 cellpadding="0">';
65                                                $arbol_total.=$this->_arbolXmlrecur(0);
66                                        $arbol_total.='</TABLE>';       
67                                $arbol_total.='</TD>'; 
68                        $arbol_total.='</TR>'; 
69                $arbol_total.='</TABLE>';
70                return($arbol_total);
71        }
72        // -------------------------------------------------------------------------------------
73        // Recorrido recursivo del arbol XML
74        //              Parámetros:
75        //                      nivel: nivel del nodo
76        // -------------------------------------------------------------------------------------
77        function _arbolXmlrecur($nivel){
78                $arbol_total="";
79                if ($nivel+1>$this->nivelexp) $displai="none"; else $displai="block";
80                do{
81                        $gnptr=$this->gXML->nptr;
82                        $arbol_total.='<TR style="display:block" id=TRNodo-'.$this->nodos_count.'>';
83                                $arbol_total.='<TD>';
84                                        $arbol_total.=$this->_dibujo_nodo($this->gXML->Nodo(),$nivel,$this->gXML->NumerodeHijos(),$this->gXML->EsUltimoHermano());
85                                $arbol_total.='</TD>';
86                        $arbol_total.='</TR>';
87                        $this->nodos_count++;
88                        if ($this->gXML->PrimerNodoHijo()){
89                                $arbol_total.='<TR id="TRNodoHijo-'.$this->nodos_count.'" style="display:'.$displai.'">';
90                                        $arbol_total.='<TD>';
91                                                $arbol_total.='<TABLE id="tablanivel-'.($nivel+1).'" border=0 cellspacing=0 cellpadding=0>';
92                                                        $arbol_total.=$this->_arbolXmlrecur($nivel+1);
93                                                $arbol_total.='</TABLE>';       
94                                        $arbol_total.='</TD>'; 
95                                $arbol_total.='</TR>'; 
96                        }
97                        $this->gXML->nptr=$gnptr;
98                }while($this->gXML->SiguienteNodoHermano());
99                return($arbol_total);
100        }
101        // -------------------------------------------------------------------------------------
102        // Crea un  nodo
103        //              Parámetros:
104        //                      nivel: nivel del nodo
105        // -------------------------------------------------------------------------------------
106        function CreaNodo($nivel){
107                $nodo=$this->_dibujo_nodo($this->gXML->Nodo(),$nivel,0,true);
108                return($nodo);
109        }
110        /*------------------------------------------------------------------------------------------------
111                Dibuja los nodos del árbol
112                        parámetros:
113                                nodo: La información del nodo
114                                nivel: Nivel del nodo
115                                nhijos: numero de hijos
116                                uhermano: Es true si el nodo es el último de sus hermanos
117
118                        Especificaciones:
119                                Los atributos de los nodos pueden ser HTML o especificos de
120                                esta aplicación. Lso atributos del nodo propios de ésta son:
121
122                                        - clicksupimg: Función suplementaria de la imagen de signo
123                                        - imagenid: Identificador de la imagen de signo
124                                        - clickimg: La función que se ejecutará al hacer click sobre la imagen de nodo
125                                        - downimg: La función que se ejecutará al pulsar el ratón  sobre la imagen de nodo
126                                        - clickcontextualimg: Función que se ejecutara al hacer click con el boton derecho sobre la imagen del nodo
127                                        - imagenodo: Es la url de la imagen de nodo
128                                        - infonodo: Es texto que se visualiza del nodo
129                                        - mouseovernodo: La función a ejecutar cuando se posa el ratón sobre el literal del nodo
130                                        - clicksupnodo: Función suplementaria del literal del nodo
131                                        - clickcontextualnodo: Función que se ejecutara al hacer click con el boton derecho sobre el nodo
132                                        - classnodo: Clase (style) a  la que pertenece el nodo
133                                        - nodoid: identificador del nodo
134                                        - nodovalue: parametro value del nodo
135        ------------------------------------------------------------------------------------------------*/
136        function _dibujo_nodo($nodo,$nivel,$nhijos,$uhermano){
137                // Comprobar descendencia y posición dentro de los hermanos
138                $swu=false; // switch para saber si el nodo es el último hermano
139                $swh=false; // switch para saber si el nodo tiene hijos
140                if ($nhijos>0) $swh=true;
141                $swu=$uhermano;
142                if ($swh){      // Si tiene hijos ..
143                        if ($swu){ // Si es el último de sus hermanos ..
144                                if ($nivel<$this->nivelexp){
145                                        $this->c_imgnivel[$nivel]=$this->baseurlimg.'/menos_c.gif';
146                                        $this->v_imgnivel[$nivel]="menos_c";
147                                }
148                                else{
149                                        $this->c_imgnivel[$nivel]=$this->baseurlimg.'/mas_c.gif';
150                                        $this->v_imgnivel[$nivel]="mas_c";
151                                }
152                        }
153                        else{           // Si NO lo es ..
154                                if ($nivel<$this->nivelexp){
155                                        $this->c_imgnivel[$nivel]=$this->baseurlimg.'/menos_t.gif';
156                                        $this->v_imgnivel[$nivel]="menos_t";
157                                }
158                                else{
159                                        $this->c_imgnivel[$nivel]=$this->baseurlimg.'/mas_t.gif';
160                                        $this->v_imgnivel[$nivel]="mas_t";
161                                }
162                        }
163                        if ($nivel==0){
164                                if ($this->nivelexp>0)
165                                        $this->c_imgnivel[$nivel]=$this->baseurlimg.'/menos_root.gif';
166                                else
167                                        $this->c_imgnivel[$nivel]=$this->baseurlimg.'/mas_root.gif';
168                        }
169                }
170                else{           // Si NO tiene hijos ..
171                        if ($swu){      // Si es el último de sus hermanos ..
172                                $this->c_imgnivel[$nivel]=$this->baseurlimg.'/nada_c.gif';
173                                $this->v_imgnivel[$nivel]="nada_c";
174                        }
175                        else{           // Si no lo es ..
176                                $this->c_imgnivel[$nivel]=$this->baseurlimg.'/nada_t.gif';
177                                $this->v_imgnivel[$nivel]="nada_t";
178                        }
179                }
180                // Fin Comprobar descendencia y posición dentro de los hermanos
181                if($this->tipotabla==0)
182                        $arbol='<TABLE  border=0 cellspacing=0 cellpadding=0>';
183                else
184                        $arbol='<TABLE style="BORDER-BOTTOM:#000000 1px solid;" border=0 cellspacing=0 cellpadding=0>';
185                $arbol.='<TR height="16px">';
186                $atributosHTML=$this->gXML->Atributos($nodo);
187                $colornodo="";
188                $fondonodo="";
189                $atributosHTML=$this->gXML->TomaAtributoEspecial("colornodo",$colornodo,$atributosHTML);
190                $atributosHTML=$this->gXML->TomaAtributoEspecial("fondonodo",$fondonodo,$atributosHTML);
191                if ($colornodo!="" ) $colornodo=' COLOR:'.$colornodo.";";
192                if ($fondonodo!="" ) $fondonodo=' BACKGROUND-COLOR:'.$fondonodo.";";
193                $estilo=$colornodo || $fondonodo;
194                if ($estilo!="" )       $estilo='style="'.$colornodo.$fondonodo.'"';
195
196                for ($i=0;$i<$nivel;$i++){ // Niveles previos
197                        $arbol.='<TD  '.$estilo.' width="3px"></TD>';
198                        $arbol.='<TD  '.$estilo.' width="16px"><IMG src="'.$this->c_imgnivel[$i].'" width="16px" height="16px" ></TD>';
199                }
200                $arbol.='<TD  '.$estilo.' width="3px"></TD>'; // Desplazamiento de la imagen
201                $arbol.='<TD  '.$estilo.' width="16px">';
202               
203                $imagenid="";
204                $clicksupimg="";
205                $atributosHTML=$this->gXML->TomaAtributoEspecial("imagenid",$imagenid,$atributosHTML);
206                $atributosHTML=$this->gXML->TomaAtributoEspecial("clicksupimg",$clicksupimg,$atributosHTML);
207                if ($clicksupimg!="") $clicksupimg.=';';
208                if ($swh){ // El nodo tiene hijos
209                        $arbol.='<A href="#nodo"><IMG border=0 '.$estilo.' id="'.$imagenid.'" onclick="clickImagenSigno(this,' ."'".$this->baseurlimg."'".','.$nivel.');'.$clicksupimg.'"  src="'.$this->c_imgnivel[$nivel].'" width="16px" height="16px" value="'.$this->v_imgnivel[$nivel].'"></A></TD>';
210                }
211                else
212                        $arbol.='<SPAN><IMG  '.$estilo.' id="'.$imagenid.'" src="'.$this->c_imgnivel[$nivel].'" width="16px" height="16px" value="'.$this->v_imgnivel[$nivel].'"></SPAN></TD>';
213
214                $imagenodo="";
215                $clickimg="";
216                $downimg="";
217                $clickcontextualimg="";
218                $styleimg="";
219               
220                $atributosHTML=$this->gXML->TomaAtributoEspecial("imagenodo",$imagenodo,$atributosHTML);
221                $atributosHTML=$this->gXML->TomaAtributoEspecial("clickimg",$clickimg,$atributosHTML);
222                $atributosHTML=$this->gXML->TomaAtributoEspecial("downimg",$downimg,$atributosHTML);
223                $atributosHTML=$this->gXML->TomaAtributoEspecial("clickcontextualimg",$clickcontextualimg,$atributosHTML);
224                if ($clickimg!="" ) $clickimg=' onclick="'.$clickimg.'" ';
225                if ($downimg!="" ) $downimg=' onmousedown="'.$downimg.'" ';
226                if ($clickcontextualimg!="" ) $clickcontextualimg=' oncontextmenu=" '.$clickcontextualimg.'" ';
227
228                if ($clickimg!="" || $downimg!="" || $clickcontextualimg!="" ) $styleimg=' style="cursor:hand"';
229
230                $arbol.='<TD  '.$estilo.' width=16px><IMG '.$styleimg.' src="'.$imagenodo.'"'.$clickimg.$downimg.$clickcontextualimg.' width="16px" height="16px"></TD>';
231                $arbol.='<TD  '.$estilo.' width="4px"></TD>';
232
233                $clicksupnodo="";
234                $clickcontextualnodo="";
235                $classnodo="";
236                $nodoid="";
237                $nodovalue="";
238                $mouseovernodo="";
239                $infonodo="";
240
241                $atributosHTML=$this->gXML->TomaAtributoEspecial("clickcontextualnodo",$clickcontextualnodo,$atributosHTML);
242                $atributosHTML=$this->gXML->TomaAtributoEspecial("clicksupnodo",$clicksupnodo,$atributosHTML);
243                $atributosHTML=$this->gXML->TomaAtributoEspecial("classnodo",$classnodo,$atributosHTML);
244                $atributosHTML=$this->gXML->TomaAtributoEspecial("nodoid",$nodoid,$atributosHTML);
245                $atributosHTML=$this->gXML->TomaAtributoEspecial("nodovalue",$nodovalue,$atributosHTML);
246                $atributosHTML=$this->gXML->TomaAtributoEspecial("colornodo",$colornodo,$atributosHTML);
247                $atributosHTML=$this->gXML->TomaAtributoEspecial("fondonodo",$fondonodo,$atributosHTML);
248                $atributosHTML=$this->gXML->TomaAtributoEspecial("mouseovernodo",$mouseovernodo,$atributosHTML);
249                $atributosHTML=$this->gXML->TomaAtributoEspecial("infonodo",$infonodo,$atributosHTML);
250                if ($clickcontextualnodo!="" ) $clickcontextualnodo=' oncontextmenu="'.$clickcontextualnodo.'" ';
251                if ($mouseovernodo!="" ) $mouseovernodo=' onmouseover="'.$mouseovernodo.'" ';
252                if ($nodovalue!="" ) $nodovalue=' value="'.$nodovalue.'" ';
253                if (!$classnodo) $classnodo=$this->clasedefault;
254               
255                $arbol.='<TD  width="1024px"  '.$estilo.' class="'.$classnodo.'">';
256                $arbol.='<A href="#nodo" class="'.$this->clasedefault. '" style="text-decoration: none"><SPAN id="'.$nodoid.'"  ';
257                if($this->tipotabla<2){
258                        $arbol.=' onclick="clickLiteralNodo(this ,' ."'".$this->baseurlimg."'".');';
259                        $arbol.=" ".$clicksupnodo.'"'.$nodovalue.$mouseovernodo.$clickcontextualnodo;
260                }
261                $arbol.=' >'.$infonodo.'</SPAN></A></TD>';
262                $arbol.='</TR>';
263                $arbol.='</TABLE>';
264                if ($swu)
265                        $this->c_imgnivel[$nivel]=$this->baseurlimg.'/nada.gif';
266                else
267                        $this->c_imgnivel[$nivel]=$this->baseurlimg.'/nada_l.gif';
268                return($arbol);
269        }
270} // Fin de la clase
Note: See TracBrowser for help on using the repository browser.