Documentación GVHIDRA 3.1.5
Referencia de la Clase IgepArbol

Métodos públicos

 __construct ()
 IgepArbol ()
 addNodoRaiz ($tipo, $etiqueta, $modoDespliegue, $despliegue, $dsnAlternativo= '')
 addNodoRama ($tipo, $modoDespliegue, $despliegue, $dsnAlternativo= '')
 setNodoPanel ($tipo, $claseManejadora, $dependencia, $tituloPanel)
 generaXML ($str_claseActual)
 getXML ()
 abrirRamaArbol ()
 desplegarRamaXml (&$dom, &$nodoPadre, $descTipoNodo)
 generaHijos ($nodoPadre, $descTipoNodo)
 mostrarEnPanel ($nodoPadre, $descTipoNodo)
 cancelarArbol ()
 limpiarArbol ($claseActual)

Campos de datos

 $v_defArbol
 $maxId
 $cadXML
 $str_claseManejadora
 $tipoNodoSeleccionado
 $str_tituloPanel

Descripción detallada

Definición en la línea 45 del archivo IgepArbol.php.


Documentación del constructor y destructor

__construct ( )

Constructor

Definición en la línea 59 del archivo IgepArbol.php.

                              {
                $this->IgepArbol();
        }

Documentación de las funciones miembro

abrirRamaArbol ( )

Mtodo que se lanza al pulsar un usuario sobre una rama para expandirla. private

Definición en la línea 183 del archivo IgepArbol.php.

                                 {
                //Recogemos el id       
                $idNodoSeleccionado = $_REQUEST['id'];                                          
                //Creamos el dom
                $dom = DOMDocument::loadXML($this->cadXML,
                        DOMXML_LOAD_PARSING + //0
                    DOMXML_LOAD_COMPLETE_ATTRS + //8
                        DOMXML_LOAD_SUBSTITUTE_ENTITIES + //4
                        DOMXML_LOAD_DONT_KEEP_BLANKS //16 
                );
                
                //REVIEW: DAVID Seguir a partir de aqu
                
                //Buscamos el elemento seleccionado en el arbol         
            $xpathXML = new DOMXPath($dom);
            $v_nodos = $xpathXML->evaluate("//*[@id = '$idNodoSeleccionado']", $dom);
        $nodoPadre = $v_nodos->item(0);                 

        if($nodoPadre!=null) {
            //Cogemos el tipo de nodo                   
            $this->tipoNodoSeleccionado = $nodoPadre->getAttribute('tipo');                                                             
            //Cogemos la descripcion
            $descTipoNodo = $this->v_defArbol[$this->tipoNodoSeleccionado];
            //Comprobamos si se tiene que desplegar y, si es as, si est desplegado o no. 
            $desplegado = $nodoPadre->getAttribute('desplegado');
            if((isset($descTipoNodo['despliegue'])) and (is_array($descTipoNodo['despliegue'])) and ($desplegado!='1'))                                                 
                $this->desplegarRamaXml($dom,$nodoPadre,$descTipoNodo);
                        //Si tiene representacin en panel tenemos que lanzar el metodo de representacion
                        if($descTipoNodo['enPanel']==1)
                $this->mostrarEnPanel($nodoPadre,$descTipoNodo);
                        
            //Buscamos el seleccionado anterior
                        $xpathXMLSeleccionadoAnterior = new DOMXPath($dom);
                        $v_nodoSeleccionado = $xpathXMLSeleccionadoAnterior->evaluate("//*[@seleccionado = '1']", $dom);
                        $nodoSeleccionadoAnt = $v_nodoSeleccionado->item(0);                    
                        if($v_nodoSeleccionados->length>0)
                                $nodoSeleccionadoAnt->removeAttribute('seleccionado');
                        //Marcamos el nodo como seleccionado
                        $nodoPadre->setAttribute('seleccionado','1');
                        
                        $xpathXMLRamaSeleccionadosAnteriores = new DOMXPath($dom);
                        $xpresultSeleccionado = $xpathXMLRamaSeleccionadosAnteriores->evaluate("//*[@ramaSeleccion = '1']", $dom);
                        foreach ($xpresultSeleccionado as $nodoSelecAnt)
                                $nodoSelecAnt->removeAttribute('ramaSeleccion');
                        $nodoPadreAux = $nodoPadre;
                        do
                        {
                                if(get_class($nodoPadreAux)=='DOMElement')
                                        $nodoPadreAux->setAttribute('ramaSeleccion', '1');
                        } while ($nodoPadreAux = $nodoPadreAux->parentNode);
            }//Fin de si el padre no es nulo                    
                $this->cadXML = $dom->saveXML();
                return 0; 
        }//Fin de abrirRamaArbol 
