Documentación GVHIDRA 3.1.5
Referencia del Archivo function.CWPantallaEntrada.php

Ir al código fuente de este archivo.

Namespaces

namespace  igep

Enumeraciones

enum  GVHIDRA_IMGMODULO
enum  GVHIDRA_IMGRAMA
enum  GVHIDRA_IMGOPCION
enum  GVHIDRA_TRANSPARENCIA

Funciones

 comprobarAcceso ($nodoAControlar)
 creaMenu ($ficheroXML)
 desplegarNodo ($nodo, $tipoNodo, $datosPadre, &$menuTXT, &$menuHTML, $stringNivel)
 construirMenuOpcion ($nodoOpcion, $datosPadre, &$menuTXT, &$menuHTML, $stringNivel)
 smarty_function_CWPantallaEntrada ($params, &$smarty)

Documentación de las enumeraciones

Definición en la línea 33 del archivo function.CWPantallaEntrada.php.

Definición en la línea 35 del archivo function.CWPantallaEntrada.php.

Definición en la línea 34 del archivo function.CWPantallaEntrada.php.

Definición en la línea 36 del archivo function.CWPantallaEntrada.php.


Documentación de las funciones

comprobarAcceso ( nodoAControlar)

La función siguiente recibe un nodo del árbol XML y comprueba si le corresponde acceso o no en función de la lista de módulos y roles del usuario activo (ubicado en la SESSION)

public

Parámetros:
SimpleXML$nodoControlNodo SimpleXML de los descritos en el fichero MenuModulos.xml
Devuelve:
boolean

Definición en la línea 65 del archivo function.CWPantallaEntrada.php.

{
        $retorno = true; //Valor por defecto

        //Si no hay nodos de control de acceso permiso concedido
        if (!isset($nodoAControlar->controlAcceso)) return($retorno);
        
        //Para cada posible nodo de control de acceso...
        foreach ($nodoAControlar->controlAcceso as $nodoControlAcceso)
        {
                $retorno = false; //Si hay nodos de ocntro lde acceso el valor por defecto es false
                //Tratamiento de roles
                foreach ($nodoControlAcceso->rolPermitido as $nodoRol)
                {
                        $idModRol = trim(utf8_decode($nodoRol['valor'])); //Cogemos el atributo valor
                        $sesionRol = trim(ComunSession::dameRol());
                        if ($sesionRol==$idModRol) return (true); //Permiso concedido!!
                }

                //Tratamiento de módulos de acceso
                $v_sesionModulos = IgepSession::dameModulos();
                foreach ($nodoControlAcceso->moduloPermitido as $nodoModulo) //Para cada nodo moduloPermitido
                {
                        $idNodoModulo = trim(utf8_decode($nodoModulo['id']));
                        if ($v_sesionModulos[$idNodoModulo]) //Si existe el módulo en la sesión
                        {
                                $numHijos = 0;
                                foreach ($nodoModulo->valorModulo as $nodoValor)
                                {
                                        $str_valorXML = trim(utf8_decode($nodoValor['valor']));
                                        $str_valorSesion = trim($v_sesionModulos[$idNodoModulo]['valor']);
                                        if ($str_valorSesion == $str_valorXML) return (true); //Permiso concedido!!
                                        $numHijos++;
                                }//fForeach
                                //Si NO hay hijos basta con que aparezca en la sesión
                                if ($numHijos == 0) return true; //Permiso concedido!!
                        }//Fin if existe el módulo en la sesión
                }//fin para cada nodo moduloPermitido
        }//fin foreach
        return($retorno);
}//Fin function comprobarAcceso
construirMenuOpcion ( nodoOpcion,
datosPadre,
&$  menuTXT,
&$  menuHTML,
stringNivel 
)

Genera la cadena del plugin MenuLayer y la parte del HTML correspondiente a un nodo hoja, 'opcion' Se le invoca desde el plugin public

Parámetros:
SimpleXML$nodoOpcionNodo SimpleXML del tipo opcion
array$datosPadreArray asociativo con datos del nodo padre y el raíz
string$menuTXTCadena de texto que representa el menu de la aplicacion y sirve de entrada al pluggin MenuLAyer
string$menuHTMLCadena HTML que contine las capas y el js para su control en el menu de la pantalla principal
Devuelve:
void

