2. memoria 2.1 introducción -...
TRANSCRIPT
16
2. MEMORIA 2.1 Introducción
Tras analizar el contexto en el que se plantea la necesidad de
realización del proyecto, en este apartado desglosaremos técnicamente su
desarrollo. Desde los objetivos iniciales planteados, hasta las conclusiones
finales obtenidas, pasando por una presentación de las técnicas empleadas
en su implementación.
El proyecto planteado se compone de tres partes perfectamente
diferenciadas:
� Interfaz de usuario: se trata de una web dedicada a la presentación
de contenidos, que llamaremos “web GRVC” en adelante.
� Interfaz de administración: es la web desde la que se realizará la
gestión de contenidos que aparecen en la web GRVC. La
denominaremos “web de administración”.
� phpMyAdmin: se trata de una herramienta de gestión de base de
datos que proporcionará el soporte DDL7 en su totalidad y DML8
masivo (carga y exportación de datos mediante scripts).
En apartados sucesivos detallaremos el desarrollo de las interfaces de
usuario y administración y la instalación y configuración de la herramienta
empleada.
7 Lenguaje de definición de datos (Data Definition Language). Véase http://es.wikipedia.org/wiki/Lenguaje_de_definici%C3%B3n_de_datos 8 Lenguaje de Manipulación de Datos (Data Manipulation Language). Véase http://es.wikipedia.org/wiki/DML
17
2.2 Objetivos y alcance
En línea con lo comentado en la introducción, el objetivo del proyecto
es beneficiarnos de las enormes posibilidades que nos ofrecen las TIC9 para
dotar al Grupo de Robótica, Visión y Control de un medio de difusión de la
información con un reducido coste en recursos, así como facilidad de
mantenimiento para que sea factible la actualización de los contenidos que
ofrece.
La opción elegida se compone de un portal web de presentación de
contenidos, “web GRVC”, unido a una interfaz web para gestión de esos
contenidos, “web de administración”, todo realizado en software libre. Se ha
elegido PHP como la forma de implementación más apropiada.
Para la persistencia de datos se ha seleccionado un servidor de base
de datos MySQL.
El portal web GRVC deberá cumplir los siguientes objetivos:
� Presentación clara, detallada, accesible y atractiva de la
información.
� Interfaz intuitiva y dinámica.
� Navegación sencilla y con acceso rápido a los diversos apartados.
� Posibilidad de escoger el idioma de la información en castellano o
inglés.
� Evitar mostrar e-mail en código.
� Tablón donde situar contenidos destacables.
� Herramienta para exportar información a archivo en formato
BibTeX.
� Herramienta que permita buscar contenidos concretos.
� Todos los contenidos deben obtenerse de la base de datos.
� Integración de aplicación de control de estadísticas de tráfico web.
9 Tecnologías de la información y la comunicación. Véase http://es.wikipedia.org/wiki/TIC
18
La interfaz web de administración también deberá seguir unas pautas:
� Autenticación de usuarios contra la base de datos.
� Accesibilidad directa y sencilla a cualquier tabla.
� Mostrar información del modelo de datos (estructura de las tablas).
� Proporcionar mantenimiento de la base de datos MySQL.
� Herramienta para exportar información a archivo en formato
BibTeX.
� Herramienta para importar información de archivo en formato
BibTeX.
� Herramienta que permita buscar contenidos concretos.
� Integración de editor para insertar texto enriquecido.
� La interfaz debe ser sencilla e intuitiva, dada la posibilidad de que
sea utilizada por personas carentes de conocimientos técnicos en
bases de datos.
En el alcance se han detallado algunos objetivos:
� El acceso al portal web de administración se realizara vía url, nunca
a través de un enlace desde la web GRVC.
� El soporte DDL de la base de datos MySQL será ofrecido por la
aplicación phpMyAdmin, no por la interfaz web de administración.
� La carga de datos mediante scripts será ofrecido por la aplicación
PHPMyAdmin, no por la interfaz web de administración.
� El soporte DML de la base de datos MySQL será realizado por la
interfaz web de administración.
� La exportación a un archivo en formato BibTeX deberá
implementarse tanto a nivel de tabla como de registro.
� La importación de un archivo en formato BibTeX se limitará a un
solo registro.
� La funcionalidad de importación/exportación BibTeX solo será
necesaria para el bloque publicaciones y estará integrada en el
buscador.
19
� Para editar contenidos HTML se ha optado por integrar un editor
WYSIWYG, pero solo será necesario en un campo del bloque
proyectos.
2.3 Análisis del entorno tecnológico
2.3.1 Introducción
El desarrollo web demanda cada vez más interactividad y capacidad de
personalización de los sitios; las limitaciones que imponen enfoques como el
de HTML pueden ser superadas empleando tecnologías que ofrecen nuevas
posibilidades como PHP, JavaScript y MySQL.
En el presente proyecto fin de carrera se plantea desarrollar una
aplicación web compuesta por tres entidades principales:
� Un portal de presentación de contenidos realizado en PHP
� Un portal de gestión de contenidos realizado en PHP
� Una base de datos soportada por un servidor MySQL
La arquitectura cliente-servidor es la elegida para implementar la
aplicación y la conforman varios componentes:
� Un nodo cliente (navegador)
� Una nodo servidor (servidor web Apache con intérprete PHP)
� Un servidor de base de datos MySQL
En el cliente se ejecutará el código JavaScript, mientras el código PHP
se ejecutará en el servidor devolviendo éste las páginas formateadas en
HTML, que es el lenguaje que comprende la entidad cliente.
El servidor de base de datos MySQL es el que proporcionará la
persistencia de los datos de la aplicación.
20
Podemos ver un esquema de la arquitectura empleada:
Figura 1. Arquitectura en la que está implementado el proyecto.
2.3.2 PHP
PHP10 es un lenguaje de programación interpretado11 de alto nivel,
embebido en el código HTML, diseñado originalmente para la creación de
páginas web dinámicas. Es usado principalmente en interpretación del lado
del servidor (server-side scripting) pero actualmente puede ser utilizado
desde una interfaz de línea de comandos o en la creación de otros tipos de
programas incluyendo aplicaciones con interfaz gráfica.
Cuando el cliente hace una petición al servidor para que le envíe una
página web, el servidor ejecuta el intérprete de PHP. Éste procesa el script
solicitado que generará el contenido de manera dinámica (por ejemplo
obteniendo información de una base de datos). El resultado es enviado por el
intérprete al servidor, quien a su vez se lo envía al cliente.
10 Véase http://es.wikipedia.org/wiki/PHP 11 Lenguaje de programación que está diseñado para ser ejecutado por medio de un intérprete, es decir, que cada instrucción debe pasar por una interpretación en tiempo de ejecución. Véase http://es.wikipedia.org/wiki/Lenguaje_interpretado
21
Sus principales ventajas son:
� Permite la programación dinámica de sitios web.
� Combina potencia, versatilidad y sencillez de aprendizaje.
� Se comunica perfectamente con HTML y Java Script, permitiendo
alcanzar un elevado nivel de integración con el navegador.
� Es un lenguaje de programación Open Source.
Su interacción con MySQL se basa en el envío de peticiones con
sentencias SQL a través de las funciones que contiene el API12. El API de
PHP es muy amplio, cuenta con multitud de funciones para manejar cadenas,
arrays y en general cualquier tipo de datos.
2.3.3 MySQL
MySQL13 es un sistema de gestión de base de datos relacional,
multihilo14 y multiusuario. Está desarrollado en su mayor parte en ANSI C.
Sus principales ventajas son:
� Es una herramienta Open Source. Aunque existen licencias de pago
destinadas a grandes usuarios.
� Existen en Internet gran cantidad de documentación.
� Es más rápido y eficiente que la mayoría de los gestores que hay
en el mercado.
� Permite una gran versatilidad a la hora de almacenar y gestionar
todo tipo de datos.
� Se administra mediante sentencias SQL.
12 Interfaz de programación de aplicaciones o API es el conjunto de funciones y procedimientos que ofrece cierta biblioteca para ser utilizado por otro software como una capa de abstracción. Véase http://es.wikipedia.org/wiki/API 13 Véase http://es.wikipedia.org/wiki/MySQL 14 Hilo de ejecución o subproceso es una característica que permite a una aplicación realizar varias tareas a la vez (concurrentemente). Véase http://es.wikipedia.org/wiki/Hilo_en_sistemas_operativos
22
2.3.4 Servidor HTTP Apache
El servidor HTTP Apache15 es un servidor web HTTP Open Source
que implementa el protocolo HTTP/1.1 y la noción de sitio virtual. El servidor
Apache se desarrolla dentro del proyecto HTTP Server (httpd) de la Apache
Software Foundation.
Apache presenta entre otras características altamente configurables,
bases de datos de autenticación y negociado de contenido, pero fue criticado
por la falta de una interfaz gráfica que ayude en su configuración.
La mayoría de las vulnerabilidades de la seguridad descubiertas y
resueltas tan sólo pueden ser aprovechadas por usuarios locales y no
remotamente. Sin embargo, algunas se pueden accionar remotamente en
ciertas situaciones, o explotar por los usuarios locales malévolos en las
disposiciones de recibimiento compartidas que utilizan PHP como módulo de
Apache.
La arquitectura del servidor Apache es muy modular. El servidor
consta de una sección core y diversos módulos que aportan mucha de la
funcionalidad que podría considerarse básica para un servidor web. Algunos
de estos módulos son:
� mod_ssl - Comunicaciones Seguras vía TLS.
� mod_rewrite - reescritura de direcciones (generalmente utilizado
para transformar páginas dinámicas como php en páginas estáticas
HTML para así engañar a los navegantes o a los motores de búsqueda
en cuanto a cómo fueron desarrolladas estas páginas).
� mod_dav - Soporte del protocolo WebDAV (RFC 2518).
� mod_deflate - Compresión transparente con el algoritmo deflate del
contenido enviado al cliente.
� mod_auth_ldap - Permite autentificar usuarios contra un servidor
LDAP.
15 Véase http://es.wikipedia.org/wiki/Servidor_HTTP_Apache
23
� mod_proxy_ajp - Conector para enlazar con el servidor Jakarta
Tomcat de páginas dinámicas en Java (servlets y JSP).
El servidor de base puede ser extendido con la inclusión de módulos
externos entre los cuales se encuentran:
• mod_cband - Control de tráfico y limitador de ancho de banda.
• mod_perl - Páginas dinámicas en Perl.
• mod_php - Páginas dinámicas en PHP.
• mod_python - Páginas dinámicas en Python.
• mod_rexx - Páginas dinámicas en REXX y Object REXX.
• mod_ruby - Páginas dinámicas en Ruby.
• mod_aspdotnet - Páginas dinámicas en .NET de Microsoft (Módulo
retirado).
• mod_mono - Páginas dinámicas en Mono
• mod_security - Filtrado a nivel de aplicación, para seguridad.
Apache es usado principalmente para enviar páginas web estáticas y
dinámicas en la World Wide Web. Muchas aplicaciones web están diseñadas
asumiendo como ambiente de implantación a Apache, o que utilizarán
características propias de este servidor web.
La mayor parte de la configuración se realiza en el fichero apache2.conf o
httpd.conf, según el sistema donde esté corriendo. Cualquier cambio en este
archivo requiere reiniciar el servidor, o forzar la lectura de los archivos de
configuración nuevamente.
24
2.3.5 Javascript
Javascript16 es un lenguaje de programación interpretado, dialecto
del estándar ECMAScript17. Se define como orientado a objetos18, basado en
prototipos19, imperativo20, débilmente tipado y dinámico.
Se utiliza principalmente en su forma del lado del cliente (client-side),
implementado como parte de un navegador web permitiendo mejoras en la
interfaz de usuario y páginas web dinámicas, aunque existe una forma de
Javascript del lado del servidor (Server-side Javascript o SSJS).
2.3.5.1 Plugins jqueryUI 1.8.2
jQuery UI21 es una biblioteca de componentes para el framework22
jQuery que le añaden un conjunto de plug-ins23, widgets24 y efectos visuales
para la creación de aplicaciones web.
16 Véase http://es.wikipedia.org/wiki/JavaScript 17 ECMAScript es una especificación de lenguaje de programación publicada por ECMA Internacional. Véase http://es.wikipedia.org/wiki/ECMAScript 18 Paradigma de programación que usa objetos y sus interacciones, para diseñar aplicaciones y programas informáticos. Los objetos son entidades que combinan estado (atributo), comportamiento (método) e identidad. Véase http://es.wikipedia.org/wiki/Programaci%C3%B3n_orientada_a_objetos 19 Estilo de programación orientada a objetos en el cual, las "clases" no están presentes, y la re-utilización de procesos (conocida como herencia en lenguajes basados en clases) se obtiene a través de la clonación de objetos ya existentes, que sirven de prototipos, extendiendo sus funcionalidades. Véase http://es.wikipedia.org/wiki/Programaci%C3%B3n_basada_en_prototipos 20 Paradigma de programación que describe la programación en términos del estado del programa y sentencias que cambian dicho estado. Véase http://es.wikipedia.org/wiki/Programaci%C3%B3n_imperativa 21 Véase http://es.wikipedia.org/wiki/JQuery_UI 22 Estructura conceptual y tecnológica de soporte definida. Véase http://es.wikipedia.org/wiki/Framework 23 Aplicación que se relaciona con otra para aportarle una función nueva y generalmente muy especifica. Véase http://es.wikipedia.org/wiki/Plugin 24 Pequeña aplicación o programa, usualmente presentado en archivos o ficheros pequeños que son ejecutados por un motor de widgets o Widget Engine. Véase http://es.wikipedia.org/wiki/Widget
25
La biblioteca se divide en cuatro módulos:
� Núcleo: contiene las funciones básicas para el resto de módulos.
� Interacciones: añade comportamientos complejos a los elementos:
� Draggable: Hace al elemento arrastrable.
� Droppable: Permite que el elemento responda a elementos
arrastrables.
� Resizable: Permite redimensionar el elemento.
� Selectable: Permite seleccionar entre una lista de
elementos.
� Sortable: Ordena una lista de elementos.
� Widgets: Es un conjunto completo de controles UI. Cada
control tiene un conjunto de opciones configurables y se les
pueden aplicar estilos CSS.
� Accordion: Menú con efecto acordeón.
� Dialog: Ventanas con contenido.
� Slider: Elemento para elegir en un rango de valores.
� Tabs: Pestañas
� Datepicker: Calendario gráfico.
� Progressbar: Barra de progreso.
� Efectos: una API para añadir transiciones animadas y facilidades
para interacciones.
Se utiliza igual que cualquier otra extensión para jQuery, sólo hay que
añadir los ficheros .js a la página. Primero debe aparecer la biblioteca jQuery
y después el resto:
<link type="text/css" href="css/themename/jquery-ui-1.7.1.custom.css" rel="Stylesheet" /> <script type="text/javascript" src="js/jquery-1.3.2.min.js"></script> <script type="text/javascript" src="js/jquery-ui-1.7.1.custom.min.js"></script>
Ejemplo 1. Código que permite integrar jQueryUI en el proyecto.
26
2.3.5.2 nicEdit 0.9 r23
NicEdit25 es un editor WYSIWYG integrado para sitios web. Su
objetivo es ser lo más simple y rápido como sea posible para los usuarios de
la aplicación.
NicEdit es extremadamente ligero y puede ser fácilmente integrado a
cualquier sitio con un impacto mínimo, al mismo tiempo proporcionando a
los visitantes un medio eficaz para expresarse en texto enriquecido.
Figura 2. Ventana emergente del editor WYSIWYG.
2.3.5.3 BibTeX Parser 0.1
JavaScript BibTeX Parser es un conjunto de funciones codificadas
en JavaScript que toman un archivo BibTeX (.bib), lo analizan y devuelven
25 Véase http://nicedit.com/
27
los valores asociados a los campos apropiados. Entonces estos datos pueden
formatearse para adaptarse a la tecnología de persistencia empleada. El
archivo BibTeX puede contener uno o varios registros.
2.3.5.4 Google Analytics
Google Analytics26 es un servicio gratuito de estadísticas de sitios
web. Ofrece información agrupada según los intereses de tres tipos distintos
de personas involucradas en el funcionamiento de una página: ejecutivos,
técnicos de marketing y webmasters.
Se pueden obtener informes como el seguimiento de usuarios
exclusivos, el rendimiento del segmento de usuarios, los resultados de la
campaña de marketing, el marketing de motores de búsqueda, las pruebas
de versión de anuncios, el rendimiento del contenido, el análisis de
navegación, los objetivos y proceso de redireccionamiento o los parámetros
de diseño web.
Se comienza añadiendo un código JavaScript a cada una de las
páginas que se desea analizar, al que se denomina GATC (Google Analytics
Tracking Code). Este carga algunos archivos desde los servidores Google y
monitoriza para luego enviar toda esta información al servidor Google y
almacenarla en la cuenta de cada usuario.
Para funcionar, el GATC carga un archivo más grande desde el
servidor web de Google, y luego asigna a las variables con el número de
cuenta del usuario. El archivo más grande (actualmente conocido como
ga.js) es típicamente de 18 KB en tamaño y solo se descarga una vez al
comienzo de la visita, ya que se almacenará en la caché durante el resto de
la sesión. Como todos los sitios web que implementan Google Analytics con
el código de ga.js usan el mismo archivo maestro de Google, un visitante
que anteriormente hubiera visitado cualquier otro sitio con este código
implementado también tendrá el archivo en el caché de su máquina. El
26 Véase http://es.wikipedia.org/wiki/Google_Analytics
28
resultado es que el aumento del tiempo de carga de la página al incluir el
código es mínima.
Tiene una interfaz muy completa de informes con gráficos
desarrollados en Adobe Flash. Recientemente se actualizó la interfaz pero
aun está disponible la interfaz antigua habilitada.
2.3.6 BibTeX
BibTeX27 es una herramienta para dar formato a listas de
referencias28 que se utiliza habitualmente con el sistema de preparación de
documentos LaTeX29.
Facilita la realización de citas bibliográficas de un modo consistente
mediante la separación de la información bibliográfica de la presentación de
esta información.
Usa un formato de archivo basado en texto e independiente del estilo
para definir listas de elementos bibliográficos, como artículos, libros, tesis.
Los archivos de bibliografía de BibTeX usualmente terminan en .bib. Los
ítems bibliográficos incluidos en un .bib están separados por tipos. Los tipos
siguientes son reconocidos por virtualmente todos los estilos de BibTeX:
� article: Un artículo de un journal o revista.
� book: Un libro con una editorial explícita. Campos requeridos:
author o editor, title, publisher, year.
� booklet: Una obra que está impresa y encuadernada (bound),
pero sin una editorial o institución patrocinadora (sponsoring).
� conference: Lo mismo que inproceedings, incluido para
compatibilidad con el lenguaje de markup Scribe.
27 Véase http://es.wikipedia.org/wiki/Bibtex 28 Listas de referencias o bibliografía es el estudio de referencia de los textos. Véase http://es.wikipedia.org/wiki/Bibliograf%C3%ADa 29 Sistema de composición de textos, orientado especialmente a la creación de libros, documentos científicos y técnicos que contengan fórmulas matemáticas. Véase http://es.wikipedia.org/wiki/LaTeX
29
� inbook: Una parte de un libro, que puede ser un capítulo (o
sección) o un rango de páginas.
� incollection: Una parte de un libro que tiene su propio título.
� inproceedings: Un artículo en las actas de sesiones (proceedings)
de una conferencia.
� manual: Documentación técnica.
� mastersthesis: Una tesis de maestría o proyecto fin de carrera.
� misc: Para uso cuando los demás tipos no corresponden.
� phdthesis: Una tesis de doctorado.
� proceedings: Las actas de sesiones (proceedings) de una
conferencia.
� techreport: Un reporte publicado por una escuela (school) u otra
institución, usualmente numerado dentro de una serie.
� unpublished: Un documento que tiene un autor y título, pero que
no fue formalmente publicado.
En nuestro proyecto solo trabajaremos con cuatro tipos:
� article (revistas)
� book (libro)
� inbook (capítulos de libros)
� inproceedings (conferencias)
Un archivo .bib puede contener la siguiente entrada, que describe un manual
de matemáticas:
@Book{abramowitz+stegun, author = "Milton Abramowitz and Irene A. Stegun", title = "Handbook of Mathematical Functions", publisher = "Dover", year = 1964, address = "New York", edition = "ninth Dover printing, tenth GPO printing", isbn = "0-486-61272-4" }
Ejemplo 2. Registro con formato BibTeX.
30
2.3.7 Herramientas de desarrollo
2.3.7.1 Eclipse (Galileo SR2)
Para realizar el desarrollo de los portales web se ha empleado como
IDE30 Eclipse (Galileo), por ser el más sencillo y versátil.
2.3.7.2 XAMPP 1.7.3
Como soporte de servidores se ha empleado XAMPP31, que es un
servidor independiente de plataforma, software libre, que consiste
principalmente en la base de datos MySQL, el servidor Web Apache y los
intérpretes para lenguajes de script: PHP y Perl. El nombre proviene del
acrónimo de X (para cualquiera de los diferentes sistemas operativos),
Apache, MySQL, PHP, Perl. El programa está liberado bajo la licencia GNU y
actúa como un servidor Web libre, fácil de usar y capaz de interpretar
páginas dinámicas.
2.3.7.3 MySQL Workbench 5.1.18
MySQL Workbench32 es un software creado por Sun Microsystems.
Esta herramienta permite modelar diagramas de entidad-relación para bases
de datos MySQL. Puede utilizarse para diseñar el esquema de una base de
datos nueva, documentar una ya existente o realizar una migración
compleja.
La aplicación elabora una representación visual de las tablas, vistas,
procedimientos almacenados y claves foráneas de la base de datos. Además,
es capaz de sincronizar el modelo en desarrollo con la base de datos real,
ingeniería inversa para importar el esquema de una base de datos ya
30 Un entorno de desarrollo integrado (integrated development environment) es un programa informático compuesto por un conjunto de herramientas de programación. Véase http://es.wikipedia.org/wiki/Entorno_de_desarrollo_integrado 31 Véase http://es.wikipedia.org/wiki/XAMPP 32 Véase http://es.wikipedia.org/wiki/MySQL_Workbench
31
existente el cual haya sido guardado o hecho copia de seguridad con MySql
Administrator.
MySQL Workbench también puede generar el guión necesario para
crear la base de datos que se ha dibujado en el esquema.
2.3.7.4 phpMyAdmin 3.2.4
phpMyAdmin33 es una herramienta escrita en PHP con la intención de
manejar la administración de MySQL a través de páginas web, utilizando
Internet. Actualmente puede crear y eliminar Bases de Datos, crear, eliminar
y alterar tablas, borrar, editar y añadir campos, ejecutar cualquier sentencia
SQL, administrar claves en campos, administrar privilegios, exportar datos
en varios formatos y está disponible en 62 idiomas. Se encuentra disponible
bajo la licencia GPL.
2.3.8 Doxygen 1.7.1
Doxygen34 es un generador de documentación para C++, C, Java,
Objective-C, Python, IDL (versiones Corba y Microsoft) y en cierta medida
para PHP, C# y D. Doxygen es un acrónimo de dox(document)
gen(generator), generador de documentación para código fuente.
El siguiente ejemplo ilustra la forma de documentar un fichero fuente:
/** * La clase Time representa un momento del tiempo. * * \author Nombre del Autor */ class Time { /** * El constructor que inicializa el valor de tiempo. * \param timemillis Número de milisegundos desde el 1 de enero de 1970 */
33 Véase http://es.wikipedia.org/wiki/PhpMyAdmin 34 Véase http://es.wikipedia.org/wiki/Doxygen
32
Time(int timemillis) { ... } /** * Obtener la hora actual. * \return Un objeto time, con la hora actual. */ static Time now() { ... } }
Ejemplo 3. Código que permite comentar una clase usando Doxygen.
2.4 Desarrollo del trabajo
2.4.1 Arquitectura de los portales
La Arquitectura de Software en la que está basado el proyecto es
impuesta por la tecnología empleada en su desarrollo. PHP+MySQL trabajan
en una arquitectura cliente-servidor35. PHP requiere una interpretación en el
servidor que devuelve código HTML que es leído por el cliente y el
funcionamiento de MySQL se basa en el lanzamiento, por parte del cliente,
de sentencias SQL contra el servidor de base de datos.
Figura 3. Arquitectura en la que está implementado el proyecto.
35 Esta arquitectura consiste básicamente en un cliente que realiza peticiones a otro programa (el servidor) que le da respuesta. Véase http://es.wikipedia.org/wiki/Cliente-servidor
33
Durante la planificación del proyecto se ha tratado de orientar esta
arquitectura cliente-servidor hacia un modelo basado en tres niveles o
capas36:
� Capa de presentación: es la que ve el usuario (también se la
denomina "capa de usuario"), presenta el sistema al usuario, le
comunica la información y captura la información del usuario en
un mínimo de proceso (realiza un filtrado previo para
comprobar que no hay errores de formato). También es
conocida como interfaz gráfica y debe tener la característica de
ser "amigable" (entendible y fácil de usar) para el usuario. Esta
capa se comunica únicamente con la capa de negocio.
� Capa de negocio: es donde residen los programas que se
ejecutan, se reciben las peticiones del usuario y se envían las
respuestas tras el proceso. Se denomina capa de negocio (e
incluso de lógica del negocio) porque es aquí donde se
establecen todas las reglas que deben cumplirse. Esta capa se
comunica con la capa de presentación, para recibir las
solicitudes y presentar los resultados, y con la capa de datos,
para solicitar al gestor de base de datos almacenar o recuperar
datos de él. También se consideran aquí los programas de
aplicación.
� Capa de datos: es donde residen los datos y es la encargada
de acceder a los mismos. Está formada por uno o más gestores
de bases de datos que realizan todo el almacenamiento de
datos, reciben solicitudes de almacenamiento o recuperación de
información desde la capa de negocio.
36 La programación por capas es un estilo de programación en el que el objetivo primordial es la
separación de la lógica de negocios de la lógica de diseño; un ejemplo básico de esto consiste en separar la capa de datos de la capa de presentación al usuario. Véase http://es.wikipedia.org/wiki/Arquitectura_de_tres_niveles
34
Figura 4. Modelo de niveles o capas.
Si bien, dada la naturaleza intrínseca del proyecto, solo ha sido posible
implementar en parte la arquitectura en capas mencionada:
� Capa de presentación y de negocio: tanto la navegación
como la consulta genérica de contenidos se ha decidido integrar
junto con la presentación de estos, dada la simplicidad de las
peticiones.
� Capa de negogio: podemos exceptuar, sin embargo, algunas
funcionalidades concretas de la aplicación que al ser más
complejas se han aislado para facilitar el mantenimiento. Es el
caso de los buscadores y la importación y exportación BibTeX.
� Capa de datos: se concreta en una clase que implementa
todos los métodos que interactúan con la base de datos MySQL.
Cada paradigma de desarrollo exige diferente número y tipo de vistas o
modelos para describir una arquitectura. No obstante, existen al menos tres
vistas absolutamente fundamentales en cualquier arquitectura:
35
� La visión estática: describe qué componentes tiene la
arquitectura. En las figuras 5 y 6, podemos observar dos
diagramas que muestran los componentes de ambos portales web,
así como la relación existente entre ellos.
� La visión funcional: describe qué hace cada componente. Esta
información se especifica en la documentación obtenida mediante
doxygen en el apartado 2.4.5, en la que se detalla la función y el
comportamiento de cada componente.
� La visión dinámica: describe cómo se comportan los componentes
a lo largo del tiempo y como interactúan entre sí. Por su
simplicidad no parece necesario un análisis temporal del sistema.
36
Figura 5. Diagrama de flujo de la interfaz de usuario.
37
Figura 6. Diagrama de flujo de la interfaz de administración.
38
2.4.2 Interfaces
Las interfaces de ambos portales han sido diseñadas para simplificar el
acceso a la información tanto para el usuario común, como para el usuario
administrador, incluso si el portal es desconocido.
2.4.2.1 Interfaz de usuario
La interfaz de usuario es el portal de presentación de contenidos, que
hemos denominado web GRVC. Se divide básicamente en tres partes:
� Cabecera o header: contiene varios enlaces a otras webs y la
selección del idioma del portal.
� Menú: nos permite navegar a través de los contenidos de la
web.
� Pantalla principal: incorpora complementos como un
calendario, un tablón de contenidos destacados o un buscador
de contenidos.
Figura 7. Página principal de la interfaz de usuario.
Navegando a través del menú, podemos analizar la pantalla que nos
permite visualizar los contenidos de un bloque, en este caso proyectos.
39
En la figura 8, en color rojo, podemos ver un submenú compuesto por
pestañas, que nos permite visualizar diferentes temáticas dentro de un
mismo bloque.
En la misma figura, en color naranja y verde observamos la estructura
de acordeón (accordion), desplegado y plegado respectivamente, que hemos
elegido para presentar la información de forma compacta.
Figura 8. Bloque proyectos de la interfaz de usuario. 2.4.2.2 Interfaz de administración
La interfaz de administración es el portal de gestión de contenidos,
que hemos denominado web de administración. Se divide de nuevo en tres
partes:
� Cabecera o header: contiene varios enlaces a otras webs y un
buscador de contenidos del portal que también permite la
exportación de los resultados a formato BibTeX.
40
� Menú: nos permite navegar a través de las tablas del esquema.
� Pantalla principal: nos muestra la estructura de las tablas del
esquema, también podemos acceder a ellas pulsando sobre su
nombre.
Figura 9. Pantalla principal de la interfaz de administración.
Analizando en la figura 10, la pantalla que muestra el contenido de
una tabla distinguimos en rojo un grupo de iconos cuyo ámbito de actuación
es la tabla completa. El grupo de iconos destacados en verde, solo se aplican
sobre el registro anexo. Además, en naranja encuadramos la información
contenida en la tabla.
Figura 10. Vista detalle de una tabla de la interfaz de administración.
41
2.4.2.3 Interfaz de phpMyAdmin
La interfaz del gestor de contenidos phpMyAdmin tiene una estructura
similar a nuestra web de administración. Solo debería emplearse para
modificar la estructura de datos del esquema (funciones DDL) y para
importar o exportar datos de forma masiva mediante el uso de scripts, ya
que el resto de funciones DML son implementadas por nuestro gestor de
contenidos propio, en una interfaz mejor adaptada a nuestras necesidades.
Figura 11. Pantalla principal de la interfaz de phpMyAdmin. 2.4.3 Modelo de datos
La estructura de datos en la que se sustenta la persistencia de los
contenidos de nuestra web es simplemente un conjunto de tablas cuya
información está relacionada en su contexto, pero sin la presencia de foreign
keys37.
37 En el contexto de bases de datos relacionales, una clave foránea (o Foreign Key FK) es una limitación referencial entre dos tablas. Véase http://es.wikipedia.org/wiki/Clave_for%C3%A1nea
42
La tecnología de almacenamiento que implementa la base de datos de
la web es InnoDB38. Se ha seleccionado en detrimento de MyISAM39 debido a
que ésta carece de tres características fundamentales:
� Incapacidad de ejecutar transacciones de tipo ACID40.
� No soporta bloqueo de registros.
� Integridad referencial no soportada.
Aunque nuestra actual configuración de datos no requiere integridad
referencial, pues no incorpora relaciones entre las tablas (foreign keys), es
posible que para una futura ampliación del esquema si sea necesario que la
tecnología de almacenamiento soporte esta característica.
En los siguientes apartados realizamos un análisis de las tablas y sus campos
realizando una división en tres grandes bloques:
� Publicaciones: incluye todas las tablas relacionadas con
publicaciones del Grupo de Robótica, Visión y Control.
� Proyectos: compuesto por las tablas que almacenan datos sobre los
proyectos realizados por el GRVC.
� Otros contenidos: el resto de información la incluimos en un solo
bloque genérico. Estas tablas son individuales y contienen información
diversa.
38 InnoDB es una tecnología de almacenamiento de datos de código abierto para la base de datos MySQL. Véase http://es.wikipedia.org/wiki/InnoDB 39 MyISAM es la tecnología de almacenamiento de datos usada por defecto por el sistema administrador de bases de datos relacionales MySQL. Véase http://es.wikipedia.org/wiki/MyISAM 40 ACID es un acrónimo de Atomicity, Consistency, Isolation and Durability: Atomicidad, Consistencia, Aislamiento y Durabilidad en español. Véase http://es.wikipedia.org/wiki/ACID
43
2.4.3.1 Publicaciones
En este bloque almacenamos todas las tablas relacionadas con
cualquier publicación de contenidos, independientemente de su carácter:
libros, revistas, capítulos de libros, congresos…
La funcionalidad BibTeX comentada en el apartado de objetivos, es
exclusiva para este bloque de contenidos.
La autenticación de los usuarios en la interfaz de administración se
realiza contra la tabla pub_gestores.
Figura 12. Modelo de datos del bloque publicaciones.
2.4.3.2 Proyectos
En este bloque almacenamos todas las tablas relacionadas con
cualquier proyecto realizado, independientemente de su temática (robótica,
control o percepción) o de su ámbito (nacional o internacional). Las tablas
están duplicadas porque contienen datos en los dos idiomas disponibles en la
web.
El editor WYSIWYG integrado en las funciones de inserción y
actualización de registros es exclusivo para este bloque de contenidos.
44
Figura 13. Modelo de datos del bloque proyectos.
2.4.3.3 Otros contenidos
Este bloque es genérico y contiene información diversa no incluida en
los dos anteriores. Se trata de contenido con escaso volumen de datos.
Figura 14. Modelo de datos del bloque genérico.
45
2.4.4 Algoritmos no triviales
En este apartado analizaremos más detalladamente los algoritmos
más complejos implementados en nuestros portales web. Esto pretende
facilitar la mantenibilidad de la aplicación. En la documentación generada
con Doxygen, también podemos encontrar información sobre ellos, pero con
un carácter menos detallado.
2.4.4.1 Importar BibTeX
Detallamos todos los pasos que se siguen para realizar esta
funcionalidad:
I.- Se accede a la funcionalidad a través de un icono habilitado en
cualquier tabla del bloque publicaciones. Este, nos lleva a una página
que nos permite cargar un documento que contenga información en
formato BibTeX.
II.- La página para cargar el documento se implementa como un
formulario HTML que incluye una propiedad enctype=”multipart/form-
data”. Al adjuntar el documento, nos redirige a una página en la que
se analiza el contenido del documento.
III.- En esta nueva página, se extrae el texto incluido en el documento
mediante funciones de lectura implementadas en las librerías de PHP y
se almacena en una variable.
IV.- El flujo web cambia a tecnología JavaScript transfiriendo la
variable que contiene la información BibTeX previamente almacenada
en la parte PHP de la página. Todo este proceso es invisible al usuario.
Una librería JavaScript nos proporciona las funciones necesarias
para el procesamiento de la información obtenida del documento,
formateando la cadena de caracteres inicial como un vector de
cadenas, facilitando el análisis de los datos.
46
De este modo, detectamos el tipo de dato BibTeX (inbook, book,
article o inproceedings), formateando el resto de los datos en función
de esto.
V.- Una vez finalizado el análisis, se produce la transferencia inversa
de los datos a HTML, mediante un formulario HTML dinámico
implementado desde JavaScript. Esto nos devuelve el flujo web a la
pantalla, para que el usuario pueda comprobar los datos una vez
importados.
VI.- Si el usuario confirma que no existen errores, se transforma el
formato para realizar una inserción en nuestra tabla, simplemente
asociando los campos BibTeX obtenidos del documento, a los campos
de nuestra tabla.
2.4.4.2 Exportar BibTeX
Esta funcionalidad está implementada tanto en la web GRVC como en
la web de administración. El proceso en ambos casos es el mismo, con
alguna pequeña particularidad:
I.- El acceso a la funcionalidad puede efectuarse de dos formas
diferentes:
a.- En exclusiva desde la web de administración, a través de
dos iconos habilitados en cualquier tabla del bloque
publicaciones. Uno de los iconos realizará la exportación a nivel
de tabla y otro a nivel de registro. Ambos nos llevan a una
página que nos permitirá convertir la información de nuestra
base de datos a formato BibTeX.
b.- Desde ambos portales, podemos transformar un número
discreto de registros a formato BibTeX configurando así la salida
del buscador de contenidos. Esto nos lleva a la misma página
indicada en el caso anterior.
47
II.- La página simplemente realiza una consulta filtrando por los
parámetros transferidos y establece el resultado obtenido en formato
BibTeX, imprimiéndolo paralelamente por pantalla y en un documento.
III.- Podemos extraer este documento posteriormente llamando a una
nueva página HTML con una cabecera especial header(‘Content-
Description: File Transfer’).
2.4.4.3 Editor WYSIWYG
La única dificultad de este algoritmo es el uso de una ventana
emergente (dialogue). El procedimiento es el siguiente:
I.- Se accede a la funcionalidad desde la pantalla de inserción o
actualización de las tablas del bloque de proyectos, a través de un
icono habilitado solamente en el campo “cuerpo” (“body” en el caso de
las tablas en inglés). Este, abre una ventana emergente empleando
funciones desarrolladas en JavaScript, en la que está integrado el
editor WYSIWYG.
II.- Si se accede desde la pantalla de inserción, el editor aparecerá sin
contenido, pero si se accede desde actualización, el contenido del
registro se volcará en el editor.
III.- Una vez finalizada la introducción de texto, se guarda,
recuperándose el contenido del editor en la misma página. Los datos
se recogen de la url, empleando $_SERVER[‘REQUEST_URI’] y se
devuelve como valor de retorno de la ventana emergente, volcándose
en el registro correspondiente de la ventana de inserción o
actualización.
48
2.4.5 Documentación generada con Doxygen 2.4.5.1 Jerarquía de directorios y lista de archivos 2.4.5.1.1 grvc/adm/
Referencia del directorio C:/xampp/htdocs/grvc/adm/
� cargarBibtexAdm.php
Permite incorporar un fichero en formato BibTeX para analizarlo posteriormente.
Referencia del Archivo C:/xampp/htdocs/grvc/adm/cargarBibtexAdm.php
Definición en el archivo cargarBibtexAdm.php.
Descripción detallada
Permite incorporar un fichero en formato BibTeX para analizarlo posteriormente.
Autor:
Jose Maria Maqueda Tamairón
Nota:
El fichero puede ser .bib o .txt y menor de un 1KB
Ver también:
importarBibtexAdm.php
� delete.php
Eliminación de registros.
Referencia del Archivo C:/xampp/htdocs/grvc/adm/delete.php
Definición en el archivo delete.php.
Descripción detallada
Eliminación de registros.
Autor:
Jose Maria Maqueda Tamairón
49
Nota:
Los registros ya eliminados se muestran por pantalla, para poder recuperarlos en caso de borrado accidental
Variables
$sql = new MySQLDB
Object: gestión de la conexión BD.
$connection = null
Connection: identificador de conexión a la BD.
$tabla = null
String: tabla en la que se encuentra el registro a eliminar.
$pk = null
String: campo que contiene la clave primaria de la tabla.
$id = 0
Integer: identificador único del registro a eliminar.
$dml = null
String: sentencia de eliminación a realizar sobre $tabla.
$array_dml = null
Array: conjunto de sentencias dml a realizar en una misma transacción sobre $tabla.
$query = null
String: consulta realizada sobre $tabla.
$select = null
Pointer: recurso BD devuelto por el método lanzar_query().
Ver también:
MySQLDB Definición en la línea 33 del archivo delete.php.
$record = null
Array: registro BD devuelto por el método fetch_row().
Ver también:
MySQLDB Definición en la línea 38 del archivo delete.php.
$query_desc = null
String: consulta de la estructura de $tabla.
$describe = null
Pointer: recurso BD devuelto por el método lanzar_query().
Ver también:
MySQLDB Definición en la línea 45 del archivo delete.php.
$record_desc = null
Array: registro BD devuelto por el método fetch_row().
Ver también:
50
MySQLDB Definición en la línea 50 del archivo delete.php.
� descargarBibtexAdm.php
Permite descargar un archivo exportado previamente a formato BibTeX desde parte de administración.
Referencia del Archivo C:/xampp/htdocs/grvc/adm/descargarBibtexAdm.php
Definición en el archivo descargarBibtexAdm.php.
Descripción detallada
Permite descargar un archivo exportado previamente a formato BibTeX desde parte de administración.
Autor:
Jose Maria Maqueda Tamairón
Nota:
Solo disponible para las tablas de publicaciones
Ver también:
exportarBibtexAdm.php
Variables
$nombre_archivo = null
String: recupera el nombre del archivo enviado por exportarBibtexAdm.php.
� exportarBibtexAdm.php
Mostrar el detalle de la tabla o el resultado de la consulta en formato BibTeX.
Referencia del Archivo C:/xampp/htdocs/grvc/adm/exportarBibtexAdm.php
Definición en el archivo exportarBibtexAdm.php.
Descripción detallada
Mostrar el detalle de la tabla o el resultado de la consulta en formato BibTeX.
51
Autor:
Jose Maria Maqueda Tamairón
Nota:
Solo disponible para tablas del bloque publicaciones
Ver también:
descargarBibtexAdm.php
Variables
$sql = new MySQLDB
Object: gestión de la conexión BD.
$connection = null
Connection: identificador de conexión a la BD.
$tabla = null
String: recupera la tabla de la consulta.
$columna = null
String: recupera la columna que filtra la consulta.
$condicion = null
String: recupera la condición que filtra la consulta.
$valor = null
String: recupera el valor que filtra la consulta.
$orden = null
String: recupera el orden establecido para el resultado de la consulta.
$texto = null
String: muestra por pantalla la consulta realizada sobre $tabla.
$query = null
String: consulta realizada sobre $tabla.
$select = null
Pointer: recurso BD devuelto por el método lanzar_query().
Ver también:
MySQLDB Definición en la línea 35 del archivo exportarBibtexAdm.php.
$record = null
Array: registro BD devuelto por el método fetch_row().
Ver también:
MySQLDB Definición en la línea 40 del archivo exportarBibtexAdm.php.
$header = null
String: cabecera del documento BibTeX.
$cols = null
52
String: columnas de la consulta.
$num_cols = 0
Integer: número de columnas de la tabla y/o posición de la PK de la tabla.
$col_year = 0
Integer: posición del campo 'anyo' en la consulta.
$query_counter = null
String: consulta del número de registros.
$select_counter = null
Pointer: recurso BD devuelto por el método lanzar_query().
Ver también:
MySQLDB Definición en la línea 55 del archivo exportarBibtexAdm.php.
$record_counter = 0
Array: registro BD devuelto por el método fetch_row().
Ver también:
MySQLDB Definición en la línea 60 del archivo exportarBibtexAdm.php.
$id = 0
Integer: valor de la pk del registro usado en el título BibTeX.
$year = 0
Integer: valor del campo 'anyo' usado en el título BibTeX.
$query_desc = null
String: consulta de la estructura de $tabla.
$describe = null
Pointer: recurso BD devuelto por el método lanzar_query().
Ver también:
MySQLDB Definición en la línea 71 del archivo exportarBibtexAdm.php.
$record_desc = null
Array: registro BD devuelto por el método fetch_row().
Ver también:
MySQLDB Definición en la línea 76 del archivo exportarBibtexAdm.php.
$tit_col = null
Array: campos $cols ordenados según el formato BibTeX.
$bibtex = null
Array: títulos de los campos en formato BibTeX.
$dat_col = null
Array: contenido de los campos $cols.
$contenido = null
String: texto del archivo para descargar.
$i = 0
Integer: índice.
53
$j = 0
Integer: índice.
$nombre_archivo = null
String: nombre del archivo para descargar.
$gestor = null
Pointer: valor devuelto por la función que abre el archivo para descargar.
Ver también:
fopen() Definición en la línea 95 del archivo exportarBibtexAdm.php.
$output = null
String: valor devuelto tras generar en el archivo para descargar.
� importarBibtexAdm.php
Permite analizar un fichero incorporado en formato BibTeX para insertarlo posteriormente.
Referencia del Archivo C:/xampp/htdocs/grvc/adm/importarBibtexAdm.php
Definición en el archivo importarBibtexAdm.php.
Descripción detallada
Permite analizar un fichero incorporado en formato BibTeX para insertarlo posteriormente.
Autor:
Jose Maria Maqueda Tamairón
Nota:
Se emplea javascript para decodificar el fichero. En el caso de importar un registro INPROCEEDINGS debemos acceder desde la tabla en la que queremos insertar (pub_congesp o pub_conginter)
Ver también:
- cargarBibtexAdm.php - js/BibTex.js
Variables
$tabla = null
String: recupera la tabla desde la que se invoca la importación (se tiene en cuenta solo en registros INPROCEEDINGS).
$tipo_archivo = null
54
String: campo que contiene el tipo del archivo incorporado.
$tamano_archivo = null
String: campo que contiene el tamaño del archivo incorporado.
$nombre_archivo = null
String: campo que contiene el nombre del archivo incorporado.
$end = null
String: valor devuelto tras la comprobación del archivo incorporado.
$message = null
String: mensaje que se muestra por pantalla tras la incorporación del documento.
$path = null
String: ruta donde se encuentra el archivo incorporado.
$texto = null
String: texto que contiene el archivo incorporado.
$fp = null
Pointer: recurso de fichero devuelto por el método fopen().
$linea = null
String: texto que contiene la línea leída del archivo incorporado.
� index.php
Autenticación de la gestión de contenidos de la web del Grupo de Robótica, Visión y Control.
Referencia del Archivo C:/xampp/htdocs/grvc/adm/index.php
Definición en el archivo index.php.
Descripción detallada
Autenticación de la gestión de contenidos de la web del Grupo de Robótica, Visión y Control.
Autor:
Jose Maria Maqueda Tamairón
� indexAdm.php
Gestión de contenidos de la web del Grupo de Robótica, Visión y Control.
Referencia del Archivo C:/xampp/htdocs/grvc/adm/indexAdm.php
Definición en el archivo indexAdm.php.
55
Descripción detallada
Gestión de contenidos de la web del Grupo de Robótica, Visión y Control.
Autor:
Jose Maria Maqueda Tamairón
Nota:
El resto de pantallas vuelven aquí para redireccionarse: - Mostrar detalle de la tabla - Mostrar resultado de la exportación a formato BibTeX - Mostrar resultado de la importación en formato BibTeX - Insertar, actualizar o eliminar registros de las tablas - Mostrar la página inicial con el modelo de datos en otro caso
� insert.php
Inserción de registros.
Referencia del Archivo C:/xampp/htdocs/grvc/adm/insert.php
Definición en el archivo insert.php.
Descripción detallada
Inserción de registros.
Autor:
Jose Maria Maqueda Tamairón
Nota:
Los registros ya insertados se muestran por pantalla
Variables
$sql = new MySQLDB
Object: gestión de la conexión BD.
$connection = null
Connection: identificador de conexión a la BD.
$tabla = null
String: tabla en la que se encuentra el registro a insertar.
$pk = null
String: campo que contiene la clave primaria de $tabla.
$dml = null
String: sentencia de inserción a realizar sobre $tabla.
56
$array_dml = null
Array: conjunto de sentencias dml a realizar en una misma transacción sobre $tabla.
$query = null
String: consulta realizada sobre $tabla.
$select = null
Pointer: recurso BD devuelto por el método lanzar_query().
Ver también:
MySQLDB Definición en la línea 30 del archivo insert.php.
$record = null
Array: registro BD devuelto por el método fetch_row().
Ver también:
MySQLDB Definición en la línea 35 del archivo insert.php.
$query_desc = null
String: consulta de la estructura de $tabla.
$describe = null
Pointer: recurso BD devuelto por el método lanzar_query().
Ver también:
MySQLDB Definición en la línea 42 del archivo insert.php.
$record_desc = null
Array: registro BD devuelto por el método fetch_row().
Ver también:
MySQLDB Definición en la línea 47 del archivo insert.php.
$query_id = null
String: consulta el siguiente valor de la $pk de $tabla.
$select_id = null
Pointer: recurso BD devuelto por el método lanzar_query().
Ver también:
MySQLDB Definición en la línea 54 del archivo insert.php.
$record_id = null
Array: registro BD devuelto por el método fetch_row().
Ver también:
MySQLDB Definición en la línea 59 del archivo insert.php.
$camposAGuardar = null
String: campos para insertar en $tabla que se almacenan al presentar la pantalla de insert.
$campoEntrada = null
String: nombre de los campos a insertar en $tabla separados por ','.
57
$arrayCampos = null
Array: conjunto nombres de los campos a insertar en $tabla.
$valor = null
String: nombres de los campos a insertar en $tabla almacenados individualmente.
$valores = null
String: valor de los campos a insertar en $tabla separados por ','.
$rows = 0
Integer: variable para indicar el tamaño del textarea.
� logAdmin.php
Pantalla de comprobación de usuario de la parte de administración.
Referencia del Archivo C:/xampp/htdocs/grvc/adm/logAdmin.php
Definición en el archivo logAdmin.php.
Descripción detallada
Pantalla de comprobación de usuario de la parte de administración.
Autor:
Jose Maria Maqueda Tamairón
Ver también:
login.php
Variables
$connection = null
Connection: identificador de conexión a la BD.
$usuario = null
String: usuario de conexión.
$pass = null
String: contraseña de conexión.
$tabla = null
String: tabla de comprobación.
$query = null
String: consulta de comprobación usuario.
$select = null
Pointer: recurso BD devuelto por el método lanzar_query().
Ver también:
58
MySQLDB Definición en la línea 28 del archivo logAdmin.php.
$record = null
Array: registro BD devuelto por el método fetch_row().
Ver también:
MySQLDB Definición en la línea 33 del archivo logAdmin.php.
� login.php
Pantalla de autenticación de la parte de administración.
Referencia del Archivo C:/xampp/htdocs/grvc/adm/login.php
Definición en el archivo login.php.
Descripción detallada
Pantalla de autenticación de la parte de administración.
Autor:
Jose Maria Maqueda Tamairón
Ver también:
logAdmin.php
� mostrarTabla.php
Muestra el detalle de la tabla seleccionada o el resultado de la consulta realizada.
Referencia del Archivo C:/xampp/htdocs/grvc/adm/mostrarTabla.php
Definición en el archivo mostrarTabla.php.
Descripción detallada
Muestra el detalle de la tabla seleccionada o el resultado de la consulta realizada.
Autor:
Jose Maria Maqueda Tamairón
Nota:
Permite realizar las siguientes funciones:
59
- Insertar registro - Actualizar registro - Eliminar registro - Exportar tabla a formato BibTeX - Exportar registro a formato BibTex - Importar registro en formato BibTeX
Variables
$sql = new MySQLDB
Object: gestión de la conexión BD.
$connection = null
Connection: identificador de conexión a la BD.
$tabla = null
String: recupera la tabla de la consulta.
$pk = null
String: campo que contiene la clave primaria de la tabla.
$columna = null
String: recupera la columna que filtra la consulta.
$condicion = null
String: recupera la condición que filtra la consulta.
$valor = null
String: recupera el valor que filtra la consulta.
$orden = null
String: recupera el orden establecido para el resultado de la consulta.
$cols = null
String: columnas de la consulta.
$numcols = 0
Integer: número de campos de la tabla.
$numcols_aux = 0
String: número de columnas de datos de la tabla.
$texto = null
String: muestra por pantalla la consulta realizada sobre $tabla.
$query = null
String: consulta realizada sobre $tabla.
$select = null
Pointer: recurso BD devuelto por el método lanzar_query().
Ver también:
MySQLDB Definición en la línea 48 del archivo mostrarTabla.php.
$record = null
Array: registro BD devuelto por el método fetch_row().
Ver también:
MySQLDB
60
Definición en la línea 53 del archivo mostrarTabla.php.
$query_desc = null
String: consulta de la estructura de $tabla.
$describe = null
Pointer: recurso BD devuelto por el método lanzar_query().
Ver también:
MySQLDB Definición en la línea 60 del archivo mostrarTabla.php.
$record_desc = null
Array: registro BD devuelto por el método fetch_row().
Ver también:
MySQLDB Definición en la línea 65 del archivo mostrarTabla.php.
$query_counter = null
String: consulta del número de registros.
$select_counter = null
Pointer: recurso BD devuelto por el método lanzar_query().
Ver también:
MySQLDB Definición en la línea 72 del archivo mostrarTabla.php.
$record_counter = 0
Array: registro BD devuelto por el método fetch_row().
Ver también:
MySQLDB Definición en la línea 77 del archivo mostrarTabla.php.
� update.php
Actualización de registros.
Referencia del Archivo C:/xampp/htdocs/grvc/adm/update.php
Definición en el archivo update.php.
Descripción detallada
Actualización de registros.
Autor:
Jose Maria Maqueda Tamairón
Nota:
Los registros ya actualizados se muestran por pantalla
61
Variables
$sql = new MySQLDB
Object: gestión de la conexión BD.
$connection = null
Connection: identificador de conexión a la BD.
$tabla = null
String: tabla en la que se encuentra el registro a actualizar.
$pk = null
String: campo que contiene la clave primaria de $tabla.
$id = 0
Integer: identificador único del registro a actualizar.
$dml = null
String: sentencia de actualización a realizar sobre $tabla.
$array_dml = null
Array: conjunto de sentencias dml a realizar en una misma transacción sobre $tabla.
$query = null
String: consulta realizada sobre $tabla.
$select = null
Pointer: recurso BD devuelto por el método lanzar_query().
Ver también:
MySQLDB Definición en la línea 32 del archivo update.php.
$record = null
Array: registro BD devuelto por el método fetch_row().
Ver también:
MySQLDB Definición en la línea 37 del archivo update.php.
$query_desc = null
String: consulta de la estructura de $tabla.
$describe = null
Pointer: recurso BD devuelto por el método lanzar_query().
Ver también:
MySQLDB Definición en la línea 44 del archivo update.php.
$record_desc = null
Array: registro BD devuelto por el método fetch_row().
Ver también:
MySQLDB Definición en la línea 49 del archivo update.php.
$query_id = null
String: consulta el siguiente valor de la $pk de $tabla.
$select_id = null
62
Pointer: recurso BD devuelto por el método lanzar_query().
Ver también:
MySQLDB Definición en la línea 56 del archivo update.php.
$record_id = null
Array: registro BD devuelto por el método fetch_row().
Ver también:
MySQLDB Definición en la línea 61 del archivo update.php.
$camposAGuardar = null
String: campos para actualizar en $tabla que se almacenan al presentar la pantalla de update.
$campoEntrada = null
String: nombre de los campos a actualizar en $tabla separados por ','.
$arrayCampos = null
Array: conjunto nombres de los campos a actualizar en $tabla.
$valor = null
String: nombres de los campos a actualizar en $tabla almacenados individualmente.
$valores = null
String: valor de los campos a actualizar en $tabla separados por ','.
$rows = 0
Integer: variable para indicar el tamaño del textarea.
� wysiwyg.php
Editor HTML integrado.
Referencia del Archivo C:/xampp/htdocs/grvc/adm/wysiwyg.php
Definición en el archivo wysiwyg.php.
Descripción detallada
Editor HTML integrado.
Autor:
Jose Maria Maqueda Tamairón
Nota:
Solo se muestra para los campos 'cuerpo' o 'body' del bloque proyectos
63
2.4.5.1.2 grvc/
Referencia del directorio C:/xampp/htdocs/grvc/
� componente.php
Componentes del Grupo de Robótica, Visión y Control.
Datos almacenados en la tabla 'ge_tcomponentes' o 'ege_tmembers'.
Referencia del Archivo C:/xampp/htdocs/grvc/componente.php
Definición en el archivo componente.php.
Descripción detallada
Componentes del Grupo de Robótica, Visión y Control Datos almacenados en la tabla 'ge_tcomponentes' o 'ege_tmembers'.
Autor:
Jose Maria Maqueda Tamairón
Nota:
El campo 'puesto' solo se imprime si su valor actual es diferente del registro anterior Para controlar esto se emplea una subconsulta
Variables
$sql = new MySQLDB
Object: gestión de la conexión BD.
$sql_puesto = new MySQLDB
Object: gestión auxiliar de la conexión BD para subconsulta $query_puesto.
$connection = null
Connection: identificador de conexión a la BD.
$tabla = null
String: tabla que contiene los datos de componentes.
$campos = null
Array: campos que se van a mostrar de $tabla.
$orden = null
Array: orden en el que se van a mostrar los registros de $tabla.
$contador = 0
Integer: contador de registros cuyo campo 'puesto' se repite.
$contador_puesto = 0
64
Integer: contador auxiliar de registros que se inicializa con el valor de $contador.
$puesto_actual = null
String: copia el campo 'puesto' del registro actual para compararlo con los siguientes.
$query = null
String: consulta realizada sobre $tabla.
$query_puesto = null
String: consulta auxiliar filtrando por el campo 'puesto' del registro actual.
$select = null
Pointer: recurso BD devuelto por el método lanzar_query(). Ver también:
MySQLDB Definición en la línea 39 del archivo componente.php.
$select_puesto = null
Pointer: recurso BD devuelto por el método lanzar_query() para la subconsulta por 'puesto'.
Ver también:
MySQLDB Definición en la línea 44 del archivo componente.php.
$record = null
Array: registro BD devuelto por el método fetch_row(). Ver también:
MySQLDB Definición en la línea 49 del archivo componente.php.
� cursos.php
Cursos y seminarios del Grupo de Robótica, Visión y Control.
Datos almacenados en las tablas 'cu_tseminarios' o 'ecu_tseminaries'.
Referencia del Archivo C:/xampp/htdocs/grvc/cursos.php
Definición en el archivo cursos.php.
Descripción detallada
Cursos y seminarios del Grupo de Robótica, Visión y Control Datos almacenados en las tablas 'cu_tseminarios' o 'ecu_tseminaries'.
Autor:
Jose Maria Maqueda Tamairón
Nota:
65
La información de cada registro se representa formateada en una estructura tab+accordion
Variables
$sql = new MySQLDB
Object: gestión de la conexión BD.
$connection = null
Connection: identificador de conexión a la BD.
$tabla = null
String: tabla que contiene los datos de cursos y seminarios.
$campos = null
Array: campos que se van a mostrar de $tabla.
$orden = null
Array: orden en el que se van a mostrar los registros de $tabla.
$query = null
String: consulta realizada sobre $tabla.
$select = null
Pointer: recurso BD devuelto por el método lanzar_query(). Ver también:
MySQLDB Definición en la línea 29 del archivo cursos.php.
$record = null
Array: registro BD devuelto por el método fetch_row(). Ver también:
MySQLDB Definición en la línea 34 del archivo cursos.php.
� descargarBibtex.php Permite descargar un archivo exportado previamente a formato BibTeX desde la parte de usuario.
Referencia del Archivo C:/xampp/htdocs/grvc/descargarBibtex.php
Definición en el archivo descargarBibtex.php.
Descripción detallada
Permite descargar un archivo exportado previamente a formato BibTeX desde la parte de usuario.
66
Autor:
Jose Maria Maqueda Tamairón
Nota:
Solo disponible en el bloque publicaciones
Ver también:
exportarBibtex.php
Variables
$nombre_archivo = null
String: recupera el nombre del archivo enviado por exportarBibtex.php.
� exportarBibtex.php
Resultado de la consulta en formato BibTeX.
Permite exportar el resultado de una consulta a un archivo en formato BibTeX.
Referencia del Archivo C:/xampp/htdocs/grvc/exportarBibtex.php
Definición en el archivo exportarBibtex.php.
Descripción detallada
Resultado de la consulta en formato BibTeX Permite exportar el resultado de una consulta a un archivo en formato BibTeX.
Autor:
Jose Maria Maqueda Tamairón
Nota:
Solo disponible en el bloque publicaciones
Ver también:
descargarBibtex.php
Variables
$sql = new MySQLDB
67
Object: gestión de la conexión BD.
$connection = null
Connection: identificador de conexión a la BD.
$bloque = null
String: recupera el bloque de contenidos de la consulta (publicaciones).
$tabla = null
String: recupera la tabla de la consulta.
$columna = null
String: recupera la columna que filtra la consulta.
$valor = null
String: recupera el valor que filtra la consulta.
$query = null
String: consulta realizada sobre $tabla.
$select = null
Pointer: recurso BD devuelto por el método lanzar_query().
Ver también:
MySQLDB Definición en la línea 32 del archivo exportarBibtex.php.
$record = null
Array: registro BD devuelto por el método fetch_row().
Ver también:
MySQLDB Definición en la línea 37 del archivo exportarBibtex.php.
$header = null
String: cabecera del documento BibTeX.
$cols = null
String: columnas de la consulta.
$num_cols = 0
Integer: número de columnas de la tabla y/o posición de la PK de la tabla.
$col_year = 0
Integer: posición del campo 'anyo' en la consulta.
$query_counter = null
String: consulta del número de registros.
$select_counter = null
Pointer: recurso BD devuelto por el método lanzar_query().
Ver también:
MySQLDB Definición en la línea 52 del archivo exportarBibtex.php.
$record_counter = 0
Array: registro BD devuelto por el método fetch_row().
Ver también:
MySQLDB Definición en la línea 57 del archivo exportarBibtex.php.
68
$id = 0
Integer: valor de la pk del registro usado en el título BibTeX.
$year = 0
Integer: valor del campo 'anyo' usado en el título BibTeX.
$query_desc = null
String: consulta de la estructura de $tabla.
$describe = null
Pointer: recurso BD devuelto por el método lanzar_query().
Ver también:
MySQLDB Definición en la línea 68 del archivo exportarBibtex.php.
$record_desc = null
Array: registro BD devuelto por el método fetch_row().
Ver también:
MySQLDB Definición en la línea 73 del archivo exportarBibtex.php.
$tit_col = null
Array: campos $cols ordenados según el formato BibTeX.
$bibtex = null
Array: títulos de los campos en formato BibTeX.
$dat_col = null
Array: contenido de los campos $cols.
$contenido = null
String: texto del archivo para descargar.
$i = 0
Integer: índice.
$j = 0
Integer: índice.
$nombre_archivo = null
String: nombre del archivo para descargar.
$gestor = null
Pointer: valor devuelto por la función que abre el archivo para descargar.
Ver también:
fopen() Definición en la línea 92 del archivo exportarBibtex.php.
$output = null
String: valor devuelto tras generar en el archivo para descargar.
69
� index.php Marco de la web del Grupo de Robótica, Visión y Control.
Referencia del Archivo C:/xampp/htdocs/grvc/index.php
Definición en el archivo index.php
Descripción detallada
Marco de la web del Grupo de Robótica, Visión y Control.
Autor:
Jose Maria Maqueda Tamairón
� líneas.php Líneas de investigación del Grupo de Robótica, Visión y Control.
Datos almacenados en la tabla 'li_tinvestigacion' o 'eli_tresearch'.
Referencia del Archivo C:/xampp/htdocs/grvc/lineas.php
Definición en el archivo lineas.php.
Descripción detallada
Líneas de investigación del Grupo de Robótica, Visión y Control Datos almacenados en la tabla 'li_tinvestigacion' o 'eli_tresearch'.
Autor:
Jose Maria Maqueda Tamairón
Nota:
La información de cada registro se representa formateada en una estructura tab+accordion El campo 'linea' solo se imprime si su valor actual es diferente del registro anterior Para controlar esto se emplea una subconsulta
Ver también:
- js/jquery-ui.js - js/jquery-ui-1.8.4.custom.min
70
Variables
$sql = new MySQLDB
Object: gestión de la conexión BD.
$connection = null
Connection: identificador de conexión a la BD.
$tabla = null
String: tabla que contiene los datos de lineas de investigación.
$campos = null
Array: campos que se van a mostrar de $tabla.
$orden = null
Array: orden en el que se van a mostrar los registros de $tabla.
$linea_actual = null
String: copia el campo 'linea' del registro actual para compararlo con los siguientes.
$query = null
String: consulta realizada sobre $tabla.
$query_linea = null
String: consulta auxiliar filtrando por el campo 'linea' del registro actual.
$select = null
Pointer: recurso BD devuelto por el método lanzar_query().
Ver también:
MySQLDB Definición en la línea 36 del archivo lineas.php.
$select_linea = null
Pointer: recurso BD devuelto por el método lanzar_query() para la subconsulta por 'linea'.
Ver también:
MySQLDB Definición en la línea 41 del archivo lineas.php.
$record = null
Array: registro BD devuelto por el método fetch_row().
Ver también:
MySQLDB Definición en la línea 46 del archivo lineas.php.
$record_linea = null
Array: registro BD devuelto por el método fetch_row() para la subconsulta por 'linea'.
Ver también:
MySQLDB Definición en la línea 51 del archivo lineas.php.
71
� mostrarBusqueda.php
Resultado de la consulta en formato Tabla.
Referencia del Archivo C:/xampp/htdocs/grvc/mostrarBusqueda.php
Definición en el archivo mostrarBusqueda.php.
Descripción detallada
Resultado de la consulta en formato Tabla.
Autor:
Jose Maria Maqueda Tamairón
Nota:
Solo disponible en los bloques proyectos y publicaciones
Variables
$sql = new MySQLDB
Object: gestión de la conexión BD.
$connection = null
Connection: identificador de conexión a la BD.
$bloque = null
String: recupera el bloque de contenidos de la consulta (proyectos o publicaciones).
$tabla = null
String: recupera la tabla de la consulta.
$columna = null
String: recupera la columna que filtra la consulta.
$valor = null
String: recupera el valor que filtra la consulta.
$cols = null
String: columnas de la consulta.
$numcols = 0
Integer: número de campos de la tabla.
$numcols_aux = 0
String: número de columnas de datos de la tabla.
$query = null
String: consulta realizada sobre $tabla.
$select = null
Pointer: recurso BD devuelto por el método lanzar_query().
72
Ver también:
MySQLDB Definición en la línea 41 del archivo mostrarBusqueda.php.
$record = null
Array: registro BD devuelto por el método fetch_row().
Ver también:
MySQLDB Definición en la línea 46 del archivo mostrarBusqueda.php.
$query_desc = null
String: consulta de la estructura de $tabla.
$describe = null
Pointer: recurso BD devuelto por el método lanzar_query().
Ver también:
MySQLDB Definición en la línea 53 del archivo mostrarBusqueda.php.
$record_desc = null
Array: registro BD devuelto por el método fetch_row().
Ver también:
MySQLDB Definición en la línea 58 del archivo mostrarBusqueda.php.
$query_counter = null
String: consulta del número de registros.
$select_counter = null
Pointer: recurso BD devuelto por el método lanzar_query().
Ver también:
MySQLDB Definición en la línea 65 del archivo mostrarBusqueda.php.
$record_counter = 0
Array: registro BD devuelto por el método fetch_row().
Ver también:
MySQLDB Definición en la línea 70 del archivo mostrarBusqueda.php.
� presentacion.php
Presentación del Grupo de Robótica, Visión y Control.
Datos almacenados en la tabla 'ge_tintroduccion' o 'ege_tintroduction'.
Referencia del Archivo C:/xampp/htdocs/grvc/presentacion.php
Definición en el archivo presentacion.php.
73
Descripción detallada
Presentación del Grupo de Robótica, Visión y Control Datos almacenados en la tabla 'ge_tintroduccion' o 'ege_tintroduction'.
Autor:
Jose Maria Maqueda Tamairón
Nota:
La ordenación de los párrafos se realiza por orden ascendente
Variables
$sql = new MySQLDB
Object: gestión de la conexión BD.
$connection = null
Connection: identificador de conexión a la BD.
$tabla = null
String: tabla que contiene los datos de la presentacion.
$campos = null
Array: campos que se van a mostrar de $tabla.
$orden = null
Array: orden en el que se van a mostrar los registros de $tabla.
$query = null
String: consulta realizada sobre $tabla.
$select = null
Pointer: recurso BD devuelto por el método lanzar_query().
Ver también:
MySQLDB Definición en la línea 28 del archivo presentacion.php.
$record = null
Array: registro BD devuelto por el método fetch_row(). Ver también:
MySQLDB Definición en la línea 33 del archivo presentacion.php.
� proyectos.php
Proyectos del Grupo de Robótica, Visión y Control.
Datos almacenados en las tablas:
- 'pr_tinternacional' o 'epr_tinternational' - 'pr_tnacional' o 'epr_tnational' - 'pr_tpercepcion' o 'epr_tperception'
74
- 'pr_trobotica' o 'epr_trobotics' - 'pr_tcontrol' o 'epr_tcontrol'
Referencia del Archivo C:/xampp/htdocs/grvc/proyectos.php
Definición en el archivo proyectos.php.
Descripción detallada
Proyectos del Grupo de Robótica, Visión y Control Datos almacenados en las tablas:
- 'pr_tinternacional' o 'epr_tinternational' - 'pr_tnacional' o 'epr_tnational' - 'pr_tpercepcion' o 'epr_tperception' - 'pr_trobotica' o 'epr_trobotics' - 'pr_tcontrol' o 'epr_tcontrol'
Autor:
Jose Maria Maqueda Tamairón
Nota:
La información de cada registro se representa formateada en una estructura tab+accordion
Variables
$sql = new MySQLDB
Object: gestión de la conexión BD.
$connection = null
Connection: identificador de conexión a la BD.
$tabla = null
String: tabla que contiene los datos de proyectos.
$campos = null
Array: campos que se van a mostrar de $tabla.
$orden = null
Array: orden en el que se van a mostrar los registros de $tabla.
$query = null
String: consulta realizada sobre $tabla.
$select = null
Pointer: recurso BD devuelto por el método lanzar_query(). Ver también:
MySQLDB Definición en la línea 33 del archivo proyectos.php.
75
$record = null
Array: registro BD devuelto por el método fetch_row(). Ver también:
MySQLDB Definición en la línea 38 del archivo proyectos.php.
� publicaciones.php
Publicaciones del Grupo de Robótica, Visión y Control.
Datos almacenados en las tablas:
- ‘pub_caplibros' - 'pub_congesp' - 'pub_conginter' - 'pub_libros' - 'pub_revistas'
Referencia del Archivo C:/xampp/htdocs/grvc/publicaciones.php
Definición en el archivo publicaciones.php.
Descripción detallada
Publicaciones del Grupo de Robótica, Visión y Control. Datos almacenados en las tablas:
- ‘pub_caplibros' - 'pub_congesp' - 'pub_conginter' - 'pub_libros' - 'pub_revistas'
Autor:
Jose Maria Maqueda Tamairón
Nota:
La información de cada registro se representa formateada en una estructura tab+accordion
Variables
$sql = new MySQLDB
Object: gestión de la conexión BD.
76
$connection = null
Connection: identificador de conexión a la BD.
$tabla = null
String: tabla que contiene los datos de publicaciones.
$campos = null
Array: campos que se van a mostrar de $tabla.
$orden = null
Array: orden en el que se van a mostrar los registros de $tabla.
$meses = null
Array: decodifica el campo 'mes' en $tabla.
$query = null
String: consulta realizada sobre $tabla.
$select = null
Pointer: recurso BD devuelto por el método lanzar_query().
Ver también:
MySQLDB Definición en la línea 36 del archivo publicaciones.php.
$record = null
Array: registro BD devuelto por el método fetch_row().
Ver también:
MySQLDB Definición en la línea 41 del archivo publicaciones.php.
� tesis.php Tesis doctorales del Grupo de Robótica, Visión y Control.
Datos almacenados en las tablas 'te_tdoctorales' o 'ete_tdissertations'.
Referencia del Archivo C:/xampp/htdocs/grvc/tesis.php
Definición en el archivo tesis.php.
Descripción detallada
Tesis doctorales del Grupo de Robótica, Visión y Control Datos almacenados en las tablas 'te_tdoctorales' o 'ete_tdissertations'.
Autor:
Jose Maria Maqueda Tamairón
Nota:
La información de cada registro se representa formateada en una estructura tab+accordion
77
Variables
$sql = new MySQLDB
Object: gestión de la conexión BD.
$connection = null
Connection: identificador de conexión a la BD.
$tabla = null
String: tabla que contiene los datos de tesis doctorales.
$campos = null
Array: campos que se van a mostrar de $tabla.
$orden = null
Array: orden en el que se van a mostrar los registros de $tabla.
$query = null
String: consulta realizada sobre $tabla.
$select = null
Pointer: recurso BD devuelto por el método lanzar_query().
Ver también:
MySQLDB Definición en la línea 29 del archivo tesis.php.
$record = null
Array: registro BD devuelto por el método fetch_row().
Ver también:
MySQLDB Definición en la línea 34 del archivo tesis.php.
78
2.4.5.1.3 grvc/includes/
Referencia del directorio C:/xampp/htdocs/grvc/includes/
� application_bottom.php
Liberación de recursos y cierre de la base de datos de la aplicación.
Referencia del Archivo C:/xampp/htdocs/grvc/includes/application_bottom.php
Definición en el archivo application_bottom.php.
Descripción detallada
Liberación de recursos y cierre de la base de datos de la aplicación.
Autor:
Jose Maria Maqueda Tamairón
� application_top.php
Precarga de archivos necesarios para la aplicación.
Referencia del Archivo C:/xampp/htdocs/grvc/includes/application_top.php
Definición en el archivo application_top.php.
Descripción detallada
Precarga de archivos necesarios para la aplicación.
Autor:
Jose Maria Maqueda Tamairón
79
� configure.php Constantes de configuración de la aplicación.
Referencia del Archivo C:/xampp/htdocs/grvc/includes/configure.php
Definición en el archivo configure.php.
Descripción detallada
Constantes de configuración de la aplicación.
Autor:
Jose Maria Maqueda Tamairón
Constantes
DB_SERVER
Nombre del servidor donde se encuentra alojada la base de datos de la aplicación.
DB_SERVER_USERNAME
Usuario de la base de datos de la aplicación.
DB_SERVER_PASSWORD
Contraseña de la base de datos de la aplicación.
DB_DATABASE
Nombre de la base de datos de la aplicación.
� constantes.php Constantes de la aplicación.
Referencia del Archivo C:/xampp/htdocs/grvc/includes/constantes.php
Definición en el archivo constantes.php.
Descripción detallada
Constantes de la aplicación.
Autor:
Jose Maria Maqueda Tamairón
80
Constantes
TITULO_PAGINA
Nombre de la página principal de la web.
PAGE_TITLE
Nombre de la página principal de la web en inglés.
UNIVERSIDAD
Icono US.
ESI
Icono ESI.
GRUPO
Icono GRVC.
UNIVERSITY
Icono US en inglés.
ES
Icono ESI en inglés.
GROUP
Icono GRVC en inglés.
BIENVENIDA
Mensaje en la página principal.
WELCOME
Mensaje en la página principal en inglés.
TITULO_PAGINA_ADM
Nombre de la página principal de la gestión de contenidos de la web.
PHPMYADMIN
Icono PHPMYADMIN.
� database.php
Clase que almacena los métodos y funciones relacionadas con la base de datos.
Referencia del Archivo C:/xampp/htdocs/grvc/includes/database.php
Definición en el archivo database.php.
Descripción detallada
Clase que almacena los métodos y funciones relacionadas con la base de datos.
Autor:
Jose Maria Maqueda Tamairón
81
Nota:
Incorpora funciones de conversión de encoding
Estructuras de datos
class MySQLDB
Funciones
convertUtf ($cadena)
Convierte el encoding de $cadena de UTF-8 a ISO-8859-1.
cadena objeto de la conversión
Devuelve:
String Definición en la línea 14 del archivo database.php.
convertIso ($cadena)
Convierte el encoding de $cadena de ISO-8859-1 a UTF-8.
cadena objeto de la conversión
Devuelve:
String Definición en la línea 23 del archivo database.php.
� header.php
Cabecera de la interfaz de usuario.
Referencia del Archivo C:/xampp/htdocs/grvc/includes/header.php
Definición en el archivo header.php.
Descripción detallada
Cabecera de la interfaz de usuario.
Autor:
Jose Maria Maqueda Tamairón
Nota:
Contiene la selección del idioma
82
� htmlOutput.php
Genera HTML dinámicamente.
Referencia del Archivo C:/xampp/htdocs/grvc/includes/htmlOutput.php
Definición en el archivo htmlOutput.php.
Descripción detallada
Genera HTML dinámicamente.
Autor:
Jose Maria Maqueda Tamairón
Funciones
crearInputText ( $id, $etiqueta=false, $required=false, $readonly=false, $value='', $maxlength=15, $style= '', $onAlgo= '', $password=0 )
Crea un input text/password dinámicamente.
Definición en la línea 192 del archivo htmlOutput.php.
Parámetros:
$id del objeto $etiqueta mostrar etiqueta $required es requerido $readonly solo lectura $value valor por defecto $maxlength tamaño maximo $style formato $onAlgo evento javascript $password genera un type password
83
Devuelve:
unknown_type
Ver también:
- login.php - update.php - insert.php
crearInputTextNoMaxLenght ( $id, $etiqueta=false, $required=false, $readonly=false, $value='', $maxlength=15, $style= '', $onAlgo= '' )
Crea un input text sin limite de caracteres, solo limita el tamaño del input.
Definición en la línea 230 del archivo htmlOutput.php.
Parámetros:
$id del objeto $etiqueta mostrar etiqueta $required es requerido $readonly solo lectura $value valor por defecto $maxlength tamaño maximo $style formato $onAlgo evento javascript
Devuelve:
unknown_type
Ver también:
- update.php - insert.php
crearInputTextNoEcho ( $id, $etiqueta=false, $required=false, $readonly=false, $value='', $maxlength=15, $style= '', $onAlgo= '' )
84
Crea un input text y lo devuelve, no lo imprime.
Definición en la línea 267 del archivo htmlOutput.php.
Parámetros:
$id del objeto $etiqueta mostrar etiqueta $required es requerido $readonly solo lectura $value valor por defecto $maxlength tamaño maximo $style formato $onAlgo evento javascript
Devuelve:
unknown_type crearCheck ( $id, $etiqueta=false, $readonly=false, $checked=false, $style= '', $onAlgo= '' )
Crea un checkbox.
Definición en la línea 302 del archivo htmlOutput.php.
Parámetros:
$id del objeto $etiqueta mostrar etiqueta $readonly solo lectura $checked valor por defecto $style formato $onAlgo evento javascript
Devuelve:
unknown_type crearTextArea ( $id, $etiqueta=false, $required=false, $readonly=false, $value='', $cols=17, $rows=2, $style= '', $onAlgo= '' )
Crea un text area.
85
Definición en la línea 340 del archivo htmlOutput.php.
Parámetros:
$id del objeto $etiqueta mostrar etiqueta $required es requerido $readonly solo lectura $value valor por defecto $cols anchura $rows altura $style formato $onAlgo evento javascript
Devuelve:
unknown_type
Ver también:
- update.php - insert.php
crearTextArea2 ( $id, $etiqueta=false, $required=false, $readonly=false, $value='', $cols=17, $rows=2, $style= '', $onAlgo= '' )
Se utiliza para la configuracion, el size solo es para el largo del campo, no se aplica al tamaño de entrada.
Definición en la línea 378 del archivo htmlOutput.php.
Parámetros:
$id del objeto $etiqueta mostrar etiqueta $required es requerido $readonly solo lectura $value valor por defecto $cols anchura $rows altura $style formato $onAlgo evento javascript
Devuelve:
unknown_type crearCombo (
86
$sql, $id, $etiqueta, $required=false, $opcionDefecto=false, $onAlgo= '', $valor= '', $disabled=false )
Crea un combo.
Definición en la línea 415 del archivo htmlOutput.php.
Parámetros:
$sql datos del combo $id del objeto $etiqueta mostrar etiqueta $required es requerido $opcionDefecto valor por defecto $onAlgo evento javascript $valor valor del combo $disabled deshabilitado
Devuelve:
unknown_type � menú.php
Menú de opciones de la parte de usuario.
Ofrece un índice de los bloques de contenido disponibles en la web.
Referencia del Archivo C:/xampp/htdocs/grvc/includes/menu.php
Definición en el archivo menu.php.
Descripción detallada
Menú de opciones de la parte de usuario.
Autor:
Jose Maria Maqueda Tamairón
Nota:
87
Para dar suavidad a la transición se emplea la función javascript cargarApartado('')
Ver también:
general.js
� principal.php
Pantalla inicial de la parte de usuario.
Referencia del Archivo C:/xampp/htdocs/grvc/includes/principal.php
Definición en el archivo principal.php.
Descripción detallada
Pantalla inicial de la parte de usuario.
Autor:
Jose Maria Maqueda Tamairón
Nota:
Componentes: - Módulo de consulta - Calendario - Tablón de destacados - Google Analytics
Ver también:
ui.datepicker-es.js
Variables
$sql = new MySQLDB
Object: gestión de la conexión BD.
$tabla = null
String: tabla seleccionada en el módulo de consulta.
$query_desc = null
String: consulta de la estructura de $tabla.
$describe = null
Resource BD: recurso BD devuelto por el método lanzar_query().
Ver también:
88
MySQLDB Definición en la línea 26 del archivo principal.php.
$record_desc = null
Array: registro BD devuelto por el método fetch_row().
Ver también:
MySQLDB Definición en la línea 31 del archivo principal.php.
89
2.4.5.1.4 grvc/adm/includes/
Referencia del directorio C:/xampp/htdocs/grvc/adm/includes/
� application_topAdm.php
Precarga de archivos necesarios para la gestión de contenidos.
Referencia del Archivo C:/xampp/htdocs/grvc/adm/includes/application_topAdm.php
Definición en el archivo application_topAdm.php.
Descripción detallada
Precarga de archivos necesarios para la gestión de contenidos.
Autor:
Jose Maria Maqueda Tamairón
� headerAdm.php
Cabecera de la parte de administración.
Referencia del Archivo C:/xampp/htdocs/grvc/adm/includes/headerAdm.php
Definición en el archivo headerAdm.php.
Descripción detallada
Cabecera de la parte de administración.
Autor:
Jose Maria Maqueda Tamairón
Nota:
Contiene un módulo de búsqueda
90
Variables
$_REQUEST ["tab"]
Tabla seleccionada en la consulta.
$_REQUEST ["cond"]
Condición seleccionada en la consulta.
$_REQUEST ["col"]
Columna seleccionada en la consulta.
$_REQUEST ["valor"]
Valor de filtrado.
$_REQUEST ["ord"]
Orden seleccionado en la consulta.
$_REQUEST ["formato"]
Formato de salida seleccionado en la consulta.
$sql = new MySQLDB
Object: gestión de la conexión BD.
$connection = null
Connection: identificador de conexión a la BD.
$query = null
String: consulta del nombre del esquema.
$select = null
Pointer: recurso BD devuelto por el método lanzar_query().
Ver también:
MySQLDB Definición en la línea 36 del archivo headerAdm.php.
$record = null
Array: registro BD devuelto por el método fetch_row().
Ver también:
MySQLDB Definición en la línea 41 del archivo headerAdm.php.
� menuAdm.php
Menú de opciones de la parte de administración.
Ofrece un índice de las tablas del modelo de datos.
Referencia del Archivo C:/xampp/htdocs/grvc/adm/includes/menuAdm.php
Definición en el archivo menuAdm.php.
91
Descripción detallada
Menú de opciones de la parte de administración.
Autor:
Jose Maria Maqueda Tamairón
Nota:
Para dar suavidad a la transición se emplea la función javascript cargarApartado('')
Ver también:
general.js
Variables
$sql = new MySQLDB
Object: gestión de la conexión BD.
$connection = null
Connection: identificador de conexión a la BD.
$query = null
String: consulta realizada sobre el esquema 'grvc'.
$select = null
Pointer: recurso BD devuelto por el método lanzar_query().
Ver también:
MySQLDB Definición en la línea 30 del archivo menuAdm.php.
$record = null
Array: registro BD devuelto por el método fetch_row().
Ver también:
MySQLDB Definición en la línea 35 del archivo menuAdm.php.
� principalAdm.php
Pantalla inicial de la parte de administración.
Contiene un diagrama del modelo de datos.
Referencia del Archivo C:/xampp/htdocs/grvc/adm/includes/principalAdm.php
Definición en el archivo principalAdm.php.
92
Descripción detallada
Pantalla inicial de la parte de administración.
Autor:
Jose Maria Maqueda Tamairón
Nota:
Se puede acceder a los datos de las tablas haciendo click sobre el nombre Para dar suavidad a la transición se emplea la función javascript cargarApartado('')
Ver también:
general.js
Variables
$sql = new MySQLDB
Object: gestión de la conexión BD.
$connection = null
Connection: identificador de conexión a la BD.
$query = null
String: consulta realizada sobre el esquema 'grvc'.
$select = null
Pointer: recurso BD devuelto por el método lanzar_query().
Ver también:
MySQLDB Definición en la línea 30 del archivo principalAdm.php.
$record = null
Array: registro BD devuelto por el método fetch_row().
Ver también:
MySQLDB Definición en la línea 35 del archivo principalAdm.php.
$query_desc = null
String: consulta de la estructura de la tabla.
$describe = null
Pointer: recurso BD devuelto por el método lanzar_query().
Ver también:
MySQLDB Definición en la línea 42 del archivo principalAdm.php.
$record_desc = null
Array: registro BD devuelto por el método fetch_row().
Ver también:
93
MySQLDB Definición en la línea 47 del archivo principalAdm.php.
94
2.4.5.2 Estructuras de datos
Referencia de la Clase MySQLDB C:/xampp/htdocs/grvc/includes/
Definición en la línea 28 del archivo database.php.
La documentación para esta clase fue generada a partir del siguiente fichero:
C:/xampp/htdocs/grvc/includes/database.php MySQLDB ()
Constructor de la clase.
Definición en la línea 36 del archivo database.php.
Devuelve:
connection begin ()
Comienza una transaccion.
Definición en la línea 59 del archivo database.php.
Devuelve:
unknown_type commit ()
Commit en la BD.
Definición en la línea 67 del archivo database.php.
Devuelve:
unknown_type rollback ()
Rollback de la BD.
Definición en la línea 75 del archivo database.php.
Devuelve:
unknown_type transaction ($q_array, $selectFinal=false)
Realiza una transaccion.
Definición en la línea 85 del archivo database.php.
Parámetros:
95
$q_array $selectFinal devuelve un resource de una select al final
Devuelve:
resource, true o false free_result ($res)
Libera los recursos del resource de BD Not needed for UPDATE, DELETE, etc
Definición en la línea 115 del archivo database.php.
Parámetros:
$res
Devuelve:
unknown_type error_db ()
Devuelve el error generado por la BD.
Definición en la línea 125 del archivo database.php.
Devuelve:
String lanzar_query ($sql)
Lanza la query y devuelve el resultado.
Definición en la línea 135 del archivo database.php.
Parámetros:
$sql
Devuelve:
resource BD o numero de filas afectadas
fetch_row ($res)
Mueve el puntero hacia delante y devuelve el registro.
Definición en la línea 148 del archivo database.php.
Parámetros:
$res
Devuelve:
registro fetch_row_cad ($res)
96
Mueve el puntero hacia delante y devuelve el registro.
Definición en la línea 157 del archivo database.php.
Parámetros:
$res
Devuelve:
registro
seek ($db_query, $row_number)
Posiciona el puntero en la columna indicada.
Definición en la línea 168 del archivo database.php.
Parámetros:
$db_query $row_number
Devuelve:
unknown_type
cerrar_db ()
Cierra la conexion de BD.
Definición en la línea 180 del archivo database.php.
Devuelve:
unknown_type
97
2.5 Conclusiones Una vez finalizado el proyecto, en este apartado procederemos a realizar una
revisión de los objetivos prefijados al inicio del proyecto, así como posibles mejoras que
se podrían llevar a cabo de cara a perfeccionar la aplicación.
2.5.1 Cumplimiento de objetivos
Vamos a verificar el grado de cumplimiento de los objetivos, así como dificultades
encontradas en su ejecución. Representaremos de nuevo los objetivos para estudiar cada
hito de manera individual.
Objetivos planteados para la web GRVC:
� Presentación clara, detallada, accesible y atractiva de la información.
� Interfaz intuitiva y dinámica.
� Navegación sencilla y con acceso rápido a los diversos apartados.
� Para comprobar si se cumplen estos objetivos, dado que son bastante
subjetivos, se han realizado algunas pruebas de usabilidad de la aplicación con
usuarios que desconocían el portal, encontrando escasa dificultad en un primer
acercamiento, y ninguna tras la lectura del manual del usuario de la aplicación.
� Posibilidad de escoger el idioma de la información en castellano o inglés.
� Dos iconos permiten el cambio de idioma, almacenándose éste en una variable
global que lo mantiene mientras dure la sesión.
� Evitar mostrar e-mail en código.
� Tras estudiar la posibilidad de codificar el email usando JavaScript, se ha
optado finalmente por incluir una nueva columna en la tabla de componentes
que contiene una imagen con el email de la persona. Esto es lo que realmente
se muestra en la web y al ser una imagen es indetectable para bots u otro
software malicioso.
� Tablón donde situar contenidos destacables.
� Se ha situado dicho espacio en la parte derecha de la pantalla inicial de la web
GRVC.
98
� Herramienta para exportar información a archivo en formato BibTeX.
� Integrada en el buscador del portal. Es exclusiva para el bloque de
publicaciones.
� Herramienta que permita buscar contenidos concretos.
� Se trata de un buscador restrictivo que solo permite buscar contenidos de los
bloques proyectos y publicaciones.
� Todos los contenidos deben obtenerse de la base de datos.
� Toda la información se ha almacenado en base de datos creando varias tablas
nuevas, casi todas pertenecientes al bloque genérico.
� Integración de aplicación de control de estadísticas de tráfico web.
� Tras estudiar varias opciones, se ha optado por google analytics, por ser una
aplicación gratuita, potente, sencilla, sin publicidad y de fácil integración.
Objetivos planteados para la web de administración:
� Autenticación de usuarios contra la base de datos.
� Se ha establecido un sistema de autenticación contra la base de datos basado
en usuario y contraseña.
� Accesibilidad directa y sencilla a cualquier tabla.
� Implementados dos métodos de acceso: desde un menú situado a la izquierda
de la pantalla y desde el título de las tablas mostradas en la parte central.
� Mostrar información del modelo de datos (estructura de las tablas).
� En la parte central de la pantalla son representadas todas las tablas mostrando
información acerca de su estructura.
� Proporcionar mantenimiento de la base de datos MySQL.
99
� Se han implementado las funciones CRUD41 que permiten realizar el
mantenimiento de la base de datos desde la web de administración.
� Herramienta para exportar información a archivo en formato BibTeX.
� Integrada en los buscadores de ambos portales, además de en la visualización
de las tablas en la web de administración, tanto a nivel de tabla como a nivel
de registro. Es exclusiva para el bloque de publicaciones.
� Herramienta para importar información de archivo en formato BibTeX.
� Integrada en la visualización de las tablas en la web de administración. Permite
la inserción de un registro en formato BibTeX contenido en un archivo de texto
plano. Es exclusiva para el bloque de publicaciones.
� Herramienta que permita buscar contenidos concretos.
� Se ha implementado un buscador que genera directamente sentencias SQL
para buscar información de cualquier tabla del esquema.
� Integración de editor para insertar texto enriquecido.
� Se ha optado por integrar un editor WYSIWYG Open Source realizado en
JavaScript. Solo está disponible en el campo “cuerpo” o “body” de las tablas del
bloque proyectos.
� La interfaz debe ser sencilla e intuitiva, dada la posibilidad de que sea utilizada
por personas carentes de conocimientos técnicos en bases de datos.
� Todas las tareas DML se ejecutan de manera sencilla, introduciendo
información en campos y guardando la información.
� El mejor ejemplo de simplificación técnica es el buscador integrado. Consta de
varios campos donde introducir la columna, tabla o valor por el que se quiere
filtrar, y una lista desplegable con las condiciones de filtrado. Esto genera una
consulta SQL de manera automática que puede ser verificada posteriormente.
Realizando una abstracción del análisis, podemos decir que todos los objetivos se
han cumplido. Debemos reseñar que las mayores dificultades encontradas se relacionan
41 En computación CRUD es el acrónimo de Crear, Obtener, Actualizar y Borrar (Create, Retrieve, Update y Delete en inglés). Es usado para referirse a las funciones básicas en bases de datos o la capa de persistencia en un sistema de software. Véase http://es.wikipedia.org/wiki/CRUD
100
con la integración de componentes externos a nuestra web, como el editor WYSIWYG o
el BibTeX Parser, aunque se ha empleado más tiempo en depuración de errores de
codificación.
2.5.2 Futuras mejoras
Dada la magnitud del proyecto, las posibilidades de mantenimiento evolutivo son
bastante limitadas. Salvo un incremento notable en el almacenamiento de datos, no es
necesario un gran esfuerzo para mejorar el sistema. Aún así, existen posibles tareas que,
sin un alto coste en recursos pueden aumentar en cierto modo la calidad del sistema.
Base de datos:
� Gestión del acceso basado en cuentas de usuario, roles y permisos.
� Desarrollar un servicio de backup automático configurable.
Portal web GRVC:
� Herramienta de gestión de eventos (integrada en el calendario).
� Incorporar un tercer idioma.
� Integración de un espacio de acceso rápido a los contenidos más consultados.
Portal web de administración:
� Importación BibTeX de múltiples registros.
� Soporte DDL y de generación/carga de scripts.
� Integración de un servidor externo de autenticación (LDAP42), esta
funcionalidad la proporciona el servidor HTTP Apache.
42 LDAP son las siglas de Lightweight Directory Access Protocol permite el acceso a un servicio de directorio ordenado y distribuido para buscar diversa información en un entorno de red. Véase http://es.wikipedia.org/wiki/LDAP