addNodoRaiz ( tipo,
etiqueta,
modoDespliegue,
despliegue,
dsnAlternativo = '' 
)

Este mtodo permite al programador indicar a Igep que el rbol tendr una raiz.

Parámetros:
stringtipo indica el tipo de la raiz, es decir el identificador.
stringetiqueta la etiqueta que aparecer en pantalla sobre esta raiz.
stringtipoDespliegue indica la forma como se obtendrn los hijos de esta raiz. Por consulta SQL tipo 'SELECT' o de fuente esttica 'LISTA'.
arraydatosDespliegue Este es un parmetro complejo. Sirve para indicar informacin sobre los hijos que se van crear al desplegar la raiz. El array se compone de:
<ui> En el caso de ser un despliegue a partir de una consulta SQL (SELECT); se compone de dos campos. El primero indica el identificador de los hijos (su tipo de nodo) y el segundo la consulta a partir de la cual se obtienen.</ui> <ui>En el caso de ser un despliegue a partir de una lista fija (LISTA); se compone de tantos items como tenga la lista, eso si, el array debe ser asociativo dejando como indice el tipo de cada hijo y como valor la descripcin que se quiere visualizar.</ui>
arraydsn parmetro opcional que sirve para indicar una conexin alternativa a la propia del panel para el despliegue de dicha raiz.

Definición en la línea 84 del archivo IgepArbol.php.

        {
                $this->v_defArbol[$tipo]['etiqueta'] = $etiqueta;
                $this->v_defArbol[$tipo]['raiz'] = 1;
                $this->addNodoRama($tipo,$modoDespliegue,$despliegue,$dsnAlternativo);
                return 0;                
        }
addNodoRama ( tipo,
modoDespliegue,
despliegue,
dsnAlternativo = '' 
)

Este mtodo permite al programador indicar a como se crea y se despliega una rama.

Parámetros:
stringtipo indica el tipo de la rama, es decir el identificador por el que responder.
stringtipoDespliegue indica la forma como se obtendrn los hijos de esta rama. Por consulta SQL tipo 'SELECT' o de fuente esttica 'LISTA'.
arraydatosDespliegue Este es un parmetro complejo. Sirve para indicar informacin sobre los hijos que se van crear al desplegar la rama. El array se compone de:
<ui>En el caso de ser un despliegue a partir de una consulta SQL (SELECT); se compone de dos campos. El primero indica el identificador de los hijos (su tipo de nodo) y el segundo la consulta a partir de la cual se obtienen.</ui> <ui>En el caso de ser un despliegue a partir de una lista fija (LISTA); se compone de tantos items como tenga la lista, eso si, el array debe ser asociativo dejando como indice el tipo de cada hijo y como valor la descripcin que se quiere visualizar.</ui>
arraydsn parmetro opcional que sirve para indicar una conexin alternativa a la propia del panel para el despliegue de dicha rama.

