![]() |
Documentación GVHIDRA 3.1.5
|
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 |
Definición en la línea 45 del archivo IgepArbol.php.
__construct | ( | ) |
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.
string | tipo indica el tipo de la raiz, es decir el identificador. |
string | etiqueta la etiqueta que aparecer en pantalla sobre esta raiz. |
string | tipoDespliegue indica la forma como se obtendrn los hijos de esta raiz. Por consulta SQL tipo 'SELECT' o de fuente esttica 'LISTA'. |
array | datosDespliegue 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: |
array | dsn 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.
string | tipo indica el tipo de la rama, es decir el identificador por el que responder. |
string | tipoDespliegue indica la forma como se obtendrn los hijos de esta rama. Por consulta SQL tipo 'SELECT' o de fuente esttica 'LISTA'. |
array | datosDespliegue 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: |
array | dsn 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&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&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 | ( | ) |
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
string | tipo indica el tipo o identificador por el que responder. |
string | claseManejadora Indaca el nombre de la clase que manejar el panel que se quiere representar |
array | dependencia Este array indica los campos del arbol que se deben tener en cuenta antes de mostrar el panel. |
array | tituloPanel 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; }
$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.