texto=$sql;
$rs->Comando=&$cmd;
if (!$rs->Abrir()) return($grupos_hijos);
$rs->Primero();
$oldgrupopadre=0;
$num=-1;
while (!$rs->EOF){
$grupopadre=$rs->campos["grupopadre"];
$nombre=$rs->campos["nombre"];
$id=$rs->campos["id"];
$conjuntoid=$rs->campos["conjuntoid"];
if ($oldgrupopadre != $grupopadre) {
$oldgrupopadre=$grupopadre;
// Cuando cambio de grupo pongo el orden del array a cero
$num=0;
} else {
$num++;
}
$grupos_hijos[$conjuntoid][$grupopadre][$num]["id"] = $id;
$grupos_hijos[$conjuntoid][$grupopadre][$num]["nombre"] = $nombre;
$rs->Siguiente();
}
$rs->Cerrar();
return ($grupos_hijos);
}
/**
* Construye la parte del árbol correspondiente a un grupo de nodos: lista sus nodos y sus grupos hijos.
*
* @param[tipo_nodo] str tipo de elemento que muestra el árbol
* @param[idgrupo] int identificados del grupo que se está listando
* @param[nivel] int nivel de profundidad del árbol
* @param[orden] int orden dentro del nivel del árbol
* @param[nodos] array nodos
* @param[grupos] array grupos de nodos
* @return orden de la lista del último elemento listado
*/
function lista_grupo_arbol($tipo_nodo, $tipo, $idgrupo, $nivel, $orden, $nodos, $grupos){
/* Al cargar la página sólo se muestra el primer nivel del árbol. */
$class=($nivel==1)? "": 'class="interior"';
$nivel=$nivel+1;
if ($tipo_nodo == "aulas") {
global $ordenadores;
global $grp_ordenadores;
global $idaulas;
}
// Los ordenadores tiene como tipo de nodo el idaula. El menú debe tener un sufijo fijo:
$sufijo_menu=$tipo;
if ($tipo_nodo == "ordenadores") {
global $AMBITO_GRUPOSORDENADORES;
$sufijo_menu=$AMBITO_GRUPOSORDENADORES;
}
echo "\n".'
\n";
// si existen grupos hijos del actual creo la lista con la función listaGrupo.
if (isset ($grupos[$tipo][$idgrupo])){
foreach ($grupos[$tipo][$idgrupo] as $hijo) {
$orden=$orden+1;
echo '
"."\n";
}
// Creo la lista de las nodos dentro del grupo (si existen).
if (isset ($nodos[$tipo][$idgrupo])){
foreach ($nodos[$tipo][$idgrupo] as $nodo){
if ($tipo_nodo == "aulas"){
// Incluyo input para que se pueda abrir el nodo
echo '
'."\n" ;
// Listo grupo de ordenadores
lista_grupo_arbol("ordenadores",$nodo["id"],0, $nivel, $orden,$ordenadores,$grp_ordenadores);
} else {
echo '
"."\n";
return($orden);
}
/**
* Construye la parte del árbol correspondiente al raíz. Si los nodos son de distintos tipos muestra también el primer nivel (ej: procedimientos y tareas).
*
* @param[tipo_nodo] str tipo de elemento a mostrar en el árbol (aulas, imagenes, ...)
* @param[nodos] array nodos a mostrar
* @param[grupos] array grupos de nodos a mostrar
* @return Escribe la raíz del árbol de nodos y el primer nivel.
* @note elementos li: id raiz #root. id tipo #group-$tipoNodo_0. id grupo #group-$tipoNodo_$idgrupo. id nodo #node-$tipoNodo_$idnodo
*/
function lista_raiz_arbol ($tipo_nodo, $nodos, $grupos){
global $TbMsg;
global $NUM_TIPOS_IMAGENES;
$orden=0;
$raiz=0;
if ($tipo_nodo == "aulas") {
// Definimos variables para mostrar ordenadores
global $ordenadores;
global $grp_ordenadores;
$ordenadores=nodos_arbol("ordenadores");
$grp_ordenadores=grupos_arbol("ordenadores");
// id ou. Necesario para comandos de menú.
$raiz=$_SESSION["widcentro"];
}
echo '
"."\n";
}
/*
* Descripción: Devuelve un array de nodos ordenados por el grupo al que pertenecen.
*
* @param[tipo_nodo] str tipo de elemento a mostrar en el árbol (aulas, imagenes, ...)
* @return Array de nodos
* @note Existen nodos clasificados por tipos. Para los no tienen tipos se usa un único tipo = 1
* @note Si no existen nodos se devuelve un array $nodo[$int_tipo_nodo]=Array();. Para que se muestre en el árbol.
*/
function nodos_arbol($tipo_nodo){
global $TbMsg;
global $cmd;
global $idcentro;
//$nodos= Array();
switch ($tipo_nodo){
case 'aulas':
global $AMBITO_GRUPOSAULAS;
$num_tipo=$AMBITO_GRUPOSAULAS;
$sql="SELECT idaula AS id, nombreaula AS nombre, grupoid, '$AMBITO_GRUPOSAULAS' AS conjuntoid
FROM aulas
WHERE idcentro=$idcentro ORDER BY conjuntoid, grupoid;";
break;
case 'comandos':
$num_tipo=1;
$sql="SELECT idcomando AS id, descripcion AS nombre, urlimg,
'1' AS conjuntoid, '0' AS grupoid
FROM comandos
WHERE activo=1 ORDER BY conjuntoid, grupoid;";
break;
case 'componenteshardware':
global $AMBITO_GRUPOSCOMPONENTESHARD;
$num_tipo=$AMBITO_GRUPOSCOMPONENTESHARD;
$sql="SELECT hardwares.idhardware AS id, hardwares.descripcion AS nombre,
tipohardwares.urlimg, '$AMBITO_GRUPOSCOMPONENTESHARD' AS conjuntoid, grupoid
FROM hardwares INNER JOIN tipohardwares
WHERE hardwares.idtipohardware=tipohardwares.idtipohardware AND idcentro=$idcentro
ORDER BY conjuntoid, grupoid;";
break;
case 'componentessoftware':
global $AMBITO_GRUPOSCOMPONENTESSOFT;
$num_tipo=$AMBITO_GRUPOSCOMPONENTESSOFT;
$sql="SELECT softwares.idsoftware AS id, softwares.descripcion AS nombre,
tiposoftwares.urlimg, '$AMBITO_GRUPOSCOMPONENTESSOFT' AS conjuntoid, grupoid
FROM softwares INNER JOIN tiposoftwares
WHERE softwares.idtiposoftware=tiposoftwares.idtiposoftware AND idcentro=$idcentro
ORDER BY conjuntoid, grupoid;";
break;
case 'imagenesmonoliticas':
global $AMBITO_GRUPOSIMAGENESMONOLITICAS;
global $IMAGENES_MONOLITICAS;
$num_tipo=$AMBITO_GRUPOSIMAGENESMONOLITICAS;
$img_tipo=$IMAGENES_MONOLITICAS;
case 'imagenesbasicas':
if (!isset($num_tipo)){
global $AMBITO_GRUPOSIMAGENESBASICAS;
global $IMAGENES_BASICAS;
$num_tipo=$AMBITO_GRUPOSIMAGENESBASICAS;
$img_tipo=$IMAGENES_BASICAS;
}
case 'imagenes':
$sql="SELECT imagenes.idimagen AS id , '$num_tipo' AS conjuntoid, imagenes.grupoid,
CONCAT (imagenes.descripcion,' (', IFNULL(repositorios.nombrerepositorio,'".$TbMsg['DELETEDREPO']."'),')') AS nombre
FROM imagenes
LEFT JOIN repositorios ON imagenes.idrepositorio=repositorios.idrepositorio
WHERE imagenes.idcentro=$idcentro AND imagenes.tipo=$img_tipo
ORDER BY conjuntoid, grupoid;";
break;
case 'imagenesincrementales':
global $AMBITO_GRUPOSIMAGENESINCREMENTALES;
global $IMAGENES_INCREMENTALES;
$num_tipo=$AMBITO_GRUPOSIMAGENESINCREMENTALES;
$img_tipo=$IMAGENES_INCREMENTALES;
$sql="SELECT imagenes.idimagen AS id , '$num_tipo' AS conjuntoid, imagenes.grupoid,
CONCAT (imagenes.descripcion,' (', IFNULL(repositorios.nombrerepositorio,'".$TbMsg['DELETEDREPO']."'),')') AS nombre
FROM imagenes
INNER JOIN imagenes AS basica ON imagenes.imagenid=basica.idimagen
LEFT JOIN repositorios ON basica.idrepositorio=repositorios.idrepositorio
WHERE imagenes.idcentro=$idcentro AND imagenes.tipo=$img_tipo
ORDER BY conjuntoid, grupoid;";
break;
case 'menus':
global $AMBITO_GRUPOSMENUS;
$num_tipo=$AMBITO_GRUPOSMENUS;
$sql="SELECT idmenu AS id, descripcion AS nombre, '$AMBITO_GRUPOSMENUS' AS conjuntoid, grupoid
FROM menus
WHERE idcentro=$idcentro ORDER BY conjuntoid, grupoid;";
break;
case 'ordenadores':
$sql="SELECT idordenador AS id, nombreordenador AS nombre,
ordenadores.idaula AS conjuntoid, ordenadores.grupoid
FROM ordenadores
INNER JOIN aulas
WHERE ordenadores.idaula=aulas.idaula AND idcentro=$idcentro
ORDER BY conjuntoid, grupoid;";
break;
case 'perfileshardware':
global $AMBITO_GRUPOSPERFILESHARD;
$num_tipo=$AMBITO_GRUPOSPERFILESHARD;
$sql="SELECT idperfilhard AS id, descripcion AS nombre,
'$AMBITO_GRUPOSPERFILESHARD' AS conjuntoid, grupoid
FROM perfileshard
WHERE idcentro=$idcentro
ORDER BY conjuntoid, grupoid;";
break;
case 'perfilessoftware':
global $AMBITO_GRUPOSPERFILESSOFT;
$num_tipo=$AMBITO_GRUPOSPERFILESSOFT;
$sql="SELECT idperfilsoft AS id, descripcion AS nombre,
'$AMBITO_GRUPOSPERFILESSOFT' AS conjuntoid, grupoid
FROM perfilessoft
WHERE idcentro=$idcentro
ORDER BY conjuntoid, grupoid;";
break;
case 'procedimientos':
global $AMBITO_GRUPOSPROCEDIMIENTOS;
$num_tipo=$AMBITO_GRUPOSPROCEDIMIENTOS;
$sql="SELECT idprocedimiento AS id, descripcion AS nombre, '$AMBITO_GRUPOSPROCEDIMIENTOS' AS conjuntoid, grupoid
FROM procedimientos
WHERE idcentro=$idcentro ORDER BY conjuntoid, grupoid;";
break;
case 'repositorios':
global $AMBITO_GRUPOSREPOSITORIOS;
$num_tipo=$AMBITO_GRUPOSREPOSITORIOS;
$sql="SELECT idrepositorio AS id, nombrerepositorio AS nombre, '$AMBITO_GRUPOSREPOSITORIOS' AS conjuntoid, grupoid
FROM repositorios
WHERE idcentro=$idcentro ORDER BY conjuntoid, grupoid;";
break;
case 'tareas':
global $AMBITO_GRUPOSTAREAS;
$num_tipo=$AMBITO_GRUPOSTAREAS;
$sql="SELECT idtarea AS id, descripcion AS nombre, '$AMBITO_GRUPOSTAREAS' AS conjuntoid, grupoid
FROM tareas
WHERE idcentro=$idcentro ORDER BY conjuntoid, grupoid;";
break;
case 'tiposhardware':
$num_tipo=1;
$sql="SELECT idtipohardware AS id, descripcion AS nombre, urlimg, nemonico,
'1' AS conjuntoid, '0' AS grupoid
FROM tipohardwares
ORDER BY conjuntoid, grupoid;";
break;
case 'tipossoftware':
$num_tipo=1;
$sql="SELECT idtiposoftware AS id, descripcion AS nombre, urlimg,
'1' AS conjuntoid, '0' AS grupoid
FROM tiposoftwares
ORDER BY conjuntoid, grupoid;";
break;
}
$nodos[$num_tipo]=Array();
$rs=new Recordset;
$cmd->texto=$sql;
$rs->Comando=&$cmd;
if (!$rs->Abrir()) return($nodos);
$rs->Primero();
$ordenNodo=-1;
$oldgrupoid=(isset($rs->campos["grupoid"]))? $rs->campos["grupoid"] : 0;
while (!$rs->EOF){
$conjuntoid=$rs->campos["conjuntoid"];
$id=$rs->campos["id"];
$descripcion=$rs->campos["nombre"];
// Las nodos de un grupo son un array. Cuando cambio de grupo pongo el orden a cero:
$grupoid=(isset($rs->campos["grupoid"]))? $rs->campos["grupoid"] : 0;
if ($oldgrupoid != $grupoid) {
$oldgrupoid=$grupoid;
$ordenNodo=0;
} else {
$ordenNodo=$ordenNodo+1;
}
$nodos[$conjuntoid][$grupoid][$ordenNodo]["descripcion"]=$descripcion;
$nodos[$conjuntoid][$grupoid][$ordenNodo]["id"]=$id;
$rs->Siguiente();
}
$rs->Cerrar();
return($nodos);
}