Definición en la línea 104 del archivo IgepArbol.php.

        {
                if ($modoDespliegue == 'SELECT')
                {
                        $this->v_defArbol[$tipo]['despliegue']['tipoHijos'] = $despliegue[0];                   
                        $this->v_defArbol[$tipo]['despliegue']['consulta'] = $despliegue[1];
                        if(isset($despliegue[2]))
                                $this->v_defArbol[$tipo]['despliegue']['dependencia'] = $despliegue[2];
                        $this->v_defArbol[$tipo]['conexion'] = $dsnAlternativo;
                }
                else
                {                       
                        foreach($despliegue as  $etiquetaHijos => $tipoHijos)
                                $this->v_defArbol[$tipo]['despliegue']['tipoHijos'][$etiquetaHijos] = $tipoHijos;                                
                }
                return 0;                                               
    }
cancelarArbol ( )

Accin que se ejecuta al pulsar sobre el botn cancelar de un arbol private

Definición en la línea 374 del archivo IgepArbol.php.

                                {
                foreach ($this->v_defArbol as $panel){
                        if(isset($panel['claseManejadora']))                            
                                IgepSession::borraPanel($panel['claseManejadora']);                             
                }
                return 0;
        }
desplegarRamaXml ( &$  dom,
&$  nodoPadre,
descTipoNodo 
)

Mtodo que contiene todos los pasos para poder desplegar una rma en el XML actual. private

Definición en la línea 243 del archivo IgepArbol.php.

        {                       
                $res = $this->generaHijos($nodoPadre, $descTipoNodo);                   
                $idHijo = $this->maxId;                 
                //Creamos los hijos
                foreach ($res as $datosHijo) 
                {
                        ++$idHijo;
                        $elemento = $dom->createElement('igepNodo');
                        $nodo_nuevo = $nodoPadre->appendChild($elemento);
                        $nodo_nuevo->setAttribute('id', $idHijo);
                        //Colocamos el enlace
                        $nodo_nuevo->setAttribute('enlace', 'phrame.php?action='.$this->str_claseManejadora."__abrirRamaArbol&amp;id=$idHijo");
                        //Dependiendo del la fuente (viene de SELECT o LISTA el tipo de los hijos puede cambiar o no)
                        if(is_array($descTipoNodo['despliegue']['tipoHijos']))
                                $nodo_nuevo->setAttribute('tipo', $descTipoNodo['despliegue']['tipoHijos'][$datosHijo['etiqueta']]);                            
                        else
                                $nodo_nuevo->setAttribute('tipo', $descTipoNodo['despliegue']['tipoHijos']);
                        //Recuperamos todos los campos clave
                        foreach($datosHijo as $campo => $valor)
                        {
                                if($campo=='etiqueta')
                                        $nodo_nuevo->setAttribute('texto', utf8_encode($datosHijo['etiqueta']));
                                else
                                        $nodo_nuevo->setAttribute(utf8_encode($campo), utf8_encode($valor));
                        }
                        //Para indicar si los nodos hijos se despliegan o no
                        //Si es una lista tenemos que comprobar si cada uno de los hijos se despliegan, ya que son de diferentes tipos
                        if(is_array($descTipoNodo['despliegue']['tipoHijos']))
                        {
                                foreach($descTipoNodo['despliegue']['tipoHijos'] as $tipoNodosHijoLista){
                                        if(isset($this->v_defArbol[$tipoNodosHijoLista]['despliegue']))
                                                $nodo_nuevo->setAttribute('desplegable','1');
                                        else
                                                $nodo_nuevo->setAttribute('desplegable','0');
                                }
                        }//Fin de si es una lista
                        //Si es una consulta con comprobarlo una vez sobra
                        else
                        {
                                if(isset($this->v_defArbol[$descTipoNodo['despliegue']['tipoHijos']]['despliegue']))
                                        $nodo_nuevo->setAttribute('desplegable','1');
                                else
                                        $nodo_nuevo->setAttribute('desplegable','0');
                        }
                }//Fin de foreach de la consulta
                $this->maxId = $idHijo;
                $nodoPadre->setAttribute('desplegado','1');
                return 0;
        }//Fin de deplegarRama