Definición en la línea 385 del archivo function.CWPantallaEntrada.php.

{
        if (!comprobarAcceso($nodoOpcion)) return;

        $titOpcion = utf8_decode($nodoOpcion['titulo']);
        $idOpcion = utf8_decode($nodoOpcion['id']);
        $descOpcion = utf8_decode($nodoOpcion['descripcion']);
        $url = utf8_decode($nodoOpcion['url']);
        $tipoUrl = utf8_decode($nodoOpcion['tipoUrl']);
        $abrirVentana = strtolower(trim(utf8_decode($nodoOpcion['abrirVentana'])));
        $imgOpcion = GVHIDRA_IMGOPCION;
        
        $modActv = $datosPadre['idRaiz'];
        
        if (isset($nodoOpcion['imagen']))//Si se especifica una imagen para la opción...
                $imgOpcion = utf8_decode($nodoOpcion['imagen']);

        $menuHTML.= "<img src='".IMG_PATH_CUSTOM.$imgOpcion."' title='$descOpcion' alt='-'/>";
        
        if ($descOpcion == '')
                $title = '';
        else
                $title = "title='".$descOpcion."'";
                
        //Si se quiere sacar la ventana de Acerca de...
        if ($url =="about")
        {
                $menuHTML .= " <a class='formularios menu_modulos' href='#' onClick='javascript:about.mostrarAbout();' ".$title." target='oculto'>$titOpcion</a><br>\n";
        }
        else {
                // Hay que abrir ventana emergente
                if ($abrirVentana=='true')
                {
                        $urlTarget = '||_blank|';
                        $menuHTML.=" <a class='formularios menu_modulos' ".$title." href=\"javascript:Open_Vtna('$url','urlAbs',700,500,'no','no','no','no','yes','yes')\">$titOpcion</a><br/>\n";
                }
                else
                {
                        $urlTarget= "||oculto|";
                        $url.= "&amp;modActv=".$datosPadre['modActv']."&amp;menuActv=".$datosPadre['menuActv'];
                        $menuHTML.=" <a class='formularios menu_modulos' href='$url' ".$title." target='oculto'>$titOpcion</a><br>\n";
                }
        }
                
        $menuTXT.= "\n".$stringNivel.".|$titOpcion|$url|$descOpcion.$urlTarget\n";
}// Fin construirMenuOpcion
creaMenu ( ficheroXML)

El procedimiento encapsula a otra función recursiva, añadiéndo inicialización de variables. Genera la cadena del plugin MenuLayer private

Parámetros:
string$rutaFicheroCadena que controla el nivel de profundidad en el arbol XML
Devuelve:
array Vector asociativo de dos dimensiones (html,menu) donde se almacena con cadena la pantalla HTML y los menus

Definición en la línea 116 del archivo function.CWPantallaEntrada.php.

