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"; 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); }