generaHijos ( nodoPadre,
descTipoNodo 
)

Dada una rama para desplegar obtiene los nodos hijos correspondientes private

Definición en la línea 298 del archivo IgepArbol.php.

                                                       {                                                        
                if(isset($descTipoNodo['despliegue']['consulta'])){             
                        $consulta = $descTipoNodo['despliegue']['consulta'];                                    
                        //Tenemos que bucar los parmetros que faltan por rellenar y rellenarlos
                        if (is_array($descTipoNodo['despliegue']['dependencia']))
                                foreach ($descTipoNodo['despliegue']['dependencia'] as $campoDependiente){                                      
                                        $atributoClave = $nodoPadre->getAttribute($campoDependiente);                                                                           
                                        while($atributoClave==null or $nodoPadre->tagname == 'igepArbol'){
                                                $nodoPadre = $nodoPadre->parentNode;
                                                $atributoClave = $nodoPadre->getAttribute($campoDependiente);
                                        }
                                        if($atributoClave!=null)
                                                $consulta = str_replace("%$campoDependiente%",utf8_decode($atributoClave),$consulta);
                                        else                                                            
                                                die('Se busca el parmetro dependiente '.$campoDependiente.' y no se encuentra entre los parametros de los padres del nodo pulsado');
                                }//Fin de foreach
                        //Si tiene conexion propia nos conectamos al dsn, sino la que tiene por defecto el panel                                                                                        
                        if(isset($descTipoNodo['conexion']) and $descTipoNodo['conexion']!='')                          
                                $dsn = $descTipoNodo['conexion'];
                        else{
                                $obj_conexionClase = IgepSession::dameVariable($this->str_claseManejadora,'obj_conexion');
                                $dsn = $obj_conexionClase->getDsn();                            
                        }
                        $conexion = new IgepConexion($dsn);
                        $res = $conexion->consultar($consulta);
                }//Fin de es una Select
                else{
                        $i=0;
                        foreach($descTipoNodo['despliegue']['tipoHijos'] as $etiquetaHijo => $tipoHijo){
                                $res[$i]['etiqueta'] = $etiquetaHijo;
                                ++$i;
                        }
                }
                return $res;
        }//Fin de generaHijos
generaXML ( str_claseActual)

Genera el XML inicial private

Definición en la línea 144 del archivo IgepArbol.php.

                                            {
                //Guardamos la clase Manejadora del arbol
                $this->str_claseManejadora = $str_claseActual;
                //Creamos el documento XML              
                
                $doc = new DOMDocument('1.0');
                $nodoInicial = $doc->createElement('igepArbol');                
                $nodoInicial = $doc->appendChild($nodoInicial);
                $nodoInicial->setAttribute('id','0');
                $id = 1;
                foreach($this->v_defArbol as $tipoNodo => $descNodo){                   
                        if($descNodo['raiz']==1){                               
                                $elemento = $doc->createElement('igepNodo');                                            
                                $nodo_nuevo = $nodoInicial->appendChild($elemento);                     
                                $nodo_nuevo->setAttribute('id', "$id");
                                $nodo_nuevo->setAttribute('texto',utf8_encode($descNodo['etiqueta']));
                                $nodo_nuevo->setAttribute('tipo',$tipoNodo);                                                                                            
                                $nodo_nuevo->setAttribute('enlace', 'phrame.php?action='.$this->str_claseManejadora."__abrirRamaArbol&amp;id=$id");
                                $nodo_nuevo->setAttribute('desplegable','1');
                                ++$id;          
                        }
                }               
                $this->cadXML = $doc->saveXML();
                $this->maxId = $id;             
                return 0;               
        }
getXML ( )

devuelve el XML actual. private

Definición en la línea 175 del archivo IgepArbol.php.

                         {
                return $this->cadXML; 
        }
IgepArbol ( )

Constructor

Definición en la línea 66 del archivo IgepArbol.php.

                            {
                $this->v_defArbol = array();
        }