{
        //Activamos el log de errores
        libxml_use_internal_errors(true);
        
        if (file_exists($ficheroXML))
                $simpleXML = simplexml_load_file($ficheroXML, SimpleXMLElement, LIBXML_DTDVALID);
        else
                //REVIEW: David Gestión Errores try/catch/throw
                exit('Error!!');
                
        $v_errores = libxml_get_errors();
        $i_numErrores = count($v_errores);
        if ($i_numErrores>0)
        {
                //REVIEW: David Gestión Errores try/catch/throw
                print_r($v_errores);
                exit('Error!!');
        }
        
        $titColumna = strtolower(basename($ficheroXML, '.xml'));
        $prefColumna = 'X'; //Prefijo que incluira cada capa de cada columna
        switch($titColumna)
        {
                case 'menumodulos':
                        $prefColumna = 'M';
                        $menuActv = 'menuMP';
                break;
                case 'menuherramientas';
                        $prefColumna = 'H';
                        $menuActv = 'menuHA';
                break;
        
                case 'menuadministracion';
                        $prefColumna = 'A';
                        $menuActv = 'menuAS';
                break;
        }
        $idColumna = $prefColumna.md5($titColumna);
                
        $datosMenu = array
        (
                'menuActv' => $menuActv,
                'modActv' => null,
                'prefijo' => $prefColumna,
                'idRaiz' => $idColumna,
                'descRaiz' => $titColumna,
                'idPadre' => $idColumna,
                'descPadre' => $titColumna
        );


        //Obtenemos TODOS los módulos
        $vMenu = $simpleXML->xpath('//menu');
        $vSimpleXML = $simpleXML->xpath('//modulo');
        $numModulos = count($vSimpleXML);

        // Cadenas para generar las capas con las opciones de los módulos
        $strCapasOpciones = "";
        
        $vMenuModulosHTML = array();
        $vMenuModulosTXT = array();
        
        //Capa que encierra la lista de modulos
        $vMenuModulosHTML[$idColumna] = "<tr><td style='display:block; vertical-align:top;'>";
        $vMenuModulosHTML[$idColumna].="\n<div id='$idColumna' class='menu'";
        $vMenuModulosHTML[$idColumna].="style='display:block; ";
        $vMenuModulosHTML[$idColumna].=GVHIDRA_TRANSPARENCIA;
        $vMenuModulosHTML[$idColumna].="' >";
        
                                        
        $stringNivel='.';
        $menuModuloTXT ="";
        if ($numModulos > 1)
        {
                foreach ($simpleXML->modulo as $nodoModulo) //Para cada modulo...
                {
                        if (!comprobarAcceso($nodoModulo)) continue;
                        
                        $descModulo = utf8_decode($nodoModulo['titulo']);
                        $idModulo = $prefColumna.'M'.md5($idColumna.$descModulo);
                        $datosMenu['modActv']=$idModulo;
                        
                        $menuModuloTXT =".|Menu||$descModulo";
                        
                        $imgModulo = GVHIDRA_IMGMODULO;
                        if (isset($nodoModulo['imagen']))//Si se especifica una imagen...
                                $imgModulo = utf8_decode($nodoModulo['imagen']);
                        
                        $menuModulosHTML ='';
                        $menuModulosHTML.= "<img src='".IMG_PATH_CUSTOM.$imgModulo."' alt='+' title='";
                        $menuModulosHTML.= $descModulo."' />";
                        $menuModulosHTML.="<b><a class='formularios menu_modulos' ";
                        $menuModulosHTML.="href='javascript:mostrarOpciones(\"$idModulo\")'>";
                        $menuModulosHTML.="$descModulo</a></b><br/>";
                                                
                        desplegarNodo($nodoModulo, 'M', $datosMenu, $menuModuloTXT, $vMenuModulosHTML, $stringNivel);
                        $vMenuModulosHTML[$idColumna].=$menuModulosHTML;
                        $vMenuModulosTXT[$idModulo] = $menuModuloTXT;
                }//Fin para cada módulo
                $vMenuModulosHTML[$idColumna].="\n</div>";
        }
        elseif ($numModulos == 1)  // Un sólo módulo, simplificamos el primer nivel
        {
                $nodoModulo = $vSimpleXML[0];
                if (!comprobarAcceso($nodoModulo)) return;
                                        
                $titModulo = utf8_decode($nodoModulo['titulo']);
                $descModulo = utf8_decode($nodoModulo['descripcion']);
                if (empty($descModulo))
                        $descModulo = $titModulo;
                
                $menuModuloTXT =".|Menu||$descModulo";
                
                $idModulo = $idColumna;
                $datosMenu['modActv']=$idModulo;
                $datosMenu['idPadre'] = $idModulo;
                $datosMenu['descPadre'] = $descModulo;
                $datosMenu['idRaiz'] = $idModulo;
                
                foreach ($nodoModulo->children() as $nombre=>$hijo) //Para cada posible nodo...
                {
                        $titHijo = utf8_decode($hijo['titulo']);
                        $descHijo =utf8_decode($hijo['descripcion']);
                        if (empty($descHijo)) $descHijo = $titHijo;
                        $idNodoHijo = $datosMenu['prefijo'].'R'.md5($idNodo.$titHijo);
                        $stringNivel='.';
                        
                        if (strtolower(trim($nombre)) == 'rama')
                        {
                                $idHijo = $datosMenu['prefijo'].'R'.md5($idModulo.$titHijo);
                                $imgHijo = GVHIDRA_IMGRAMA;
                                if (isset($nodoHijo['imagen']))//Si se especifica una imagen...
                                $imgHijo = utf8_decode($nodoHijo['imagen']);
                                                                
                                $vMenuModulosHTML[$idModulo].= "<img src='".IMG_PATH_CUSTOM.$imgHijo."' alt='+' title='";
                                $vMenuModulosHTML[$idModulo].= $descHijo. "' />";
                                $vMenuModulosHTML[$idModulo].="<b><a class='formularios menu_modulos' ";
                                $vMenuModulosHTML[$idModulo].="href='javascript:mostrarOpciones(\"$idHijo\")'>";
                                $vMenuModulosHTML[$idModulo].="$titHijo</a></b><br/>";
                                $stringNivelRama = $stringNivel.'.';
                                desplegarNodo($hijo, 'R', $datosMenu, $menuModuloTXT, $vMenuModulosHTML, $stringNivelRama);
                        }
                        elseif (strtolower(trim($nombre)) == 'opcion')
                        {
                                $imgHijo = GVHIDRA_IMGOPCION;
                                if (isset($nodoHijo['imagen']))//Si se especifica una imagen...
                                        $imgHijo = utf8_decode($nodoHijo['imagen']);
                                construirMenuOpcion($hijo, $datosMenu, $menuModuloTXT, $vMenuModulosHTML[$idModulo], $stringNivel);
                        }//Fin rama - opcion
                }//Fin para cada hijo
                $vMenuModulosHTML[$idModulo].= "\n</div>";
                $ini_pantalla .= $strCapaModulo."</div>".$vHTML;
                $vMenuModulosTXT[$idModulo] = $menuModuloTXT;
        }//Fin if-else numero módulos

        $retorno['menuTXT'] = $vMenuModulosTXT;
        $retorno['html']='';
                
        $numModulos = count($vMenuModulosHTML);
        reset($vMenuModulosHTML);
        for ($i=0; $i<$numModulos; $i++)
        {
                $retorno['html'] .= current($vMenuModulosHTML);
                next($vMenuModulosHTML);
        }
        $retorno['titulo'] = utf8_decode($vMenu[0]['titulo']);
        $retorno['idRaiz'] = $datosMenu['idRaiz'];
//IgepDebug::setDebug(DEBUG_USER,'<pre>RETORNO:  '.print_r($retorno,true).' FIN RETORNO</pre>');
        return ($retorno);
}//fFuncion creaMenu
desplegarNodo ( nodo,
tipoNodo,
datosPadre,
&$  menuTXT,
&$  menuHTML,
stringNivel 
)

Recorre el subarbol XMLgenera la cadena del plugin MenuLayer y la parte del HTML correspondiente al subarbol modulo/rama Se le invoca desde el plugin public

Parámetros:
SimpleXML$nodoNodo XML del tipo Rama de los descritos en el fichero MenuModulos.xml
string$tipoNodoCadena de texto que indica si es un módulo o una rama 'R'|'M'
array$datosPadreArray asociativo con datos del nodo padre y el raíz
string$menuTXTCadena de texto que representa el menu de la aplicacion y sirve de entrada al pluggin MenuLAyer
array$menuHTMLArray asociativo que contendrá el código relativo a cada capa
Devuelve:
void

Definición en la línea 301 del archivo function.CWPantallaEntrada.php.

{
        if (!comprobarAcceso($nodo)) return;

        //Información Nodo
        $titNodo = utf8_decode($nodo['titulo']);
        $idNodo = $datosPadre['prefijo'].$tipoNodo.md5($datosPadre['idPadre'].$titNodo);
        $descNodo =utf8_decode($nodo['descripcion']);
        if (empty($descNodo)) $descNodo = $titNodo;
        
        //REVIEW: David - Constantes para imágenes
        if (strtolower($tipoNodo) =='R')
                $imgNodo=GVHIDRA_IMGRAMA;
        else //Módulo
                $imgNodo=GVHIDRA_IMGMODULO;

        if (isset($nodo['imagen']))//Si se especifica una imagen para la opción...
                $imgNodo = $nodo['imagen'];
                
        if ($tipoNodo!='M')//Los módulos NO generan MenuTxt
        {
                $menuTXT.= "\n$stringNivel|$titNodo||$descNodo|";
        }
        else
        {
                $menuTXT.='';
        }
                
        $aux_HTML='';
        //Capa que envuelve el despliegue de la Nodo
        $aux_HTML.= "<div id='$idNodo' class='subMenu' style='display:none; ";
        $aux_HTML.=GVHIDRA_TRANSPARENCIA;
        $aux_HTML.="' >";
        
        //Retorno al padre
        //REVIEW: Imágenes de retorno al padre distintas?
        $aux_HTML.= "<img src='".IMG_PATH_CUSTOM."menu/subir.gif' alt='^' title='";
        $aux_HTML.= $datosPadre['descPadre']. "' />";
        $aux_HTML.="<i><a class='formularios menu_modulos' href='javascript:mostrarOpciones(\"";
        $aux_HTML.=$datosPadre['idPadre']."\")'>&nbsp;Volver</a></i><br/>";

        $datosPadre['idPadre']=$idNodo;
        $datosPadre['descPadre']=$descNodo;
        //Para cada nodo hijo...
        foreach ($nodo->children() as $nombre => $hijo)
        {
                if (strtolower(trim(utf8_decode($nombre))) == 'rama')
                {
                        $titNodoHijo = utf8_decode($hijo['titulo']);
                        $idNodoHijo = $datosPadre['prefijo'].'R'.md5($idNodo.$titNodoHijo);
                        if (isset($hijo['imagen']))//Si se especifica una imagen para la rama...
                                $imgNodoHijo = utf8_decode($hijo['imagen']);
                        else
                                $imgNodoHijo = GVHIDRA_IMGRAMA;
                
                        $stringNivelRama=$stringNivel.'.';
                        
                        $aux_HTML.= "<img src='".IMG_PATH_CUSTOM.$imgNodoHijo."' alt='++' title='";
                        $aux_HTML.= $titNodoHijo. "' />";
                        $aux_HTML.="<a class='formularios menu_modulos' href='javascript:mostrarOpciones(\"";
                        $aux_HTML.=$idNodoHijo."\")'>".$titNodoHijo;
                        $aux_HTML.="</a><br/>";
                        desplegarNodo($hijo, 'R', $datosPadre, $menuTXT, $menuHTML, $stringNivelRama);
                }
                elseif (strtolower(trim($nombre)) == 'opcion')
                {
                        construirMenuOpcion($hijo, $datosPadre, $menuTXT, $aux_HTML, $stringNivel);
                }
        }
        $menuHTML[$idNodo]=$menuHTML[$idNodo].$aux_HTML.'</div>';
}//Fin desplegarNodo
smarty_function_CWPantallaEntrada ( params,
&$  smarty 
)

Construcción de la pantalla de acceso princiapl a la aplicación gvHidra

Definición en la línea 441 del archivo function.CWPantallaEntrada.php.

{
        $punteroPilaPadre = count($smarty->_tag_stack)-1;
        $CWPadre = $smarty->_tag_stack[$punteroPilaPadre][0];
        
        if ($params['usuario'])
        {
                $usuario = $params['usuario'];
        }
        else
        {
                $usuario = '';
        }
        
        if ($params['nomApl'])
        {
                $nomApl = $params['nomApl'];
        }
        else
        {
                $nomApl = '';
        }
        
        if ($params['codApl'])
        {
                $codApl = $params['codApl'];
        }
        else
        {
                $codApl = '';
        }
                
        if ($params['version'])
        {
                $versionApl = $params['version'];
        }
        else
        {
                $versionApl = '';
        }

        if ($params['gvHidraVersion'])
        {
                $gvHidraVersion = $params['gvHidraVersion'];
        }
        else
        {
                $gvHidraVersion = '';
        }
        
        $smarty->igepPlugin->registrarInclusionJS('pantallaInicio.js');
        $smarty->igepPlugin->registrarInclusionJS('window.js');
                 
        $igepSmarty = new IgepSmarty();
        $script .= "about.set('about','capaAbout','".$nomApl."','Versión ".$versionApl."','".$gvHidraVersion."');";
        
        $igepSmarty->addPreScript($script);             
        $ini_pantalla .= $igepSmarty->getPreScript();
        
        $ini_pantalla .= "<table style='height: 100%; width: 100%;' cellpadding='0' cellspacing='0' border='0' class='fondo_inicio'>\n";
        $ini_pantalla .= "<tr>\n";
        $ini_pantalla .= "<td style='height: 14;' class='cabecerainicial'>\n";
        $ini_pantalla .= "<table style='height: 100%; width: 100%; border-style:none;' cellpadding='0' cellspacing='0'>\n";
        $ini_pantalla .= "<tr>\n";
        $ini_pantalla .= "<td class='cabecerainicial'>".$usuario."</td>\n";
        $ini_pantalla .= "<td align='left' style='width: 25;'>\n";
        $ini_pantalla .= "<form style='display:inline' id='cerrar' name='cerrar' target='oculto' method='get' action='phrame.php'>\n";
        $ini_pantalla .= "<input type='hidden' id='action' name='action' value='cerrarAplicacion'>";
        $ini_pantalla .= "<input type='hidden' id='permitirCerrarAplicacion' name='permitirCerrarAplicacion' value='si' />\n";
        $ini_pantalla .= "\t\t<input type='image' src='".IMG_PATH_CUSTOM."botones/28tr.gif' title='Cerrar' onClick='javascript:cerrarAplicacion(this.form);'>&nbsp;\n";
        $ini_pantalla .= "</form>\n";
        $ini_pantalla .= "</td>\n";
        $ini_pantalla .= "</tr>\n";
        $ini_pantalla .= "</table>\n";
        $ini_pantalla .= "</td>\n";
        $ini_pantalla .= "</tr>\n";
        $ini_pantalla .= "<tr>\n";
        $ini_pantalla .= "<td style='background-image: url(".IMG_PATH_CUSTOM."logos/logoSuperior.gif);' class='fondo_titaplic' align='center'>\n";
        $ini_pantalla .= "<table>\n";
    $ini_pantalla .= "<tr>\n";
    $ini_pantalla .= "<td class='descrip_titaplic' align='center'>".$nomApl."</td>\n";
    $ini_pantalla .= "</tr>\n";
    $ini_pantalla .= "<tr>\n";
    $ini_pantalla .= "<td class='titulo_aplicacion' align='center'>".$codApl."</td>\n";
    $ini_pantalla .= "</tr>\n";
    $ini_pantalla .= "<tr>\n";
    $ini_pantalla .= "<td class='text' align='center'><b>Versión ".$versionApl."</b></td>\n";
    $ini_pantalla .= "</tr>\n";
    $ini_pantalla .= "</table>\n";
    $ini_pantalla .= "</td>\n";
    $ini_pantalla .= "</tr>\n";
    $ini_pantalla .= "<tr>\n";
        $ini_pantalla .= "<td align='center' style='height: 20; vertical-align:top; '>\n";
        $ini_pantalla .= "<table style='height: 100%; width: 100%; border-style:none;' cellspacing='0' cellpadding='0'>\n";
        $ini_pantalla .= "<tr>\n";
        
                                
        //Cabecera de cada columna
        $ini_columna = '<table ';
        $ini_columna.=" style='height: 100%; width: 80%; vertical-align:top;'";
        $ini_columna.=" align='center' cellspacing='0' cellpadding='0' border='0'> \n";
        $fin_columna ="\n</table>";
        
        
        //Menú principal
        $vRetorno = creaMenu(MODXML_PATH.'menuModulos.xml');
//IgepDebug::setDebug(DEBUG_USER,print_r($vRetorno['idRaiz'],true));
        IgepSession::guardaVariable ("global", "menuMP", $vRetorno['menuTXT']);
        $ini_menuModulos = '';
        $ini_menuModulos.= $ini_columna.$vRetorno['html'].$fin_columna;
        $ini_menuModulos.= "</td>\n";
        $ini_menuModulos.= "<td style='vertical-align:top;' >\n";
        //Zona de inicio de cada columna
        $ini_zonaModulos = "<td class=\"cabecera_modulos\" align='center' style='width: 34%;' >";
        $ini_zonaModulos.="<a class=\"cabecera_modulos\" href='javascript:mostrarOpciones(\"";
        $ini_zonaModulos.=$vRetorno['idRaiz']."\")'>";
        
        if ($vRetorno['titulo'] == '')
                $ini_zonaModulos.= "Módulos principales";
        else
                $ini_zonaModulos.= $vRetorno['titulo'];
        
        $ini_zonaModulos.="</a>";
        $ini_zonaModulos.= "&nbsp;</td>\n";
        
        //Menu herramientas
        $vRetorno = creaMenu(MODXML_PATH.'menuHerramientas.xml');
        IgepSession::guardaVariable ("global", "menuHA", $vRetorno['menuTXT']);
        $ini_menuHerramientas ='';
        $ini_menuHerramientas.= $ini_columna.$vRetorno['html'].$fin_columna;
        $ini_menuHerramientas.= "</td>\n";
        $ini_menuHerramientas.= "<td style='vertical-align:top;' >\n";
        $ini_zonaModulos.= "<td class=\"cabecera_modulos\" align='center' style='width: 33%;' >";
        $ini_zonaModulos.="<a class=\"cabecera_modulos\" href='javascript:mostrarOpciones(\"";
        $ini_zonaModulos.=$vRetorno['idRaiz']."\")'>";
        
        if ($vRetorno['titulo'] == '')
                $ini_zonaModulos.= "Herramientas auxiliares";
        else
                $ini_zonaModulos.= $vRetorno['titulo'];
        
        $ini_zonaModulos.="</a>";
        $ini_zonaModulos.= "&nbsp;</td>\n";
        
        
        //Menu administración
        $vRetorno = creaMenu(MODXML_PATH.'menuAdministracion.xml');
        IgepSession::guardaVariable ("global", "menuAS", $vRetorno['menuTXT']);
        $ini_menuAdministracion ='';
        $ini_menuAdministracion.= $ini_columna.$vRetorno['html'].$fin_columna;
        $ini_menuAdministracion.= "</td>\n";
        $ini_menuAdministracion.= "<td style='vertical-align:top;' >\n";
        
        
        //Cabecera de la columna
        $ini_zonaModulos.= "<td class=\"cabecera_modulos\" align='center' style='width: 33%;' >";
        $ini_zonaModulos.="<a class=\"cabecera_modulos\" href='javascript:mostrarOpciones(\"";
        $ini_zonaModulos.=$vRetorno['idRaiz']."\")'>";
        
        if ($vRetorno['titulo'] == '')
                $ini_zonaModulos.="Administración sistema";
        else
                $ini_zonaModulos.= $vRetorno['titulo'];

        $ini_zonaModulos.="</a>";
        $ini_zonaModulos.= "&nbsp;</td>\n";
        $ini_zonaModulos.= "<td class=\"cabecera_modulos\" align='center' style='width: 33%;' >";

        //Concatenamos la zona de inicio de columnas
        $ini_pantalla .= $ini_zonaModulos;
        //Cerramos la zona de columnas
        $ini_pantalla.= "</tr>\n";
        $ini_pantalla.= "<tr class=\"formularios menu_modulos\">\n";
        $ini_pantalla.= "<td style='vertical-align:bottom;' >\n";
                
        //Concatenamos los menus HTML de cada columna
        $ini_pantalla .= $ini_menuModulos.$ini_menuHerramientas.$ini_menuAdministracion;
        
        //Cierre de la pantalla
        $fin_pantalla = "</tr>\n";
        $fin_pantalla .= "</table>\n";
        $fin_pantalla .= "</td>\n";
        $fin_pantalla .= "</tr>\n";
        $fin_pantalla .= "<tr>\n";
        $fin_pantalla .= "<td align='center' style='vertical-align:bottom;' >\n";
        $fin_pantalla .= "<img src='".IMG_PATH_CUSTOM."logos/logo.gif' border='0'>\n";
    $fin_pantalla .= "</td>\n";
    $fin_pantalla .= "</tr>\n";
        $fin_pantalla .= "</table>\n";
        return $ini_pantalla.$fin_pantalla;
}//Fin funcion