limpiarArbol ( claseActual)

Borra el contenido de un arbol private

Definición en la línea 386 del archivo IgepArbol.php.

                                           {
                IgepSession::borraVariable($claseActual,"obj_arbol");
        }
mostrarEnPanel ( nodoPadre,
descTipoNodo 
)

Se encarga de instanciar la clase que se quiere visualizar en el panel anexo y lanzar la busqueda sobre dicho panel. private

Definición en la línea 339 del archivo IgepArbol.php.

                                                         {
                $titulo = $descTipoNodo['tituloPanel'];
                //Si el nodo tiene dependencia tenemos que montar un array para pasarlo como el $_REQUEST al buscar de esa clase                                                        
                if(isset($descTipoNodo['dependencia'])) {
                        foreach ($descTipoNodo['dependencia'] as $campoDependiente){                                                                    
                                $atributoClave = $nodoPadre->getAttribute($campoDependiente);                                                                           
                                while($atributoClave==null or $nodoPadre->tagname == 'igepArbol'){                                      
                                        $nodoPadre = $nodoPadre->parentNode;
                                        $atributoClave = $nodoPadre->getAttribute($campoDependiente);
                                }
                                if($atributoClave!=null) {
          $atributoClave = utf8_decode($atributoClave);
                                        $titulo = str_replace("%$campoDependiente%",$atributoClave,$titulo);
                                        $camposBusqueda[$campoDependiente] = $atributoClave;
                                }
                        }//Fin de foreach                       
                }//Fin de dependencia
                $this->str_tituloPanel = $titulo;               
                $_REQUEST = $camposBusqueda;
                IgepSession::borraPanel($descTipoNodo['claseManejadora']);
                //REVIEW: David. Toni cree que mejor privado. revisar ms modos de entrada
                $objeto = new $descTipoNodo['claseManejadora'];
        //Creamos de nuevo la instancia interna de comunicacin porque se pierde el matching
        $objeto->comunica = new IgepComunicacion($objeto->v_descCamposPanel);        
        $objeto->buildQuery();
                $objeto->refreshSearch();
                $objeto->limpiarInstancia();
                IgepSession::guardaPanel($descTipoNodo['claseManejadora'],$objeto);
                return 0;
        }
setNodoPanel ( tipo,
claseManejadora,
dependencia,
tituloPanel 
)

Este mtodo permite al programador indicar que cierto tipo de nodo tiene asociada una representacin en un panel asociado al arbol

Parámetros:
stringtipo indica el tipo o identificador por el que responder.
stringclaseManejadora Indaca el nombre de la clase que manejar el panel que se quiere representar
arraydependencia Este array indica los campos del arbol que se deben tener en cuenta antes de mostrar el panel.
arraytituloPanel El titulo que mostar el panel. En este ttulo se pueden incluir referencias a los campos obtenidos en el arbol.

Definición en la línea 130 del archivo IgepArbol.php.

        {
                $this->v_defArbol[$tipo]['enPanel'] = 1;
                $this->v_defArbol[$tipo]['claseManejadora'] = $claseManejadora;
                if($dependencia!="" and count($dependencia)>0)
                        $this->v_defArbol[$tipo]['dependencia'] = $dependencia;         
                $this->v_defArbol[$tipo]['tituloPanel'] = $tituloPanel;         
                return 0;
        }

Documentación de los campos

$cadXML

Definición en la línea 50 del archivo IgepArbol.php.

$maxId

Definición en la línea 49 del archivo IgepArbol.php.

$str_claseManejadora

Definición en la línea 51 del archivo IgepArbol.php.

$str_tituloPanel

Definición en la línea 53 del archivo IgepArbol.php.

$tipoNodoSeleccionado

Definición en la línea 52 del archivo IgepArbol.php.

$v_defArbol

Definición en la línea 48 del archivo IgepArbol.php.


La documentación para esta clase fue generada a partir del siguiente fichero: