522
UNIVERSIDAD DE OVIEDO ESCUELA POLITÉCNICA DE INGENIERÍA DE GIJÓN PROYECTO FIN DE CARRERA "PLATAFORMA WEB PARA LA GESTIÓN INTEGRAL DE CONFERENCIAS CIENTÍFICO-TÉCNICAS" DIRECTOR: José Ranilla Pastor Raquel Cortina Parajón AUTOR: Héctor Arroyo Santiago JULIO 2015

Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Embed Size (px)

Citation preview

Page 1: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

UNIVERSIDAD DE OVIEDO

ESCUELA POLITÉCNICA DE INGENIERÍA DE GIJÓN

PROYECTO FIN DE CARRERA

"PLATAFORMA WEB PARA LA GESTIÓN INTEGRAL

DE CONFERENCIAS CIENTÍFICO-TÉCNICAS"

DIRECTOR: José Ranilla Pastor

Raquel Cortina Parajón

AUTOR: Héctor Arroyo Santiago

JULIO 2015

Page 2: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

MEMORIA PRESENTADA POR

D. HÉCTOR ARROYO SANTIAGO

PARA OPTAR AL TÍTULO DE

INGENIERO TÉCNICO (en Informática de Sistemas)

Page 3: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Agradecimientos

Me gustaría agradecer el trabajo de mis directores de proyecto, Raquel y José, por su ayuda

durante el desarrollo y redacción del mismo, así como a la organización del CMMSE por la

oportunidad que ha supuesto y la confianza depositada en mí.

También quisiera agradecer el apoyo e interés mostrados por mi familia y amigos, cuyas

sugerencias y opiniones han inspirado parte de este proyecto.

Page 4: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Resumen

El presente proyecto tiene como finalidad el desarrollo de un sistema para la gestión de

conferencias científico-técnicas basado en una interfaz web. En particular, la implementación

realizada tiene como objeto la gestión de la 14th International Conference on Computational

and Mathematical Methods in Science and Engineering, que se celebró del 3 al 7 de julio de 2014

en Rota (Cádiz).

La aplicación desarrollada surge a partir de la necesidad de remplazar otra aplicación web

existente, y cubre todos los aspectos principales de la gestión de la conferencia, desde el registro

de los asistentes y el envío de los papers a presentar, hasta la generación de facturas,

justificantes de pago, asistencia y presentación de ponencias, además del envío de

notificaciones por correo electrónico tanto a los asistentes como a los gestores de la misma.

También cubre otros aspectos administrativos, como la generación de estadísticas y listados, la

verificación de pagos y envíos o la gestión de aspectos logísticos, como la disponibilidad de salas

durante el evento o la preparación de etiquetas identificativas de distintos tipos para los

asistentes y el personal.

Para el desarrollo de la interfaz se han utilizado tecnologías web actuales, como HTML5, jQuery

y AJAX, que mejoran la experiencia de los usuarios de la aplicación y minimizan los tiempos de

respuesta; mientras que para implementar la lógica de la aplicación en el lado del servidor se

han utilizado patrones de diseño de software modular ampliamente extendidos y componentes

de amplio uso, teniendo en cuenta y simplificando posibles ampliaciones futuras de la aplicación

resultante.

Además, la aplicación ha sido desarrollada a medida para ejecutarse sobre un servidor Linux,

teniendo en cuenta las particularidades del congreso a gestionar y del entorno hardware y

software disponible.

Page 5: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Palabras Clave

Conferencia

Simposio

Paper

Gestión de Pagos

MVC

ORM

PHP

MySQL

Page 6: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Abstract

This work aims to develop a web-based system for managing scientific-technical conferences.

Specifically, the implementation discussed here is targeted on the 14th International Conference

on Computational and Mathematical Methods in Science and Engineering, held on July 3-7 in

Rota (Cádiz).

The proposed system arises from the need to replace an existing web application, and covers all

major aspects involved on the conference management duties, including from registration of

attendees and papers submission to automatic generation of documentation, such as invoices,

proofs of payment, certificates of attendance and papers presentation, besides sending e-mail

notifications both to attendees and staff members. It also covers other administrative duties,

such as collecting and displaying of statistics and listings, payment handling and various logistics

including availability of rooms during the event or preparation of tags of different types for

attendees and staff members.

The application user interface is built on top of current web technologies, including HTML5 and

AJAX, allowing both a better user experience and lower response times; while the backend has

been engineered using widely used software design patterns and widespread third-party

libraries, thus making easy further improvements and simplifying the overall application

architecture.

In addition, the application has been explicitly developed to run on a Linux server and meet the

CMMSE organizers’ needs, taking into account the features of the CMMSE conference and the

hardware and software environment available on the web server used.

Page 7: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Keywords

Conference

Symposium

Paper

Payment Management

MVC

ORM

PHP

MySQL

Page 8: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Í ndice General

1 PRESENTACION ............................................................................................................................ 17

2 MEMORIA DEL PROYECTO ........................................................................................................... 18

2.1 HOJA DE IDENTIFICACIÓN ................................................................................................................. 18

2.2 TECNOLOGÍAS, PROTOCOLOS Y CONCEPTOS CLAVE ................................................................................ 19

2.2.1 Introducción al protocolo HTTP ............................................................................................ 19

2.2.2 Introducción a HTML............................................................................................................. 21

2.2.3 Introducción a AJAX .............................................................................................................. 24

2.2.4 Introducción a CSS y CSS3 ..................................................................................................... 24

2.2.5 El patrón de diseño MVC....................................................................................................... 26

2.2.6 Introducción a PHP ............................................................................................................... 28

2.2.7 Los sistemas de plantillas para web ..................................................................................... 29

2.3 OBJETO ........................................................................................................................................ 31

2.4 ANTECEDENTES ............................................................................................................................. 31

2.5 NORMAS Y REFERENCIAS.................................................................................................................. 31

2.5.1 Disposiciones legales y normas aplicadas ............................................................................ 31

2.5.2 Métodos, herramientas, modelos, métricas y prototipos ..................................................... 33

2.5.3 Mecanismos de control de calidad aplicados durante la redacción del proyecto ................ 37

2.5.4 Otras referencias .................................................................................................................. 39

2.6 ALCANCE ...................................................................................................................................... 40

2.7 HIPÓTESIS Y RESTRICCIONES ............................................................................................................. 40

3 PLANIFICACIÓN Y PRESUPUESTO ................................................................................................. 41

3.1 PLANIFICACIÓN TEMPORAL ............................................................................................................... 41

3.2 RESUMEN DEL PRESUPUESTO ............................................................................................................ 47

3.3 PRESUPUESTO ............................................................................................................................... 48

3.3.1 Costes relativos a ingeniería ................................................................................................. 48

3.3.2 Costes relativos a bienes, equipos y servicios informáticos .................................................. 48

3.3.3 Costes relativos a consumibles ............................................................................................. 48

3.3.4 Costes relativos a aplicaciones informáticas ........................................................................ 49

4 ESPECIFICACIÓN DEL SISTEMA ..................................................................................................... 50

4.1 DESCRIPCIÓN DE LA SITUACIÓN ACTUAL .............................................................................................. 50

4.2 REQUISITOS INICIALES ..................................................................................................................... 50

4.3 ESTUDIOS DE ALTERNATIVAS Y VIABILIDAD ........................................................................................... 51

4.3.1 Sistemas existentes de gestión de conferencias ................................................................... 51

4.3.2 Gestores de bases de datos .................................................................................................. 52

4.3.3 Servidores web ...................................................................................................................... 54

4.3.4 Lenguajes de programación ................................................................................................. 57

4.3.5 Frameworks .......................................................................................................................... 59

4.3.6 Sistemas de plantillas ........................................................................................................... 60

4.4 DESCRIPCIÓN DE LA SOLUCIÓN PROPUESTA .......................................................................................... 61

4.5 ACTORES DEL SISTEMA .................................................................................................................... 63

4.6 CATÁLOGO DE REQUISITOS NO FUNCIONALES ....................................................................................... 64

4.6.1 Requisitos tecnológicos ......................................................................................................... 64

4.6.2 Requisitos de seguridad ........................................................................................................ 65

Page 9: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

4.6.3 Requisitos de auditoría (instrumentación) ........................................................................... 65

4.6.4 Requisitos de tiempo de respuesta ....................................................................................... 65

4.7 ANÁLISIS DE REQUISITOS FUNCIONALES ............................................................................................... 66

4.7.1 Aspectos generales ............................................................................................................... 66

4.7.2 Seguridad .............................................................................................................................. 66

4.7.3 Pagos .................................................................................................................................... 67

4.7.4 Simposios .............................................................................................................................. 68

4.7.5 Envío de papers ..................................................................................................................... 68

4.7.6 Salas ...................................................................................................................................... 69

4.7.7 Envío de notificaciones por correo electrónico ..................................................................... 69

4.7.8 Generación de calendarios ................................................................................................... 70

4.7.9 Información estadística ........................................................................................................ 70

4.7.10 Limitación de acceso ........................................................................................................ 71

4.7.11 Generación de documentación ......................................................................................... 71

4.7.12 Excursiones ....................................................................................................................... 72

4.8 ESPECIFICACIÓN DE CASOS DE USO Y ESCENARIOS.................................................................................. 73

4.8.1 Acciones de invitado ............................................................................................................. 73

4.8.2 Acciones comunes ................................................................................................................. 76

4.8.3 Acciones de ponente ............................................................................................................. 80

4.8.4 Acciones de editor ................................................................................................................. 86

4.8.5 Gestión de usuarios .............................................................................................................. 87

4.8.6 Gestión de pagos (general) ................................................................................................... 97

4.8.7 Gestión de facturas ............................................................................................................. 100

4.8.8 Gestión de justificantes de pago ......................................................................................... 106

4.8.9 Gestión de simposios .......................................................................................................... 108

4.8.10 Gestión de salas.............................................................................................................. 111

4.8.11 Gestión de excursiones ................................................................................................... 113

4.8.12 Gestión de papers ........................................................................................................... 114

4.8.13 Configuración de la aplicación ....................................................................................... 120

4.8.14 Información estadística .................................................................................................. 126

5 DISEÑO E IMPLEMENTACIÓN ..................................................................................................... 129

5.1 PARTICIONAMIENTO FÍSICO DE SUBSISTEMAS ..................................................................................... 129

5.2 IMPLEMENTACIÓN DE FUNCIONALIDADES DINÁMICAS DE LA INTERFAZ DE ADMINISTRACIÓN ........................ 131

5.2.1 cmmse.admin ..................................................................................................................... 132

5.2.2 cmmse.admin.json .............................................................................................................. 132

5.2.3 cmmse.admin.users ............................................................................................................ 133

5.2.4 cmmse.admin.invoices ........................................................................................................ 133

5.2.5 cmmse.admin.proofs .......................................................................................................... 134

5.2.6 cmmse.admin.papers ......................................................................................................... 134

5.2.7 cmmse.admin.papers.edittitle ............................................................................................ 134

5.2.8 cmmse.admin.papers.rooms .............................................................................................. 135

5.2.9 cmmse.admin.rooms.edittitle ............................................................................................. 135

5.2.10 cmmse.admin.conferences.edittitle ............................................................................... 135

5.2.11 cmmse.admin.conferences.editdate .............................................................................. 136

5.3 SUBSISTEMAS DE DISEÑO ............................................................................................................... 137

5.4 DISEÑO DE CLASES ........................................................................................................................ 138

5.4.1 \CMMSE .............................................................................................................................. 139

5.4.2 \CMMSE\AutoloaderData .................................................................................................. 140

5.4.3 \CMMSE\Core ..................................................................................................................... 141

Page 10: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

5.4.4 \CMMSE\Exceptions ........................................................................................................... 162

5.4.5 \CMMSE\Traits ................................................................................................................... 164

5.4.6 \CMMSE\Doctrine ............................................................................................................... 172

5.4.7 \CMMSE\Decorators ........................................................................................................... 223

5.4.8 \Proxies ............................................................................................................................... 236

5.4.9 \CMMSE\PDFViews ............................................................................................................. 237

5.4.10 \CMMSE\PDFViews\Labels15x25 ................................................................................... 239

5.4.11 \CMMSE\PDFViews\Labels92x625 ................................................................................. 242

5.4.12 \CMMSE\Interfaces ........................................................................................................ 245

5.4.13 \CMMSE\Interfaces\Models ........................................................................................... 247

5.4.14 \CMMSE\Permissions ..................................................................................................... 272

5.4.15 \CMMSE\Models ............................................................................................................ 273

5.4.16 \CMMSE\Models\Factories ............................................................................................ 276

5.4.17 \CMMSE\Controllers ...................................................................................................... 278

5.4.18 \CMMSE\Controllers\User .............................................................................................. 284

5.4.19 \CMMSE\Controllers\Admin .......................................................................................... 292

5.4.20 \CMMSE\Controllers\Admin\JSON ................................................................................. 307

5.4.21 \CMMSE\Controllers\Admin\PDF ................................................................................... 312

5.4.22 \CMMSE\Controllers\Frontcontrollers ........................................................................... 320

5.5 DISEÑO FÍSICO DE DATOS ............................................................................................................... 324

5.5.1 Archivos estáticos internos ................................................................................................. 324

5.5.2 Archivos estáticos públicos ................................................................................................. 324

5.5.3 Archivos de usuario ............................................................................................................. 324

5.5.4 Configuración estática de la aplicación .............................................................................. 325

5.5.5 Modelo entidad-relación de la base de datos ..................................................................... 329

5.5.6 Modelo relacional de la base de datos ............................................................................... 336

5.5.7 Normalización ..................................................................................................................... 341

5.6 DISEÑO DE LA INTERFAZ DE USUARIO ................................................................................................ 347

5.6.1 Interfaz pública ................................................................................................................... 348

5.6.2 Interfaz administrativa ....................................................................................................... 349

6 MANUALES ................................................................................................................................ 351

6.1 MANUAL DE INSTALACIÓN ............................................................................................................. 351

6.1.1 Prerrequisitos ...................................................................................................................... 351

6.1.2 Instalación de la aplicación ................................................................................................. 352

6.1.3 Consideraciones de seguridad ............................................................................................ 356

6.1.4 Configuración inicial de la aplicación ................................................................................. 356

6.2 MANUAL DE USUARIO ................................................................................................................... 363

6.2.1 Registro, login y gestión de cuenta de usuario ................................................................... 363

6.2.2 Envío y gestión de papers ................................................................................................... 370

6.2.3 Gestión de pagos y datos fiscales ....................................................................................... 376

6.2.4 Acceso a los calendarios iCal .............................................................................................. 379

6.3 MANUAL DE ADMINISTRACIÓN ....................................................................................................... 381

6.3.1 Acceso a la interfaz de administración y configuración general......................................... 381

6.3.2 Gestión de salas .................................................................................................................. 382

6.3.3 Gestión de simposios .......................................................................................................... 384

6.3.4 Gestión de excursiones ....................................................................................................... 386

6.3.5 Gestión de usuarios ............................................................................................................ 388

6.3.6 Gestión de pagos: Facturas y justificantes.......................................................................... 406

6.3.7 Gestión de facturas ............................................................................................................. 409

Page 11: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

6.3.8 Gestión de justificantes de pago ......................................................................................... 412

6.3.9 Gestión de papers ............................................................................................................... 416

6.3.10 Consulta de información estadística .............................................................................. 424

6.3.11 Registro de editores ........................................................................................................ 427

6.4 MANUAL DE EDITOR ..................................................................................................................... 428

6.4.1 Acceso a la lista de papers enviados ................................................................................... 428

6.4.2 Descarga de papers disponibles ......................................................................................... 429

6.4.3 Acceso a los calendarios iCal .............................................................................................. 429

7 PRUEBAS ................................................................................................................................... 430

7.1 PRUEBAS DE USO EN UN ENTORNO REAL ........................................................................................... 430

7.2 PRUEBAS UNITARIAS ..................................................................................................................... 430

7.2.1 Tests\Core ........................................................................................................................... 431

7.2.2 Tests\Entities ...................................................................................................................... 441

7.2.3 Tests\Entities\Doctrine ....................................................................................................... 445

7.2.4 Tests\Decorators ................................................................................................................ 454

7.2.5 Tests\Models ...................................................................................................................... 458

7.2.6 Tests\Models\Factories ...................................................................................................... 479

7.2.7 Tests\Controllers\Admin\PDF ............................................................................................. 480

8 CONCLUSIONES ......................................................................................................................... 491

9 BIBLIOGRAFÍA ............................................................................................................................ 492

9.1 LIBROS Y ARTÍCULOS ..................................................................................................................... 492

9.2 REFERENCIAS EN INTERNET ............................................................................................................ 492

Conceptos de Ingeniería de Software .............................................................................................. 492

Lenguajes y estándares web ............................................................................................................ 492

Aspectos legales y herramientas de gestión de congresos .............................................................. 493

Herramientas de gestión de software.............................................................................................. 493

Protocolo HTTP y servidores web ..................................................................................................... 494

Librerías ........................................................................................................................................... 494

Casos de prueba y automatización .................................................................................................. 495

Estadísticas ...................................................................................................................................... 495

Otros ................................................................................................................................................ 495

10 APÉNDICES ................................................................................................................................ 496

APENDICE I: ESTADÍSTICAS DE LA EDICIÓN DE 2014 ...................................................................................... 496

Estadísticas demográficas ............................................................................................................... 496

Estadísticas de rendimiento ............................................................................................................. 505

APENDICE II: AMPLIACIONES PROPUESTAS ................................................................................................... 510

Uso del autocargador de clases de Symfony ................................................................................... 510

Alternativas al sistema MVC usado ................................................................................................. 510

Mejoras funcionales generales y de planificación ........................................................................... 512

Mejoras en la gestión de documentación ........................................................................................ 512

Mejoras técnicas generales ............................................................................................................. 513

Mejoras en estadísticas, instrumentación y administración de la aplicación .................................. 514

Cambios considerados en el sistema de pagos ................................................................................ 515

Mejoras de seguridad ...................................................................................................................... 516

Otros cambios a considerar ............................................................................................................. 516

APENDICE III: CONTENIDO DEL CD-ROM ................................................................................................... 517

APENDICE IV: DEFINICIONES Y ABREVIATURAS .............................................................................................. 518

Page 12: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Í ndice de figuras

Figura 2.1: Diagrama cliente-servidor HTTP ......................................................................................... 20

Figura 2.2: Despliegue típico de una aplicación web utilizando un pool de procesos Apache ............... 22

Figura 2.3: Documento HTML básico .................................................................................................... 22

Figura 2.4: Ejemplo de declaración CSS ................................................................................................ 25

Figura 2.5: Arquitectura MVC tradicional ............................................................................................. 27

Figura 2.6: Arquitectura MVC jerárquica .............................................................................................. 28

Figura 2.7: Esquema de funcionamiento de un sistema de plantillas web ............................................ 30

Figura 3.1: Diagrama de Gantt de la planificación temporal del proyecto ............................................ 45

Figura 4.1: Casos de Uso para las acciones de invitado ........................................................................ 76

Figura 4.2: Casos de uso para las acciones comunes ............................................................................ 79

Figura 4.3: Casos de uso para las acciones del perfil de ponente ......................................................... 81

Figura 4.4: Casos de uso para las acciones de papers de ponente ........................................................ 83

Figura 4.5: Casos de uso para las acciones de pago de ponente ........................................................... 86

Figura 4.6: Casos de uso para las acciones de editor ............................................................................ 87

Figura 4.7: Casos de uso para las acciones de gestión de usuarios ....................................................... 89

Figura 4.8: Casos de uso para la descarga de certificados..................................................................... 91

Figura 4.9: Casos de uso para la descarga de etiquetas ........................................................................ 96

Figura 4.10: Casos de uso para la gestión general de pagos ............................................................... 100

Figura 4.11: Casos de uso para la gestión de facturas individuales ..................................................... 102

Figura 4.12: Casos de uso para la descarga de facturas ...................................................................... 104

Figura 4.13: Casos de uso para la asignación automática de los números de factura ......................... 105

Figura 4.14: Casos de uso para la gestión de justificantes .................................................................. 108

Figura 4.15: Casos de uso para la gestión de simposios ...................................................................... 110

Figura 4.16: Casos de uso para la gestión de salas.............................................................................. 112

Figura 4.17: Casos de uso para la gestión de excursiones ................................................................... 114

Figura 4.18: Casos de uso para la gestión de papers........................................................................... 117

Figura 4.19: Casos de uso de descarga de certificados y listado papers .............................................. 120

Figura 4.20: Casos de uso generales de configuración ........................................................................ 122

Figura 4.21: Casos de uso para la configuración de los números de factura ....................................... 123

Figura 4.22: Casos de uso para la configuración de acceso ................................................................. 125

Figura 4.23: Casos de uso para la verificación del envío de correos .................................................... 126

Figura 4.24: Casos de uso para la obtención de información de autores ............................................ 128

Figura 4.25: Casos de uso para la obtención de información estadística ............................................ 128

Figura 5.1: Diagrama de despliegue lógico (detalle de procesos del servidor físico) ........................... 129

Figura 5.2: Diagrama simplificado de sistemas externos usados por la aplicación.............................. 130

Figura 5.3: Diagrama UML general de los espacios de nombres de la aplicación ................................ 137

Figura 5.4: Diagrama UML de las clases utilizadas para implementar el autocargador ....................... 140

Figura 5.5: Diagrama UML de la clase ArrayCache .............................................................................. 142

Figura 5.6: Diagrama UML de las clases Configuration e EMail........................................................... 145

Figura 5.7: Diagrama UMl de la clase HTTP404DieHandler ................................................................. 146

Figura 5.8: Diagrama UML de la clase cEzPDFStreamer ...................................................................... 147

Figura 5.9: Diagrama UML de la clase MailValidator .......................................................................... 148

Figura 5.10: Diagrama UML de la clase OverviewData ....................................................................... 150

Figura 5.11: Diagrama UML de la clase ScriptStats ............................................................................. 152

Figura 5.12: Diagrama UML de las clases AbstractModel, Log4PHPQueryLogger y MySQLiWrapper .. 155

Page 13: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Figura 5.13: Diagrama UML de las clases usadas para implementar las vistas .................................... 158

Figura 5.14: Diagrama UML de las clases base de los controladores .................................................. 161

Figura 5.15: Diagrama UML de los tipos de excepciones de la aplicación ........................................... 163

Figura 5.16: Diagrama UML de los traits de acceso a propiedades de objeto ..................................... 166

Figura 5.17: Diagrama UML de los traits usados para generar y enviar los correos electrónicos ........ 168

Figura 5.18: Diagrama UML del trait para obtener la extensión a partir de un nombre de archivo .... 169

Figura 5.19: Diagrama UML del trait de inicialización de objetos desde instancias compatibles ........ 170

Figura 5.20: Diagrama UML de los traits de obtención de carga media del sistema y descripción de

errores de envío de archivos ..................................................................................................... 171

Figura 5.21: Diagrama UML de la entidad Conference ....................................................................... 174

Figura 5.22: Diagrama UML de la entidad InstrumentationSample .................................................... 182

Figura 5.23: Diagrama UML de la entidad MailerSettings .................................................................. 186

Figura 5.24: Diagrama UML de la entidad Paper ................................................................................ 192

Figura 5.25: Diagrama UML de la entidad PaymentSettings ............................................................... 195

Figura 5.26: Diagrama UML de la entidad PersonTitle ........................................................................ 197

Figura 5.27: Diagrama UML de la entidad Poster ............................................................................... 200

Figura 5.28: Diagrama UML de la entidad Room ................................................................................ 202

Figura 5.29: Diagrama UML de la entidad Session .............................................................................. 204

Figura 5.30: Diagrama UML de la entidad Settings ............................................................................. 210

Figura 5.31: Diagrama UML de la entidad Trip ................................................................................... 212

Figura 5.32: Diagrama UML de la entidad User .................................................................................. 217

Figura 5.33: Diagrama UML de la entidad UserBillingInfo .................................................................. 222

Figura 5.34: Diagrama UML de los decoradores Autor y PagoUsuario ................................................ 224

Figura 5.35: Diagrama UML del decorador Conference ...................................................................... 226

Figura 5.36: Diagrama UML de los decoradores Paper, Poster y Room .............................................. 231

Figura 5.37: Diagrama UML del decorador Settings ........................................................................... 233

Figura 5.38: Diagrama UML del decorador UserBilling ....................................................................... 235

Figura 5.39: Diagrama UML de ejemplo para el proxy generado a partir de la entidad Room ............ 236

Figura 5.40: Diagrama UML de las vistas usadas para generar las etiquetas ...................................... 238

Figura 5.41: Diagrama UML de las interfaces principales ................................................................... 246

Figura 5.42: Diagrama UML general de las interfaces de los modelos ................................................ 247

Figura 5.43: Diagrama UML de la interfaz del modelo del listado de autores ..................................... 248

Figura 5.44: Diagrama UML de la interfaz del modelo de gestión de facturacion ............................... 251

Figura 5.45: Diagrama UML de la interfaz del modelo de gestión de simposios ................................. 253

Figura 5.46: Diagrama UML de la interfaz del modelo de instrumentación ........................................ 254

Figura 5.47: Diagrama UML de la interfaz del modelo del listado de facturas y justificantes ............. 255

Figura 5.48: Diagrama UML de la interfaz del modelo de inicio de sesión .......................................... 257

Figura 5.49: Diagrama UML de la interfaz del modelo de gestión de papers ...................................... 260

Figura 5.50: Diagrama UML de la interfaz del modelo de gestión de pagos........................................ 262

Figura 5.51: Diagrama UML de la interfaz del modelo de gestión de salas ......................................... 264

Figura 5.52: Diagrama UML de la interfaz del modelo de gestión de sesiones ................................... 265

Figura 5.53: Diagrama UML de la interfaz del modelo de configuración ............................................. 267

Figura 5.54: Diagrama UML de la interfaz del modelo de gestión de estadísticas .............................. 268

Figura 5.55: Diagrama UML de la interfaz del modelo de gestión de excursiones .............................. 269

Figura 5.56: Diagrama UML de la interfaz del modelo de gestión de usuarios.................................... 271

Figura 5.57: Diagrama UML de la clase que comprueba si la sesión posee permisos administrativos 272

Figura 5.58: Diagrama UML de la factoría de modelos ....................................................................... 277

Figura 5.59: Diagrama UML de los controladores de las acciones de invitado y editores ................... 278

Figura 5.60: Diagrama UML de los controladores de gestión de papers de las páginas de usuario .... 285

Figura 5.61: Diagrama UML de los controladores de gestión de perfil de las páginas de usuario ....... 291

Page 14: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Figura 5.62: Diagrama UML de los controladores principales de administración................................ 295

Figura 5.63: Diagrama UML de los controladores de las acciones AJAX .............................................. 308

Figura 5.64: Diagrama UML de los controladores PDF de la sección de administración ...................... 313

Figura 5.65: Diagrama UML de los Frontcontrollers ........................................................................... 323

Figura 5.66: Modelo entidad-relación general ................................................................................... 329

Figura 5.67: Modelo entidad-relación de los usuarios y los títulos honoríficos .................................. 330

Figura 5.68: Modelo entidad-relación de los datos de facturación de los usuarios ............................. 331

Figura 5.69: Modelo entidad-relación de papers, posters, simposios y salas ...................................... 332

Figura 5.70: Modelo entidad-relación de las excursiones ................................................................... 332

Figura 5.71: Modelo entidad-relación de las muestras de instrumentación ....................................... 333

Figura 5.72: Modelo entidad-relación de los datos de configuración ................................................. 335

Figura 5.73: Modelo relacional de las tablas de usuarios, papers y conferencias ............................... 337

Figura 5.74: Modelo relacional de las tablas de posters, salas y excursiones ..................................... 338

Figura 5.75: Modelo relacional de la tabla de facturación .................................................................. 338

Figura 5.76: Modelo relacional de las tablas de configuración ........................................................... 339

Figura 5.77: Modelo relacional de las tablas de sesiones e instrumentación ...................................... 340

Figura 5.78: Modelo entidad-relación normalizado de usuarios ......................................................... 342

Figura 5.79: Modelo entidad-relación normalizado de papers, posters, salas y simposios ................. 344

Figura 5.80: Modelo entidad-relación normalizado de los datos de facturación ................................ 345

Figura 5.81: Modelo entidad-relación normalizado de los parámetros de configuración ................... 346

Figura 5.82: Distribución de las pantallas de la interfaz pública ......................................................... 348

Figura 5.83: Distribución general de las pantallas de la interfaz de administración ............................ 349

Figura 5.84: Pantalla de administración con una fila seleccionada y una acción AJAX en curso .......... 350

Figura 5.85: Enlace de retorno a la parte superior de la página .......................................................... 350

Figura 6.1: Copia del instalador al servidor ........................................................................................ 352

Figura 6.2: Comprobaciones iniciales durante la instalación .............................................................. 353

Figura 6.3: Copia de los archivos de la aplicación ............................................................................... 354

Figura 6.4: Finalización de la instalación ............................................................................................ 355

Figura 6.5: Página de inicio de la aplicación recién instalada ............................................................. 355

Figura 6.6: Procedimiento de cambio de la contraseña de administrador .......................................... 358

Figura 6.7: Configuración de acceso y números de factura en un entorno de producción .................. 359

Figura 6.8: Configuración de la información de la edición actual de la conferencia ............................ 360

Figura 6.9: Configuración del servidor SMTP a utilizar en un entorno de producción ......................... 361

Figura 6.10: Formulario para el envío de un correo de prueba ........................................................... 361

Figura 6.11: Salida de depuración mostrada tras el envío de un correo de prueba ............................ 362

Figura 6.12: Correo electrónico de prueba recibido en la dirección proporcionada ............................ 362

Figura 6.13: Formulario de registro de nuevo usuario ........................................................................ 363

Figura 6.14: Notificación enviada confirmando el registro ................................................................. 364

Figura 6.15: Formulario de inicio de sesión ........................................................................................ 365

Figura 6.16: Página principal de la interfaz de ponente ...................................................................... 366

Figura 6.17: Formulario de edición de datos personales .................................................................... 367

Figura 6.18: Formulario de cambio de contraseña ............................................................................. 367

Figura 6.19: Errores mostrados durante la edición del formulario de cambio de contraseña ............. 368

Figura 6.20: Error mostrado al no proporcionar correctamente la contraseña actual ........................ 368

Figura 6.21: Error mostrado cuando la nueva contraseña y su confirmación no coinciden ................. 368

Figura 6.22: Formulario para restablecer la contraseña de usuario .................................................... 369

Figura 6.23: Correo electrónico con la nueva contraseña enviado tras restablecer la misma ............. 369

Figura 6.24: Formulario para el envío de un nuevo paper .................................................................. 370

Figura 6.25: Mensaje mostrado en la página de envío de papers cuando el plazo está cerrado ......... 371

Figura 6.26: Formulario cumplimentado para el envío de un nuevo paper ........................................ 371

Page 15: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Figura 6.27: Formulario de envío de un nuevo paper listando un paper enviado previamente .......... 372

Figura 6.28: Página de detalle de un paper antes de entrar en proceso de revisión ........................... 373

Figura 6.29: Página de detalle de un paper tras entrar en proceso de revisión .................................. 373

Figura 6.30: Correo electrónico de confirmación enviado tras la aceptación de un paper .................. 374

Figura 6.31: Formulario de envío de nuevas versiones de papers ...................................................... 375

Figura 6.32: Formulario de envío de nuevas versiones de papers tras el envío de una revisión ......... 375

Figura 6.33: Página principal de la interfaz de gestión de pagos ........................................................ 376

Figura 6.34: Página de registro y modificación de datos fiscales y envío de justificante de pago ....... 377

Figura 6.35: Pantalla para el envío del justificante de pago antes de su envío ................................... 378

Figura 6.36: Pantalla para el envío del justificante de pago tras su envio ........................................... 378

Figura 6.37: Pantalla para el envío del justificante de pago tras la confirmación del mismo .............. 379

Figura 6.38: Calendario de inicio de los simposios ............................................................................. 380

Figura 6.39: Calendario de exposición de posters .............................................................................. 380

Figura 6.40: Calendario de exposición de posters (formato de agenda) ............................................. 380

Figura 6.41: Formulario de inicio de sesión ........................................................................................ 381

Figura 6.42: Interfaz de gestión de salas ............................................................................................ 383

Figura 6.43: Formulario de creación de una nueva sala ..................................................................... 383

Figura 6.44: Formulario de modificación de nombre de sala .............................................................. 384

Figura 6.45: Interfaz de gestión de simposios .................................................................................... 385

Figura 6.46: Formulario de creación de un nuevo simposio ............................................................... 385

Figura 6.47: Edición del nombre de un simposio ................................................................................ 385

Figura 6.48: Edición de la fecha de inicio de un simposio ................................................................... 386

Figura 6.49: Interfaz de gestión de excursiones ................................................................................. 387

Figura 6.50: Creación de una nueva excursión ................................................................................... 387

Figura 6.51: Interfaz de gestión de usuarios ....................................................................................... 388

Figura 6.52: Listado de usuarios adaptado a un ancho de pantalla menor ......................................... 388

Figura 6.55: Listado de usuarios con usuarios seleccionados ............................................................. 389

Figura 6.56: Certificado de asistencia ................................................................................................. 390

Figura 6.57: Botones de descarga de etiquetas .................................................................................. 391

Figura 6.58: Hoja de etiquetas de asistencia (horizontales; 15 x 7,5 cm) ............................................ 392

Figura 6.59: Hoja de etiquetas de asistencia (horizontales; 9,2 x 6,25 cm) ......................................... 393

Figura 6.60: Hojas de etiquetas de asistencia (verticales) .................................................................. 394

Figura 6.61: Hoja de etiquetas de asistencia a la cena de gala (horizontales; 15 x 7,5 cm) ................. 395

Figura 6.62: Hoja de etiquetas de asistencia a la cena de gala (horizontales; 9,2 x 6,25 cm) .............. 396

Figura 6.63: Hoja de etiquetas de asistencia a excursiones (horizontales; 15 x 7,5 cm) ...................... 397

Figura 6.64: Hoja de etiquetas de asistencia a excursiones (horizontales; 9,2 x 6,25 cm) ................... 398

Figura 6.65: Hoja de etiquetas identificativas para los organizadores (horizontales; 15 x 7,5 cm) ...... 399

Figura 6.66: Hoja de etiquetas identificativas para los organizadores (horizontales; 9,2 x 6,25 cm) ... 400

Figura 6.67: Hoja de etiquetas de restaurante (horizontales; 15 x 7,5 cm) ......................................... 401

Figura 6.68: Hoja de tickets de restaurante (horizontales; 9,2 x 6,25 cm) ........................................... 402

Figura 6.69: Hoja de etiquetas en blanco (horizontales; 15 x 7,5 cm) ................................................. 403

Figura 6.70: Hoja de etiquetas en blanco (horizontales; 9,2 x 6,25 cm) .............................................. 404

Figura 6.71: Hoja de etiquetas en blanco (verticales) ......................................................................... 405

Figura 6.72: Notificación de registro de nuevo usuario ...................................................................... 406

Figura 6.73: Menú de acceso a las páginas de gestión de facturas y justificantes de pago ................. 407

Figura 6.74: Formulario de modificación de cuota de inscripción ....................................................... 408

Figura 6.75: Notificación enviada al recibir un nuevo justificante de pago ......................................... 409

Figura 6.76: Interfaz de gestión de facturas ....................................................................................... 409

Figura 6.77: Listado de usuarios con factura solicitada con usuarios seleccionados ........................... 410

Figura 6.78: Factura generada por la aplicación ................................................................................. 411

Page 16: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Figura 6.79: Detalle de la numeración de facturas y facturas listas para imprimir .............................. 412

Figura 6.80: Interfaz de gestión de justificantes de pago simple ........................................................ 413

Figura 6.81: Listado de usuarios con justificantes de pago simple con usuarios seleccionados ......... 414

Figura 6.82: Justificante de pago generado por la aplicación ............................................................. 415

Figura 6.83: Interfaz de gestión de los papers enviados ..................................................................... 416

Figura 6.86: Formulario de edición del ltítulo de paper ...................................................................... 417

Figura 6.87: Notificación enviada a los administradores tras el envío de un nuevo paper .................. 418

Figura 6.88: Nuevo paper listado en la página de administración antes de entrar en revisión ........... 418

Figura 6.89: Notificación enviada a los administradores tras aceptar un paper ................................. 419

Figura 6.90: Notificación enviada a los administradores tras recibir una nueva versión de un paper . 420

Figura 6.91: Formulario de edición de sala y fechas de presentación de posters ................................ 421

Figura 6.92: Listado de papers con papers seleccionados ................................................................... 422

Figura 6.93: Certificado de presentación de ponencia ........................................................................ 423

Figura 6.94: Listado de autores .......................................................................................................... 425

Figura 6.95: Enlace de descarga de la lista de autores en formato Excel ............................................ 425

Figura 6.97: Página de estadísticas agregadas .................................................................................... 426

Figura 6.98: Formulario de inicio de sesión ........................................................................................ 428

Figura 6.99: Interfaz de editor ............................................................................................................ 429

Figura 10.1: Número de usuarios registrados por semana................................................................. 497

Figura 10.2: Número de usuarios totales en el sistema por semana ................................................... 497

Figura 10.3: Número de usuarios por país de procedencia ................................................................. 498

Figura 10.4: Número de nuevos papers enviados por semana ........................................................... 499

Figura 10.5: Número de papers totales en el sistema por semana ..................................................... 499

Figura 10.6: Número de papers aceptados por simposio .................................................................... 500

Figura 10.7: Número de solicitudes por navegador (todas las páginas) .............................................. 501

Figura 10.8: Número de solicitudes por navegador (páginas públicas) ............................................... 501

Figura 10.9: Valores muestrales (agregados) de número de solicitudes por navegador ..................... 502

Figura 10.10: Número de solicitudes por S.O. del cliente (todas las páginas) ..................................... 503

Figura 10.11: Número de solicitudes por S.O. del cliente (páginas públicas) ...................................... 503

Figura 10.12: Valores muestrales (agregados) de número de solicitudes por sistema operativo ........ 504

Figura 10.13: Número de solicitudes HTTP por semana ..................................................................... 506

Figura 10.14: Número de sesiones HTTP por semana ......................................................................... 506

Figura 10.15: Uso medio de CPU y memoria por día .......................................................................... 507

Figura 10.16: Parámetros estadísticos generales de uso de CPU, memoria y BBDD ........................... 508

Figura 10.17: Media de tiempo y memoria empleados para generar las páginas ............................... 508

Figura 10.18: Grado absoluto de relación lineal existente entre el uso de CPU y de memoria ........... 509

Figura 10.19: Grado relativo de relación lineal existente entre el uso de CPU y de memoria ............. 509

Page 17: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

PresentacIon | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 17

1 PRESENTACION

El presente proyecto tiene como objetivo el desarrollo y puesta en producción de una aplicación web

para la gestión de una conferencia científico-técnica sobre la aplicación de métodos matemáticos en

problemas de ciencia e ingeniería. La aplicación desarrollada tiene como finalidad la gestión completa

del registro de ponentes, envío de artículos, generación de facturas y recolección de estadísticas,

poniendo especial énfasis en los aspectos relativos al rendimiento, portabilidad y modularidad de sus

componentes.

Este proyecto surge con el objetivo de remplazar una aplicación web existente que la organización

venía utilizando en ediciones anteriores del congreso y teniendo como uno de sus objetivos que se

ejecute sobre un servidor Linux. Para ello se ha realizado un estudio de las funcionalidades cubiertas

por la aplicación original, además de considerar e implementar numerosas mejoras relativas a la

usabilidad, a los tiempos de respuesta de la aplicación y al uso de componentes software actuales,

utilizando librerías de código abierto (open source) como base para la implementación de las diferentes

funcionalidades cubiertas.

De esta forma, se dispone de una aplicación flexible y modular, construida sobre componentes

software ampliamente testados por diferentes comunidades de desarrolladores de aplicaciones tanto

open source como privativas, y que tiene en cuenta y posibilita la implementación de nuevas

funcionalidades con relativa facilidad.

Page 18: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Memoria del proyecto

18 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

2 MEMORIA DEL PROYECTO

2.1 Hoja de identificación

Plataforma web para la gestión integral de conferencias científico-técnicas.

Cliente:

o International Conference on Computational and Mathematical Methods in Science and

Engineering.

Suministrador:

o Héctor Arroyo Santiago.

Mayo 2015

Resumen: Desarrollo de una aplicación web para la gestión de la 14th International Conference

on Computational and Mathematical Methods in Science and Engineering.

Duración estimada: Octubre 2013 – Mayo 2015.

Coste estimado: 22.685 €

Page 19: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Memoria del proyecto | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 19

2.2 Tecnologías, protocolos y conceptos clave

En este apartado se dispone de una introducción a algunas de las tecnologías y conceptos cuyo

conocimiento resulta de capital importancia para comprender el resto de este documento.

2.2.1 Introducción al protocolo HTTP

El Protocolo de Transferencia de Hipertexto (HyperText Transfer Protocol) [HTTP01] es el protocolo

más usado para navegar por Internet, y define los detalles y convenios necesarios para el intercambio

de datos entre un navegador web (cliente) y el sistema que proporciona los contenidos o páginas web

(servidor). HTTP es un protocolo basado en transacciones, y sigue un esquema petición-respuesta

entre el cliente y el servidor. Se sitúa en el nivel superior de la arquitectura TCP/IP (nivel de aplicación)

y hace uso de los mecanismos estándar de TCP para proporcionar fiabilidad en la comunicación.

Un aspecto importante de HTTP es su carácter de protocolo sin estado (stateless): En general, cada

solicitud del cliente es tratada de manera independiente del resto, creando y destruyendo una

conexión dedicada entre el cliente y el servidor para ello1. El funcionamiento sin estado de HTTP es

adecuado para su uso habitual, en el que un usuario solicita una secuencia de páginas y datos asociados

a éstas en un corto intervalo de tiempo, y los contenidos solicitados se encuentran en uno o más

servidores independientes [STAL04].

Otra característica importante de HTTP es que, aunque su nombre hace referencia a la transferencia

de hipertexto, el protocolo no impone ningún tipo de restricción en cuanto al tipo de documentos que

puede gestionar: Los datos son enviados como secuencias de bytes, sin hacer distinción en el

contenido. Esto permite utilizar el mismo protocolo para enviar los contenidos vinculados a una página

web, simplificando la infraestructura necesaria [STAL04].

Tipos de solicitudes

A nivel de protocolo, HTTP define 8 tipos distintos de solicitudes, denominados métodos HTTP. Los

más comunes son GET (para solicitar un recurso a partir de su URI), HEAD (idéntico al anterior pero sin

incluir el cuerpo del documento) y POST (para guardar datos adicionales proporcionados por el cliente

como una nueva entidad subordinada del recurso web identificado por la URI proporcionada)

[SYMF01].

Tipos de respuesta

En respuesta a las solicitudes de los clientes, los servidores retornan un valor numérico de 3 dígitos

conocido como código de respuesta. Éstos se clasifican en 5 tipos denominados clases. Las clases de

respuesta HTTP son 1xx Informational (para respuestas provisionales, como las relativas a

comprobaciones previas para solicitudes posteriores), 2xx Success (que indican que una solicitud es

1 Aunque cliente y servidor pueden acordar reutilizar la misma conexión para varias solicitudes. En este caso se mantiene la conexión TCP pero no el estado previo a nivel de protocolo de aplicación.

Page 20: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Memoria del proyecto

20 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

soportada y aceptada por el servidor, y se ha procesado correctamente), 3xx Redirection (que indica

que se debe realizar una acción adicional, como una solicitud a una nueva URI, o que los datos en la

memoria caché del navegador están actualizados), 4xx Client Error (si hay errores en la solicitud del

cliente y la naturaleza temporal o definitiva de los mismos) y 5xx Server Error (que indican errores no

atribuibles al cliente al procesar una solicitud válida).

Internet

Cliente

Cliente

Cliente

Servidor

Figura 2.1: Diagrama cliente-servidor HTTP

Sesiones en HTTP

Aunque HTTP es un protocolo sin estado y no proporciona mecanismos para mantener información

asociada a un conjunto de solicitudes de diferentes recursos, en los sitios y aplicaciones web actuales

resulta imprescindible poder identificar y mantener información para cada cliente de manera

individual. Para ello, el servidor envía una cookie como parte de la respuesta a su primera solicitud que

es reenviada por el navegador en las siguientes, de forma que se consigue preservar la información

necesaria asociada al usuario durante el tiempo que éste utiliza la aplicación. Esta cookie contiene un

identificador de sesión (o token) utilizado por el servidor para identificar y localizar los datos del

cliente. La razón de que solo se envíe y reciba un token hacia y desde el cliente atiende a razones de

simplicidad (el cliente solo tiene que gestionar un identificador) y seguridad (la comprobación de la

autenticidad del token se realiza en el servidor, pudiendo implementar mecanismos de seguridad

adicionales como la comprobación de la IP de origen o la revocación de privilegios para tokens que no

hayan sido utilizados durante un periodo de tiempo determinado).

Generación de contenido de forma dinámica

Cuando la World Wide Web surgió a principios de los 90, la mayor parte de sus contenidos eran páginas

estáticas HTML. Sin embargo, a medida que su uso se fue popularizando, surgió la necesidad de

generar las páginas de manera dinámica (esto es, crear el contenido en el momento en el que el

usuario lo solicita). Esto permitió que surgieran webs que respondían a las necesidades de los usuarios,

permitiéndoles interactuar con ellas y obtener información que se actualizaba en tiempo real.

En la actualidad, prácticamente todas las webs más visitadas generan la mayor parte de sus páginas

en el momento en que son solicitadas por el usuario a partir de un programa [ALEX01]. Una búsqueda

Page 21: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Memoria del proyecto | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 21

en Google retorna un listado de páginas generado a partir de los datos de un índice, los artículos de la

Wikipedia son generados a partir de la información almacenada en una base de datos, Facebook es

una aplicación escrita en PHP y C++ que lee sus datos de una base de datos distribuida [FACEB01].

Para la generación dinámica del contenido en el servidor de aplicación existen diversas alternativas.

Las más comunes son generar el contenido a partir de un programa o script CGI escrito en cualquier

lenguaje de programación, lo cual normalmente implica la creación de un nuevo proceso; o generar el

contenido a partir de un script ejecutado por el servidor dentro de su espacio de direcciones2, como

si se tratase de una llamada a función más dentro del ciclo normal de despacho de solicitudes.

La aplicación desarrollada está implementada utilizando PHP, el cual soporta ambos modos de

operación. En nuestro caso, hemos optado por el segundo enfoque, ya que es el recomendado para la

combinación del servidor web y sistema operativo utilizados [PHP03].

Además, para mejorar los tiempos de carga y disminuir los recursos necesarios en el servidor de bases

de datos, es común utilizar servidores adiciones de memoria caché para guardar copias de los datos

de la aplicación (o páginas completas generadas previamente) en memoria RAM, evitando así los

accesos a disco y la sobrecarga adicional introducida por las comprobaciones de permisos de la base

de datos en las lecturas. Aun así, las escrituras siguen introduciendo importantes latencias, así como

la lógica asociada a mantener la consistencia de datos entre las memorias caché y la base de datos.

2.2.2 Introducción a HTML

El Lenguaje de Marcado de Hipertexto (Hypertext Markup Language) es el sistema surgido a principios

de los 90 para estructurar el contenido de los documentos a mostrar utilizando un navegador web.

Consta de una serie de reglas sintácticas, que definen códigos de marcado o etiquetas insertadas en

los archivos que constituyen las páginas web; y semánticas, que indican al navegador cómo mostrar al

usuario la información. Los elementos que forman los documentos HTML pueden clasificarse en

estructurales (como un párrafo) o en aquellos que definen un comportamiento deseado (como un

salto de línea) [ROB06].

Las reglas que definen la etiquetas HTML válidas y su sintaxis y semántica son mantenidas por el World

Wide Web Consortium (más conocido por la abreviatura W3C), una organización internacional fundada

en 1994 cuyo objetivo es el desarrollo y mantenimiento de los diferentes estándares sobre los que se

basa Internet.

Los elementos HTML pueden anidarse y, para que sean correctos, todos ellos deben estar entre las

etiquetas de apertura y cierre del elemento que lo contiene (denominado padre) [ROB06].

2 Este modo de operación es conocido como “Ejecución como módulo del servidor”.

Page 22: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Memoria del proyecto

22 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Internet

Apache

Cliente

Apache Workers

mod_php

core

MySQL Memcached

Figura 2.2: Despliegue típico de una aplicación web utilizando un pool de procesos Apache

El conjunto de reglas sintácticas y semánticas que

debe cumplir un documento HTML es bastante

complejo, y difiere entre versiones del estándar.

Para facilitar la tarea de comprobar si una página

cumple con los estándares, la W3C pone a

disposición de los desarrolladores una herramienta

online en [W3C02] que realiza una comprobación

sintáctica y semántica completa para determinar la

validez de los documentos.

En los últimos años se ha puesto un especial énfasis

en eliminar de HTML la información utilizada para

<!DOCTYPE html> <html> <head> <title>Título de la página</title> </head> <body> <p>Hola mundo!</p> </body> </html>

Figura 2.3: Documento HTML básico

Page 23: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Memoria del proyecto | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 23

indicar cómo representar su contenido, recomendando el uso de CSS para este propósito y utilizando

HTML como capa estructural [ROB06]. De esta forma, los archivos HTML pasan a ser la fuente de los

contenidos y la estructura básica de las páginas web, mientras que CSS define de forma exhaustiva la

forma de presentarlos mediante un conjunto de reglas independientes y fácilmente intercambiables

en función, por ejemplo, del tipo de dispositivo usado (como un ordenador o un teléfono móvil) o de

sus características (como su resolución o el navegador utilizado).

Para crear una base sólida, escribir documentos HTML sin elementos de presentación y bien

estructurados se ha convertido en la base del diseño web fiel a los estándares, utilizando marcado

semántico de forma que sus elementos sean descriptivos y tengan significado [ROB06].

El nuevo estándar: HTML5

Con el paso del tiempo, HTML fue degenerando en una mezcla de

características introducidas por sus distintas especificaciones, por los

diferentes navegadores que incluían sus propias extensiones al estándar,

por los hábitos de los desarrolladores y por la necesidad de lidiar con los

errores sintácticos de los documentos existentes en la web. Además, el

lenguaje presentaba carencias, y era necesario mejorar la representación

semántica de los documentos. Por otra parte, el mercado actual incluye

nuevos dispositivos, como teléfonos móviles, tablets o televisores, y usos de

los lenguajes del lado del cliente que no se habían tenido en cuenta inicialmente, como la obtención

de datos del servidor de forma asíncrona para alterar el contenido y la presentación de los documentos

en tiempo real. Tradicionalmente estos problemas han sido solventados recurriendo a tecnologías no

estándar (como Flash) que introducen nuevos problemas, como un mayor uso de recursos o el hecho

de atar a usuarios y desarrolladores a productos propietarios.

Para solucionar estos problemas, la W3C publicó en 2012 una versión inicial de la quinta revisión de

HTML como una recomendación candidata3, que constituye una renovación del lenguaje teniendo en

cuenta el escenario actual, y la inclusión de características demandadas por usuarios y desarrolladores.

Entre las características principales de HTML5 están [MOZ01]:

Nuevos elementos semánticos, proporcionando soporte para definir el significado y la

importancia de las diferentes secciones de los documentos de manera nativa.

Posibilidad de referenciar audio y video a través de tags estándar, gestionando los

contenidos en el propio navegador y su control a través de interfaces de usuario programadas

utilizando Javascript tradicional.

Soporte para nuevos elementos de formulario, y la posibilidad de definir la lógica de

validación de éstos directamente como atributos HTML en lugar de necesitar el uso de

lenguajes de scripting para ello.

3 El 28 de Octubre de 2014 la W3C publicó la primera versión completa del estándar HTML5 en [W3C08].

Page 24: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Memoria del proyecto

24 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Comunicación bidireccional entre el cliente y el servidor, permitiendo a este último la

notificación de eventos utilizando WebSockets en lugar de necesitar un mecanismo de polling

tradicional e el cliente.

Posibilidad de implementar aplicaciones web multihilo, utilizando WebWorkers para la

ejecución de Javascript en segundo plano.

Soporte nativo para el almacenamiento de información en el cliente, posibilitando la creación

de aplicaciones web que guardan información en el equipo del usuario.

Además, junto a HTML5 se dispone de la tercera versión de CSS, que introduce mejoras para definir

interfaces de usuario modernas, incluyendo bordes redondeados, animaciones, tipografías mejoradas

y acceso al hardware de aceleración gráfica en 3D a través de WebGL.

2.2.3 Introducción a AJAX

Por Javascript Asíncrono y XML (Asynchonous Javascript And XML) se conoce al conjunto de tecnologías

de desarrollo web que permiten la creación de aplicaciones asíncronas en las que el cliente puede

enviar y recibir datos a y desde servidor en segundo plano, sin requerir la recarga de la página actual.

Formalmente, AJAX no se refiere a una única tecnología, sino a un conjunto de ellas, incluyendo HTML

y CSS, DOM, XML y Javascript que, utilizadas de manera simultánea, permiten implementar

aplicaciones web que, hasta cierto punto, se asemejan a las aplicaciones de escritorio tradicionales

en lo referido a los tiempos de respuesta.

Entre las aplicaciones web más conocidas que implementan este modelo de funcionamiento se

incluyen Gmail, Google Maps, Goolge Docs, Twitter o Facebook, y se basan en los estándares HTML y

CSS (para crear una interfaz de usuario interoperable), DOM (para la manipulación dinámica de los

contenidos), XML y JSON (para representar y manipular los datos enviados y recibidos) y Javascript

(utilizado como el lenguaje que une todas las demás tecnologías).

En las aplicaciones web tradicionales, las acciones del usuario, como hacer clic en un botón o

seleccionar un valor de una lista, requerían realizar una solicitud HTTP, tras la cual toda la interfaz de

usuario (la página web) era redibujada. Utilizando AJAX, el usuario puede seguir interactuando con el

sitio mientras la respuesta a sus acciones es procesada en segundo plano por el servidor y el navegador

espera la respuesta a ellas siguiendo un modelo orientado a eventos. Esto permite la implementación

de funciones que antes solo eran posibles en aplicaciones de escritorio, como autocompletado, la

notificación de llegada de nuevos correos electrónicos en tiempo real, sistemas de mensajería

instantánea, interfaces de administración completas de uso sencillo para máquinas virtuales [VBOX01],

o sistemas de gestión de contenido web [AJXL14] o bases de datos [DBADM01].

2.2.4 Introducción a CSS y CSS3

Las hojas de estilo en cascada (Cascading Style Sheets) son utilizadas para definir la apariencia y

formato de los diferentes elementos de una página web (o cualquier otro tipo de documento XML) en

una pantalla de ordenador, móvil u otro dispositivo por medio de una sintaxis sencilla. Publicado

Page 25: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Memoria del proyecto | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 25

inicialmente en 1996 por la W3C, CSS es considerado una de las tecnologías clave de la web actual y la

práctica totalidad de los sitios web lo utilizan para definir la presentación de sus contenidos.

CSS permite un control total sobre el estilo y formato de los documentos [W3C03], separando el

contenido de la presentación, por medio de reglas o declaraciones sobre estilo de uno o más

elementos. Sintácticamente, cada regla se divide en dos partes: un selector y una declaración de estilo

asociada a éste. A su vez, cada declaración está compuesta por una o más asignaciones de valores a

propiedades del selector.

h1 { color: red; font-weight: bold; }

Figura 2.4: Ejemplo de declaración CSS

Los selectores funcionan como enlace entre el documento y el estilo, especificando qué elementos van

a verse afectados por cada declaración. En el ejemplo anterior, se especifica que los elementos HTML

<h1> deben mostrarse en negrita y color rojo en todos los documentos vinculados a la hoja de estilos

que lo contiene.

Existen 3 formas de asociar estilos a los elementos de un documento: utilizando una hoja de estilos

CSS externa, insertando las reglas directamente en el encabezado de un documento, o insertando los

valores de las propiedades directamente sobre aquellos elementos a modificar. Estos métodos no son

mutuamente excluyentes.

Otro aspecto importante de CSS es la posibilidad de anidar las reglas, por medio de múltiples

declaraciones o utilizando múltiples reglas diferentes aplicables a un mismo elemento. De esta forma

es posible definir el estilo general de un documento, para luego concretarlo en otros archivos o

directamente sobre el marcado HTML, siguiendo un proceso análogo al de herencia y sobrecarga de

los lenguajes de programación.

En general, existen tres tipos de selectores básicos: aquellos que especifican el identificador único del

elemento HTML sobre el que se aplican (precedido de una almohadilla), aquellos que definen una clase

de elementos (precedidos de un punto) y aquellos, más generales, que se aplican a todas las etiquetas

HTML de un tipo dado. Además, pueden utilizarse selectores basados en pseudoclases, que permiten

definir el formato de los elementos basándose en información que no está representada en el árbol

sintáctico del documento (por ejemplo, definir el color de los enlaces que han sido visitados

previamente por el usuario o la apariencia de un botón cuando se pasa el ratón por sobre él).

Novedades de CSS3

En junio de 1999 la W3C publicó los primeros borradores de la tercera versión de

CSS. En general, CSS3 ha sido publicado como diferentes módulos, cada uno con

procesos de revisión y calendarios diferentes, y abarcan aspectos concretos como

el modelo de cajas CSS [W3C04] (box model, relativo al posicionamiento de los

elementos de una página), las imágenes de fondo [W3C05] (permitiendo utilizar

múltiples imágenes como fondo de cualquier elemento y controlar su posición), la

descarga de las fuentes de texto usadas por una página [W3C06] (eliminando así la

tradicional dependencia en las fuentes instaladas en el equipo del cliente) o las

Page 26: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Memoria del proyecto

26 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

media-queries [W3C07] (que permiten definir declaraciones de estilo condicionales en función del

tamaño u orientación de la pantalla o del tipo de dispositivo).

2.2.5 El patrón de diseño MVC

El patrón Modelo-Vista-Controlador (Model-View-Controller) [GoF94] define el diseño de sistemas de

información como diferentes componentes débilmente acoplados, de forma que la representación

interna de los datos es independiente de la forma en que éstos son mostrados al usuario. Las

aplicaciones construidas siguiendo este patrón quedan, en general, divididas en los siguientes

componentes:

Modelos: Objetos que encapsulan el acceso a los datos de la aplicación, de forma que el

mecanismo de acceso a los mismos y su representación interna es independiente del resto de

la aplicación.

Vistas: Las vistas implementan la forma de interactuar del usuario con la aplicación, siendo las

encargadas de decidir cómo mostrar los datos a éste.

Controladores: Los controladores se encargan de realizar solicitudes a los modelos, de elegir

las vistas a utilizar y de proporcionar a éstas los datos necesarios.

El principal inconveniente de MVC, cuando se utiliza de forma estricta, es el hecho de que, al utilizarse

un único controlador para atender cada solicitud, cada uno debe gestionar también otras partes que

son comunes a toda la aplicación, como la inicialización de sesiones, la comprobación de permisos o la

generación de las partes de la interfaz que son comunes a toda la aplicación o a secciones amplias de

la misma.

MCV en capas: Arquitectura jerárquica

Al desarrollar una aplicación web, a menudo se presentan complicaciones a la hora de definir la

interfaz con el cliente debido a la gran variedad de servidores, plataformas de desarrollo y protocolos

con los que debe lidiar el desarrollador. Entre los factores que hay que tener en cuenta están cómo

estructurar la interfaz y cómo interactuarán los usuarios con ella, cómo separar la lógica encargada de

enviar los datos al cliente en diferentes formatos y cómo gestionar los eventos y el flujo de la

aplicación. Además, hay que tener en cuenta que ciertas partes de la capa de presentación deben ser

consistentes ente páginas (o idénticas), y hay ciertos pasos que deben realizarse indistintamente para

todas las solicitudes (como la creación de conexiones a la base de datos, la gestión de sesiones o la

inicialización de subsistemas comunes a toda la aplicación).

Para simplificar el proceso de desarrollo, mejorar la modularidad de las aplicaciones y facilitar su

mantenimiento surge el Modelo-Vista-Controlador Jerárquico (Hierarchical Model-View-Controller,

[CAI00]). Se trata de una variación del patrón MVC estándar que aumenta la modularidad y facilita la

reusabilidad y el mantenimiento del código, permitiendo, a diferencia del MVC tradicional, que los

controladores pueden realizar sub-solicitudes a otros controladores.

Page 27: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Memoria del proyecto | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 27

Base de Datos

Controlador

Modelo(s)

Figura 2.5: Arquitectura MVC tradicional

De esta forma cada controlador se encarga de generar parte de la respuesta a enviar al usuario,

delegando el resto en otros controladores y permitiendo la construcción de aplicaciones como un

conjunto de varias capas jerárquicas de modelos, vistas y controladores. Algunas de las ventajas de

HMVC son:

Reduce las dependencias entre partes dispares del programa.

Facilita la reutilización de componentes y módulos.

Aumenta la extensibilidad a la vez que facilita el mantenimiento del código.

La clave para ello está en la posibilidad de realizar sub-solicitudes a otros controladores en lugar de

duplicar código. Por ejemplo, para mostrar una lista de artículos en HTML se envía una solicitud al

controlador de artículos con algunos parámetros, el cual interactúa con el modelo apropiado, y

selecciona una vista para mostrar el contenido. Sin embargo, en lugar de mostrar la lista recibida

directamente en una página independiente, el controlador que realiza la sub-solicitud utiliza la vista

recibida para incrustarla en otra (por ejemplo, una interfaz que lista todas las opciones de

administración).

Page 28: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Memoria del proyecto

28 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Base de Datos

Controlador

Modelo(s)

Controlador

Modelo(s)

...

Figura 2.6: Arquitectura MVC jerárquica

2.2.6 Introducción a PHP

PHP (acrónimo recursivo que significa “PHP: Hypertext Preprocesor” o Preprocesador de Hipertexto)

es un lenguaje de programación de propósito general ampliamente usado para el desarrollo de

aplicaciones web. Con una sintaxis que toma elementos de C, Java y Perl, se trata de un lenguaje

diseñado para permitir el desarrollo de páginas web dinámicas de forma rápida, a la vez que permite

construir aplicaciones más complejas utilizando interfaces a librerías de terceros y elementos de la

programación orientada a objetos [PHP04].

El código escrito en PHP puede estar mezclado con código HTML o de otro tipo, o pude usarse junto a

sistemas de plantillas (separando la lógica de negocio de la capa de presentación). Habitualmente los

programas escritos en PHP (también llamados scripts PHP) son procesados por un intérprete enlazado

a un servidor web como una extensión o utilizando una interfaz CGI, tras lo cual se envía el resultado

generado al cliente como respuesta a una solicitud.

Page 29: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Memoria del proyecto | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 29

A diferencia de los lenguajes de programación tradicionales, PHP usa un sistema de asignación de tipos

de dato débil y dinámico, en el cual las variables no tienen que declararse previamente y pueden pasar

de representar un tipo escalar a otro, un objeto, o dejar de existir dentro de un mismo contexto de

ejecución (por ejemplo, dentro de una única función).

Internamente, PHP está estructurado a partir de un pequeño núcleo (core) que gestiona la

funcionalidad esencial del lenguaje (como el parser o la gestión de variables y tipos) sobre una máquina

virtual que proporciona funcionalidades de bajo nivel (como la gestión de memoria o la representación

interna de datos). Sobre él se apoyan un amplio número de extensiones4 que proporcionan varias

funcionalidades, como manipulación de imágenes, cálculo con números de precisión arbitraria, envío

de correo electrónico o interfaces para utilizar diferentes protocolos de red. Del mismo modo, parte

de las funcionalidades básicas del lenguaje, como los principales tipos de contenedores (pilas, heaps,

listas enlazadas…), iteradores, excepciones e interfaces están implementadas como la extensión

obligatoria (sic) SPL5.

La implementación original de PHP, disponible en php.net, se considera el estándar de facto y está

construida sobre una máquina virtual denominada Zend Engine, que compila en el momento de la

solicitud el código PHP a una representación interna que luego es ejecutada por un intérprete. Debido

al tiempo necesario para ello, existen varios proyectos open source que implementan compiladores

PHP alternativos (como HipHop Virtual Machine [FACEB01] o Parrot).

El uso de PHP para el desarrollo web está ampliamente extendido, existiendo fuentes que estiman que

es utilizado aproximadamente por el 40% de los sitios web actuales6 [WIKI05].

2.2.7 Los sistemas de plantillas para web

Debido a que los documentos HTML son archivos de texto plano, las aplicaciones web pueden ser

desarrolladas de forma directa, escribiendo directamente el código que lo define a través de la salida

estándar 7 (la cual se envía al cliente directamente por el navegador). Esta forma de proceder, aunque

inicialmente más simple y fácil, rápidamente da lugar a aplicaciones difíciles de entender y mantener.

Además, normalmente provoca que cualquier cambio en la capa de presentación deba hacerse en

varios archivos, y da lugar a archivos de código fuente demasiado largos y potenciales inconsistencias.

Los sistemas de plantillas aplican el principio de separación en capas usado en la ingeniería de software

tradicional en las aplicaciones web. De esta forma, la capa de presentación es definida a partir de

archivos independientes que contienen código HTML (o de otro tipo, como CSS o Javascript) y

referencias o etiquetas especiales que son remplazadas por valores reales para generar la respuesta a

enviar al cliente. Esto proporciona una serie de ventajas importantes:

Facilita la separación de responsabilidades, encapsulando en las plantillas los detalles relativos

a la presentación.

4 A día de hoy existen más de 200 extensiones documentadas en php.net. 5 Standard PHP Library (librería estándar de PHP) 6 Enero 2013 7 Esto es bastante común en la programación de scripts CGI utilizando lenguajes tradicionales

Page 30: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Memoria del proyecto

30 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Proporciona una forma sencilla de modificar la presentación, al estar definida en un conjunto

de archivos conocido e independiente.

Establece un principio de mínimo privilegio a nivel software, evitando que la capa de

presentación acceda a funciones de modificación de datos o de lógica de negocio.

Permite definir la interfaz de usuario utilizando una sintaxis independiente y, a menudo, más

sencilla que la del resto de la aplicación.

Por otra parte, al utilizar plantillas se incluye una capa adicional en el proceso necesario para generar

las páginas web, con la correspondiente sobrecarga asociada y necesidad de gestión de archivos

adicionales. Para solucionar el primer problema, los sistemas de plantillas modernos permiten

precompilar plantillas (convirtiéndolas en clases PHP o código Java nativo, por ejemplo), o utilizar

sistemas de caché en memoria que evitan el coste asociado a leer las plantillas de disco en cada

solicitud.

Página Web

Plantilla

%header%Welcome…

· …..· …..

[_] [_]

Datos

SistemaDe

Plantillas

Figura 2.7: Esquema de funcionamiento de un sistema de plantillas web

Page 31: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Memoria del proyecto | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 31

2.3 Objeto

La aplicación desarrollada surge para suplir las carencias de otra aplicación que el congreso venía

utilizando en ediciones anteriores. Se trata de un gestor integrado que permitirá el registro de los

asistentes al congreso, el envío por parte de éstos de los artículos a presentar y sus justificantes de

pago, y la gestión integral de todas las fases de la conferencia por parte de los organizadores de la

misma, incluyendo el ciclo de revisión de artículos, las distintas sesiones que tendrán lugar o la

generación de documentación y listados diversos.

2.4 Antecedentes

La aplicación desarrollada parte de otra utilizada en ediciones anteriores, a la cual viene a sustituir, y

debe cubrir la funcionalidad proporcionada por ella, además de solventar las carencias detectadas en

la misma tras su uso en ediciones anteriores. Para ello se deben realizar los cambios necesarios para

garantizar la modularidad de la aplicación resultante, asegurándonos de que la ampliación posterior

de la misma resulte más sencilla que al inicio del proyecto.

Durante el desarrollo deben de existir los mecanismos necesarios para garantizar el funcionamiento

de las características originales, a la vez que se garantiza que las nuevas lo siguen haciendo de la

manera esperada tras cada iteración. Para este propósito se utilizarán tests unitarios automáticos.

2.5 Normas y referencias

A continuación se incluye un estudio breve sobre normativas aplicables al proyecto, métodos y

herramientas, mecanismos de control de calidad y una introducción a los marcos de trabajo

(frameworks) y librerías utilizadas.

Como complemento a este apartado se incluye, al final del documento a modo de apéndice, una lista

completa de referencias bibliográficas.

2.5.1 Disposiciones legales y normas aplicadas

En este punto se incluyen los aspectos más importantes de las leyes y normativas que son aplicables

al presente proyecto.

Ley Orgánica de Protección de Datos

La aplicación desarrollada está alojada en un servidor en España y es propiedad de una empresa (la

organización del congreso) constituida legalmente en España. Por tanto, debido a que en el proceso

de registro se recogen datos personales de los asistentes, la aplicación está sujeta a la Ley Orgánica de

Protección de Datos (LOPD). Esta ley dicta que, por guardar datos personales, estamos obligados a:

Informar a los usuarios de qué datos personales se recogen.

Page 32: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Memoria del proyecto

32 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Informar del propósito con el que se recogen dichos datos.

Proporcionar métodos para consultar, rectificar y dar de baja los datos. Para ello debe

proporcionarse una dirección postal.

Implementar las medidas de seguridad oportunas para proteger los datos, incluyendo solicitar

una contraseña para acceder a ellos.

Para cumplir la ley, durante el proceso de registro se informa al usuario de que todos los datos

proporcionados durante el mismo están sujetos a la LOPD, que el propósito es la gestión del congreso

y se proporciona una dirección postal para efectuar el derecho de rectificación y cancelación. El cuarto

punto se cumple en cuanto que para acceder al sistema, tanto si es como ponente como si es como

administrador, se requiere un nombre de usuario y una contraseña, y el acceso remoto al servidor para

labores administrativas se realiza utilizando conexiones cifradas a través de SSH que también requieren

proporcionar usuario y contraseña. Todos los accesos al sistema quedan debidamente registrados en

la base de datos y/o en archivos de texto.

Legislación sobre cookies

En este apartado se incluye un estudio breve sobre la legislación aplicable a este proyecto sobre el uso

de cookies en sitios web basado en la Guía sobre el uso de cookies [AEPD14] publicada por la Agencia

Española de Protección de Datos (AEPD). Se ha optado por utilizar dicha guía por ser de relevancia la

interpretación hecha por esta institución de la Ley que regula este aspecto. Cabe destacar que, aun

así, la guía de la AEPD es solo una interpretación de la norma y no su texto completo, el cual prevalece

en cualquier caso sobre ella.

La legislación en materia de publicidad y comercio electrónico se rige por la Ley de Servicios de la

Sociedad de Información (LSSI), la cual incluye una normativa sobre el tratamiento de cookies en sitios

web vigente desde el 1 de abril de 2012. En términos generales, esta normativa obliga a los propietarios

de los sitios a informar de forma clara y obtener el consentimiento del usuario antes de utilizar ciertos

tipos de cookies.

Esta ley afecta a todos los profesionales o empresas que presten servicios en España, ya sea por

disponer de domicilio o establecimiento permanente en España, o porque sus servicios estén

orientados a este mercado. La ley distingue cuatro tipos de cookies:

Cookies técnicas: Son aquellas que resultan imprescindibles para proporcionar el servicio de

la aplicación o página web como, por ejemplo, las que almacenan los datos de un pedido

online.

Cookies de personalización: Utilizadas para cambiar las funciones o contenidos del sitio en

función de los datos del navegador, por ejemplo, para cambiar el idioma utilizado en función

de las preferencias del usuario.

Cookies de análisis: Son aquellas utilizadas únicamente con propósitos estadísticos.

Page 33: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Memoria del proyecto | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 33

Cookies publicitarias: En este grupo se incluyen aquellas cookies cuyo objetivo es almacenar

información sobre las páginas visitadas o el comportamiento del usuario, utilizadas en servicios

como la red publicitaria de Google.

En nuestro caso, la aplicación envía una única cookie, utilizada para mantener el identificador de sesión

del usuario. Según la terminología de la AEPD, atendiendo a la entidad emisora es una cookie propia;

atendiendo a su plazo es una cookie de sesión; y atendiendo a su finalidad es una cookie técnica. Es

utilizada para prestar “un servicio solicitado expresamente por el usuario” y está clasificada como

cookie “de autentificación o identificación del usuario (sesión)”. Este tipo de cookies están

explícitamente excluidas del ámbito de aplicación del artículo 22.2 de la LSI, no siendo necesario ni

informar ni solicitar consentimiento para su uso.

Por otra parte, para que una cookie no esté sujeta al deber de consentimiento informado, es requisito

necesario que su caducidad esté relacionada con su finalidad. Las cookies de sesión de PHP son

borradas tras un intervalo de tiempo configurable en el propio servidor. Además, las cookies no tienen

otra finalidad que la “autentificación o identificación del usuario”, luego no son clasificables por la Ley

de Servicios de Internet dentro del ámbito de aplicación de otros preceptos.

También es importante mencionar que las sesiones identificadas por las cookies del sitio normalmente

estarán asociadas a cuentas de usuarios de los que se guardan datos personales en el servidor. Estos

datos, debido a su naturaleza, están cubiertos por la Ley Orgánica de Protección de Datos.

2.5.2 Métodos, herramientas, modelos, métricas y

prototipos

En este apartado se incluye una introducción, sin carácter exhaustivo ni exclusivo, a diferentes

programas y herramientas software y su uso en el desarrollo de este proyecto.

Mantis

Mantis Bug Tracker es una aplicación de código abierto, basada en una interfaz web, para el

seguimiento de incidencias y errores (bugs). Mantis ha sido utilizado durante todo el desarrollo de la

aplicación para gestionar la lista de características a implementar y los fallos encontrados, permitiendo

llevar un registro de los mismos, incluyendo su estado y prioridad.

Mantis permite agrupar las incidencias en hitos (milestones). En el caso de la aplicación desarrollada,

esta característica ha sido utilizada para agruparlos en iteraciones (sprints), de forma que se ha

realizado una implementación gradual, teniendo siempre una versión funcional disponible.

Otra característica que se ha tenido en cuenta a la hora de utilizar Mantis (y, en general, un sistema de

seguimiento de inicidencias) es que la información de gestión guardada en él puede utilizarse

posteriormente para documentar fielmente las fases del desarrollo del proyecto.

Page 34: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Memoria del proyecto

34 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Ant

Apache Ant es una herramienta mutiplataforma similar a GNU make utilizada para automatizar tareas

mecánicas y repetitivas. Aunque normalmente es utilizada en lenguajes compilados para automatizar

el proceso de generación de ficheros ejecutables, en nuestro caso ha sido utilizada para automatizar

procesos auxiliares durante el desarrollo:

Generación de informes de código antiguo en forma de archivos de texto que contienen

listados de los usos de funciones obsoletas, enlaces directos a scripts .php (en lugar de

llamadas a controladores) o líneas de código con marcadores sobre algoritmos incompletos o

con errores potenciales.

Generación automática de documentación e informes de análisis estático del código (por

ejemplo, cantidad de líneas de código, funciones y clases, o complejidad ciclomática media) a

partir de la estructura y los comentarios PHPDoc del propio código.

Ejecución de procesos utilizados como mecanismo de control de calidad del proyecto, como

pruebas unitarias o análisis del código fuente en busca de errores sintácticos.

Automatización de tareas de gestión necesarias, como la eliminación de archivos temporales

creados durante la generación de los informes de cobertura de las pruebas unitarias o la

eliminación tras cada actualización de archivos problemáticos distribuidos con algunas de las

librerías utilizadas.

Copia de los archivos con las fuentes TrueType utilizadas desde una copia auxiliar al directorio

de las librerías tras cada actualización de éstas, pues las fuentes no se distribuyen junto a la

librería utilizada para generar los archivos PDF.

A diferencia de make, Ant utiliza una sintaxis XML para describir las tareas (targets) a ejecutar, lo cual

es más apropiado para este proyecto (ya que, al tratarse de una aplicación web, los desarrolladores

están más familiarizados con su sintaxis general). Otras de las funcionalidades que han resultado de

ayuda son la posibilidad de, utilizando declaraciones sencillas, ejecutar tareas en paralelo (lo cual

reduce a menos de la mitad el tiempo necesario para generar los informes en formato texto y la

búsqueda automática de errores sintácticos), separar las definiciones de las tareas en distintos

archivos XML, o realizar operaciones de creación, copia y eliminación de archivos definiéndolas

directamente como tags XML en lugar de necesitar recurrir a shell scripts.

grep

grep8 es una utilidad de línea de comandos utilizada para buscar líneas en archivos de texto que

coincidan con una expresión regular dada. Fue desarrollado originalmente para UNIX, y actualmente

existen versiones disponibles para los sistemas operativos más utilizados.

grep permite buscar en un archivo concreto, en conjuntos de archivos o en la entrada estándar. Estas

características han sido utilizadas para automatizar búsquedas sobre el código fuente y generar

8 El uso de minúsculas en el nombre es intencionado, y sigue el convenio usado por el manual del proyecto GNU.

Page 35: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Memoria del proyecto | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 35

informes (por ejemplo, sobre el uso de funciones obsoletas). Además, también ha sido utilizado

durante el desarrollo para realizar búsquedas simples sobre el código fuente en lugar del buscador

integrado en el entorno de desarrollo (como, por ejemplo, la búsqueda de archivos que utilizan una

determinada función a partir de su nombre). También ha sido utilizado en combinación con otras

utilidades, como wc (word count), para realizar estimaciones sobre el esfuerzo necesario y el progreso

de las refactorizaciones realizadas.

Además de su uso para realizar búsquedas en el código fuente, grep también ha sido utilizado para

realizar búsquedas en los archivos de registro (logs) del servidor y de la aplicación, facilitando el análisis

de su uso y la solución de problemas.

PHPLoc

PHPLoc es una utilidad para el análisis estático de código PHP utilizada para generar estadísticas

generales de la complejidad de las aplicaciones desarrolladas. Algunas de las métricas proporcionadas

son:

Número de archivos, directorios y líneas de código, clasificando estas últimas en comentarios

y código real.

Complejidad ciclomática general de la aplicación.

Número de accesos a variables globales y número de atributos y métodos estáticos y de

objetos declarados.

Estructura general de la aplicación, en número de espacios de nombres, interfaces, rasgos

(traits), clases, métodos, funciones y constantes.

Las métricas proporcionadas han sido tenidas en cuenta para determinar la bondad de la aplicación

desarrollada, midiendo, por ejemplo, la cantidad de estado global presente en la aplicación (en forma

de accesos a variables globales y atributos estáticos).

Como el resto de informes de desarrollo, las métricas proporcionadas por PHPLoc han sido generadas

rutinariamente, como parte del proceso general de desarrollo, de manera pseudoautomática a través

de scripts Ant.

PHPUnit

PHPUnit es una aplicación similar a JUnit para la automatización de las pruebas software a realizar

por medio de tests unitarios. Entre las ventajas de este tipo de pruebas están la posibilidad de

automatizarlas (utilizando el mismo lenguaje de programación usado en el resto del proyecto) y la

generación de informes de pruebas fallidas y de la cantidad de código cubierto por ellas.

En este proyecto, PHPUnit se incluye como una librería más dentro del directorio de Composer,

facilitando su gestión y actualización, y eliminando la necesidad de instalarlo globalmente en el sistema

utilizado durante el desarrollo.

Page 36: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Memoria del proyecto

36 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

NetBeans

NetBeans es un entorno integrado de desarrollo (IDE) open source para aplicaciones escritas en varios

lenguajes, incluyendo Java, C++, PHP y HTML5. El IDE en sí está programado en Java y puede ser

ejecutando en cualquier sistema de escritorio para el cual exista una implementación (libre o

comercial) de la Máquina Virtual Java. NetBeans posee un amplio soporte de tecnologías utilizadas

para el desarrollo general de aplicaciones y, en particular, para el desarrollo de aplicaciones web,

además de características adicionales que facilitan esta labor.

Entre las características interesantes que han sido tenidas en cuenta para elegir este IDE podemos

citar:

- Soporte para el desarrollo de aplicaciones utilizando PHP 5, incluyendo el uso de namespaces,

traits e interfaces (si bien el soporte de estas nuevas características del lenguaje ha sido parcial

en las versiones del IDE disponibles al inicio del proyecto).

- Posibilidad de ejecutar aplicaciones PHP directamente desde el IDE, utilizando el servidor

web integrado en las últimas versiones del intérprete de PHP y mostrando la salida de

depuración detallada generada por la aplicación en tiempo real.

- Autocompletado de código PHP, HTML5, Javascript, CSS3 y, hasta cierto punto, de lenguajes

de shell scripting, facilitado el desarrollo de la aplicación y de los scripts de soporte.

- Acceso integrado a la consola bash de Linux, incluyendo el uso de varias sesiones simultáneas

a través de pestañas.

- Posibilidad de editar simultáneamente múltiples archivos en vistas divididas, incluyendo la

edición de diferentes secciones del mismo archivo desde distintas vistas.

- Soporte básico del lenguaje de plantillas Twig, utilizado en la capa de presentación de la

aplicación desarrollada.

- Soporte para la programación en Javascript con jQuery, utilizado para las partes que

requieren la actualización dinámica de la interfaz de usuario de la aplicación y las solicitudes

HTTP asíncronas realizadas mediante tecnologías AJAX.

- Análisis estático del código, proporcionando consejos en tiempo real para la mejora del código

desarrollado y su estructura, incluyendo características para la refactorización automática del

código.

- Soporte integrado para el desarrollo sobre repositorios de código Git.

- Posibilidad de depurar código PHP instrucción a instrucción utilizando la extensión XDebug.

- Entiende los comentarios PHPDoc de clases, métodos y variables incluidos en el código, lo cual

es especialmente importante en un lenguaje de tipado débil como PHP.

Page 37: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Memoria del proyecto | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 37

VirtualBox

VirtualBox es un software de virtualización open source mantenido por Oracle que permite la ejecución

de instancias de Windows y Linux, entre otros, sobre sistemas host Linux, Windows, Mac OS X, OS/2 y

Solaris. En este proyecto, VirtualBox ha sido usado para ejecutar servidores Linux (Debian) para la base

de datos del sitio, el repositorio de código y el gestor de incidencias durante el desarrollo, y para

ejecutar un servidor completo (servidor web Apache y servidor de base de datos MySQL) a modo de

prototipo durante la fase de pruebas y la elaboración de la documentación. Además, el presente

documento y los diagramas incluidos en el mismo han sido elaborados utilizando una máquina virtual

que ejecuta Windows Server 2012 R2 y el paquete ofimático Office 2013, ambos adquiridos con

licencias de estudiante proporcionadas por la Universidad de Oviedo.

Se ha optado por Virtualbox en lugar de otras alternativas (como Xen o VMWare) debido a su carácter

gratuito y open source (siguiendo la filosofía del resto de componentes usados durante el desarrollo

del proyecto), su relativa facilidad de instalación y administración como una aplicación estándar del

sistema, la portabilidad ofrecida (al poder ejecutarse en prácticamente cualquier equipo moderno,

sumado a la posibilidad de copiar y realizar backups de sistemas completos a partir de archivos de

imagen del sistema en formato abierto OVF), y el soporte relativamente completo ofrecido por

Windows y las principales distribuciones Linux para el mismo. Además, su uso está ampliamente

extendido tanto en ámbitos académicos como profesionales, y dispone de soporte tanto por parte de

Oracle como por la comunidad de desarrollo asociada a las principales distribuciones y al propio kernel

de Linux, lo cual minimiza la posibilidad de encontrar errores durante su uso que provocarían

complicaciones adicionales en el proyecto.

Como contrapartida, el uso de sistemas de virtualización de cualquier tipo lleva implícita una pérdida

de rendimiento respecto al uso de sistemas operativos sobre el hardware desnudo. Sin embargo, el

equipo utilizado para el desarrollo soporta la virtualización por hardware mediante las extensiones

Intel VT-x y dispone de dos procesadores Xeon de cuatro núcleos, 32 GB de memoria principal y discos

SSD a modo de almacenamiento auxiliar (usado para las imágenes de los sistemas operativos), lo cual

alivia la carga adicional impuesta por el uso de sistemas virtualizados.

2.5.3 Mecanismos de control de calidad aplicados

durante la redacción del proyecto

Durante parte del desarrollo se han desplegado varias versiones parciales de la aplicación, corrigiendo

fallos y realizando ampliaciones sobre un sistema en producción. Para ello se ha tenido en cuenta los

datos generados por las versiones previas, proporcionando los mecanismos necesarios para la

migración de éstos a los nuevos prototipos. Además, se ha dispuesto de mecanismos para cancelar las

actualizaciones en curso y restaurar las versiones objeto de remplazo en caso de que el nuevo

despliegue presentase errores o la migración no se pudiese llevar a cabo con las garantías suficientes.

Para asegurarnos de la calidad de las diferentes versiones desplegadas y, en general, de la aplicación

desarrollada y facilitar la localización de errores y, en su caso, cuándo y dónde se han introducido se

han utilizado cuatro herramientas:

Page 38: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Memoria del proyecto

38 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

PHPUnit

Utilizando PHPUnit se han definido tests unitarios para partes críticas de la aplicación, asegurándonos

así de que los cambios introducidos en cada versión no introducen errores en partes desarrolladas

previamente. Además, se han utilizado las funcionalidades disponibles para generar informes de

cobertura y pruebas fallidas, teniendo así estadísticas de las partes de la aplicación testadas.

Log4php

Log4php ha sido utilizado como sistema de logging para mostrar mensajes detallados de depuración.

Una de las características clave utilizada es la posibilidad de definir su configuración a través de

archivos XML, de forma que, sin alterar el código fuente, permite definir configuraciones separadas

para el desarrollo (mostrando los mensajes en la consola del intérprete de PHP), para el entorno de

producción (guardando los mensajes en archivos de texto para su análisis posterior cuando ha sido

necesario) y para la ejecución de las baterías de pruebas (ocultando por defecto todos los mensajes de

depuración).

Git

Como sistema de control de versiones del código fuente se ha utilizado Git, de forma que siempre se

ha dispuesto de un histórico de los cambios realizados y la posibilidad de deshacer los cambios que

han introducido problemas. Otra ventaja adicional proporcionada por Git ha sido la independencia del

entorno de desarrollo del repositorio donde se ha almacenado el código, posibilitando (por ejemplo)

la reinstalación del sistema utilizado para la programación (tras la cual solo ha sido necesario volver a

descargar el código fuente del proyecto desde el repositorio en lugar de tener que recurrir a copias de

seguridad realizadas manualmente) y la simplificación del proceso de realización de copias de

seguridad en sistemas externos (utilizando SSH para copiar todo el repositorio, incluyendo el histórico

de cambios, a un disco en la nube de forma periódica).

Duplicity

Duplicity es una utilidad de línea de comandos para la realización de copias de seguridad a través de

la red en sistemas externos. Durante el proyecto ha sido utilizado para realizar copias de seguridad

(tanto incrementales como completas) del repositorio Git y almacenarlas en un sistema remoto e

independiente proporcionado por Livedrive Internet en el Reino Unido. Estas copias de seguridad son

encriptadas utilizando AES-256 y enviadas a través de conexiones SSH. Además, este servidor también

ha sido utilizado para guardar los borradores y archivos asociados de la memoria y documentación del

proyecto.

Page 39: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Memoria del proyecto | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 39

2.5.4 Otras referencias

A continuación se incluye una introducción a algunos frameworks de desarrollo web utilizados en la

aplicación.

Doctrine

El Proyecto Doctrine es un conjunto de librerías open source utilizadas para proporcionar

servicios de persistencia de objetos en PHP a través de Mapeo Objeto-Relacional (Object-

Relational Mapping, ORM) y una Capa de Abstracción de Base de Datos (Database Abstraction

Layer).

Entre las características principales de Doctrine está la posibilidad de acceder a la información

almacenada en la base de datos como entidades (utilizando conceptos clásicos de Entidad-Relación),

la independencia (hasta cierto punto) del gestor de bases de datos utilizado, la comprobación en

tiempo de ejecución de la integridad de la información (por ejemplo, entidades relacionadas y tipos de

datos) y la optimización automática de los accesos a la base de datos.

Bootstrap

Bootstrap es un framework libre para el desarrollo de interfaces web HTML5,

proporcionando un conjunto de clases CSS e iconos optimizados y probados en

diferentes navegadores y dispositivos. Además, está diseñado específicamente para ser

multidispositivo, simplificando el desarrollo simultáneo para distintos navegadores,

dispositivos (por ejemplo, PCs, teléfonos móviles y tablets) y tamaños de pantalla.

Composer

Composer es un gestor de dependencias para librerías escritas en PHP. A diferencia de

los gestores de dependencias tradicionales (como, por ejemplo, Apt o PEAR), Composer

gestiona dependencias por proyecto, de forma que las librerías utilizadas son

mantenidas como parte del código fuente de éste (y, en nuestro caso, son almacenadas

junto al resto del proyecto en el repositorio Git).

Entre las ventajas de utilizar un gestor de dependencias están la independencia de éstas (y de sus

mecanismos de carga) del resto de la aplicación, la resolución automática, descarga e instalación de

las librerías utilizadas y de las librerías de las cuales dependen éstas, y la posibilidad de actualizar de

forma automática todas las librerías utilizadas (en lugar de tener que actualizarlas una a una).

Page 40: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Memoria del proyecto

40 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

2.6 Alcance

El sistema desarrollado viene a remplazar una aplicación existente, mejorando su usabilidad y

haciendo más sencillo su posterior mantenimiento. El nuevo sistema se ejecuta sobre un entorno Linux

y ha sido desarrollado utilizando exclusivamente herramientas, componentes y librerías de libre

distribución.

Para ello, se ha reescrito y ampliado la aplicación existente para que haga uso de las nuevas

características disponibles en las últimas versiones de PHP, se ha reestructurado la misma en módulos

bien definidos y se ha simplificado la gestión de las dependencias externas, realizando una separación

explícita entre éstas y la aplicación propiamente dicha, obteniendo como resultado una estructura más

clara del sistema y una disminución de los requisitos computacionales necesarios para la misma.

Además se ha dotado al sistema de una nueva interfaz más moderna tanto en la parte pública como

en la administrativa, utilizando los últimos avances disponibles en tecnologías web, como AJAX y CSS3,

con el objetivo de mejorar la experiencia del usuario y minimizar los tiempos de respuesta.

También se han implementado nuevas características demandadas por la organización del congreso,

como la gestión de las salas disponibles durante la conferencia y excursiones, la generación de

calendarios digitales o la posibilidad de configurar, verificar el funcionamiento y depurar en tiempo

real el sistema de envío de notificaciones por correo electrónico.

2.7 Hipótesis y restricciones

La organización de la conferencia ha establecido que la aplicación a desarrollar debe de ejecutarse

sobre un sistema Linux y no debe incluir dependencias a software que no sea de libre distribución.

Además, las herramientas necesarias para su posterior mantenimiento también deben estar

disponibles bajo licencias open source.

Es necesario disponer de una implementación (al menos parcial) del software a desarrollar en marzo

de 2014 con objeto de poder utilizarlo para gestionar el registro de los primeros asistentes a la

conferencia meses antes de la celebración del congreso y poder así solucionar los posibles errores que

surjan. Para ello, deberán de proporcionarse los mecanismos necesarios para la actualización de la

aplicación estando ésta ya operativa sin pérdida de datos. Además, la aplicación debe ejecutarse sobre

una máquina dentro de la red de la Escuela Politécnica de Ingeniería de la Universidad de Oviedo.

Page 41: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Planificación y presupuesto | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 41

3 PLANIFICACIÓN Y PRESUPUESTO

3.1 Planificación temporal

Debido a la necesidad de disponer de una versión funcional de la aplicación en un corto espacio de

tiempo, el desconocimiento inicial del funcionamiento del congreso por parte del desarrollador y la

poca disponibilidad de tiempo para su desarrollo durante los meses iniciales, el proyecto ha sido

desarrollado utilizando un proceso iterativo similar al modelo de desarrollo ágil Scrum. Las principales

características de esta forma de trabajo son:

Adoptar una estrategia de desarrollo incremental, en lugar de la planificación y ejecución

completa del producto.

Basar la calidad del resultado más en el conocimiento tácito de las personas en equipos

autoorganizados, que en la calidad de los procesos empleados.

Solapamiento de las diferentes fases del desarrollo, en lugar de realizar una tras otra en un

ciclo secuencial o de cascada.

Las pruebas de la aplicación se han distribuido entre las realizadas sobre la aplicación desplegada en

un sistema en producción con usuarios reales, las realizadas como parte del ciclo normal del desarrollo

y las realizadas en la última etapa del proyecto por medio de tests unitarios.

Scrum divide el proceso de desarrollo en versiones parciales potencialmente entregables (funcionales),

realizadas en plazos o iteraciones denominadas sprints. Estos sprints, a su vez, están agrupados en

diferentes fases en función de los aspectos o funcionalidades de la aplicación tratadas en ellos. Las

pruebas de software se realizan durante todo el ciclo de desarrollo, si bien en nuestro caso, además,

se ha dedicado una iteración adicional al análisis de la cobertura de código. La documentación del

proyecto propiamente dicha se inició durante el decimonoveno sprint.

A continuación se incluye la lista de sprints en los que se ha dividido el desarrollo, agrupados e

incluyendo sus fechas de inicio y fin, junto a una breve lista de las tareas realizadas en cada uno, para

posteriormente mostrar gráficamente la planificación temporal del proyecto mediante un diagrama

de Gantt.

Page 42: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Planificación y presupuesto

42 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Fase 1: Evaluación inicial de la aplicación heredada 2013-10-04 – 2013-10-27

Sprint 1 (2013-10-04 – 2013-10-24)

- Estudio de alternativas: Disponibilidad de versiones de PHP en pirweb9, patrones

de diseño aplicables, y herramientas y librerías útiles. - Modificaciones en la aplicación original para poder ser ejecutada sobre PHP5. - Refactorización básica siguiendo el patrón MVC.

Sprint 2 (2013-10-25 – 2013-10-27)

- Reorganización inicial del código original del panel de administración en

controladores.

Fase 2: Adaptación de la aplicación a MVC 2013-10-28 – 2013-11-18

Sprint 3 (2013-10-28 – 2013-11-02)

- Mayor separación MVC en script principal, login y módulo de gestión de usuarios.

Sprint 4 (2013-11-03 – 2013-11-18)

- Mayor separación MVC en las páginas de la web pública.

Fase 3: Adopción de buenas prácticas de IS 10 2013-11-18 – 2013-12-12

Sprint 5 (2013-11-18 – 2013-11-20)

- Permitir que el directorio de plantillas sea configurable.

Sprint 6 (2013-11-20 – 2013-11-29)

- Remplazar mysql_query() y wrappers MySQL por Doctrine.

Sprint 7 (2013-11-30 – 2013-12-08)

- Convertir las hojas de estilo CSS en plantillas.

- Completar la separación de las páginas de usuario en MVC jerárquico. - Generar los archivos PDF en el directorio temporal del sistema.

Sprint 8 (2013-12-09 – 2013-12-12)

- Cargar el texto de los correos electrónicos generados desde plantillas. - Mover el código para generar los archivos PDF a controladores.

Fase 4: Gestión automática de código y dependencias 2013-12-13 – 2014-01-06

Sprint 9 (2013-12-13 – 2013-12-13)

- Simplificar el formato de los datos usados para la autocarga de clases. - Mostrar el usuario utilizado para hacer login en las páginas de administración.

Sprint 10 (2013-12-14 – 2014-01-06)

- Cargar el sistema de plantillas Twig a través de Composer.

- Usar plantillas para generar los documentos PDF.

- Unificar la generación de documentación PDF del panel de administración en MVC. - Eliminar comprobaciones de permisos redundantes.

Fase 5: Mejoras visuales en las páginas de gestión 2014-01-07 – 2014-01-15

Sprint 11 (2014-01-07 – 2014-01-15)

- Reescribir las vistas del panel de administración utilizando Bootstrap. - Cargar las librerías phpExcel y mPDF utilizando Composer.

9 pirweb.edv.uniovi.es es el nombre del servidor utilizado para hospedar la aplicación. 10 IS hace referencia a las siglas de Ingeniería de Software

Page 43: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Planificación y presupuesto | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 43

Fase 6: Mejoras de rendimiento 2014-01-16 – 2014-02-06

Sprint 12 (2014-01-16 – 2014-02-06)

- Servir cada página de administración desde una URL independiente (HMVC).

- Modificar form actions para no enviar parámetros por GET.

Fase 7: Simplificación y reorganización 2014-02-07 – 2014-02-21

Sprint 13 (2014-02-07 – 2014-02-10)

- Unificar modelos.

- Simplificar espacios de nombres.

Sprint 14 (2014-02-11 – 2014-02-17)

- Instanciar los modelos a partir de sus definiciones de interfaz. - Separar la configuración general y la información personal de la configuración e

información de facturación en la base de datos.

Sprint 15 (2014-02-18 – 2014-02-21)

- Mover la configuración estática a un archivo .ini. - Mover los archivos usados para generar correos electrónicos y PDFs a un directorio

privado.

- Registrar los mensajes de depuración utilizando log4php.

Fase 8: Despliegue de primer prototipo público 2014-02-22 – 2014-04-07

Sprint 16 (2014-02-22 – 2014-03-14)

- Parametrizar las URLs usadas desde las plantillas HTML. - Utilizar Bootstrap en las páginas de editores.

- Permitir que los parámetros de conexión a la BBDD sean configurables.

Sprint 17 (2014-03-15 – 2014-03-27)

- Migración de los datos de la web original desde pirweb. - Permitir modificar la configuración de envío de correo desde la interfaz web.

- Parametrizar el ISBN y hacerlo configurable desde la interfaz web. - Permitir que el plazo de envío pueda abrirse y cerrarse desde la interfaz web. - Utilizar Bootstrap en la web pública.

Sprint 18 (2014-03-28 – 2014-04-07)

- Corrección de errores detectados en prototipo.

- Permitir registrar un ISSN configurable. - Añadir funcionalidades de instrumentación y recolección de estadísticas.

Fase 9: Publicación de calendarios y funciones AJAX 2014-04-08 – 2014-05-06

Sprint 19 (2014-04-08 – 2014-05-06)

- Gestión de fechas y salas de exposición de los posters.

- Editar los títulos y las fechas de conferencias y los títulos de artículos con AJAX.

- Exportar calendarios de conferencias y exposición de posters (iCal). - Resaltar las filas seleccionadas en los listados de las páginas de administración. - Abrir los enlaces a los archivos PDF en pestañas separadas. - Unificar los modelos de justificantes y facturas. - Primer borrador de la documentación.

Sprint 20 (2014-05-07 – 2014-05-07)

- Borrado de salas. - Incluir las fuentes TrueType como parte del proyecto debido a cambios en las

librerías usadas.

Page 44: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Planificación y presupuesto

44 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Fase 10:Corrección de errores 2014-05-08 – 2014-05-31

Sprint 21 (2014-05-08 – 2014-05-15)

- Corregir un error que impedía enviar nuevas versiones de artículos existentes.

- Permitir la ordenación por fecha en la tabla de artículos.

Sprint 22 (2014-05-16 – 2014-05-31)

- Mejoras gráficas y funcionales en la página de estadísticas. - Corregir errores en los archivos Excel de usuarios y artículos.

- Refactorización de clases del espacio de nombres CMMSE a CMMSE\Core. - Mover la gestión de salas a su propio modelo desde el modelo de artículos.

Fase 11: Cambios no planificados 2014-06-01 – 2014-06-10

Sprint 23 (2014-06-01 – 2014-06-10)

- Añadir referencia a la LOPD en la página de registro.

- Borrar la información de facturación de los usuarios cuando son eliminados. - Incluir nuevos tamaños para las etiquetas. - Añadir soporte para gestionar excusiones. - Generar etiquetas para las excursiones.

Pruebas 2014-02-17 – 2014-06-21

- Definición de pruebas unitarias para todos los modelos, entidades, decoradores,

vistas y controladores usados para generar archivos PDF, y clases del núcleo de la aplicación.

- Análisis de cobertura de código de las pruebas unitarias.

Documentación 2014-04-08 – 2015-05-31

Fase 1 (2014-04-08 – 2014-07-25)

- Redacción de borradores iniciales:

o Introducción a las tecnologías usadas. o Análisis (requisitos, casos de uso, escenarios). o Documentación de pruebas unitarias.

Fase 2 (2014-08-07 – 2014-12-13)

- Finalización de la redacción del apartado de análisis: o Estudio de alternativas consideradas. o Disposiciones legales. o Presupuesto.

o Planificación temporal preliminar. - Diseño:

o Diseño de clases y diagramas UML. o Documentación de diseño de funcionalidades dinámicas. o Diseño físico de datos y normalización.

- Manual de instalación.

- Reestructuración completa del documento.

Fase 3 (2015-03-30 – 2015-05-31)

- Manuales de usuario, administrador y editor. - Actualización del apartado de planificación. - Diseño: Particionamiento físico de subsistemas.

- Correcciones en estructura y presentación. - Apéndices.

Page 45: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Planificación y presupuesto | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 45

Figura 3.1: Diagrama de Gantt de la planificación temporal del proyecto

Page 46: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Planificación y presupuesto

46 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Durante las fases finales del desarrollo se han realizado varios despliegues de la aplicación en un

sistema en producción. Esto ha permitido la inscripción de los asistentes antes de tener la aplicación

completamente finalizada, a la vez que ha ayudado a detectar y corregir errores de forma rápida

mientras se realizaba una prueba real de su funcionamiento. A continuación se incluye la lista de los

27 despliegues realizados.

Marzo 2014

1 de Marzo de 2014

8 de Marzo de 2014

21 de Marzo de 2014

25 de Marzo de 2014

26 de Marzo de 2014

28 de Marzo de 2014

31 de Marzo de 2014

Abril 2014

3 de Abril de 2014

10 de Abril de 2014

15 de Abril de 2014

16 de Abril de 2014

21 de Abril de 2014

29 de Abril de 2014

30 de Abril de 2014

Mayo 2014

1 de Mayo de 2014

2 de Mayo de 2014

5 de Mayo de 2014

6 de Mayo de 2014

7 de Mayo de 2014

15 de Mayo de 2014

18 de Mayo de 2014

19 de Mayo de 2014

20 de Mayo de 2014

24 de Mayo de 2014

Junio 2014

5 de Junio de 2014

9 de Junio de 2014

10 de Junio de 2014

Page 47: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Planificación y presupuesto | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 47

3.2 Resumen del presupuesto

ITEM CONCEPTO TOTAL

01 Costes relativos de ingeniería 18.240,00 €

02 Costes relativos a bienes, equipos y servicios informáticos 437,05 €

03 Costes relativos a consumibles 71,04 €

04 Costes relativos a aplicaciones informáticas 0,00 €

SUBTOTAL 18.748,09 €

IVA (21%) 3.937,10 €

TOTAL 22.685,19 €

Page 48: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Planificación y presupuesto

48 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

3.3 Presupuesto

A continuación se incluye una estimación detallada de los costes derivados de la realización de

proyecto.

3.3.1 Costes relativos a ingeniería

Concepto Unidad Coste unitario Unidades Coste total

Analista Horas 16,00 € 160 2.560,00 €

Programador Horas 13,00 € 960 12.480,00 €

Pruebas Horas 15,00 € 160 2.400,00 €

Documentación Horas 8,00 € 100 800,00 €

TOTAL 18.240,00 €

3.3.2 Costes relativos a bienes, equipos y servicios

informáticos

Concepto Coste unitario Unidades Coste total

Dell Precision 690 (2ª mano) 165,19 € 1 165,19 €

16 GB RAM DDR2 ECC 159,46 € 1 159,46 €

Copia de seguridad (LiveDrive) Febrero – Septiembre

14,05 € 8 112,40 €

TOTAL 437,05 €

3.3.3 Costes relativos a consumibles

Concepto Coste unitario Unidades Coste total

Tóner 65,85 € 1 65,85 €

A4 – Papel borradores (x500) 2,65 € 1 2,65 €

A4 – Papel memoria (x480) 2,54 € 1 2,54 €

TOTAL 71,04 €

Page 49: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Planificación y presupuesto | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 49

3.3.4 Costes relativos a aplicaciones informáticas

Concepto Coste unitario Unidades Coste obtenido

NetBeans 0,00 € 1 0,00 €

VirtualBox 0,00 € 1 0,00 €

Ubuntu 14 0,00 € 1 0,00 €

Windows 2008 R2 * 700,00 € 1 0,00 €

Office 2013 * 140,00 € 1 0,00 €

Debian 7 0,00 € 1 0,00 €

Apache 0,00 € 1 0,00 €

PHP 0,00 € 1 0,00 €

MySQL 0,00 € 1 0,00 €

Ant 0,00 € 1 0,00 €

PHPUnit 0,00 € 1 0,00 €

PHPLoc 0,00 € 1 0,00 €

TOTAL 0,00 €

(*) Obtenido con una licencia de estudiante

Page 50: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Especificación del sistema

50 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

4 ESPECIFICACIÓN DEL SISTEMA

4.1 Descripción de la situación actual

En el momento de iniciar el proyecto ya existía una implementación funcional de la aplicación, la cual

había sido utilizada en las ediciones anteriores del congreso. Esta aplicación se desarrolló ad hoc por

los organizadores, y era modificada en cada edición para adaptarla a las necesidades particulares que

iban surgiendo cada año.

Como consecuencia, existía una gran cantidad de código duplicado, no había una separación clara

entre componentes, y su mantenimiento y ampliación resultaban difíciles.

Además, la aplicación existente se ejecutaba sobre un servidor Windows, con los costes de licencias

que ello suponía; y estaba escrita utilizando una versión obsoleta de PHP, lo cual introducía diversos

problemas de compatibilidad y rendimiento, y potenciales problemas de seguridad al carecer ya de

actualizaciones.

4.2 Requisitos iniciales

La organización de la conferencia ha establecido como requisitos mínimos que el software a desarrollar

debe ejecutarse sobre un entorno Linux dentro de la red de la Universidad de Oviedo y que todas las

herramientas utilizadas deben ser de libre distribución. Además, la aplicación a desarrollar debe cubrir,

al menos, la funcionalidad proporcionada por otra aplicación web utilizada en ediciones anteriores

(registro de usuarios, artículos y cobros, la gestión de los mismos y la generación automática de

certificados y facturas).

Page 51: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Especificación del sistema | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 51

4.3 Estudios de alternativas y viabilidad

A continuación se describen de forma breve todas las alternativas de sistemas existentes, lenguajes,

servidores y componentes estudiadas durante la fase de análisis del proyecto.

4.3.1 Sistemas existentes de gestión de conferencias

ConfTool: Conference Management Tool

ConfTool es un sistema basado en una interfaz web para la organización de conferencias científicas,

congresos y seminarios. Ha sido utilizado en más de 1000 eventos y está disponible en más de 10

idiomas [CONFT01].

4.3.1.1.1 Ventajas

Sistema basado en web.

Posee varios roles de usuarios, incluyendo ponentes, administradores, editores y voluntarios.

Permite la realización de pagos mediante PayPal y/o tarjeta de crédito, y definir descuentos.

Permite enviar invitaciones.

Opciones de gestión de horarios

Envío masivo de correos a todos los participantes.

4.3.1.1.2 Inconvenientes

La versión gratuita soporta un máximo de 150 asistentes11.

El proceso de envío solo es configurable en las versiones de pago.

Algunas funcionalidades de facturación solo están disponibles en las versiones de pago.

11 La edición de este año se espera que ronde los 200 asistentes o más.

Page 52: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Especificación del sistema

52 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

4.3.2 Gestores de bases de datos

PostgreSQL

PostgreSQL es un gestor de bases de datos relacionales open source sujeto a una licencia BSD (Berkeley

Software Distribution). Publicado inicialmente en 1995, se trata de un servidor de bases de datos

ampliamente testado con un especial énfasis en la extensibilidad y el soporte de los estándares SQL

(Structured Query Language).

4.3.2.1.1 Ventajas

Implementación fiel del estándar SQL.

Gran cantidad de características: GIS, búsqueda fulltext, varias opciones de replicación.

Completamente transaccional, cumpliendo fielmente las características ACID.

Control de acceso a través de multiversionado de datos, mejorando el rendimiento

concurrente.

4.3.2.1.2 Inconvenientes

Su uso en aplicaciones web está menos extendido que el de otras alternativas.

Configuración complicada.

El motor de almacenamiento utilizado no es configurable.

MySQL

MySQL, al igual que PostgreSQL, es un gestor de bases de datos relacionales open source sujeto a una

licencia GNU. Su primera versión data de 1995, y se trata de un servidor de bases de datos popular

cuyo uso en aplicaciones web está ampliamente extendido.

4.3.2.2.1 Ventajas

Uso extendido en aplicaciones web, con soporte para sus principales características de forma

nativa en la mayoría de lenguajes utilizados con ese propósito. Además, la amplia comunidad

de desarrolladores existente facilita la solución de problemas.

Posibilidad de configurar el motor de almacenamiento utilizado para cada tabla según se

necesite mayor rendimiento o un mejor soporte transaccional.

Soporte para texto Unicode y búsquedas indexadas sobre campos de texto completos.

4.3.2.2.2 Inconvenientes

Actualmente su desarrollo está en manos de Oracle, lo cual ha producido críticas respecto a la

forma en que ésta ha gestionado su mantenimiento y la implementación de nuevas

características.

Page 53: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Especificación del sistema | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 53

No implementa el estándar SQL de forma completa, incluyendo el soporte para claves foráneas

en algunos de sus motores de almacenamiento.

Solo es completamente transaccional cuando sus tablas utilizan el motor de almacenamiento

InnoDB.

Algunas funcionalidades, como el soporte para claves foráneas, dependen del motor de

almacenamiento utilizado.

MariaDB

MariaDB es un sistema de gestión de bases de datos relacionales derivado de MySQL desarrollado por

voluntarios surgido con el propósito de que éstos mantengan el control del desarrollo de una solución

realmente open source tras la adquisición de MySQL por parte de Oracle. Se trata de un gestor con una

alta compatibilidad con MySQL, permitiendo remplazarlo sin necesidad de realizar cambios en las

librerías y programas existentes, a la vez que proporciona nuevas características no disponibles en sus

competidores.

4.3.2.3.1 Ventajas

Compatible con librerías y programas utilizados para conectar con servidores MySQL sin

necesidad de realizar cambios en ellos.

Soporte para tablas MyISAM (importadas desde MySQL) de forma segura y transaccional,

incluyendo archivos de recuperación de transacciones (log).

Mayor número de motores de almacenamiento respecto a MySQL, incluyendo remplazos

compatibles a nivel binario con MyISAM e InnoDB.

Mejor rendimiento que sus competidores en subconsultas y conversiones entre juegos de

caracteres.

Informe del estado de procesos, mostrando el porcentaje completado para operaciones que

modifican la estructura de la base de datos (como la modificación de la definición de tablas y

la creación de índices) o la carga de datos a partir de archivos.

Soporte para columnas virtuales.

4.3.2.3.2 Inconvenientes

Parte de las características nuevas (respecto a MySQL) requieren soporte adicional en las

librerías y/o programas utilizados.

Uso menos extendido que la distribución MySQL tradicional.

Page 54: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Especificación del sistema

54 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

4.3.3 Servidores web

Actualmente12 la mayor parte de los sitios activos (esto es, sitios administrados activamente por

humanos en lugar de ser generados automáticamente para actividades publicitarias) utilizan como

servidor web Apache o, en menor medida, nginx e IIS, representando aproximadamente el 83% de los

sitios web [HTTP04]. A continuación se incluye, para cada uno, una breve introducción, listando sus

principales características.

Apache

El Servidor Web Apache (comúnmente denominado simplemente como Apache) es un servidor web

open soure conocido por haber tenido un papel fundamental en el crecimiento inicial de Internet.

Basado inicialmente en el servidor HTTP de la NSA, su desarrollo se inició en 1995 (momento en el cual

el desarrollo del servidor de la NSA dejó de avanzar) y continúa activamente en la actualidad [APCH01].

Internamente Apache está construido como un conjunto de módulos software que interactúan entre

sí y gestionan las distintas etapas necesarias para procesar cada solicitud de manera colaborativa,

incluyendo la traducción de direcciones, la autentificación, la generación dinámica de contenido o la

gestión de la seguridad.

Como consecuencia de esto, Apache puede ser ejecutado en los sistemas operativos más usados (como

Windows y las principales variantes de UNIX, incluyendo Linux), y es altamente configurable para cubrir

las necesidades particulares de cada aplicación. Entre sus características más notorias están

[APACH01]:

Soporte para hosts virtuales: Esto permite el uso de un único servidor para servir varios

dominios, cada uno con su configuración independiente, sus propios registros de actividad y

sus propios conjuntos de archivos, sirviendo, por tanto, como un contenedor para múltiples

aplicaciones web.

Generación dinámica de contenido: Bien a partir de módulos del servidor, o bien a través de

contenedores de scripts CGI, permite la implementación de aplicaciones que generan los

contenidos a enviar a los usuarios en el momento en que éstos los solicitan.

Compresión transparente de datos: Utilizando gzip o deflate según las preferencias del

navegador, Apache comprime automáticamente las páginas antes de enviarlas al cliente,

ahorrando recursos de red (a costa de aumentar el uso de CPU del servidor).

Reescritura de direcciones URL: Esto permite presentar al cliente una estructura de direcciones

virtual que el servidor mapea de forma automática a los archivos almacenados en el servidor.

Uso como proxy: Uno de los usos típicos de Apache es servir de proxy, bien de forma general

para una red LAN, o bien para diferenciar y asignar las solicitudes a otros servidores en función

del tipo de contenido solicitado, origen u otros parámetros.

Modo de funcionamiento mutihilo y/o multiproceso: Dependiendo del sistema operativo

utilizado y de la configuración del servidor, Apache puede operar utilizando un pool de

12 Junio 2014.

Page 55: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Especificación del sistema | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 55

procesos (en el que cada proceso atiende una solicitud cada vez), un único proceso con varios

hilos (utilizando un hilo para cada solicitud individual) o una combinación de éstos.

Por otra parte, Apache ha sido tradicionalmente considerado como un servidor web lento (en

comparación a sus competidores), debido a su modelo multiproceso (usado por defecto en sus

implementaciones UNIX) y a la sobrecarga impuesta por su construcción estrictamente modular. En

sitios web de alto tráfico ésto es normalmente solventado utilizando servidores web software

alternativos para servir la parte estática de la aplicación (como las imágenes), mientras que Apache es

usado únicamente para generar las partes dinámicas de los mismos (en las cuales la latencia a la hora

de servir los contenidos suele depender más de la propia aplicación que del servidor HTTP utilizado).

nginx

El desarrollo de nginx comenzó en 2008 con el objetivo de proporcionar un servidor web

multiprotocolo con un alto grado de concurrencia, alto rendimiento y un uso de memoria reducido. Al

igual que Apache, se trata de un servidor web open source modular apto para ser usado como servidor

HTTP, proxy o de caché (entre otros) y soporta distintas variantes de UNIX. Sin embargo, su soporte

para Windows se considera experimental.

En general, soporta las mismas funcionalidades de Apache (incluyendo hosts virtuales, compresión de

datos, reescritura de direcciones y su uso como proxy), y es comúnmente utilizado como remplazo de

éste en situaciones en las que se requiere un alto rendimiento o un uso reducido de memoria. Además,

puede ser utilizado como servidor proxy de correo (SMTP o POP3).

Entre sus características principales se pueden citar:

Modelo asíncrono de gestión de solicitudes: En lugar de utilizar un proceso o hilo dedicado a

atender cada solicitud, nginx utiliza un enfoque basado en eventos no bloqueante, en el cual

uno o varios procesos esperan a que el sistema operativo informe de que las distintas tareas

necesarias para atender una solicitud se hayan completado, continuando el procesamiento del

resto. Esto permite realizar la E/S a disco o a red de manera simultánea para todos los clientes,

y evita el uso adicional de memoria asociado a mantener procesos dedicados a ello.

Generación dinámica de contenido: Utilizando FastCGI, nginx puede ser utilizado como

servidor de aplicaciones web que se ejecutan como procesos independientes escritas en

cualquier lenguaje de programación.

Limitación de uso de ancho de banda, evitando que los clientes con mayor capacidad de

descarga saturen el servidor y degraden el servicio ofrecido al resto de usuarios.

Soporte nativo para nuevas tecnologías, como el streaming de FLV y MP4, el protocolo SPDY o

WebSockets.

Por otra parte, tradicionalmente el uso de nginx no ha estado tan extendido como el de sus

alternativas, y su desarrollo comenzó más de una década después de sus principales competidores,

por lo que ni ha sido tan testado ni tiene el mismo nivel de uso que éstos, y es utilizado principalmente

en situaciones en las que es permisible sacrificar la compatibilidad y fiabilidad proporcionada por los

sistemas tradicionales para obtener un gran rendimiento. Por esta razón, habitualmente es empleado

únicamente como servidor de datos estáticos o como proxy.

Page 56: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Especificación del sistema

56 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

IIS

Internet Information Services (IIS) es un conjunto de servicios para Windows, incluyendo un servidor

web, FTP y de correo electrónico, distribuidos de serie como parte de las versiones de servidor del

sistema operativo. A diferencia de las dos alternativas anteriores, no es multiplataforma y solo puede

ejecutarse sobre Windows, su código fuente es cerrado y requiere poseer (y haber pagado) una licencia

de Windows Server. Entre sus características principales destacan:

Administración centralizada de servidor por medio de una interfaz gráfica, integrada en las

herramientas de administración estándar de Windows Server.

Soporte para la generación dinámica de contenido, soportando aplicaciones ASP.NET de forma

nativa y otros lenguajes, como PHP, como scripts CGI.

Soporte para varios mecanismos de autentificación, incluyendo el control de acceso utilizando

credenciales de Windows o por medio de certificados digitales.

En cualquier caso, IIS no ha sido considerado como una alternativa viable para este proyecto debido a

sus costes de licencia, su naturaleza cerrada y la existencia de otras opciones más extendidas como

contenedores de aplicaciones escritas en PHP.

Aspectos más importantes a tener en cuenta

Las dos alternativas reales para este proyecto son Apache y nginx (ya que ISS solo se ejecuta en

Windows Server y tiene costes de licencias asociados). Los factores determinantes a la hora de

decantarnos por uno u otro son:

Fiabilidad respecto a rendimiento: Apache ejecuta los scripts PHP directamente en su espacio

de memoria, mientras que nginx utiliza procesos FastCGI independientes. Esto hace que los

posibles errores se propaguen al servidor en el caso de Apache (al menos en ciertos casos),

mientras que en nginx solo afectan al proceso que ejecuta el script. Además, nginx gestiona

las solicitudes de forma asíncrona mientras que Apache dedica a cada una un proceso hijo

completo. Por otro lado, los procesos FastCGI requieren memoria y tiempo de CPU adicional

debido a la comunicación entre procesos necesaria.

Conocimiento y soporte del servidor: La información disponible para la configuración de PHP

sobre Apache es mayor al ser la arquitectura tradicional. Además, Apache ha sido utilizado en

anteriores ediciones del congreso, y el servidor físico utilizado hospeda otras aplicaciones, por

lo que cambiar el servidor web requeriría mantener dos servidores web en funcionamiento

sobre la misma máquina o realizar un estudio adicional del impacto que tendría en el resto de

aplicaciones el cambio de servidor web.

Page 57: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Especificación del sistema | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 57

4.3.4 Lenguajes de programación

Java EE

Java Platform Enterprise Edition es la distribución de Java de Oracle diseñada para el desarrollo y

despliegue de software empresarial, incluyendo servicios web y de red, siguiendo un diseño basado en

componentes modulares que se ejecutan en un servidor de aplicaciones [WIKI06].

4.3.4.1.1 Ventajas

Lenguaje totalmente orientado a objetos, lo cual facilita la encapsulación y la reutilización de

código.

Tipado estricto de variables, lo cual evita posibles errores debidos a conversiones automáticas

no deseadas y produce un código más claro.

Dispone de un amplio conjunto de librerías, frameworks y utilidades ampliamente testados.

4.3.4.1.2 Inconvenientes

Normalmente es necesario recurrir a frameworks adicionales para desarrollo web, como

Spring, para la gestión de JavaBeans, páginas JSP y el mantenimiento de datos de sesión.

Para la aplicación a desarrollar, utilizar Java imposibilita la reutilización de partes de la

implementación anterior desarrollada sobre PHP.

Los scripts deben ser compilados tras cada cambio realizado durante el desarrollo. En teoría

esto se realiza de forma transparente, en la práctica introduce problemas adicionales.

Para el desarrollo web con Java, a menudo es necesario seguir tediosos procedimientos de

configuración de librerías, conectores JDBC y archivos XML de definición de entorno.

Page 58: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Especificación del sistema

58 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

PHP

PHP es un lenguaje de scripting diseñado principalmente para el desarrollo web, pero utilizado también

como lenguaje de propósito general. Posee una sintaxis sencilla y de fácil aprendizaje, y numerosos

componentes pensados especialmente para la creación de aplicaciones web.

Este lenguaje ya ha sido descrito con más detalle en el apartado de introducción de la memoria. De

manera resumida, y para el propósito de este apartado y de este proyecto, podemos citar las siguientes

ventajas e inconvenientes:

4.3.4.2.1 Ventajas

Se trata de un lenguaje de programación pensado desde sus inicios para la programación web,

por lo que dispone de una gran variedad de funcionalidades para este propósito.

Posee una mejor integración que sus competidores con bases de datos MySQL a través de

drivers nativos.

Compilación transparente de los scripts y páginas en el momento de su ejecución, lo cual

facilita el desarrollo. Además, al contrario de lo que ocurreo con algunos de sus competidores,

la compilación en el momento es el modo de funcionamiento esperado.

Permite el despliegue de aplicaciones web en sistemas de producción como programas

compilados a bytecode a través de extensiones de conversión de código, para los casos en los

que se necesite un mayor rendimiento sin sacrificar la facilidad de desarrollo del lenguaje

[FACEB01].

Dispone de repositorios para la instalación y uso de librerías (y sus dependencias) de forma

automatizada13.

4.3.4.2.2 Inconvenientes

Su soporte para la programación orientada a objetos no es tan maduro como el de otros

lenguajes.

La nomenclatura utilizada en gran parte de de su API es caótica.

Tiene un tipado no estricto de variables y parámetros, lo cual posibilita errores debidos a

conversiones automáticas no deseadas.

El desarrollo de su API no sigue un proceso de definición formal, lo que en ocasiones hace que

parte de su funcionalidad y sintaxis cambie de manera sustancial entre versiones (en ocasiones

sin mantener la retrocompatibilidad).

13 Por ejemplo, https://packagist.org para Composer.

Page 59: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Especificación del sistema | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 59

4.3.5 Frameworks

Symfony2

Symfony es un framework open source para la creación de aplicaciones web empresariales sobre PHP

pensado para disminuir el tiempo de desarrollo a la vez que proporciona un control total sobre la

configuración y un amplio conjunto de componentes tanto propios como de otros proyectos.

4.3.5.1.1 Ventajas

Utiliza un patrón arquitectónico MVC que facilita la separación entre la lógica de la aplicación,

el acceso a datos y la presentación.

Proporciona autogeneración de código para módulos, modelos, base de datos, etc.

Integra Doctrine como ORM para el acceso a la base de datos.

Incluye soporte nativo para la programación de servicios AJAX.

Dispone de herramientas integradas para el desarrollo, incluyendo el soporte para despliegues

en producción.

4.3.5.1.2 Inconvenientes

La curva de aprendizaje del framework es alta.

Requiere portar la aplicación de una vez de forma prácticamente completa.

Zend Framework 2

Zend Framework 2 es un framework open source para la creación de aplicaciones web estructurado

en forma de componentes débilmente acoplados. Es desarrollado por la misma empresa que está

detrás del motor de PHP y proporciona soporte para las características más usadas en el desarrollo de

sitios web.

4.3.5.2.1 Ventajas

Desarrollado y mantenido por Zend, la empresa detrás del motor predeterminado de PHP.

Proporciona componentes para realizar programación utilizando el patrón MVC.

Permite la generación, envío y recepción de correos electrónicos a través de varios protocolos,

incluyendo POP3 e IMAP, de forma sencilla.

Dispone de un sistema de caché flexible, incluyendo soporte para guardar datos en archivos y

en memoria.

4.3.5.2.2 Inconvenientes

Zend Framework es más una librería de componentes que un framework completo.

Requiere portar la aplicación de una vez de forma prácticamente completa.

Page 60: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Especificación del sistema

60 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

4.3.6 Sistemas de plantillas

Twig

Twig es un sistema de plantillas moderno desarrollado por los creadores del framework Symfony.

Desarrollado desde 2009, Twig es un componente integral de Symfony que ha demostrado ser un

sistema de plantillas robusto y seguro. Además es soportado por otros frameworks, incluyendo Zend,

Yii, Codeigniter y Drupal.

4.3.6.1.1 Ventajas

Herencia de plantillas de forma nativa, al ser compiladas como clases PHP.

Escapado automático de caracteres HTML en las variables, además de permitir definir filtros

personalizados.

Soporte para espacios de nombres de plantillas, permitiendo separar, por ejemplo, las

plantillas utilizadas para generar HTML de las utilizadas para generar CSS o correos.

Soporte para internacionalización.

Extensible mediante plugins.

4.3.6.1.2 Inconvenientes

Su sintaxis difiere significativamente de la de PHP (incluyendo la nomenclatura de las variables

y el acceso a datos miembro), lo cual dificulta su aprendizaje.

Smarty

Smarty es uno de los primeros sistemas de plantillas para PHP disponibles. Es famoso por su velocidad,

y durante años fue el estándar de facto para el uso de plantillas en PHP.

4.3.6.2.1 Ventajas

Uno de los sistemas de plantillas más veteranos para PHP.

Su sintaxis es más cercana a PHP que la de otras alternativas (lo cual también puede ser visto

como un inconveniente).

Soporte para varios métodos de escapado de caracteres (por ejemplo, para código HTML y

para código Javascript).

4.3.6.2.2 Inconvenientes

No hay escapado de caracteres por defecto, las plantillas deben declararlo en cada etiqueta.

El tiempo y memoria necesarios para compilar las plantillas es mayor que el de otras

alternativas [SMRT01].

Page 61: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Especificación del sistema | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 61

4.4 Descripción de la solución propuesta

Para el desarrollo de la aplicación se ha optado por realizar un desarrollo a medida utilizando la última

versión de PHP disponible (5.5), realizando una implementación incremental de las nuevas

funcionalidades, y la migración de las existentes a partir del código original. El nuevo sistema utilizará

componentes de código abierto sobre un sistema Linux, eliminando los costes asociados a licencias de

software y simplificando la administración al ser un sistema operativo conocido tanto por los

organizadores del congreso como por los desarrolladores de la aplicación.

La utilización de PHP, al ser un lenguaje de amplio uso pensado, principalmente, para el desarrollo de

aplicaciones web, permite utilizar numerosas características, funcionalidades y librerías de terceros

necesarias para el proyecto de una forma sencilla. Por otra parte, las últimas versiones no requieren

el uso de una arquitectura tradicional basada en Apache, sino que permiten la ejecución de

aplicaciones directamente sobre el intérprete del lenguaje (a través de un servidor web básico incluido

por defecto), facilitando el desarrollo y depuración de la aplicación desde un equipo de escritorio Linux

independiente.

Además, facilita el mantenimiento y despliegue de la aplicación, al ser posible realizarlo de forma

automática (al menos parcialmente) a través de shell scripts, utilizando mecanismos nativos (como los

enlaces simbólicos para apuntar a la versión pública actual y el envío de las nuevas versiones a través

de conexiones seguras SFTP). Por otra parte, la posibilidad de realizar conexiones al servidor por medio

de una interfaz de consola segura permite el uso de herramientas UNIX estándar, como grep, para

diagnosticar problemas y realizar cambios en la configuración mediante una terminal de texto. Todos

estos factores resultan de vital importancia para llevar a cabo la administración de bajo nivel de la

aplicación (incluyendo la modificación de la configuración y el análisis de los ficheros de registro) de

forma rápida.

El uso de la última versión de PHP disponible al iniciar el proyecto permite utilizar características

interesantes de la programación orientada a objetos, como el uso de traits para permitir la herencia

horizontal de comportamientos comunes o el uso generalizado de mecanismos de herencia,

composición, y patrones de diseño. Además, el soporte disponible para la autocarga de código permite

simplificar la gestión y carga bajo demanda de las dependencias y de los componentes de la propia

aplicación.

El uso de los mencionados mecanismos orientados a objetos permiten el desarrollo por partes a partir

del código original de la aplicación, permitiendo intercambiar la implementación de las distintas

funcionalidades según se vayan desarrollando y asegurándonos de tener siempre una versión

funcional. Por la misma razón se ha descartado el uso de frameworks completos, como Symfony o

Zend Framework, pues su uso hubiese impedido tener una versión inicial usable en un tiempo

razonable (ya que debería haberse hecho una reescritura completa del sistema de una vez o haber

renunciado a características esenciales para disponer de una versión utilizable en el tiempo previsto).

Todos los componentes utilizados serán de libre distribución, de forma que no haya costes de

adquisición de los mismos, y serán gestionados, principalmente, a través del gestor de dependencias

Composer. Esto permite poder delegar la gestión de dependencias de las librerías utilizadas y facilita

las actualizaciones posteriores. Además, posibilita la gestión de las librerías por proyecto en lugar de

Page 62: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Especificación del sistema

62 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

requerir la instalación de las mismas de forma global para todas las aplicaciones del sistema, lo cual

podría dar lugar a conflictos.

Además, el uso de productos desarrollados por la comunidad permite disponer de componentes de

uso extendido y ampliamente testados, minimizando la posibilidad de encontrar errores y facilitando

la obtención de documentación y soporte en caso de ser necesario a través de la web.

Para el acceso a la base de datos se utilizará Doctrine para proporcionar una capa de abstracción

orientada a objetos sobre las tablas SQL tradicionales, lo cual permite –al menos teóricamente–

mantener la independencia entre el gestor de bases de datos utilizado y la implementación de la

aplicación. Esto posibilitaría, en caso de ser necesario, la migración a otro gestor de bases de datos, en

principio incompatible, minimizando la necesidad de cambios en el código fuente de la aplicación.

La base de datos (tanto en producción como en desarrollo) estará gestionada por un servidor MySQL.

Se ha elegido MySQL por razones de compatibilidad y simplicidad, al ser el gestor utilizado en las

versiones previas de la aplicación y por otras aplicaciones hospedadas en el mismo servidor. En

cualquier caso, la aplicación podría utilizar cualquier otro servidor compatible si se considerase

interesante. En concreto, futuras versiones podrían utilizar un servidor MariaDB o Percona Server (que

proporcionan características adicionales respecto al estándar) si la organización lo estima oportuno y

viable teniendo en cuenta el resto de aplicaciones hospedadas.

Como sistema de plantillas se ha optado por utilizar Twig frente a otros debido a su uso extendido, la

disponibilidad de características deseables para la aplicación (en concreto, la posibilidad de definir

espacios de nombres para los archivos de plantillas o la extensibilidad general del proceso de

evaluación de su código), y su conocimiento previo por parte de los desarrolladores.

En el sistema en producción se ha optado por utilizar el clásico Apache, ya que es el servidor sobre el

que se han desarrollado el resto de aplicaciones alojadas en el servidor, y proporciona un equilibrio

entre características y rendimiento razonable para la carga de usuarios esperada.

Para la recolección de información de depuración se utilizará log4php (además de otros métodos), el

cual proporciona una alternativa de alto rendimiento para guardar información detallada no

estructurada sobre las actividades realizadas por la aplicación en cada solicitud en ficheros de texto,

permitiendo, además, acceder a esos mismos datos directamente durante el desarrollo a través de la

consola integrada del servidor nativo de PHP.

Por último, otra característica importante del sistema es su modularidad y extensibilidad. La aplicación

está construida como un conjunto de componentes débilmente acoplados y, en algunos casos (como

en las implementaciones de los modelos), intercambiables fácilmente. Esto permite cambiar las

versiones de las librerías, los conjuntos de plantillas e incluso los modelos utilizados realizando

modificaciones triviales en el código y de forma transparente para el resto de la aplicación. Además,

simplifica la implementación de nuevas características (como funcionalidades adicionales o roles de

usuario).

Page 63: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Especificación del sistema | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 63

4.5 Actores del sistema

Durante el análisis de este proyecto se han encontrado cuatro tipos de actores diferentes, que son

descritos a continuación:

Invitado

Usuario de la aplicación no identificado. Un usuario es considerado invitado

mientras no haya proporcionado sus credenciales de acceso, y su interacción con el

sistema está limitada al registro de una nueva cuenta de ponente o la identificación

utilizando una cuenta de ponente, administrador o editor existente.

Ponente

Usuario de la aplicación identificado previamente correspondiente a la cuenta de un

asistente al congreso. Su interacción con el sistema está limitada al envío de

artículos y justificantes de pago, la solicitud de facturas o la modificación de sus

propios datos personales.

Administrador

Usuario de la aplicación identificado previamente perteneciente a la organización

del congreso. Los administradores tienen asignadas únicamente labores de gestión

de la conferencia, incluyendo la modificación y borrado del resto de cuentas de

usuarios, la revisión de pagos y artículos enviados, o la modificación de la

configuración de la aplicación.

Editor

Usuario de la aplicación identificado previamente correspondiente a la cuenta de un

editor de una revista o publicación científica. El acceso al sistema por parte de los

editores se limita al listado y descarga de los artículos enviados.

Page 64: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Especificación del sistema

64 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

4.6 Catálogo de requisitos no funcionales

En esta sección se recopilan aquellos requisitos no relacionados con la funcionalidad esperada de la

aplicación. Se trata de condiciones que debe cumplir el entorno software donde se ejecutará la

aplicación o los equipos de los usuarios finales de la misma, aspectos relativos a la seguridad de los

datos almacenados y otros requisitos que es deseable que la aplicación cumpla para proporcionar una

experiencia de usuario positiva.

Los requisitos aquí listados han sido recopilados basándonos en las prácticas habituales existentes en

el desarrollo web, en la lista de restricciones iniciales del proyecto y en los aspectos mejorables

observados en la aplicación que este proyecto viene a remplazar.

Para mantener una estructura similar a la que se seguirá durante el análisis de requisitos funcionales,

a los requisitos aquí listados se les asignará un nombre y un identificador. Para distinguirlos de los

requisitos funcionales, los identificadores de estos requisitos comienzan por NF.

4.6.1 Requisitos tecnológicos

Código Requisito

Nombre Requisito Descripción del Requisito

NF.1.1 Software del servidor La aplicación debe poder ejecutarse sobre un servidor con sistema operativo Linux que utilice Apache 2 como servidor web y permita la ejecución de aplicaciones PHP.

NF.1.2 Versión de PHP La aplicación debe poder ejecutarse sobre un servidor que cuente con una versión de PHP de la rama 5.x igual o mayor que la 5.5.

NF.1.3 Red UniOvi La aplicación debe poder ejecutarse correctamente (y toda su funcionalidad debe estar disponible) en servidores situados en la Red de la Escuela Politécnica de Ingeniería de Gijón.

NF.1.4 Sistema de gestión de bases de datos

La aplicación debe soportar que la base de datos que utiliza esté alojada en un servidor que ejecute una versión de Oracle MySQL de la rama 5.x y disponga del motor de almacenamiento InnoDB (u otro software compatible a nivel API y con características transaccionales similares).

NF.1.5 Software del cliente Los usuarios de la aplicación deben disponer de un navegador actual que soporte los estándares de HTML5 y CSS3 publicados por la W3C.

NF.1.6 Software de los administradores

Los administradores del sitio deben disponer de un navegador que soporte el uso de AJAX (además de cumplir los requisitos del punto NF.1.5)

Page 65: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Especificación del sistema | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 65

4.6.2 Requisitos de seguridad

Código Requisito

Nombre Requisito Descripción del Requisito

NF.2.1 Cifrado de las contraseñas almacenadas

El sistema debe almacenar las contraseñas tras aplicarlas un algoritmo de encriptado o reducción criptográfica.

NF.2.2 Deshabilitado completo del acceso al sistema

El sistema dispondrá de un procedimiento para deshabilitar el acceso completo al mismo.

NF.2.3 Finalización automática de sesión

La sesión de usuario debe finalizar automáticamente por inactividad.

4.6.3 Requisitos de auditoría (instrumentación)

Código Requisito

Nombre Requisito Descripción del Requisito

NF.3.1 Almacenamiento de información de instrumentación

Para cada página servida se almacenará, de forma estructurada: identificador de sesión y de usuario, carga media del sistema y memoria utilizada, número de consultas SQL ejecutadas, IP del cliente y del proxy (si lo hubiera y ha sido posible su detección), tipo de solicitud HTTP, información de identificación del navegador del cliente, instante de inicio de la solicitud, instante en el que se almacenaron los datos e información de identificación del servidor que atiende la solicitud.

NF.3.2 Independencia de la gestión de instrumentación

Los datos de instrumentación se almacenarán tras generar la página a enviar al cliente.

4.6.4 Requisitos de tiempo de respuesta

Código Requisito

Nombre Requisito Descripción del Requisito

NF.4.1 Tiempo de generación de las páginas de usuario

Bajo condiciones normales, las páginas públicas deben generarse en un tiempo inferior a 5 segundos.

NF.4.2 Tiempo de generación de las páginas de administración

Bajo condiciones normales, las páginas de administración deben generarse en un tiempo inferior a 10 segundos.

NF.4.3 Tiempo de generación de los archivos de documentación

Bajo condiciones normales y con un volumen inferior a 300 usuarios, los archivos de documentación (PDFs, archivos Excel…) deben generarse en un tiempo inferior a un minuto. Para un volumen de usuarios superior el tiempo necesario para generar los archivos de documentación debe ser proporcional a este último.

Page 66: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Especificación del sistema

66 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

4.7 Análisis de requisitos funcionales

A continuación se incluye el listado completo de requisitos funcionales de la aplicación, clasificados

según su tipo en diferentes categorías.

4.7.1 Aspectos generales

Código Requisito

Nombre Requisito Descripción del Requisito

R.1.1 Roles de usuario El sistema debe proporcionar, al menos, dos roles de usuario: administrador y ponente.

R.1.2 Información de ponentes Para los ponentes el sistema almacenará: nombre, apellidos, título honorífico, dirección de correo electrónico, dirección y código postal, país, compañía y número de teléfono.

R.1.3 Validación de direcciones de correo electrónico

El sistema debe impedir que los usuarios se registren utilizando direcciones de correo electrónico no válidas.

R.1.4 Modificación de ponente Los ponentes deben poder modificar sus propios datos de registro, exceptuando su dirección de correo electrónico.

R.1.5 No duplicidad de direcciones de correo electrónico

El sistema debe garantizar que no haya varios usuarios registrados con la misma dirección de correo electrónico.

R.1.6 Listado de usuarios El sistema debe permitir a los administradores acceder a un listado de todos los ponentes registrados.

R.1.7 Borrado de usuarios El sistema debe permitir el borrado de cuentas de los ponentes junto a la información asociada a ellos.

4.7.2 Seguridad

Código Requisito

Nombre Requisito Descripción del Requisito

R.2.1 Solicitud de credenciales de acceso

Los usuarios deberán proporcionar una dirección de correo electrónico (u identificador equivalente) y una contraseña para acceder al sistema.

R.2.2 Cifrado de contraseñas Las contraseñas no deberán almacenarse en texto claro.

R.2.3 Longitud de contraseñas Las contraseñas no podrán ser vacías.

R.2.4 Finalización manual de sesión

Los usuarios deben poder terminar su sesión manualmente.

R.2.5 Modificación de contraseña de ponente

Los ponentes deberán poder modificar su contraseña.

R.2.6 Solicitud de contraseña previa a su modificación

El sistema debe solicitar la contraseña anterior antes de permitir el cambio de contraseña de un usuario.

R.2.7 Solicitud de confirmación de nueva contraseña

El sistema debe solicitar introducir dos veces la nueva contraseña antes de permitir el cambio de contraseña de un usuario.

Page 67: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Especificación del sistema | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 67

4.7.3 Pagos

Código Requisito

Nombre Requisito Descripción del Requisito

R.3.1 Envío de justificantes El sistema permitirá el envío de justificantes de pago por parte de los ponentes.

R.3.2 Asociación de compañía a ponente

El sistema permitirá a los ponentes asociar una empresa o institución con su perfil a efectos de facturación.

R.3.3 Generación de facturas El sistema permitirá generar facturas para los ponentes asociados a una empresa o institución.

R.3.4 Generación de justificantes

El sistema permitirá generar justificantes de pago para los ponentes no asociados a una empresa o institución.

R.3.5 Confirmación de pagos El sistema permitirá a los administradores marcar el pago por parte de los ponentes como confirmado.

R.3.6 Modificación de cuota individual

El sistema permitirá a los administradores modificar manualmente la cantidad a pagar por cada usuario de manera individual.

R.3.7 Marcado de facturas listas

El sistema permitirá a los administradores marcar facturas como listas para imprimir.

R.3.8 Modificación cuota por defecto

El sistema permitirá a los administradores configurar la cuota a pagar por defecto para todos los asistentes.

R.3.9 No modificación de facturas listas

El sistema debe impedir modificar las facturas marcadas como listas para imprimir.

R.3.10 Asignación de números de factura de España

El sistema debe permitir la asignación automática de números de factura para los asistentes de España cuyo pago esté confirmado.

R.3.11 Asignación de números de factura de fuera de España

El sistema debe permitir la asignación automática de números de factura para los asistentes de fuera de España cuyo pago esté confirmado.

R.3.12 Independencia de secuencias de números de factura

Las secuencias de números de factura para la asignación automática a asistentes de España y de fuera de España deben ser independientes.

R.3.13 Modificación manual del número de secuencia de facturas de España

El siguiente número de factura a utilizar para la asignación automática de números de factura para los asistentes de España debe ser modificable de forma manual por los administradores.

R.3.14 Modificación manual del número de secuencia de facturas de fuera de España

El siguiente número de factura a utilizar para la asignación automática de números de factura para los asistentes de fuera de España debe ser modificable de forma manual por los administradores.

R.3.15 Acceso a justificantes de pago

El sistema debe mantener y permitir el acceso por parte de los administradores a los justificantes de pago enviados por los asistentes.

Page 68: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Especificación del sistema

68 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

4.7.4 Simposios

Código Requisito

Nombre Requisito Descripción del Requisito

R.4.1 Definición de simposios El sistema permitirá a los administradores introducir, para cada simposio celebrado durante la conferencia, su nombre y su fecha y hora de inicio.

R.4.2 Modificación de simposios

El sistema permitirá a los administradores la edición de los datos de los simposios ya definidos.

R.4.3 Eliminación de simposios El sistema permitirá a los administradores el borrado de los simposios ya definidos.

R.4.4 No eliminación de simposios no vacíos

El sistema no permitirá el borrado de simposios mientras haya papers asignados a ellos.

4.7.5 Envío de papers

Código Requisito

Nombre Requisito Descripción del Requisito

R.5.1 Envío de papers El sistema permitirá el envío de papers por parte de los ponentes.

R.5.2 Envío de nuevas versiones de papers

El sistema permitirá un número ilimitado de envíos de nuevas versiones de los papers una vez que el envío original haya sido aprobado.

R.5.3 Solicitud de datos de paper

El sistema solicitará al usuario que envía un paper un título y una lista de autores asociados al mismo.

R.5.4 Comprobación de datos básicos de paper

El sistema comprobará que todos los papers tienen un título no vacío asignado y, al menos, un autor.

R.5.5 Almacenamiento de papers

El sistema mantendrá disponible siempre, al menos, la primera y la última versión enviada de cada paper.

R.5.6 Marcado de papers tipo poster

El sistema permitirá indicar que un paper es de tipo poster al enviarlo.

R.5.7 Borrado de nuevo paper El sistema permitirá el borrado de papers individuales por parte del ponente que los envió mientras éstos no hayan entrado en proceso de revisión.

R.5.8 No borrado de papers en plazo cerrado

El sistema no permitirá a los ponentes el borrado de papers si el plazo de envío está cerrado.

R.5.9 No borrado de papers en proceso de revisión

El sistema no permitirá a los ponentes el borrado de papers una vez que éstos se encuentren en proceso de revisión.

R.5.10 Asociación de salas a posters

El sistema permitirá a los administradores asociar una sala a los papers de tipo poster.

R.5.11 Asociación de fechas a posters

El sistema permitirá a los administradores asociar una fecha y hora de inicio y una fecha y hora de fin de exposición para los papers de tipo poster.

R.5.12 Carácter opcional de la información de gestión de posters

La asociación de fechas y salas a los papers de tipo poster debe ser opcional.

Page 69: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Especificación del sistema | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 69

Código Requisito

Nombre Requisito Descripción del Requisito

R.5.13 Deshabilitado de edición de papers.

El sistema debe permitir a los administradores habilitar o deshabilitar el envío y edición de papers por parte de los ponentes.

R.5.14 Edición de título de papers

El sistema debe permitir a los administradores editar el título de cualquier paper enviado.

R.5.15 Listado de papers El sistema debe permitir a los administradores acceder al listado completo de papers enviados.

4.7.6 Salas

Código Requisito

Nombre Requisito Descripción del Requisito

R.6.1 Definición de salas El sistema permitirá a los administradores introducir un nombre para cada sala disponible durante la conferencia.

R.6.2 Edición de salas El sistema permitirá a los administradores la edición del nombre de las salas ya definidas.

R.6.3 Eliminación de salas El sistema permitirá a los administradores el borrado de las salas ya definidas.

R.6.4 No eliminación de salas en uso

El sistema no permitirá el borrado de salas mientras haya posters asignados a ellas.

4.7.7 Envío de notificaciones por correo electrónico

Código Requisito

Nombre Requisito Descripción del Requisito

R.7.1 Notificación registro de nuevo usuario

El sistema enviará una notificación por correo electrónico a una lista de direcciones definida cuando se registre un nuevo usuario.

R.7.2 Notificación envío de nuevo paper

El sistema enviará una notificación por correo electrónico a una lista de direcciones definida cuando los usuarios envíen nuevos papers.

R.7.3 Notificación envío de nueva versión de paper

El sistema enviará una notificación por correo electrónico a una lista de direcciones definida cuando los usuarios suban nuevas versiones de los papers.

R.7.4 Modificación de direcciones receptoras de notificaciones

La lista de direcciones de correo a las que enviar las notificaciones debe ser editable desde el panel de administración.

R.7.5 Edición de configuración de envío de correos

La configuración del envío de correos debe ser editable desde el panel de administración.

R.7.6 Envío de correos de prueba

El sistema debe permitir a los administradores enviar correos de prueba a cualquier dirección para comprobar el funcionamiento del envío de correos.

R.7.7 Envío de correos desde la red EPI

El sistema debe poder enviar correos electrónicos desde un servidor situado en la red de la Escuela de Ingeniería de Gijón.

Page 70: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Especificación del sistema

70 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

4.7.8 Generación de calendarios

Código Requisito

Nombre Requisito Descripción del Requisito

R.8.1 Generación de calendarios

Se debe proporcionar acceso a calendarios en formato digital con información de la planificación del congreso.

R.8.2 Actualización de calendarios

Los calendarios deben actualizarse en tiempo real.

R.8.3 Accesibilidad móvil de calendarios

Los calendarios deben poder leerse desde dispositivos móviles Android.

R.8.4 Acceso anónimo a calendarios

Los calendarios deben ser accesibles sin necesidad de autentificación previa.

R.8.5 Calendario de simposios Se debe proporcionar un calendario con los horarios de los simposios.

R.8.6 Calendario de posters Se debe proporcionar un calendario con los horarios de exposición de los posters.

4.7.9 Información estadística

Código Requisito

Nombre Requisito Descripción del Requisito

R.9.1 Muestra de número de papers enviados

El sistema mostrará a los administradores información agregada sobre el número de papers enviados.

R.9.2 Muestra de número de papers aceptados

El sistema mostrará a los administradores información agregada sobre el número y proporción de papers aceptados.

R.9.3 Muestra de número de ponentes registrados

El sistema mostrará a los administradores información sobre el número de ponentes registrados.

R.9.4 Muestra de número y proporción de pagos realizados

El sistema mostrará a los administradores información sobre el número y proporción de ponentes que han pagado.

R.9.5 Representación gráfica del número y proporción de pagos realizados

El sistema mostrará a los administradores gráficamente información sobre el número y proporción de ponentes que han pagado.

R.9.6 Muestra de número y proporción de papers aceptados

El sistema mostrará a los administradores gráficamente información sobre el número y proporción de papers aceptados.

R.9.7 Representación gráfica agregada de la procedencia de los ponentes

El sistema mostrará a los administradores gráficamente información sobre el país de procedencia de los asistentes al congreso.

R.9.8 Listado de autores El sistema mostrará a los administradores un listado de los usuarios registrados con papers enviados.

Page 71: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Especificación del sistema | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 71

4.7.10 Limitación de acceso

Código Requisito

Nombre Requisito Descripción del Requisito

R.10.1 Deshabilitar acceso público

El sistema permitirá a los administradores deshabilitar el acceso al sistema para usuarios no administradores.

R.10.2 Deshabilitar nuevos registros

El sistema permitirá a los administradores deshabilitar el registro de nuevos usuarios.

4.7.11 Generación de documentación

Código Requisito

Nombre Requisito Descripción del Requisito

R.11.1 Descargar listado Excel de asistentes

El sistema permitirá a los administradores descargar un listado de los asistentes al congreso en un fichero en formato Excel.

R.11.2 Descargar listado HTML de asistentes

El sistema permitirá a los administradores descargar un listado de los asistentes al congreso en un fichero en formato HTML.

R.11.3 Descargar certificados de asistencia individuales

El sistema permitirá a los administradores generar certificados de asistencia para los ponentes cuyo pago haya sido confirmado.

R.11.4 Descargar todos los certificados de asistencia

El sistema permitirá a los administradores descargar un archivo con todos los certificados de asistencia de los ponentes registrados.

R.11.5 Descargar certificados de asistencia para todos los ponentes con pago confirmado

El sistema permitirá a los administradores descargar un archivo con todos los certificados de asistencia de los ponentes cuyo pago haya sido confirmado.

R.11.6 Descargar etiquetas de ponentes

El sistema permitirá a los administradores descargar un archivo con etiquetas para todos los ponentes.

R.11.7 Descargar etiquetas de restaurante

El sistema permitirá a los administradores descargar un archivo con etiquetas de restaurante genéricas (no nominativas).

R.11.8 Descargar etiquetas asistencia a cenas de gala

El sistema permitirá a los administradores descargar un archivo con etiquetas genéricas (no nominativas) para la asistencia a cenas de gala

R.11.9 Descargar etiquetas de miembros de la organización

El sistema permitirá a los administradores descargar un archivo con etiquetas distintivas para la organización.

R.11.10 Descargar etiquetas de asistencia a excursiones

El sistema permitirá a los administradores descargar un archivo con etiquetas genéricas (no nominativas) para la asistencia a excursiones.

R.11.11 Descargar listado de autores

El sistema permitirá a los administradores descargar un listado de todos los autores, su país de procedencia, organización asociada y número de papers y posters enviados en formato Excel.

Page 72: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Especificación del sistema

72 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Código Requisito

Nombre Requisito Descripción del Requisito

R.11.12 Descargar listado Excel de papers

El sistema permitirá a los administradores descargar un listado de todos los papers, su estado, simposio y autores asociados para todos los papers en formato Excel.

R.11.13 Descargar listado HTML de papers

El sistema permitirá a los administradores descargar un listado de todos los papers, su estado, simposio y autores asociados para todos los papers en formato HTML.

R.11.14 Descargar certificados de presentación de ponencia individuales

El sistema permitirá a los administradores descargar certificados de presentación de ponencias individuales para los papers de los usuarios que hayan pagado.

R.11.15 Descargar todos los certificados de presentación de ponencia

El sistema permitirá a los administradores descargar un archivo con todos los certificados de presentación de ponencia.

R.11.16 Descargar certificados de presentación de ponencia de usuarios que han pagado

El sistema permitirá a los administradores descargar un archivo que contenga únicamente los certificados de presentación de ponencia de los usuarios que hayan pagado.

R.11.17 Descargar subconjunto de certificados de presentación de ponencia

El sistema permitirá a los administradores descargar un archivo que contenga únicamente los certificados de presentación de ponencia de un subconjunto de ponentes seleccionado previamente cuyo pago haya sido confirmado.

R.11.18 Orientación de las etiquetas

El sistema permitirá generar las etiquetas para los asistentes en formato vertical u horizontal.

R.11.19 Tamaño de las etiquetas El sistema permitirá configurar las etiquetas a generar para que su tamaño sea de 15x7,5 cm o 9,2x6,25 cm.

R.11.20 Descargar etiquetas en blanco

El sistema permitirá a los administradores descargar un archivo con etiquetas genéricas (no nominativas) en blanco.

4.7.12 Excursiones

Código Requisito

Nombre Requisito Descripción del Requisito

R.12.1 Definición de excursiones El sistema permitirá a los administradores introducir el destino o nombre de las excursiones o actividades adicionales que tendrán lugar durante la conferencia.

R.12.2 Eliminación de excursiones

El sistema permitirá a los administradores el borrado de las excursiones o actividades definidas previamente.

R.12.3 Modificación de excursiones

El sistema permitirá a los administradores editar el destino o nombre de las excursiones o actividades definidas previamente.

Page 73: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Especificación del sistema | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 73

4.8 Especificación de casos de uso y escenarios

A partir de los requisitos de la aplicación, y en función de los distintos roles de usuario (Actores)

encontrados, se ha elaborado el siguiente catálogo de casos de uso de la aplicación. Debido a su

elevado número, el catálogo se ha dividido según el actor involucrado en cada uno. Además, puesto

que la mayor parte de las funcionalidades de la aplicación corresponden a tareas administrativas, los

casos de uso que involucran exclusivamente a los administradores han sido clasificados en

subapartados independientes en función del tipo de entidades que manipulan.

Tras la definición de cada caso se incluye el desarrollo del mismo en detalle en uno o más escenarios.

En éstos, el tipo del usuario que lo inicia debe entenderse como una precondición adicional. Así, en los

escenarios iniciados por un Invitado deben entenderse que existe la precondición inherente “El usuario

no ha iniciado sesión en el sistema”; en los iniciados por un Administrador, “El usuario ha iniciado

sesión con una cuenta de Administrador”; etc.

4.8.1 Acciones de invitado

Caso de Uso 1: Registro de nuevo ponente

A través de un formulario los asistentes proporcionarán sus datos personales y dirección de

correo electrónico para crear una nueva cuenta de ponente.

Escenario 1.1

Precondiciones - El acceso público al sitio está habilitado - El sistema no está en estado cerrado.

Poscondiciones - Los datos del nuevo usuario se habrán almacenado asociadas a una nueva cuenta de ponente.

- Se habrá enviado un correo electrónico de confirmación de registro a los administradores y a la dirección proporcionada por el usuario.

Excepciones Se mostrará un mensaje de error y no se creará la nueva cuenta de Ponente en los siguientes casos: - Si se introducen datos no válidos. - Si la dirección correo electrónico proporcionada ya está asociada a otro

usuario. - Si se produce un error al enviar el mensaje de confirmación de registro a la

dirección correo electrónico proporcionada.

Iniciado por Invitado

Finalizado por Invitado

Descripción Un asistente al congreso introduce sus datos para crear una nueva cuenta de ponente e introducir los datos necesarios para asistir al congreso.

Corresponde al Requisito:

R.1.5, R.2.2, R.2.3

Page 74: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Especificación del sistema

74 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Caso de Uso 2: Login de usuario

Solicita a los usuarios registrados en la aplicación y a los administradores proporcionar sus

credenciales de acceso (dirección de correo electrónico y contraseña) para hacer uso del

sistema.

Escenario 2.1

Precondiciones - El acceso público al sitio está habilitado. - El sistema no está en estado cerrado. - Las credenciales proporcionadas corresponden a una cuenta de ponente.

Poscondiciones Se asocia la cuenta cuyas credenciales han sido proporcionados a la sesión del usuario.

Excepciones - Se mostrará un mensaje de error y la sesión se mantendrá asociada con la cuenta de invitado si las credenciales proporcionadas no corresponden a ningún usuario registrado (dirección de correo electrónico desconocida o contraseña incorrecta).

- Si el acceso público está deshabilitado, se mostrará una página informando de que el acceso público está cerrado.

Iniciado por Invitado

Finalizado por Invitado

Descripción Un usuario, no identificado, solicita iniciar sesión en el sistema proporcionando las credenciales de una cuenta de ponente existente.

Corresponde al Requisito:

R.2.1

Escenario 2.2

Precondiciones - El sistema no está en estado cerrado. - Las credenciales proporcionadas corresponden a una cuenta de

administrador.

Poscondiciones Se asocia la cuenta cuyas credenciales han sido proporcionadas a la sesión del usuario.

Excepciones Se mostrará un mensaje de error y la sesión se mantendrá asociada con la cuenta de invitado si las credenciales proporcionadas no corresponden a ningún usuario registrado (direcciónde correo electrónico desconocida o contraseña incorrecta).

Iniciado por Invitado

Finalizado por Invitado

Descripción Un usuario, no identificado, solicita iniciar sesión en el sistema proporcionando las credenciales de una cuenta de administrador existente.

Corresponde al Requisito:

R.2.1

Page 75: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Especificación del sistema | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 75

Escenario 2.3

Precondiciones - El acceso público al sitio está habilitado. - El sistema no está en estado cerrado. - Las credenciales proporcionadas corresponden a una cuenta de Editor.

Poscondiciones Se asocia la cuenta cuyas credenciales han sido proporcionados a la sesión del usuario.

Excepciones - Se mostrará un mensaje de error y la sesión se mantendrá asociada con la cuenta de invitado si las credenciales proporcionadas no corresponden a ningún usuario registrado (dirección de correo electrónico desconocida o contraseña incorrecta).

- Si el acceso público está deshabilitado, se mostrará una página informando de que el acceso público está cerrado.

Iniciado por Invitado

Finalizado por Invitado

Descripción Un usuario, no identificado, solicita iniciar sesión en el sistema proporcionando las credenciales de una cuenta de editor existente.

Corresponde al Requisito:

R.2.1

Caso de Uso 3: Restablecer contraseña perdida

Proporcionando la dirección de correo electrónico utilizada durante el registro, permite a los

ponentes asociar una nueva contraseña aleatoria a su cuenta en caso de haber olvidado la

proporcionada durante el registro.

Escenario 3.1

Precondiciones No existen precondiciones adicionales.

Poscondiciones - La contraseña de la cuenta asociada a la dirección de correo electrónico proporcionada es cambiada por una contraseña aleatoria.

- Se habrá enviado un correo electrónico a la dirección asociada a la cuenta de usuario con la nueva contraseña.

Excepciones No se hará nada si: - La dirección de correo electrónico proporcionada no corresponde con ningún

usuario registrado. - La cuenta asociada a la dirección de correo electrónico proporcionada no es

de ningún ponente (es decir, es de un administrador o editor).

Iniciado por Invitado

Finalizado por Sistema

Descripción Un usuario que no recuerda la contraseña asociada a su cuenta solicita generar una nueva contraseña para poder acceder al sistema.

Corresponde al Requisito:

R.2.2, R.2.3

Page 76: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Especificación del sistema

76 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Invitado

Registro de nuevo ponente

Login de usuario

Restablecer contraseña perdida

Figura 4.1: Casos de Uso para las acciones de invitado

4.8.2 Acciones comunes

Caso de Uso 4: Descargar calendario de exposición de posters

Cualquier ponente o usuario no identificado podrá acceder a un enlace a un calendario digital

en formato iCal con los horarios de exposición de los posters.

Escenario 4.1

Precondiciones No existen precondiciones adicionales.

Poscondiciones No hay

Excepciones - Si no hay posters en el sistema se retorna un calendario vacío. - Para los posters cuya fecha de inicio y/o finalización de exposición no esté

definida se utilizará la fecha actual como fecha de inicio y fin de exposición.

Iniciado por Invitado

Finalizado por Invitado

Descripción Un usuario, no identificado, solicita acceder al calendario digital con los horarios de exposición de los posters enviados que serán expuestos en el congreso.

Corresponde al Requisito:

R.8.1, R.8.2, R.8.3, R.8.4, R.8.6

Escenario 4.2

Precondiciones No existen precondiciones adicionales.

Poscondiciones No hay

Excepciones - Si no hay posters en el sistema se retorna un calendario vacío. - Para los posters cuya fecha de inicio y/o finalización de exposición no esté

definida se utilizará la fecha actual como fecha de inicio y fin de exposición.

Iniciado por Ponente

Finalizado por Ponente

Descripción Un usuario, identificado con una cuenta de ponente, solicita acceder al calendario digital con los horarios de exposición de los posters enviados que serán expuestos en el congreso.

Corresponde al Requisito:

R.8.1, R.8.2, R.8.3, R.8.6

Page 77: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Especificación del sistema | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 77

Escenario 4.3

Precondiciones No existen precondiciones adicionales.

Poscondiciones No hay

Excepciones - Si no hay posters en el sistema se retornará un calendario vacío. - Para los posters cuya fecha de inicio y/o finalización de exposición no esté

definida se utilizará la fecha actual como fecha de inicio y fin de exposición.

Iniciado por Editor

Finalizado por Editor

Descripción Un usuario, identificado con una cuenta de editor, solicita acceder al calendario digital con los horarios de exposición de los posters enviados que serán expuestos en el congreso.

Corresponde al Requisito:

R.8.1, R.8.2, R.8.3, R.8.6

Caso de Uso 5: Descargar calendario de simposios

Cualquier ponente o usuario no identificado podrá acceder a un enlace a un calendario digital

en formato iCal con los horarios de inicio de las diferentes sesiones (simposios) que se

celebrarán durante el evento.

Escenario 5.1

Precondiciones No existen precondiciones adicionales.

Poscondiciones No hay

Excepciones - Si no hay simposios en el sistema se retornará un calendario vacío. - Para los simposios cuya fecha de inicio no esté definida se utilizará la fecha

actual.

Iniciado por Invitado

Finalizado por Invitado

Descripción Un usuario, no identificado, solicita acceder al calendario digital con los horarios de inicio de todos los simposios que se celebrarán durante el congreso.

Corresponde al Requisito:

R.8.1, R.8.2, R.8.3, R.8.4, R.8.5

Escenario 5.2

Precondiciones No existen precondiciones adicionales.

Poscondiciones No hay

Excepciones - Si no hay simposios en el sistema se retornará un calendario vacío. - Para los simposios cuya fecha de inicio no esté definida se utilizará la fecha

actual.

Iniciado por Ponente

Finalizado por Ponente

Descripción Un usuario, identificado con una cuenta de ponente, solicita acceder al calendario digital con los horarios de inicio de todos los simposios que se celebrarán durante el congreso.

Corresponde al Requisito:

R.8.1, R.8.2, R.8.3, R.8.5

Page 78: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Especificación del sistema

78 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Escenario 5.3

Precondiciones No existen precondiciones adicionales.

Poscondiciones No hay

Excepciones - Si no hay simposios en el sistema se retornará un calendario vacío. - Para los simposios cuya fecha de inicio no esté definida se utilizará la fecha

actual.

Iniciado por Editor

Finalizado por Editor

Descripción Un usuario, identificado con una cuenta de editor, solicita acceder al calendario digital con los horarios de inicio de todos los simposios que se celebrarán durante el congreso.

Corresponde al Requisito:

R.8.1, R.8.2, R.8.3, R.8.5

Caso de Uso 6: Finalizar sesión

Los usuarios previamente identificados podrán solicitar al sistema que finalice su sesión, de

forma que para realizar cualquier acción posterior asociada a su cuenta de ponente o gestión

administrativa requerirá volver a introducir sus credenciales de acceso.

Escenario 6.1

Precondiciones No existen precondiciones adicionales.

Poscondiciones La sesión del usuario es desvinculada de la cuenta a la que estaba asociada, pasando a ser considerada nuevamente como una sesión de Invitado.

Excepciones Este escenario no contempla situaciones excepcionales

Iniciado por Ponente

Finalizado por Sistema

Descripción Un usuario, identificado previamente con una cuenta de ponente, solicita terminar su sesión actual en la aplicación.

Corresponde al Requisito:

R.2.4

Escenario 6.2

Precondiciones No existen precondiciones adicionales.

Poscondiciones La sesión del usuario es desvinculada de la cuenta a la que estaba asociada, pasando a ser considerada nuevamente como una sesión de Invitado.

Excepciones Este escenario no contempla situaciones excepcionales

Iniciado por Editor

Finalizado por Sistema

Descripción Un usuario, identificado previamente con una cuenta de editor, solicita terminar su sesión actual en la aplicación.

Corresponde al Requisito:

R.2.4

Page 79: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Especificación del sistema | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 79

Escenario 6.3

Precondiciones No existen precondiciones adicionales.

Poscondiciones La sesión del usuario es desvinculada de la cuenta a la que estaba asociada, pasando a ser considerada nuevamente como una sesión de Invitado.

Excepciones Este escenario no contempla situaciones excepcionales

Iniciado por Administrador

Finalizado por Sistema

Descripción Un usuario, identificado previamente con una cuenta de administrador, solicita terminar su sesión actual en la aplicación.

Corresponde al Requisito:

R.2.4

InvitadoPonente

AdministradorEditor

Descargar calendario de exposición de posters

Descargar calendario de simposios

Finalizar sesión

Figura 4.2: Casos de uso para las acciones comunes

Page 80: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Especificación del sistema

80 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

4.8.3 Acciones de ponente

Caso de Uso 7: Ver datos de ponente

Los ponentes previamente identificados podrán ver los datos personales y dirección de correo

electrónico asociados a su cuenta.

Escenario 7.1

Precondiciones No existen precondiciones adicionales.

Poscondiciones No hay

Excepciones Este escenario no contempla situaciones excepcionales

Iniciado por Ponente

Finalizado por Ponente

Descripción Un ponente solicita ver los datos personales asociados a su cuenta.

Corresponde al Requisito:

R.1.2

Caso de Uso 8: Modificar datos de ponente

Los ponentes previamente identificados podrán modificar los datos asociados a su cuenta,

como nombre, dirección e institución asociada. No se permite modificar la cuenta de correo

utilizada.

Escenario 8.1

Precondiciones No existen precondiciones adicionales.

Poscondiciones Los datos del ponente son actualizados en la base de datos.

Excepciones Este escenario no contempla situaciones excepcionales

Iniciado por Ponente

Finalizado por Ponente

Descripción Un ponente desea actualizar los datos personales asociados a su cuenta.

Corresponde al Requisito:

R.1.2, R.1.4

Page 81: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Especificación del sistema | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 81

Caso de Uso 9: Modificar contraseña

Los ponentes previamente identificados podrán modificar la contraseña usada para

identificarse en el sistema. Por motivos de seguridad, el sistema solicitará también la

contraseña actual asociada a la cuenta.

Escenario 9.1

Precondiciones No existen precondiciones adicionales.

Poscondiciones La contraseña almacenada para el ponente que realiza la acción es actualizada.

Excepciones Si no se proporciona la contraseña anterior o ésta es incorrecta no se realizan cambios.

Iniciado por Ponente

Finalizado por Ponente

Descripción Un ponente desea cambiar la contraseña usada para acceder al sistema.

Corresponde al Requisito:

R.2.5, R.2.6, R.2.7

Ponente

Modificar datos de ponente

Ver datos de ponente

Modificar contraseña

Figura 4.3: Casos de uso para las acciones del perfil de ponente

Page 82: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Especificación del sistema

82 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Caso de Uso 10: Enviar nuevo paper

Los ponentes previamente identificados podrán enviar un archivo digital con el paper a

presentar durante la conferencia indicando, además, su título, autores y el simposio en el que

desean presentarlo.

Escenario 10.1

Precondiciones No existen precondiciones adicionales.

Poscondiciones - Se creará un nuevo paper en la base de datos asociado a los datos proporcionados.

- Se enviará una notificación por correo electrónico a los administradores informando del nuevo envío

Excepciones El sistema rechazará el envío (informando del motivo del rechazo) si: - Se ha enviado previamente un paper con el mismo título (por cualquier

usuario). - No se ha indicado el título del paper - No se ha indicado el nombre de ninguno de los autores - No se ha indicado el simposio en el cual el usuario desea presentar el paper.

Iniciado por Ponente

Finalizado por Ponente

Descripción Un ponente desea enviar un paper nuevo, no enviado previamente.

Corresponde al Requisito:

R.5.1, R.5.3, R.5.4, R.5.5, R.5.6

Caso de Uso 11: Enviar nueva versión de paper

Los ponentes previamente identificados podrán enviar un nuevo archivo digital con una nueva

versión de un paper enviado previamente que haya sido aceptado por los administradores.

Escenario 11.1

Precondiciones - El usuario ha enviado y seleccionado previamente un paper que ha sido aceptado por los administradores.

- El plazo de envío de papers está abierto.

Poscondiciones - El nuevo archivo queda asociado como último envío del paper. - Si hubiese otras versiones del paper enviadas después del envío original, se

borrarán del sistema. - Se enviará una notificación por correo electrónico a los administradores

informando del nuevo envío.

Excepciones El sistema rechazará el envío si el plazo para ello ha sido cerrado.

Iniciado por Ponente

Finalizado por Ponente

Descripción Un ponente desea enviar un nuevo archivo para un paper enviado previamente.

Corresponde al Requisito:

R.5.2, R.5.5

Page 83: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Especificación del sistema | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 83

Caso de Uso 12: Eliminar paper enviado

Los ponentes previamente identificados podrán eliminar el archivo y los datos asociados a los

papers previamente enviados siempre que éstos no hayan entrado ya en proceso de revisión.

Escenario 12.1

Precondiciones El usuario ha enviado y seleccionado previamente un paper que aún no ha sido aceptado ni ha entrado en proceso de revisión.

Poscondiciones - Se enviará un correo electrónico a los administradores informando de que el paper ha sido eliminado.

- Se enviará un correo electrónico al usuario informando de que el paper ha sido eliminado.

- La información del paper se eliminará de la base de datos.

Excepciones Si no se encuentra el paper indicado el sistema no hace nada.

Iniciado por Ponente

Finalizado por Sistema

Descripción Un ponente desea borrar un paper que ha enviado previamente y que aún no ha entrado en proceso de revisión.

Corresponde al Requisito:

R.5.7, R.5.8, R.5.9

Ponente

Enviar nueva versión de paper

Enviar nuevo paper

Eliminar paper enviado

Figura 4.4: Casos de uso para las acciones de papers de ponente

Page 84: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Especificación del sistema

84 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Caso de Uso 13: Enviar justificante de pago

Los ponentes previamente identificados podrán enviar un archivo digital que contenga el

justificante de haber realizado el pago de la cuota de inscripción al congreso.

Escenario 13.1

Precondiciones El pago del usuario no ha sido confirmado por los administradores.

Poscondiciones - Se asociará el archivo enviado a la cuenta del ponente, eliminando cualquier otro justificante enviado previamente.

- Se enviará un correo electrónico a los administradores informando del envío del nuevo justificante.

Excepciones Si hay algún error al leer o guardar el fichero enviado se informará al usuario y no se realizarán cambios en la base de datos.

Iniciado por Ponente

Finalizado por Sistema

Descripción Un usuario, cuyo pago no ha sido confirmado, envía un archivo digital que justifica el pago de éste de la cuota de inscripción al congreso.

Corresponde al Requisito:

R.3.1

Caso de Uso 14: Descargar justificante de pago enviado

Los ponentes previamente identificados podrán descargar una copia del justificante de pago,

en caso de que hayan enviado uno previamente.

Escenario 14.1

Precondiciones - El usuario ha enviado previamente un justificante de pago. - El pago del usuario no ha sido confirmado por los administradores.

Poscondiciones No hay

Excepciones Este escenario no contempla situaciones excepcionales

Iniciado por Ponente

Finalizado por Ponente

Descripción Un ponente solicita descargar una copia del archivo de justificante de pago que ha enviado previamente.

Corresponde al Requisito:

R.3.1

Page 85: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Especificación del sistema | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 85

Caso de Uso 15: Solicitar factura

Los ponentes previamente identificados que así lo deseen podrán solicitar la emisión de una

factura, proporcionando el nombre que aparecerá en la misma y los datos fiscales (nombre,

dirección y CIF o equivalente) de la institución que se hará cargo del pago.

Escenario 15.1

Precondiciones - El usuario ha enviado previamente un justificante de pago. - El pago del usuario no ha sido confirmado por los administradores.

Poscondiciones Los datos de facturación proporcionados quedan asociados al usuario actual.

Excepciones Este escenario no contempla situaciones excepcionales

Iniciado por Ponente

Finalizado por Ponente

Descripción Un ponente introduce los datos de facturación necesarios para que la organización emita una factura que cubra los costes asociados a su inscripción.

Corresponde al Requisito:

R.3.2

Caso de Uso 16: Eliminar datos de factura

Los ponentes previamente identificados que hayan solicitado previamente la emisión de una

factura a nombre de una institución podrán eliminar los datos adicionales asociados a ésta,

tras lo cual el sistema volverá a asociarles un justificante estándar.

Escenario 16.1

Precondiciones No existen precondiciones adicionales.

Poscondiciones Los datos de facturación proporcionados previamente al usuario (si los hubiese) son eliminados de la base de datos.

Excepciones Si previamente no hubiese datos registrados en el sistema para emitir una factura que cubra los costes asociados a la inscripción del ponente, el sistema no hace nada.

Iniciado por Ponente

Finalizado por Ponente

Descripción Un usuario, que previamente ha solicitado la emisión de una factura para sus costes de inscripción, solicita que los datos adicionales de ésta sean eliminados, de forma que se generará un justificante de pago en su lugar.

Corresponde al Requisito:

R.3.2

Page 86: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Especificación del sistema

86 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Ponente

Descargar justificante de pago enviado

Enviar justificante de pago

Solicitar factura

Eliminar datos de factura

Figura 4.5: Casos de uso para las acciones de pago de ponente

4.8.4 Acciones de editor

Caso de Uso 17: Listar papers

Los editores tendrán acceso a un listado con el título y la conferencia asociada a todos los

papers enviados y aceptados.

Escenario 17.1

Precondiciones No existen precondiciones adicionales.

Poscondiciones No hay

Excepciones Este escenario no contempla situaciones excepcionales

Iniciado por Editor

Finalizado por Editor

Descripción Un editor solicita acceder al listado de los papers aceptados.

Corresponde al Requisito:

R.5.16

Page 87: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Especificación del sistema | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 87

Caso de Uso 18: Descargar paper

Los editores podrán descargar cualquier paper enviado que haya sido marcado como aceptado

por los administradores.

Escenario 18.1

Precondiciones No existen precondiciones adicionales.

Poscondiciones No hay

Excepciones Este escenario no contempla situaciones excepcionales

Iniciado por Editor

Finalizado por Editor

Descripción Un editor solicita la descarga de un paper aceptado desde el listado de papers.

Corresponde al Requisito:

R.5.17

Editor

Descargar paper

Listar papers

Figura 4.6: Casos de uso para las acciones de editor

4.8.5 Gestión de usuarios

Caso de Uso 19: Listar usuarios

Los administradores tendrán acceso a un listado completo de los ponentes registrados en el

que se incluirán los datos asociados a su cuenta, como nombre, dirección, teléfono, institución

asociada y dirección de correo electrónico.

Escenario 19.1

Precondiciones No existen precondiciones adicionales.

Poscondiciones No hay

Excepciones Este escenario no contempla situaciones excepcionales

Iniciado por Administrador

Finalizado por Administrador

Descripción Un administrador solicita acceder al listado con los datos de todos los ponentes registrados.

Corresponde al Requisito:

R.1.6

Page 88: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Especificación del sistema

88 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Caso de Uso 20: Borrar usuario

Los administradores podrán eliminar del sistema la cuenta de cualquier ponente, incluyendo

sus datos de facturación y papers enviados.

Escenario 20.1

Precondiciones No existen precondiciones adicionales.

Poscondiciones El usuario y todos los ficheros y datos sobre su justificante de pago (si lo hubiera) y los papers enviados desde su cuenta son eliminados del sistema.

Excepciones Este escenario no contempla situaciones excepcionales

Iniciado por Administrador

Finalizado por Administrador

Descripción Un administrador solicita el borrado de una cuenta de ponente, incluyendo todos los datos asociados a ella.

Corresponde al Requisito:

R.1.7

Caso de Uso 21: Descargar listado de usuarios

Los administradores podrán descargar un archivo digital que contenga el listado completo de

los usuarios y sus datos más relevantes, incluyendo el nombre de archivo del justificante de

pago enviado, datos fiscales, dirección y dirección de correo asociada.

Escenario 21.1

Precondiciones No existen precondiciones adicionales.

Poscondiciones No hay

Excepciones Este escenario no contempla situaciones excepcionales

Iniciado por Administrador

Finalizado por Administrador

Descripción Un administrador solicita el listado de todos los usuarios registrados en formato Excel.

Corresponde al Requisito:

R.11.1

Escenario 21.2

Precondiciones No existen precondiciones adicionales.

Poscondiciones No hay

Excepciones Este escenario no contempla situaciones excepcionales

Iniciado por Administrador

Finalizado por Administrador

Descripción Un administrador solicita el listado de todos los usuarios registrados en formato HTML.

Corresponde al Requisito:

R.11.2

Page 89: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Especificación del sistema | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 89

Administrador

Listar usuarios

Borrar usuario

Descargar listado de usuarios

Figura 4.7: Casos de uso para las acciones de gestión de usuarios

Caso de Uso 22: Descargar certificado de asistencia individual

Los administradores podrán descargar un archivo digital que certifique la asistencia al congreso

de un usuario individual, una vez que el pago de éste haya sido confirmado.

Escenario 22.1

Precondiciones El usuario cuyo certificado se solicita ha pagado la cuota de inscripción al congreso.

Poscondiciones No hay

Excepciones Este escenario no contempla situaciones excepcionales

Iniciado por Administrador

Finalizado por Administrador

Descripción Un administrador solicita un archivo con el certificado de asistencia al congreso de un usuario cuyo pago ha sido confirmado.

Corresponde al Requisito:

R.11.3

Caso de Uso 23: Descargar subconjunto de certificados de asistencia

Los administradores podrán descargar un archivo digital que contenga certificados de

asistencia al congreso para un subconjunto de usuarios seleccionados previamente y cuyo

pago haya sido confirmado.

Escenario 23.1

Precondiciones No existen precondiciones adicionales.

Poscondiciones No hay

Excepciones Si no se han seleccionado usuarios el PDF generado únicamente contendrá el texto “No se han seleccionado usuarios”.

Iniciado por Administrador

Finalizado por Administrador

Descripción Un administrador solicita un archivo con el certificado de asistencia al congreso para un subconjunto de usuarios seleccionados previamente y cuyo pago haya sido confirmado.

Corresponde al Requisito:

R.11.3

Page 90: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Especificación del sistema

90 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Caso de Uso 24: Descargar certificados de asistencia de todos los usuarios

que han pagado

Los administradores podrán descargar un archivo digital que contenga certificados de

asistencia al congreso de todos los usuarios cuyo pago haya sido confirmado.

Escenario 24.1

Precondiciones No existen precondiciones adicionales.

Poscondiciones No hay

Excepciones Si no hay usuarios que hayan pagado se genera un archivo con una página en blanco.

Iniciado por Administrador

Finalizado por Administrador

Descripción Un administrador solicita un archivo que contenga el certificado de asistencia al congreso de todos los usuarios cuyo pago ha sido confirmado.

Corresponde al Requisito:

R.11.5

Caso de Uso 25: Descargar certificados de asistencia de todos los usuarios

Los administradores podrán descargar un archivo digital que contenga certificados de

asistencia al congreso de todos los ponentes registrados.

Escenario 25.1

Precondiciones No existen precondiciones adicionales.

Poscondiciones No hay

Excepciones Si no hay ponentes registrados en el sistema se genera un archivo con una página en blanco.

Iniciado por Administrador

Finalizado por Administrador

Descripción Un administrador solicita un archivo que contenga el certificado de asistencia al congreso de todos los usuarios registrados.

Corresponde al Requisito:

R.11.4

Page 91: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Especificación del sistema | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 91

Administrador

Descargar subconjunto de certificados de asistencia

Descargar certificado de asistencia individual

Descargar certificados de asistencia de todos los usuarios que han pagado

Descargar certificados de asistencia de todos los usuarios

Figura 4.8: Casos de uso para la descarga de certificados

Caso de Uso 26: Descargar etiquetas de los usuarios

Los administradores podrán descargar un archivo digital que contenga etiquetas nominativas

utilizadas para identificar a todos los asistentes al congreso.

Escenario 26.1

Precondiciones El sistema está configurado para generar etiquetas en formato vertical.

Poscondiciones No hay

Excepciones Si no hay ponentes registrados en el sistema se genera un archivo con una página en blanco.

Iniciado por Administrador

Finalizado por Administrador

Descripción Un administrador solicita un archivo con las etiquetas nominativas para todos los ponentes, en formato vertical.

Corresponde al Requisito:

R.11.6

Page 92: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Especificación del sistema

92 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Escenario 26.2

Precondiciones El sistema está configurado para generar etiquetas en formato horizontal con un tamaño de 15x7,5 cm.

Poscondiciones No hay

Excepciones Si no hay ponentes registrados en el sistema se genera un archivo con una página en blanco.

Iniciado por Administrador

Finalizado por Administrador

Descripción Un administrador solicita un archivo con las etiquetas nominativas para todos los ponentes, en formato horizontal con un tamaño de 15x7,5cm.

Corresponde al Requisito:

R.11.6

Escenario 26.3

Precondiciones El sistema está configurado para generar etiquetas en formato horizontal con un tamaño de 9,2x6,28 cm.

Poscondiciones No hay

Excepciones Si no hay ponentes registrados en el sistema se genera un archivo con una página en blanco.

Iniciado por Administrador

Finalizado por Administrador

Descripción Un administrador solicita un archivo con las etiquetas nominativas para todos los ponentes, en formato horizontal con un tamaño de 9,2x6,28cm.

Corresponde al Requisito:

R.11.6

Caso de Uso 27: Descargar etiquetas para cena de gala

Los administradores podrán descargar un archivo digital que contenga etiquetas no

nominativas utilizadas para la asistencia a la cena de gala.

Escenario 27.1

Precondiciones El sistema está configurado para generar etiquetas con un tamaño de 15x7,5 cm.

Poscondiciones No hay

Excepciones Este escenario no contempla situaciones excepcionales

Iniciado por Administrador

Finalizado por Administrador

Descripción Un administrador solicita un archivo con las etiquetas no nominativas para la asistencia a la cena de gala con un tamaño de 15x7,5cm.

Corresponde al Requisito:

R.11.8

Page 93: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Especificación del sistema | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 93

Escenario 27.2

Precondiciones El sistema está configurado para generar etiquetas con un tamaño de 9,2x6,28 cm.

Poscondiciones No hay

Excepciones Este escenario no contempla situaciones excepcionales

Iniciado por Administrador

Finalizado por Administrador

Descripción Un administrador solicita un archivo con las etiquetas no nominativas para la asistencia a la cena de gala con un tamaño de 9,2x6,28cm.

Corresponde al Requisito:

R.11.8

Caso de Uso 28: Descargar etiquetas en blanco

Los administradores podrán descargar un archivo digital que contenga un conjunto de

etiquetas con un diseño similar al resto de tipos con el espacio correspondiente al tipo de

etiqueta o nombre de ponente en blanco, de modo que puedan utilizarse para cualquier

propósito no contemplado por la aplicación.

Escenario 28.1

Precondiciones El sistema está configurado para generar etiquetas en formato vertical.

Poscondiciones No hay

Excepciones Este escenario no contempla situaciones excepcionales

Iniciado por Administrador

Finalizado por Administrador

Descripción Un administrador solicita un archivo con etiquetas en blanco, en formato vertical.

Corresponde al Requisito:

R.11.20

Escenario 28.2

Precondiciones El sistema está configurado para generar etiquetas en formato horizontal con un tamaño de 15x7,5 cm.

Poscondiciones No hay

Excepciones Este escenario no contempla situaciones excepcionales

Iniciado por Administrador

Finalizado por Administrador

Descripción Un administrador solicita un archivo con etiquetas en blanco, en formato horizontal con un tamaño de 15x7,5cm.

Corresponde al Requisito:

R.11.20

Page 94: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Especificación del sistema

94 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Escenario 28.3

Precondiciones El sistema está configurado para generar etiquetas en formato horizontal con un tamaño de 9,2x6,28 cm.

Poscondiciones No hay

Excepciones Este escenario no contempla situaciones excepcionales

Iniciado por Administrador

Finalizado por Administrador

Descripción Un administrador solicita un archivo con etiquetas en blanco, en formato horizontal con un tamaño de 9,2x6,28cm.

Corresponde al Requisito:

R.11.20

Caso de Uso 29: Descargar etiquetas de restaurante

Los administradores podrán descargar un archivo digital que contenga etiquetas de

restaurante no nominativas.

Escenario 29.1

Precondiciones El sistema está configurado para generar etiquetas con un tamaño de 15x7,5 cm.

Poscondiciones No hay

Excepciones Este escenario no contempla situaciones excepcionales

Iniciado por Administrador

Finalizado por Administrador

Descripción Un administrador solicita descargar un archivo que contenga las etiquetas no nominativas de restaurante con un tamaño de 15x7,5cm.

Corresponde al Requisito:

R.11.7

Escenario 29.2

Precondiciones El sistema está configurado para generar etiquetas con un tamaño de 9,2x6,28 cm.

Poscondiciones No hay

Excepciones Este escenario no contempla situaciones excepcionales

Iniciado por Administrador

Finalizado por Administrador

Descripción Un administrador solicita descargar un archivo que las etiquetas no nominativas de restaurante con un tamaño de 9,2x6,28 cm.

Corresponde al Requisito:

R.11.7

Page 95: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Especificación del sistema | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 95

Caso de Uso 30: Descargar etiquetas de la organización

Los administradores podrán descargar un archivo digital que contenga etiquetas no

nominativas utilizadas para distinguir a los miembros de la organización del congreso.

Escenario 30.1

Precondiciones El sistema está configurado para generar etiquetas con un tamaño de 15x7,5 cm.

Poscondiciones No hay

Excepciones Este escenario no contempla situaciones excepcionales

Iniciado por Administrador

Finalizado por Administrador

Descripción Un administrador solicita descargar un archivo que contenga las etiquetas no nominativas para identificar a los miembros de la organización del congreso con un tamaño de 15x7,5cm.

Corresponde al Requisito:

R.11.9

Escenario 30.2

Precondiciones El sistema está configurado para generar etiquetas con un tamaño de 9,2x6,28 cm.

Poscondiciones No hay

Excepciones Este escenario no contempla situaciones excepcionales

Iniciado por Administrador

Finalizado por Administrador

Descripción Un administrador solicita descargar un archivo que contenga las etiquetas no nominativos para identificar a los miembros de la organización del congreso con un tamaño de 9,2x6,28 cm.

Corresponde al Requisito:

R.11.9

Caso de Uso 31: Descargar etiquetas de excursión

Los administradores podrán descargar un archivo digital que contenga etiquetas no

nominativas utilizadas para la asistencia a las excursiones programadas.

Escenario 31.1

Precondiciones El sistema está configurado para generar etiquetas con un tamaño de 15x7,5 cm.

Poscondiciones No hay

Excepciones Si no hay datos de excursiones programadas en el sistema se genera un archivo con una página en blanco.

Iniciado por Administrador

Finalizado por Administrador

Descripción Un administrador solicita descargar un archivo que contenga las etiquetas no nominativas para la asistencia a las excursiones programadas con un tamaño de 15x7,5 cm, con una página por excursión programada.

Corresponde al Requisito:

R.11.10

Page 96: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Especificación del sistema

96 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Escenario 31.2

Precondiciones El sistema está configurado para generar etiquetas con un tamaño de 9,2x6,28 cm.

Poscondiciones No hay

Excepciones Si no hay datos de excursiones programadas en el sistema se genera un archivo con una página en blanco.

Iniciado por Administrador

Finalizado por Administrador

Descripción Un administrador solicita descargar un archivo que contenga las etiquetas no nominativas para la asistencia a las excursiones programadas con un tamaño de 9,2x6,28 cm, con una página por excursión programada.

Corresponde al Requisito:

R.11.10

Administrador

Descargar etiquetas para cena de gala

Descargar etiquetas de los usuarios

Descargar etiquetas en blanco

Descargar etiquetas de la organización

Descragar tickets de restaurante

Descargar etiquetas de excursión

Figura 4.9: Casos de uso para la descarga de etiquetas

Page 97: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Especificación del sistema | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 97

4.8.6 Gestión de pagos (general)

Caso de Uso 32: Modificar cuota individual

Los administradores podrán, para cualquier usuario individual (haya solicitado o no la emisión

de factura), modificar la cuota de inscripción que éste debe pagar.

Escenario 32.1

Precondiciones - El usuario cuya cuota se modifica ha proporcionado los datos necesarios para emitir una factura.

- La factura del usuario no ha sido marcada como lista para imprimir.

Poscondiciones La cuota a pagar por el ponente es modificada utilizando la cantidad proporcionada.

Excepciones Si no se proporciona una cantidad a pagar (o no se proporciona una cantidad válida), al usuario se le asigna la cuota por defecto.

Iniciado por Administrador

Finalizado por Sistema

Descripción Un administrador solicita cambiar la cuota de inscripción a pagar por un usuario que ha solicitado factura.

Corresponde al Requisito:

R.3.6

Escenario 32.2

Precondiciones - El usuario cuya cuota se modifica no ha proporcionado los datos necesarios para emitir una factura.

- La factura del usuario no ha sido marcada como lista para imprimir.

Poscondiciones La cuota a pagar por el ponente es modificada utilizando la cantidad proporcionada.

Excepciones Si no se proporciona una cantidad a pagar (o no se proporciona una cantidad válida), al usuario se le asigna la cuota por defecto.

Iniciado por Administrador

Finalizado por Sistema

Descripción Un administrador solicita cambiar la cuota de inscripción a pagar por un usuario que no ha solicitado factura.

Corresponde al Requisito:

R.3.6

Page 98: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Especificación del sistema

98 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Caso de Uso 33: Confirmar pago

Los administradores podrán, para cualquier usuario individual (haya solicitado o no la emisión

de factura), marcar el pago de su cuota de inscripción como confirmado.

Escenario 33.1

Precondiciones - El usuario cuyos datos se modifican ha solicitado factura. - El pago del usuario no ha sido confirmado.

Poscondiciones La información de facturación del usuario es actualizada para indicar que el usuario ha pagado.

Excepciones Este escenario no contempla situaciones excepcionales

Iniciado por Administrador

Finalizado por Sistema

Descripción Un administrador confirma el pago de la cuota de inscripción por parte de un usuario que ha solicitado factura.

Corresponde al Requisito:

R.3.5

Escenario 33.2

Precondiciones - El usuario cuyos datos se modifican ha solicitado factura. - El pago del usuario ha sido confirmado. - La factura del usuario no ha sido marcada como lista para imprimir.

Poscondiciones La información de facturación del usuario es actualizada para indicar que el usuario no ha pagado.

Excepciones Este escenario no contempla situaciones excepcionales

Iniciado por Administrador

Finalizado por Sistema

Descripción Un administrador elimina la confirmación de pago de la cuota de inscripción de un usuario que ha solicitado factura cuyo pago había sido confirmado previamente.

Corresponde al Requisito:

R.3.5

Escenario 33.3

Precondiciones - El usuario ha iniciado sesión con una cuenta de Administrador. - El usuario cuyos datos se modifican no solicitado factura. - El pago del usuario no ha sido confirmado.

Poscondiciones La información de facturación del usuario es actualizada para indicar que el usuario ha pagado.

Excepciones Este escenario no contempla situaciones excepcionales

Iniciado por Administrador

Finalizado por Sistema

Descripción Un administrador confirma el pago de la cuota de inscripción de un usuario que no ha solicitado factura.

Corresponde al Requisito:

R.3.5

Page 99: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Especificación del sistema | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 99

Escenario 33.4

Precondiciones - El usuario cuya cuyos datos se modifican no ha solicitado factura. - El pago del usuario ha sido confirmado.

Poscondiciones La información de facturación del usuario es actualizada para indicar que el usuario no ha pagado.

Excepciones Este escenario no contempla situaciones excepcionales

Iniciado por Administrador

Finalizado por Sistema

Descripción Un administrador elimina la confirmación de pago de la cuota de inscripción de un usuario que no ha solicitado factura cuyo pago había sido confirmado previamente.

Corresponde al Requisito:

R.3.5

Caso de Uso 34: Ver justificante de pago

Los administradores podrán descargar el justificante de pago de los usuarios que lo hayan

enviado (hayan solicitado o no la emisión de factura).

Escenario 34.1

Precondiciones - El usuario cuyos datos se consultan ha solicitado factura. - El usuario cuyos datos se consultan ha enviado un justificante de pago

Poscondiciones No hay

Excepciones Este escenario no contempla situaciones excepcionales

Iniciado por Administrador

Finalizado por Administrador

Descripción Un administrador solicita descargar el justificante de pago enviado previamente por un usuario que ha solicitado factura.

Corresponde al Requisito:

R.3.15

Escenario 34.2

Precondiciones - El usuario cuyos datos se consultan no ha solicitado factura. - El usuario cuyos datos se consultan ha enviado un justificante de pago

Poscondiciones No hay

Excepciones Este escenario no contempla situaciones excepcionales

Iniciado por Administrador

Finalizado por Administrador

Descripción Un administrador solicita descargar el justificante de pago enviado previamente por un usuario que no ha solicitado factura.

Corresponde al Requisito:

R.3.15

Page 100: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Especificación del sistema

100 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Administrador

Modificar cuota individual

Confirmar pago

Ver justificante de pago

Figura 4.10: Casos de uso para la gestión general de pagos

4.8.7 Gestión de facturas

Caso de Uso 35: Listar facturas

Los administradores tendrán acceso a un listado de todos los usuarios que hayan

proporcionado los datos necesarios para la emisión de una factura.

Escenario 35.1

Precondiciones No existen precondiciones adicionales.

Poscondiciones No hay

Excepciones Este escenario no contempla situaciones excepcionales

Iniciado por Administrador

Finalizado por Administrador

Descripción Un administrador solicita la lista de usuarios con datos de facturación asignados para la emisión de facturas.

Corresponde al Requisito:

R.3.3, R.3.5

Page 101: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Especificación del sistema | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 101

Caso de Uso 36: Asignar número de factura individual

Los administradores podrán, para cualquier usuario que haya solicitado la emisión de factura

y haya enviado un justificante de pago, modificar manualmente el número de la factura

emitida de forma individual.

Escenario 36.1

Precondiciones - El usuario cuyos datos se modifican ha solicitado factura - El pago del usuario ha sido confirmado y su factura no ha sido marcada como

lista para imprimir

Poscondiciones La información de facturación es actualizada para asignar al usuario el número de factura proporcionado.

Excepciones Si el número de factura proporcionado ya está en uso, se mantiene el valor anterior.

Iniciado por Administrador

Finalizado por Sistema

Descripción Un administrador solicita cambiar el número de factura asignado a un usuario individual.

Corresponde al Requisito:

R.3.3, R.3.10, R.3.11

Caso de Uso 37: Marcar factura lista para imprimir

Los administradores podrán, para cualquier usuario que haya solicitado la emisión de factura

y cuyo pago haya sido confirmado, marcar su factura como lista para imprimir (impidiendo

cualquier modificación posterior).

Escenario 37.1

Precondiciones No existen precondiciones adicionales.

Poscondiciones La información de facturación del usuario es actualizada para reflejar que sus datos han sido confirmados, impidiendo futuras modificaciones.

Excepciones Este escenario no contempla situaciones excepcionales

Iniciado por Administrador

Finalizado por Sistema

Descripción Un administrador solicita marcar una factura, cuyo pago está confirmado y con número asignado, como lista para imprimir, impidiendo modificaciones posteriores.

Corresponde al Requisito:

R.3.7, R.3.9

Page 102: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Especificación del sistema

102 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Administrador

Asignar número de factura individual

Listar facturas

Marcar factura lista para imprimir

Figura 4.11: Casos de uso para la gestión de facturas individuales

Caso de Uso 38: Descargar factura individual de ponente

Los administradores podrán, para cualquier usuario que haya solicitado la emisión de factura

y cuyo pago haya sido confirmado, descargar un archivo con una factura a su nombre para su

posterior impresión.

Escenario 38.1

Precondiciones - El usuario cuya factura se solicita ha proporcionado datos de facturación. - El pago del usuario ha sido confirmado.

Poscondiciones No hay

Excepciones Este escenario no contempla situaciones excepcionales

Iniciado por Administrador

Finalizado por Administrador

Descripción Un administrador solicita descargar un archivo que contenga la factura emitida por la organización a nombre de un usuario que la haya solicitado y cuyo pago esté confirmado.

Corresponde al Requisito:

R.3.3

Page 103: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Especificación del sistema | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 103

Caso de Uso 39: Descargar facturas listas para imprimir

Los administradores podrán descargar un archivo digital que contenga las facturas emitidas

que hayan sido marcadas como listas para imprimir.

Escenario 39.1

Precondiciones No existen precondiciones adicionales.

Poscondiciones No hay

Excepciones Si no hay facturas marcadas como listas para imprimir se genera un archivo con una página en blanco.

Iniciado por Administrador

Finalizado por Administrador

Descripción Un administrador solicita descargar un archivo que contenga todas las facturas emitidas por la organización que hayan sido previamente marcadas como listas para imprimir.

Corresponde al Requisito:

R.3.3

Caso de Uso 40: Descargar subconjunto de facturas de ponentes

Los administradores podrán descargar un archivo digital que contenga las facturas emitidas

para un subconjunto de ponentes cuyo pago ha sido confirmado y las hayan solicitado. Las

facturas de éstos podrán haber sido previamente marcadas o no como listas para imprimir.

Escenario 40.1

Precondiciones No existen precondiciones adicionales.

Poscondiciones No hay

Excepciones Si no se selecciona ninguna factura se genera un archivo con una página en blanco.

Iniciado por Administrador

Finalizado por Administrador

Descripción Un administrador solicita descargar un archivo que contenga un subconjunto de las facturas emitidas por la organización y marcadas previamente como listas para imprimir.

Corresponde al Requisito:

R.3.3

Page 104: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Especificación del sistema

104 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Administrador

Descargar facturas listas para imprimir

Descargar factura individual de ponente

Descargar subconjunto de facturas de ponentes

Figura 4.12: Casos de uso para la descarga de facturas

Caso de Uso 41: Asignación automática de números de factura para los

ponentes de España

Los administradores podrán solicitar al sistema que asigne automáticamente números de

factura para los ponentes de España que la hayan solicitado y no lo tengan asignado aún.

Escenario 41.1

Precondiciones No existen precondiciones adicionales.

Poscondiciones Todas las facturas para usuarios de España con pago confirmado que no tuviese número asignado pasan a tener números de factura correlativos.

Excepciones Este escenario no contempla situaciones excepcionales

Iniciado por Administrador

Finalizado por Sistema

Descripción Un administrador solicita la asignación automática de números de factura para aquellos usuarios de España que no lo tuvieran asignado aún.

Corresponde al Requisito:

R.3.10

Page 105: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Especificación del sistema | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 105

Caso de Uso 42: Asignación automática de números de factura para los

ponentes de fuera de España

Los administradores podrán solicitar al sistema que asigne automáticamente números de

factura para los ponentes de fuera de España que la hayan solicitado y no lo tengan asignado

aún.

Escenario 42.1

Precondiciones No existen precondiciones adicionales.

Poscondiciones Todas las facturas para usuarios de España con pago confirmado que no tuviese número asignado pasan a tener números de factura correlativos

Excepciones Este escenario no contempla situaciones excepcionales

Iniciado por Administrador

Finalizado por Sistema

Descripción Un administrador solicita la asignación automática de números de factura para aquellos usuarios de fuera de España que no lo tuvieran asignado aún.

Corresponde al Requisito:

R.3.11

Administrador

Asignación automática de númerosde factura para los ponentes

de España

Asignación automática de númerosde factura para los ponentes

de fuera de España

Figura 4.13: Casos de uso para la asignación automática de los números de factura

Page 106: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Especificación del sistema

106 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

4.8.8 Gestión de justificantes de pago

Caso de Uso 43: Listar justificantes

Los administradores tendrán acceso a un listado de todos los usuarios que no hayan

proporcionado los datos necesarios para la emisión de una factura.

Escenario 43.1

Precondiciones No existen precondiciones adicionales.

Poscondiciones No hay

Excepciones Este escenario no contempla situaciones excepcionales

Iniciado por Administrador

Finalizado por Administrador

Descripción Un administrador solicita la lista de usuarios sin datos de facturación asignados para la emisión de facturas.

Corresponde al Requisito:

R.3.15

Caso de Uso 44: Descargar justificantes para todos los ponentes

Los administradores podrán descargar un archivo digital que contenga los justificantes de pago

emitidos por la organización para todos los usuarios que no hayan solicitado factura.

Escenario 44.1

Precondiciones No existen precondiciones adicionales.

Poscondiciones No hay

Excepciones Si no hay ponentes que no hayan solicitado factura se genera un archivo con una página en blanco.

Iniciado por Administrador

Finalizado por Administrador

Descripción Un administrador solicita descargar un archivo que contenga todos los justificantes de pago emitido por la organización para aquellos usuarios que no hayan solicitado factura.

Corresponde al Requisito:

R.3.4, R.3.15

Page 107: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Especificación del sistema | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 107

Caso de Uso 45: Descargar justificantes para los ponentes que han

pagado

Los administradores podrán descargar un archivo digital que contenga los justificantes de pago

emitidos por la organización para todos los usuarios que no hayan solicitado factura y cuyo

pago haya sido confirmado.

Escenario 45.1

Precondiciones No existen precondiciones adicionales.

Poscondiciones No hay

Excepciones Si no hay ponentes que hayan pagado y que no hayan solicitado factura se genera un archivo con una página en blanco.

Iniciado por Administrador

Finalizado por Administrador

Descripción Un administrador solicita descargar un archivo que contenga todos los justificantes de pago emitido por la organización para aquellos usuarios que no hayan solicitado factura y cuyo pago haya sido confirmado.

Corresponde al Requisito:

R.3.4, R.3.15

Caso de Uso 46: Descargar subconjunto de justificantes

Los administradores podrán descargar un archivo digital que contenga los justificantes de pago

emitidos por la organización para un subconjunto de usuarios cuyo pago haya sido confirmado

y no hayan solicitado factura.

Escenario 46.1

Precondiciones No existen precondiciones adicionales.

Poscondiciones No hay

Excepciones Si no se selecciona ningún justificante se genera un archivo con una página en blanco.

Iniciado por Administrador

Finalizado por Administrador

Descripción Un administrador solicita descargar un archivo que contenga los justificantes para un subconjunto de usuarios que no hayan solicitado factura y cuyo pago haya sido previamente confirmado.

Corresponde al Requisito:

R.3.4, R.3.15

Page 108: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Especificación del sistema

108 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Administrador

Descargar justificantes para todos los ponentes

Listar justificantes

Descargar justificantes paralos ponentes que han pagado

Descargar subconjunto dejustificantes

Figura 4.14: Casos de uso para la gestión de justificantes

4.8.9 Gestión de simposios

Caso de Uso 47: Listar simposios

Los administradores tendrán acceso a un listado con el título, fecha y hora de inicio, y otros

detalles para todos los simposios programados.

Escenario 47.1

Precondiciones No existen precondiciones adicionales.

Poscondiciones No hay

Excepciones Este escenario no contempla situaciones excepcionales

Iniciado por Administrador

Finalizado por Administrador

Descripción Un administrador solicita acceder al listado de los simposios definidos en el sistema.

Corresponde al Requisito:

R.4.2, R.4.3

Page 109: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Especificación del sistema | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 109

Caso de Uso 48: Añadir simposio

Los administradores podrán añadir nuevos simposios proporcionando su título.

Escenario 48.1

Precondiciones No existen precondiciones adicionales.

Poscondiciones El sistema creará un nuevo simposio con el nombre proporcionado, y éste pasará a estar disponible durante el envío de nuevos papers.

Excepciones Si no se proporciona el nombre del simposio, o el proporcionado es vacío, no se hace nada.

Iniciado por Administrador

Finalizado por Sistema

Descripción Un administrador solicita crear un nuevo simposio que tendrá lugar durante la conferencia, indicando su nombre.

Corresponde al Requisito:

R.4.1

Caso de Uso 49: Borrar simposio vacío

Los administradores podrán borrar los simposios existentes de manera individual siempre que

no haya ponencias programada en ellos.

Escenario 49.1

Precondiciones El simposio a borrar no tiene papers asignados.

Poscondiciones El simposio borrado dejará de estar disponible durante el envío de nuevos papers y en los calendarios iCal.

Excepciones Este escenario no contempla situaciones excepcionales

Iniciado por Administrador

Finalizado por Sistema

Descripción Un administrador solicita borrar un simposio vacío, esto es, sin papers ni posters asignados.

Corresponde al Requisito:

R.4.3, R.4.4

Caso de Uso 50: Editar nombre de simposio

Los administradores podrán modificar el nombre de los simposios existentes de manera

individual.

Escenario 50.1

Precondiciones No existen precondiciones adicionales.

Poscondiciones El simposio modificado pasará a tener el nuevo nombre proporcionado.

Excepciones Si se indica un nombre de simposio vacío el sistema no hace nada.

Iniciado por Administrador

Finalizado por Sistema

Descripción Un administrador solicita cambiar el título de un simposio definido previamente.

Corresponde al Requisito:

R.4.2

Page 110: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Especificación del sistema

110 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Caso de Uso 51: Editar fecha de inicio de simposio

Los administradores podrán modificar la fecha y hora de inicio planificada para los simposios

definidos de manera individual.

Escenario 51.1

Precondiciones No existen precondiciones adicionales.

Poscondiciones El simposio modificado pasará a tener como fecha de inicio la fecha proporcionada.

Excepciones Si la nueva fecha de inicio es vacía o no es válida el sistema no hace nada.

Iniciado por Administrador

Finalizado por Sistema

Descripción Un administrador solicita cambiar la fecha y hora de inicio de un simposio definido previamente.

Corresponde al Requisito:

R.4.2

Administrador

Añadir simposio

Listar simposios

Borrar simposio vacío

Editar nombre de simposio

Editar fecha de inicio de simposio

Figura 4.15: Casos de uso para la gestión de simposios

Page 111: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Especificación del sistema | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 111

4.8.10 Gestión de salas

Caso de Uso 52: Listar salas

Los administradores tendrán acceso a un listado con el nombre y número de posters asignados

a todas las salas disponibles para la celebración de la conferencia.

Escenario 52.1

Precondiciones No existen precondiciones adicionales.

Poscondiciones No hay

Excepciones Este escenario no contempla situaciones excepcionales

Iniciado por Administrador

Finalizado por Administrador

Descripción Un administrador solicita acceder al listado de las salas definidas en el sistema.

Corresponde al Requisito:

R.6.2, R.6.3

Caso de Uso 53: Añadir sala

Los administradores podrán añadir nuevas salas proporcionando un nombre para ellas.

Escenario 53.1

Precondiciones No existen precondiciones adicionales.

Poscondiciones El sistema registrará una nueva sala con el nombre proporcionado, y ésta pasará a estar disponible para la asignación de posters.

Excepciones Si no se proporciona el nombre de la sala, o el proporcionado es vacío, no se hace nada.

Iniciado por Administrador

Finalizado por Sistema

Descripción Un administrador solicita añadir los datos de una nueva sala disponible durante la conferencia, indicando su nombre.

Corresponde al Requisito:

R.6.1

Page 112: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Especificación del sistema

112 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Caso de Uso 54: Borrar sala vacía

Los administradores podrán borrar las salas existentes de manera individual siempre que no

esté planificada la exposición de posters en ellas.

Escenario 54.1

Precondiciones La sala a borrar no tiene posters asignados.

Poscondiciones La sala borrada dejará de estar disponible en la interfaz de administración para la asignación de posters.

Excepciones Este escenario no contempla situaciones excepcionales

Iniciado por Administrador

Finalizado por Administrador

Descripción Un administrador solicita borrar una sala vacía, esto es, sin posters asignados.

Corresponde al Requisito:

R.6.3, R.6.4

Caso de Uso 55: Editar nombre de sala

Los administradores podrán modificar el nombre de las salas existentes de manera individual.

Escenario 55.1

Precondiciones No existen precondiciones adicionales.

Poscondiciones La sala modificada pasará a tener el nuevo nombre proporcionado.

Excepciones Si se indica un nombre de sala vacío el sistema no hace nada.

Iniciado por Administrador

Finalizado por Sistema

Descripción Un administrador solicita cambiar el nombre de una sala definida previamente.

Corresponde al Requisito:

R.6.1, R.6.2

Administrador

Añadir sala

Listar salas

Borrar sala vacía

Editar nombre de sala

Figura 4.16: Casos de uso para la gestión de salas

Page 113: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Especificación del sistema | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 113

4.8.11 Gestión de excursiones

Caso de Uso 56: Listar excursiones

Los administradores tendrán acceso a un listado con el nombre de todas las excursiones

planificadas.

Escenario 56.1

Precondiciones No existen precondiciones adicionales.

Poscondiciones No hay

Excepciones Este escenario no contempla situaciones excepcionales

Iniciado por Administrador

Finalizado por Administrador

Descripción Un administrador solicita acceder al listado de las excursiones definidas en el sistema.

Corresponde al Requisito:

R.12.3

Caso de Uso 57: Añadir excursión

Los administradores podrán añadir nuevas excursiones proporcionando un nombre descriptivo

para ellas.

Escenario 57.1

Precondiciones No existen precondiciones adicionales.

Poscondiciones El sistema creará una nueva excursión con el nombre proporcionado, y ésta pasará a mostrarse en las etiquetas de excursiones.

Excepciones Si no se proporciona el nombre de la excursión, o el proporcionado es vacío, no se hace nada.

Iniciado por Administrador

Finalizado por Sistema

Descripción Un administrador solicita añadir los datos de una nueva excursión que tendrá lugar durante la conferencia, indicando su nombre.

Corresponde al Requisito:

R.12.1

Page 114: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Especificación del sistema

114 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Caso de Uso 58: Borrar excursión

Los administradores podrán borrar las excursiones existentes de manera individual.

Escenario 58.1

Precondiciones No existen precondiciones adicionales.

Poscondiciones La excursión borrada dejará de estar disponible en la interfaz de administración, y no se mostrará en las etiquetas de las excursiones.

Excepciones Este escenario no contempla situaciones excepcionales

Iniciado por Administrador

Finalizado por Administrador

Descripción Un administrador solicita borrar una sala vacía, esto es, sin posters asignados.

Corresponde al Requisito:

R.12.2

Administrador

Añadir excursión

Listar excursiones

Borrar excursión

Figura 4.17: Casos de uso para la gestión de excursiones

4.8.12 Gestión de papers

Caso de Uso 59: Listar papers

Los administradores tendrán acceso a un listado con el título, conferencia asignada, ponente

asociado y fecha de creación para todos los papers enviados por los ponentes.

Escenario 59.1

Precondiciones No existen precondiciones adicionales.

Poscondiciones No hay

Excepciones Este escenario no contempla situaciones excepcionales

Iniciado por Administrador

Finalizado por Administrador

Descripción Los administradores podrán acceder al listado de todos los papers enviados por los ponentes.

Corresponde al Requisito:

R.5.15

Page 115: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Especificación del sistema | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 115

Caso de Uso 60: Descargar paper

Los administradores podrán descargar la primera y última versión de todos los papers enviados

por los ponentes.

Escenario 60.1

Precondiciones No existen precondiciones adicionales.

Poscondiciones No hay

Excepciones Este escenario no contempla situaciones excepcionales

Iniciado por Administrador

Finalizado por Administrador

Descripción Un administrador solicita descargar un paper enviado previamente por un ponente.

Corresponde al Requisito:

R.5.5

Caso de Uso 61: Editar nombre de paper

Los administradores podrán editar el título asociado a cualquier paper enviado.

Escenario 61.1

Precondiciones No existen precondiciones adicionales.

Poscondiciones El paper modificado pasará a tener el nuevo nombre proporcionado.

Excepciones Si se indica un nombre de paper vacío el sistema no hace nada.

Iniciado por Administrador

Finalizado por Sistema

Descripción Un administrador solicita cambiar el título de un paper enviado por un ponente.

Corresponde al Requisito:

R.5.14

Caso de Uso 62: Marcar inicio de revisión de paper

Los administradores podrán establecer un flag en cualquier paper para indicar que se ha

iniciado su proceso de revisión.

Escenario 62.1

Precondiciones No existen precondiciones adicionales.

Poscondiciones - El ponente que envió el paper que entra en revisión no podrá modificarlo, ni podrá enviar nuevas versiones hasta que sea aceptado.

- El paper que entra en revisión no podrá ser borrado por el usuario que lo envió.

Excepciones Este escenario no contempla situaciones excepcionales

Iniciado por Administrador

Finalizado por Administrador

Descripción Un administrador solicita iniciar el proceso de revisión de un paper, impidiendo su modificación por parte del ponente.

Corresponde al Requisito:

R.5.9

Page 116: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Especificación del sistema

116 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Caso de Uso 63: Aceptar paper

Los administradores podrán establecer que un paper ha sido aceptado siempre que

previamente se haya marcado su proceso de revisión como iniciado.

Escenario 63.1

Precondiciones - El paper a aceptar debe haber entrado previamente en proceso de revisión. - Se enviará un correo electrónico informando de la aceptación del paper al

usuario que lo envió y a los administradores.

Poscondiciones El ponente que envió el paper aceptado no podrá borrarlo, pero sí podrá enviar nuevas versiones del mismo.

Excepciones Este escenario no contempla situaciones excepcionales

Iniciado por Administrador

Finalizado por Administrador

Descripción Un administrador solicita marcar un paper como aceptado para su presentación en la conferencia, impidiendo su borrado por parte del ponente.

Corresponde al Requisito:

R.5.2

Caso de Uso 64: Asociar sala a poster

Los administradores podrán indicar la sala en la que se expondrán los papers de tipo poster de

manera individual.

Escenario 64.1

Precondiciones - El paper al que se le asocia una sala debe ser de tipo poster. - Como sala no se asigna la predeterminada (con nombre vacío)

Poscondiciones Los datos sobre la sala y fecha/hora de exposición del poster pasarán a reflejar la información proporcionada.

Excepciones Si se indica una fecha y hora de inicio de exposición posterior a la de fin, la fecha de fin pasará a ser la de inicio y viceversa.

Iniciado por Administrador

Finalizado por Sistema

Descripción El administrador podrá asociar una sala y una fecha a los papers de tipo poster

Corresponde al Requisito:

R.5.10, R.5.11

Escenario 64.2

Precondiciones - El paper al que se le asocia una sala debe ser de tipo poster. - Como sala se asigna la predeterminada (con nombre vacío).

Poscondiciones Los datos sobre la fecha/hora de exposición del poster pasarán a reflejar la información proporcionada, y la sala pasará a estar sin definir.

Excepciones Si se indica una fecha y hora de inicio de exposición posterior a la de fin, la fecha de fin pasará a ser la de inicio y viceversa.

Iniciado por Administrador

Finalizado por Sistema

Descripción El administrador podrá asociar una sala y una fecha a los papers de tipo poster

Corresponde al Requisito:

R.5.10, R.5.11, R.5.12

Page 117: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Especificación del sistema | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 117

Administrador

Descargar paper

Listar papers

Editar nombre de paper

Marcar inicio de revisión de paper

Aceptar paper

Asociar sala a poster

Figura 4.18: Casos de uso para la gestión de papers

Caso de Uso 65: Descargar certificado de presentación de ponencias para

todos los papers

Los administradores podrán descargar un archivo digital que contenga los certificados de

presentación de las ponencias asociadas a todos los papers enviados.

Escenario 65.1

Precondiciones No existen precondiciones adicionales.

Poscondiciones No hay

Excepciones Si no hay papers aceptados se genera un archivo con una página en blanco.

Iniciado por Administrador

Finalizado por Administrador

Descripción Un administrador solicita descargar un archivo que contenga todos los certificados de presentación de ponencias emitido por la organización para todos los papers aceptados.

Corresponde al Requisito:

R.11.15

Page 118: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Especificación del sistema

118 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Caso de Uso 66: Descargar certificado de presentación de ponencias para

los usuarios que han pagado

Los administradores podrán descargar un archivo digital que contenga los certificados de

presentación de las ponencias asociadas a los papers enviados por usuarios cuyo pago haya

sido confirmado.

Escenario 66.1

Precondiciones No existen precondiciones adicionales.

Poscondiciones No hay

Excepciones Si no hay papers aceptados de usuarios cuyo pago haya sido confirmado se genera un archivo con una página en blanco.

Iniciado por Administrador

Finalizado por Administrador

Descripción Un administrador solicita descargar todos los certificados de presentación de ponencias emitidos por la organización para todos aquellos papers que hayan sido aceptados y correspondan a usuarios cuyo pago ha sido confirmado.

Corresponde al Requisito:

R.11.16

Caso de Uso 67: Descargar subconjunto de certificados de presentación

de ponencias

Los administradores podrán descargar un archivo digital que contenga los certificados de

presentación de las ponencias asociadas a un subconjunto de papers seleccionados

previamente, siempre que el pago de los autores asociado a los mismos haya sido confirmado.

Escenario 67.1

Precondiciones No existen precondiciones adicionales.

Poscondiciones No hay

Excepciones Si no hay papers aceptados de usuarios cuyo pago haya sido confirmado se genera un archivo con una página en blanco.

Iniciado por Administrador

Finalizado por Administrador

Descripción Un administrador solicita descargar todos los certificados de presentación de ponencias emitidos por la organización para un subconjunto de papers aceptados enviados por usuarios cuyo pago ha sido confirmado.

Corresponde al Requisito:

R.11.17

Page 119: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Especificación del sistema | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 119

Caso de Uso 68: Descargar certificado de presentación de ponencia

individual

Los administradores podrán descargar un archivo digital que contenga el certificado de

presentación de una ponencia asociadas a un paper individual siempre que el autor asociado

al mismo tengan confirmado el pago de su cuota de inscripción al congreso.

Escenario 68.1

Precondiciones No existen precondiciones adicionales.

Poscondiciones No hay

Excepciones Este escenario no contempla situaciones excepcionales

Iniciado por Administrador

Finalizado por Administrador

Descripción Un administrador solicita descargar un archivo que contenga el certificado de presentación de ponencia emitido por la organización para un papers aceptado enviado por un usuario cuyo pago ha sido confirmado.

Corresponde al Requisito:

R.11.14

Caso de Uso 69: Descargar listado de papers

Los administradores podrán descargar un archivo digital que contenga el listado completo de

todos los papers enviados y sus datos más relevantes, incluyendo su nombre de archivo, título,

autores y estado de aceptación.

Escenario 69.1

Precondiciones No existen precondiciones adicionales.

Poscondiciones No hay

Excepciones Este escenario no contempla situaciones excepcionales

Iniciado por Administrador

Finalizado por Administrador

Descripción Los administradores podrán descargar un listado de los papers en formato Excel con información sobre éstos y sobre los usuarios que los envían.

Corresponde al Requisito:

R.11.12

Escenario 69.2

Precondiciones No existen precondiciones adicionales.

Poscondiciones No hay

Excepciones Este escenario no contempla situaciones excepcionales

Iniciado por Administrador

Finalizado por Administrador

Descripción Los administradores podrán descargar un listado con los papers en formato HTML con información sobre éstos y sobre los usuarios que los envían

Corresponde al Requisito:

R.11.13

Page 120: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Especificación del sistema

120 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Administrador

Descargar certificado de presentación de ponenciaspara los usuarios que han pagado

Descargar certificado de presentación de ponencias para todos los papers

Descargar subconjunto de certificados de presentación de ponencias

Descargar certificado de presentaciónde ponencia individual

Descargar listado de papers

Figura 4.19: Casos de uso de descarga de certificados y listado papers

4.8.13 Configuración de la aplicación

Caso de Uso 70: Modificar parámetros de la conferencia

Los administradores podrán modificar los datos descriptivos de la conferencia, incluyendo año,

fechas, lugar de celebración, CIF, cuota de inscripción y parámetros de las etiquetas

autogeneradas, entre otros.

Escenario 70.1

Precondiciones No existen precondiciones adicionales.

Poscondiciones Los parámetros de la conferencia almacenados en la base de datos pasarán a reflejar los valores proporcionados.

Excepciones - Si el año de la conferencia proporcionado no está comprendido ente 2010 y 2020, se mantendrá el valor anterior.

- Si la URL de la conferencia tiene una sintaxis no válida, o no utiliza el protocolo http:// o https://, se mantendrá la URL anterior.

- Si el valor indicado como cuota es menor o igual a cero, es mayor que 9999, o no es un número válido se mantendrá la cuota anterior.

Iniciado por Administrador

Finalizado por Sistema

Descripción Los administradores podrán modificar: año, fecha y lugar del congreso, URL del congreso, CIF, ISBN, ISSN, fechas de firma de facturas y certificados, cuota a pagar, y tamaño y orientación de las etiquetas

Corresponde al Requisito:

R.11.18, R.11.19

Page 121: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Especificación del sistema | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 121

Caso de Uso 71: Modificar configuración de envío de correos

Los administradores podrán modificar los datos de conexión y autentificación del servidor de

correo utilizado para el envío de notificaciones a organizadores y ponentes.

Escenario 71.1

Precondiciones No existen precondiciones adicionales.

Poscondiciones Los parámetros utilizados para el envío de coreos almacenados en la base de datos pasarán a reflejar los valores proporcionados.

Excepciones Este escenario no contempla situaciones excepcionales

Iniciado por Administrador

Finalizado por Administrador

Descripción Los administradores podrán modificar los parámetros de conexión al servidor SMTP utilizado para el envío de notificaciones.

Corresponde al Requisito:

R.7.5

Caso de Uso 72: Modificar destino de las notificaciones

Los administradores podrán modificar la lista de direcciones de correo a las cuales enviar

notificaciones administrativas.

Escenario 72.1

Precondiciones No existen precondiciones adicionales.

Poscondiciones La lista de direcciones de correo electrónico a las que enviar las notificaciones generadas por la aplicación almacenadas en la base de datos pasará a reflejar los valores proporcionados (eliminándose cualquier otra anterior).

Excepciones Si se proporciona un valor vacío el sistema no enviará notificaciones.

Iniciado por Administrador

Finalizado por Sistema

Descripción Los administradores podrán modificar la lista de direcciones de correo electrónico a las cuales enviar notificaciones sobre la actividad de administradores y ponentes.

Corresponde al Requisito:

R.7.4

Page 122: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Especificación del sistema

122 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Administrador

Modificar configuración de envío de correos

Modificar parámetros de la conferencia

Modificar destino de las notificaciones

Figura 4.20: Casos de uso generales de configuración

Caso de Uso 73: Modificar número de secuencia para las facturas de

España

Los administradores podrán modificar el siguiente número de secuencia a utilizar para la

asignación automática de números de factura para los ponentes de España.

Escenario 73.1

Precondiciones No existen precondiciones adicionales.

Poscondiciones El siguiente número a utilizar en la asignación automática de números de factura para las facturas de ponentes de España pasará a ser el proporcionado.

Excepciones Si no se proporciona un número natural se mostrará un error y no se hará nada.

Iniciado por Administrador

Finalizado por Sistema

Descripción Los administradores podrán modificar el número de secuencia a partir del cual comenzarán a numerarse las facturas de España. Dicho número será usado la próxima vez que se solicite asignar automáticamente números de factura a los ponentes de España cuyo pago esté confirmado.

Corresponde al Requisito:

R.3.13

Page 123: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Especificación del sistema | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 123

Caso de Uso 74: Modificar número de secuencia para las facturas del

resto de países

Los administradores podrán modificar el siguiente número de secuencia a utilizar para la

asignación automática de números de factura para los ponentes de fuera de España.

Escenario 74.1

Precondiciones No existen precondiciones adicionales.

Poscondiciones El siguiente número a utilizar en la asignación automática de números de factura para las facturas de ponentes de fuera de España pasará a ser el proporcionado.

Excepciones Si no se proporciona un número natural se mostrará un error y no se hará nada.

Iniciado por Administrador

Finalizado por Sistema

Descripción Los administradores podrán modificar el número a partir del cual comenzarán a numerarse las facturas de fuera de España. Dicho número será usado la próxima vez que se solicite la asignación automática de números de factura para los ponentes de fuera de España cuyo pago esté confirmado.

Corresponde al Requisito:

R.3.14

Administrador

Modificar número de secuencia para lasfacturas de España

Modificar número de secuencia para lasfacturas del resto de países

Figura 4.21: Casos de uso para la configuración de los números de factura

Caso de Uso 75: Habilitar acceso público

Los administradores podrán habilitar el acceso y registro de nuevas cuentas de ponente en

caso de estar deshabilitado.

Escenario 75.1

Precondiciones El acceso público a la página está deshabilitado.

Poscondiciones El sistema permitirá iniciar sesión a los usuarios cuya cuenta no sea de tipo administrativo.

Excepciones Este escenario no contempla situaciones excepcionales

Iniciado por Administrador

Finalizado por Sistema

Descripción Los administradores podrán permitir el acceso al sistema a los ponentes para labores de consulta, modificación de facturas y (bajo ciertas condiciones) envío y modificación de papers.

Corresponde al Requisito:

R.10.1, 10.2

Page 124: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Especificación del sistema

124 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Caso de Uso 76: Deshabilitar acceso público

Los administradores podrán deshabilitar el acceso y registro de nuevas cuentas de ponente en

caso de estar habilitado.

Escenario 76.1

Precondiciones El acceso público a la página está habilitado.

Poscondiciones - El sistema no permitirá iniciar sesión a los usuarios cuya cuenta no sea de tipo administrativo.

- Los usuarios que hubiesen iniciado sesión en el sistema en el momento de deshabilitar el acceso público no podrán realizar más acciones.

Excepciones Este escenario no contempla situaciones excepcionales

Iniciado por Administrador

Finalizado por Sistema

Descripción Los administradores podrán restringir el acceso al sistema a los ponentes, evitando que éstos consulten y modifiquen sus datos, incluyendo el envío de papers y justificantes.

Corresponde al Requisito:

R.10.1, R.10.2

Caso de Uso 77: Abrir plazo de envío de papers

Los administradores podrán habilitar el envío de papers (tanto nuevos como revisiones de los

existentes, siempre que se cumplan las condiciones adicionales necesarias) de manera global.

Escenario 77.1

Precondiciones El plazo de envío de papers está cerrado.

Poscondiciones El sistema permitirá a los ponentes el envío de nuevos papers y la modificación de los existentes.

Excepciones Este escenario no contempla situaciones excepcionales

Iniciado por Administrador

Finalizado por Sistema

Descripción Los administradores podrán permitir el envío de nuevos papers y la modificación de los existentes para los ponentes.

Corresponde al Requisito:

R.5.13

Page 125: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Especificación del sistema | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 125

Caso de Uso 78: Cerrar plazo de envío de papers

Los administradores podrán deshabilitar el envío de papers (tanto nuevos como revisiones de

los existentes) de manera global.

Escenario 78.1

Precondiciones El plazo de envío de papers está abierto.

Poscondiciones El sistema no permitirá a los ponentes el envío de nuevos papers ni modificación de los existentes.

Excepciones Este escenario no contempla situaciones excepcionales

Iniciado por Administrador

Finalizado por Sistema

Descripción Los administradores podrán restringir el envío de nuevos papers a los ponentes, sin influir en el resto de acciones permitidas para ellos, incluyendo la modificación de sus datos personales o el envío de justificantes de pago.

Corresponde al Requisito:

R.5.13

Administrador

Deshabilitar acceso público

Habilitar acceso público

Abrir plazo de envío de papers

Cerrar plazo de envío de papers

Figura 4.22: Casos de uso para la configuración de acceso

Page 126: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Especificación del sistema

126 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Caso de Uso 79: Verificar funcionamiento del envío de correos

Los administradores podrán solicitar al sistema el envío de un correo electrónico a una

dirección de correo electrónico concreta para verificar que la configuración de correo actual

funciona correctamente.

Escenario 79.1

Precondiciones No existen precondiciones adicionales.

Poscondiciones No hay

Excepciones Si no se proporciona una dirección de correo electrónico de destino el sistema infromará de ello en la salida de depuración, y no intentará la comunicación con el servidor SMTP.

Iniciado por Administrador

Finalizado por Sistema

Descripción Para verificar el correcto funcionamiento del sistema de notificaciones con la configuración guardada, los administradores podrán solicitar el envío un correo electrónico a una dirección dada e inspeccionar los mensajes intercambiados entre el sistema y el servidor SMTP.

Corresponde al Requisito:

R.7.6, R.7.7

Administrador

Verificar funcionamiento del envío de correos

Figura 4.23: Casos de uso para la verificación del envío de correos

4.8.14 Información estadística

Caso de Uso 80: Listar autores

Los administradores tendrán acceso a un listado con el nombre, institución asociada, país y

número de papers y posters enviados para todos los usuarios que hayan enviado algún paper.

Escenario 80.1

Precondiciones No existen precondiciones adicionales.

Poscondiciones No hay

Excepciones Este escenario no contempla situaciones excepcionales

Iniciado por Administrador

Finalizado por Administrador

Descripción Los administradores podrán acceder a una página con el listado de los usuarios registrados que han enviado algún paper.

Corresponde al Requisito:

R.9.8

Page 127: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Especificación del sistema | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 127

Caso de Uso 81: Descargar listado de autores

Los administradores podrán descargar un archivo digital con el listado de usuarios que hayan

enviado algún paper y sus datos más relevantes, incluyendo su nombre, institución asociada,

país de procedencia y número de papers y posters enviados.

Escenario 81.1

Precondiciones No existen precondiciones adicionales.

Poscondiciones No hay

Excepciones Este escenario no contempla situaciones excepcionales

Iniciado por Administrador

Finalizado por Administrador

Descripción Los administradores podrán descargar un listado en formato Excel con la información de los usuarios que han enviado algún paper.

Corresponde al Requisito:

R.11.11

Caso de Uso 82: Ver estadísticas

Los administradores tendrán acceso a una página con información estadística agregada de

asistentes, papers, pagos y países de procedencia.

Escenario 82.1

Precondiciones No existen precondiciones adicionales.

Poscondiciones No hay

Excepciones Este escenario no contempla situaciones excepcionales

Iniciado por Administrador

Finalizado por Administrador

Descripción Los administradores podrán acceder a una página con estadísticas resumidas sobre usuarios registrados, papers enviados, pagos realizados y países de procedencia.

Corresponde al Requisito:

R.9.1, R.9.2, R.9.3, R.9.4, R.9.5, R.9.6, R.9.7

Page 128: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Especificación del sistema

128 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Figura 4.24: Casos de uso para la obtención de información de autores

Administrador

Ver estadísticas

Figura 4.25: Casos de uso para la obtención de información estadística

AdministradorDescargar listado de autores

Listar autores

Page 129: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 129

5 DISEÑO E IMPLEMENTACIÓN

5.1 Particionamiento físico de subsistemas

Debido a la naturaleza de la aplicación, ésta podría ejecutarse completamente desde un único servidor

(servidor web, de envío de correos y base de datos) o distribuir los distintos componentes en

servidores físicos independientes. Además, el estado global de la aplicación queda definido a partir de

los datos de la base de datos y los archivos enviados, por lo que podrían utilizarse múltiples servidores

web siempre que éstos dispongan de un sistema de archivos distribuido (como NFS) donde guardar los

archivos enviados por los ponentes y la información de las sesiones de usuario activas. El uso de

múltiples servidores físicos para la base de datos sería posible utilizando esquemas de replicación

multi-master estándar de MySQL, de forma que todas las escrituras se realizarían en todos los

servidores físicos, mientras que las lecturas se realizarían de forma distribuida.

En cualquier caso, para la carga esperada es suficiente un único servidor físico que gestione tanto las

solicitudes HTTP como la base de datos, por lo que ha sido la solución adoptada. Aun así, existen

subsistemas secundarios externos a la propia aplicación, pero que son esenciales para su correcto

funcionamiento, como los propios sistemas de acceso a Internet y los servidores SMTP utilizados para

el envío de correos electrónicos. En nuestro caso, al estar ubicados en una red académica estatal, el

acceso a Internet está proporcionado por RedIRIS, mientras que el servicio de envío de correo utilizado

está proporcionado por Google (aunque podría utilizarse cualquier otro proveedor en ambos casos).

« »

: pirweb

« »

« »« »

« »

: webcmmse: webcmmse

: cmmse Schema

...

« »

Figura 5.1: Diagrama de despliegue lógico (detalle de procesos del servidor físico)

Page 130: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

130 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

RedIRIS

Internet

Google

Figura 5.2: Diagrama simplificado de sistemas externos usados por la aplicación

Page 131: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 131

5.2 Implementación de funcionalidades dinámicas de la

interfaz de administración

Utilizando Javascript, la aplicación permite realizar llamadas a algunos controladores de administración

por medio de funcionalidades de RPC asíncrono conocidas comúnmente como AJAX. Estas llamadas

invocan a las acciones definidas por los controladores del espacio de nombres

\CMMSE\Controllers\Admin\JSON y modifican el estado de papers, simposios, facturas y justificantes

sin necesidad de recargar completamente las páginas desde las que se realizan. En su lugar, se envía

una solicitud al servidor en segundo plano y, en función de la respuesta, se actualizan partes de las

páginas, modificando el DOM de los elementos afectados por el cambio utilizando jQuery (por

ejemplo, mostrando u ocultando controles adicionales, o actualizando el valor de campos de texto).

La invocación de estas acciones está sujeta a los mecanismos de seguridad estándar del sitio, y

retornan un objeto JSON con los nuevos datos, o un código y (en ciertos casos) un mensaje de error si

no es posible técnicamente realizar el cambio (por ejemplo, si el servidor MySQL retorna un error) o si

el usuario no dispone de permisos para ello (por ejemplo, si la sesión del administrador que solicita el

cambio ha expirado).

Además, existen otros métodos auxiliares encargados de la inicialización de la interfaz de

administración, incluyendo la ordenación y el resaltado de filas seleccionadas de las tablas en el lado

del cliente, el cambio del target de los enlaces a PDFs (lo cual hace que ciertas descargas, como las

facturas y los papers, se abran en pestañas nuevas de manera predeterminada) o la inclusión dinámica

de un botón para volver a la parte superior de la página en aquellas que incluyen listados que requieran

el uso de scroll para recorrerse de forma completa.

El código Javascript asociado a la interfaz de administración se encuentra en el archivo admin.js del

subdirectorio static de webcmmse. Al igual que en la implementación de la aplicación del lado del

servidor, las funciones aquí descritas están organizadas emulando espacios de nombres a partir de un

objeto global cmmse que incluye, a su vez, otros objetos para representar la jerarquía de métodos de

administración.

Las propiedades y métodos aquí descritos se corresponden con propiedades de los citados objetos.

Todos los objetos son estáticos, es decir, contienen únicamente métodos y no guardan estado interno,

recurriendo a los valores expuestos por el DOM del documento HTML en los casos en los que es

necesario.

Page 132: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

132 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

5.2.1 cmmse.admin

Inicialización de ordenación de tablas

Función anónima utilizada para inicializar el plugin jQuery Tablesorter sobre los listados (de usuarios,

papers, simposios, etc).

Inicialización del enlace de regreso a la parte superior del panel de administración.

Función anónima utilizada para mostrar un enlace que permita volver a la parte superior del panel de

administración, animando el desplazamiento tras hacer clic sobre él.

Inicialización de los objetivos de los enlaces de descarga del panel de administración

Función anónima invocada tras la carga del DOM del panel de administración que comprueba que la

URI de la página actual se corresponde con alguna del panel de administración y, en ese caso, invoca

a cmmse.admin.change_targets().

change_targets() : void

Cambia el atributo objetivo (target) de los enlaces del panel de administración que apuntan a las URIs

de descarga de archivos PDF generados dinámicamente (justificantes de pagos confirmados, facturas,

certificados de asistencia…) y enviados por los usuarios (justificantes y papers enviados por éstos).

5.2.2 cmmse.admin.json

endpoint_base_uri : string

String que contiene la URL base para las llamadas a funciones AJAX. La implementación actual apunta

a la URI /webcmmse/index.php/admin/json/.

uris : string[]

Vector que contiene las URIs, relativas a endpoint_base_uri (descrito anteriormente), utilizadas para

invocar las distintas acciones AJAX del panel de administración.

getURI(string args….) : string

Función variadica encargada de generar una URI a partir de la URI base y de los parámetros utilizados

para su invocación14.

doRequest(string endpoint, string callback, object|string postData) : boolean

Función utilizada para iniciar una solicitud asíncrona a la URI indicada como parámetro. Si el parámetro

postData es distinto de null, se enviará su contenido como parámetros POST (realizando las

conversiones oportunas para su transmisión a través de la red).

14 Por ejemplo, las llamadas a cmmse.admin.json.getURI(cmmse.admin.json.uris.set_paidflag, uid, flag) se corresponden con URIs tipo /webcmmse/index.php/admin/json/set_paidflag/<uid>/<flag>.

Page 133: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 133

Además, la llamada a la función mostrará una animación y un mensaje en la parte superior del panel

de administración para indicar que se está esperando la respuesta del servidor a la solicitud realizada.

Tras obtener respuesta, se remplazará el mensaje anterior para indicar si la solicitud ha sido ejecutada

satisfactoriamente (mostrando “Cambios guardados”) o se han producido errores (mostrando “Error”

o un mensaje de error específico, en caso de que el servidor lo haya proporcionado). En caso de que

no se produzcan errores, se inicializará un temporizador para ocultar el mensaje informativo dos

segundos después de mostrarse.

Esta función retorna falso siempre, de forma que se impide, en los casos en que es aplicable, que el

navegador siga los enlaces al hacer clic en ellos, de forma que las distintas acciones se realizan

exclusivamente utilizando AJAX en lugar de solicitar una nueva página, a la vez que se permite seguir

los enlaces de la manera estándar en los navegadores que no soportan solicitudes AJAX.

5.2.3 cmmse.admin.users

allowOverflow() : void

Función invocada para mostrar los campos ocultos de la lista de ponentes del panel de administración.

Es invocada cuando un administrador situado en la lista de usuarios solicita que se muestren los

campos de la tabla de usuarios ocultados automáticamente al utilizar una resolución de pantalla

demasiado baja o tener la ventana del navegador redimensionada a un tamaño inferior al necesario

para mostrar todos los datos de forma clara.

5.2.4 cmmse.admin.invoices

setpaidflag(integer uid, integer flag) :void

Realiza una solicitud AJAX para confirmar o eliminar la confirmación de pago del usuario asociado a un

justificante desde la lista de usuarios que han solicitado factura, mostrando, ocultando, habilitando

y/o deshabilitando controles adicionales para el mismo en función del nuevo estado.

setbillprint(integer uid, integer flag) : void

Realiza una solicitud AJAX para marcar el flag que indica si la factura asociada a un usuario dado está

lista para ser impresa, deshabilitando todos los controles asociados al mismo para impedir su

modificación posterior.

set_billno(integer uid) : void

Realiza una solicitud AJAX para cambiar el número de factura de un usuario al valor indicado en el

cuadro de texto asociado al mismo.

set_fee(integer uid) : void

Realiza una solicitud AJAX para cambiar la cuota a pagar por un usuario al valor indicado en el cuadro

de texto asociado al mismo. En caso de que el cuadro de texto esté vacío, solicita asignarle la cuota

por defecto.

Page 134: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

134 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

getbillstatus(integer uid, string callback) : object

Realiza una solicitud AJAX para obtener la información de facturación asociada al usuario indicado,

incluyendo, entre otros, si se ha confirmado el pago, el número de factura, si la factura está lista para

imprimir o el nombre de archivo del justificante enviado.

5.2.5 cmmse.admin.proofs

setpaidflag(integer uid, integer flag) : void

Realiza una solicitud AJAX para establecer o eliminar la confirmación de pago del usuario asociado a

un justificante desde la lista de usuarios que no han solicitado factura, mostrando, ocultando,

habilitando y/o deshabilitando controles adicionales para el mismo en función del nuevo estado.

set_fee(integer uid) : void

Realiza una solicitud AJAX para cambiar la cuota a pagar o asignar la cuota por defecto a un usuario

que no ha solicitado factura, y muestra u oculta la etiqueta que indica si el usuario tiene asigada la

cuota por defecto.

5.2.6 cmmse.admin.papers

setdecisionflag(integer paper_id, boolean decision) : void

Realiza una solicitud AJAX para establecer o eliminar el flag que indica que un paper ha entrado en

proceso de revisión, mostrando, ocultando, habilitando y/o deshabilitando controles adicionales para

el mismo en función del nuevo estado.

setacceptedflag(integer paper_id, integer iduser, boolean accepted) : void

Realiza una solicitud AJAX para establecer o eliminar el flag que indica que un paper ha sido aceptado

para su presentación en el congreso, mostrando, ocultando, habilitando y/o deshabilitando controles

adicionales para el mismo en función del nuevo estado.

5.2.7 cmmse.admin.papers.edittitle

show_input(integer paper_id) : void

Muestra los controles asociados a un paper para permitir la edición del título del mismo.

save(integer paper_id) : void

Realiza una solicitud AJAX para cambiar el título del paper indicado utilizando el valor actual del cuadro

de texto asociado al mismo.

cancel(integer paper_id) : void

Oculta los controles de edición del nombre para el paper indicado.

Page 135: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 135

5.2.8 cmmse.admin.papers.rooms

show_input(integer paper_id) : void

Muestra los controles asociados a un paper (de tipo poster) para permitir la edición de la sala y fechas

asignadas para la exposición del mismo.

save(integer paper_id) : void

Realiza una solicitud AJAX para cambiar la sala y fechas asignadas para la exposición del paper (de tipo

poster) indicado.

cancel(integer paper_id) : void

Oculta los controles de edición de sala y fechas asignadas para la exposición del paper (de tipo poster)

indicado.

5.2.9 cmmse.admin.rooms.edittitle

show_input(integer room_id) : void

Muestra los controles asociados a una sala para permitir la edición del nombre de la misma.

save(integer room_id) : void

Realiza una solicitud AJAX para cambiar el nombre de una sala utilizando el valor actual del cuadro de

texto asociado a la misma.

cancel(integer room_id) : void

Oculta los controles de edición del nombre de la sala indicada.

5.2.10 cmmse.admin.conferences.edittitle

show_input(integer conference_id) : void

Muestra los controles asociados a un simposio para permitir la edición del título del mismo.

save(integer conference_id) : void

Realiza una solicitud AJAX para cambiar el título del simposio indicado utilizando el valor actual del

cuadro de texto asociado al mismo.

cancel(integer conference_id) : void

Oculta los controles de edición del título del simposio indicado.

Page 136: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

136 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

5.2.11 cmmse.admin.conferences.editdate

show_input(integer conference_id) : void

Muestra los controles asociados a un simposio para permitir la edición de la fecha y hora de inicio del

mismo.

save(integer conference_id) : void

Realiza una solicitud AJAX para cambiar la fecha y hora de inicio del simposio indicado utilizando el

valor actual del cuadro de texto asociado al mismo.

cancel(integer conference_id) : void

Oculta los controles de edición de la fecha y hora de inicio del simposio indicado.

Page 137: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 137

5.3 Subsistemas de diseño

La aplicación está estructurada en un total de 23 espacios de nombres jerárquicos, 16 definiciones de

interfaz, 9 traits y 126 clases (de las cuales 6 son abstractas). El diseño de estos espacios de nombres

sigue la jerarquía expresada en el siguiente diagrama UML:

Permissions Core

Doctrine Decorators

Exceptions Traits

Permissions Controllers

Labels92x625

Labels15x75

Models

Factories

User

Frontcontrollers

JSON

PDF

AutoloaderData

Figura 5.3: Diagrama UML general de los espacios de nombres de la aplicación

Page 138: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

138 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Existen espacios de nombres adicionales generados de forma automática para los proxys de Doctrine

y otros correspondientes a librerías (todos ellos fuera de \CMMSE). Además, los elementos que

constituyen la interfaz gráfica de la aplicación no están, en general, contenidos en espacios de nombres

tradicionales, sino que están definidos utilizando plantillas de texto ubicadas en un directorio

independiente15.

5.4 Diseño de clases

A continuación se describe la estructura lógica de la aplicación, partiendo de los componentes básicos

hasta llegar a aquellos más complejos construidos a partir de los primeros. La implementación de la

aplicación está contenida en el espacio de nombres \CMMSE, el cual encapsula al autocargador de

componentes de la aplicación y al resto de espacios de nombres.

En los diagramas de las siguientes secciones se han omitido los espacios de nombres anidados, salvo

en los casos en los que se ha considerado relevante representarlos. Igualmente, por brevedad, se han

omitido las secciones de atributos y constantes en aquellas clases que no poseen propiedades o no

definen constantes propias.

15 El mecanismo general y el listado de los diferentes componentes que constituyen la interfaz de usuario están detallados en los apartados Diseño de la interfaz de usuario y Diseño físico de datos.

Page 139: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 139

5.4.1 \CMMSE

Espacio de nombres raíz de la aplicación, que contiene al autocargador de componentes y al resto de

espacios de nombres.

Autoloader

Esta clase se encarga de cargar los archivos que contienen el código del resto de componentes del sitio

bajo demanda, utilizando los mecanismos provistos por el lenguaje para este propósito.

5.4.1.1.1 Constantes

REQUIRED_VERSION : string

Contiene la versión mínima de PHP necesaria para el funcionamiento de la aplicación. En la

versión actual de la aplicación esta constante toma el valor “5.5.0”.

5.4.1.1.2 Métodos

public static function checkPHPVersion() : void

Comprueba si está soportada la versión de PHP sobre la que se está ejecutando la aplicación.

En caso de no estarlo, retorna una página de error interno al cliente como respuesta a todas

las solicitudes, impidiendo la ejecución del resto de componentes de la aplicación.

public static function autoload(string $class) : void

Busca el componente indicado como parámetro a partir de los datos del espacio de nombres

\CMMSE\AutoloaderData y sus descendientes y, si el componente está definido, carga el

archivo con su código fuente. Esta función es llamada automáticamente por el intérprete de

PHP para la carga de componentes bajo demanda.

protected static function initLog4php() : void

Inicializa el sistema de logging log4php utilizado por la aplicación.

protected static function initExceptionHandler() : void

Inicializa el gestor de excepciones del sitio, convirtiendo los errores estándar del lenguaje en

excepciones capturables.

public static function init() : void

Inicializa el gestor de librerías Composer y el entorno básico del sitio: autocargardor de clases,

sistema de logging y configuración.

Page 140: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

140 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

5.4.2 \CMMSE\AutoloaderData

Espacio de nombres con la información necesaria para cargar los archivos de código fuente del resto

de la aplicación. Las clases y espacios de nombres contenidos aquí emulan la jerarquía del resto de

componentes de la aplicación y son utilizados por el autocargador para encontrar el archivo de código

fuente correspondiente a cada clase, trait e interfaz.

Autoloader

+ REQUIRED_VERSION : string = '5.5.0'

+ checkPHPVersion() : void

+ init() : void+ autoload(string $class) : void

# initLog4php() : void# initExceptionHandler() : void

__ROOT__ CMMSE

Core

+ AbstractModel : string = 'core/abstract_model.inc.php'

...+ ArrayCache : string = 'core/array_cache.inc.php'

Doctrine

+ Conference : string = entities/doctrine/conference.inc.php'...

__ROOT__

...

Labels92x625

...

Labels92x625

...

__ROOT__

...

Models

...

__ROOT__

...

User

...

FrontControllers

...

__ROOT__

...

PDF

...

JSON

...

<< usa >>

Figura 5.4: Diagrama UML de las clases utilizadas para implementar el autocargador

Page 141: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 141

5.4.3 \CMMSE\Core

Este espacio de nombres contiene los componentes que forman parte del núcleo de la aplicación,

sobre los cuales se construye el resto.

ArrayCache

Implementación de una caché de datos simple para Doctrine sobre arrays asociativos de PHP. La

implementación está realizada por herencia a partir de la clase proporcionada por Doctrine para el

mismo propósito, extendiéndola para proporcionar estadísticas de su rendimiento.

Los métodos protegidos definidos por esta clase basan su implementación en la de la clase de la que

extienden y son llamados por los métodos públicos de ésta (que definen la interfaz real con el resto de

objetos de Doctrine) dinámicamente (utilizando enlace en tiempo de ejecución).

Los métodos cuya herencia es directa (es decir, aquellos que no se han redefinido para guardar

estadísticas) no se muestran.

5.4.3.1.1 Atributos

protected $hits: integer

Número de aciertos en la caché.

protected $misses: integer

Número de fallos en la caché.

5.4.3.1.2 Métodos

protected function updateStats(string $key) : void

Comprueba a través de la clase padre si existen datos almacenados con la clave dada,

incrementando en una unidad el número de aciertos o fallos registrados.

protected function doFetch(string $key) : mixed

Obtiene el valor asociado a la clave dada, o falso en caso de error.

protected function doContains(string $key) : boolean

Comprueba si existe un valor guardado previamente asociado a la clave dada.

protected function doGetStats() : integer[]

Genera un array con la estructura esperada por Doctrine con estadísticas de número de

aciertos y fallos. Las estadísticas de otro tipo (tiempo de uso del caché, memoria usada y

memoria disponible) no son reportadas (se retornan como null), ya que la API de Doctrine no

requiere retornar valores para todas las métricas posibles.

Como índices del array retornado se utilizan las definiciones de constante proporcionadas por

la interfaz genérica \Doctrine\Common\Cache\Cache de Doctrine.

Page 142: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

142 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

ArrayCache

# misses : integer

# doGetStats() : integer[]

# hits : integer

# updateStats() : void# doFetch() : mixed# doContains() : boolean

ArrayCache

# doGetStats() : integer[]

- data : mixed[]

# doFetch() : void# doContains() : boolean

# doSave() : boolean

# doFlush() : boolean# doDelete() : boolean

CacheProvider

# doGetStats() : integer[]

+ DOCTRINE_NAMESPACE_CACHEKEY : string = 'doctrineNamespaceCacheKey[%s]'

+ setNamespace($namespace : string) : void

# doContains() : boolean

# doSave() : boolean

# doFlush() : boolean# doDelete() : boolean

<<Interfaz>>

Cache

+ STATS_MEMORY_AVAILABLE : string = 'memory_available'

+ STATS_MISSES : string = 'misses'+ STATS_HITS : string = 'hits'

- namespace : string- namespaceVersion : string

# doFetch() : void

+ flushAll() : boolean

+ getNamespace() : string

+ contains(string $id) : boolean

+ getStats() : integer[]

+ save(string $id, mixed $data[, integer $lifetime]) : boolean

+ fetch(string $id) : mixed

+ delete(string $id) : boolean

+ deleteAll() : boolean

- getNamespaceVersion() : string- getNamespaceCacheKey() : string- getNamespacedId(string $id) : string

+ contains(string $id) : boolean

+ getStats() : integer[]

+ save(string $id, mixed $data[, integer $lifetime]) : boolean

+ fetch(string $id) : mixed

+ delete(string $id) : boolean

+ STATS_MEMORY_USAGE : string = 'memory_usage'+ STATS_UPTIME : string = 'uptime'

Figura 5.5: Diagrama UML de la clase ArrayCache

Page 143: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 143

Configuration

Implementación de un lector de la configuración estática del sitio (almacenada en archivos .ini). Esta

clase implementa el patrón de diseño singleton, pudiendo existir como máximo una única instancia de

la misma, a la cual se accede a través de un método estático de la propia clase.

El constructor de esta clase es de ámbito protegido y no puede ser instanciada directamente.

5.4.3.2.1 Atributos

protected $reader: \ezcConfigurationIniReader

Referencia a una instancia de un lector de archivos .ini de ezComponents.

protected $cfg: \ezcConfiguration

Referencia a una instancia de un objeto de ezComponents utilizado para leer información de

configuración de manera independiente a la plataforma y el formato de archivo.

protected $data: string[][]

Matriz 2D utilizada para mantener los datos de configuración leídos. Esta matriz es accedida

utilizando pares (nombre de sección, nombre de parámetro).

protected $log: \Logger

Referencia al logger a través del cual registrar los mensajes de depuración producidos durante

la lectura de la configuración.

5.4.3.2.2 Métodos

protected static function __construct() : void

Crea una nueva instancia de un objeto usado para acceder a la configuración estática del sitio

tras la lectura del archivo .ini que la almacena.

Excepción: Si el archivo de configuración de la aplicación no existe o no es accesible, se lanza

una excepción capturable de tipo \CMMSE\Exceptions\GenericException.

public static function getInstance ([boolean $force_reload]) : \CMMSE\Core\Configuration

Retorna una referencia a una instancia de la clase, creándola ad hoc o reutilizando una

existente. Si el parámetro opcional toma como valor cierto la llamada al método retornará una

nueva instancia de la clase, lo cual provoca que vuelva a leerse la configuración desde disco.

Nota: La posibilidad de volver a leer los datos de disco se proporciona para facilitar el diseño

de pruebas automáticas, su uso con otros propósitos está desaconsejado.

Nota: En caso de ser invocada a través de una clase que extienda ésta, getInstance() retornará

una instancia de la nueva clase utilizando la característica de enlace estático en tiempo de

ejecución (late static binding) del lenguaje.

Page 144: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

144 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

public function __get (string $key) : object

Retorna un objeto anónimo con los datos de configuración estáticos de la sección identificada

por la clave dada. En caso de no existir una sección con el nombre solicitado (o si ésta no

contiene directivas de configuración), el objeto retornado no contendrá datos.

Este método es un método mágico invocado automáticamente en los casos en los que se

acceda al objeto utilizando la sintaxis $configuracion->sección. Los datos de configuración de

la sección solicitada serán accesibles a través de la sintaxis de lectura de propiedades de objeto

estándar del lenguaje (por ejemplo, utilizando $seccion->atributo o $configuracion->seccion-

>atributo).

public function __isset (string $key) : boolean

Comprueba si existe una sección identificada por la clave dada.

Este método es un método mágico invocado automáticamente en los casos en los que se

compruebe la existencia de una sección de configuración utilizando la sintaxis

isset($configuracion->sección).

public function getRootPath() : string

Obtiene y retorna la ruta del directorio raíz real de la aplicación, resolviendo enlaces simbólicos

y componentes que referencien a directorios relativos (como “/./” y “/../”). 16 El término

“directorio raíz” se refiere a la ruta absoluta “canonizada” a partir de la cual se encuentran

todos los archivos de la aplicación (públicos y privados) y contiene, entre otros, a los directorios

webcmmse, private y scripts.

Email

Esta clase proporciona una interfaz sencilla para representar los correos electrónicos a enviar por la

aplicación. Es utilizada por los controladores para definir los mensajes de correo enviar, y es pasada

como parámetro a las funciones de envío de correo electrónico.

5.4.3.3.1 Atributos

public $subject: string

Asunto del correo electrónico.

public $from: string

Remitente del correo electrónico.

public $to: string

Destinatario del correo electrónico.

public $body: string

Texto plano del correo electrónico. Los correos enviados por la aplicación no soportan tipos

especiales, como código HTML, en el cuerpo del documento.

16 La semántica de este método equivale a la que se esperaría de una implementación de realpath() conforme a POSIX al ser llamada sobre el directorio raíz de la aplicación.

Page 145: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 145

5.4.3.3.2 Métodos

Esta clase no define métodos propios.

Configuration

# $reader : \ezConfigurationIniReader# $cfg : \ezConfiguration

+ __isset(string $key) : boolean

# $log : \Logger# $data : string[][]

# __construct() : void

+ __get(string $key) : object

+ getRootPath() : string+ getInstance([boolean $force_reload]) : Configuration

EMail

+ $subject : string

+ $body : string+ $to : string+ $from : strnig

Logger

ezConfiguration

ezConfigurationIniReader

Figura 5.6: Diagrama UML de las clases Configuration e EMail

HTTP404DieHandler

Esta clase proporciona el gestor por defecto utilizado por los controladores cuando no es posible

“encaminar” una URL, es decir, cuando alguna de las partes de la URL solicitada no coincide con

ninguna acción declarada en la sucesión de controladores instanciados y no existe una acción para la

captura de parámetros aleatorios.

La acción realizada por este gestor para el tratamiento de URLs no encaminables es el envío al cliente

de un código de error 404 HTTP de página no encontrada junto al texto “404” y la finalización del

procesamiento de la solicitud actual.

5.4.3.4.1 Métodos

public function __invoke() : void

Envía un encabezado de error 404 HTTP de página no encontrada al cliente y finaliza la

ejecución de la solicitud actual (utilizando die()). Este método mágico es llamado cuando una

Page 146: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

146 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

instancia de la clase es utilizada como si fuese una función17, permitiendo así el uso de estos

objetos como callbacks válidos.

AbstractController HTTP404DieHandler

+__invoke() : void

Figura 5.7: Diagrama UMl de la clase HTTP404DieHandler

cEzPDFStreamer

Esta clase proporciona mecanismos para gestionar el envío de archivos PDF al navegador del cliente.

5.4.3.5.1 Métodos

public function __construct(\Cezpdf $object) : void

Crea una nueva instancia de un objeto utilizado para el envío de archivos PDF a partir de un

objeto de bajo nivel de la librería ezComponents.

public function stream([string $filename]) : void

Envía al buffer de salida actual (normalmente la conexión establecida con el cliente) los datos

del objeto PDF utilizado durante la invocación del constructor, junto a los encabezados HTTP

que indican su tipo y tamaño. Tras el envío del contenido, esta función no finaliza la ejecución

del script actual.

El archivo se genera utilizando los wrappers proporcionados por PHP para datos temporales,

generando el contenido inicialmente en memoria y pasando al uso de archivos en disco si el

contenido generado sobrepasa los 5 MB, proporcionando velocidad para archivos pequeños y

uso reducido de recursos para archivos grandes.

Si se omite el nombre de archivo, el PDF enviado tendrá el nombre por defecto

downloaded.pdf.

public static function mPDF_stream(\mPDF $document [, string $filename]) : void

Envía al buffer de salida actual (normalmente la conexión establecida con el cliente) los datos

del objeto mPDF utilizado como parámetro, junto a los encabezados HTTP que indican su tipo

y tamaño. Tras el envío del contenido, esta función no finaliza la ejecución del script actual.

Si se omite el nombre de archivo, el PDF enviado tendrá el nombre por defecto doc.pdf.

public static function stream_html_as_pdf(string $html [, string $filename]) : void

Genera un archivo PDF a partir del contenido HTML pasado como parámetro y lo envía al buffer

de salida actual (normalmente la conexión establecida con el cliente) junto a los encabezados

17 En programación, un objeto que permiten este tipo de uso suele denominarse function object.

Page 147: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 147

HTTP que indican su tipo y tamaño. Tras el envío del contenido, esta función no finaliza la

ejecución del script actual.

Los metadatos del archivo generado, como su título, asunto, palabras clave y autor se toman

de los tags <meta> del código HTML, si en éste están definidos.

Si se omite el nombre de archivo, el PDF enviado tendrá el nombre por defecto download.pdf.

public static function stream_html_array_as_pdf(string[] $html [, string $filename]) : void

Genera un archivo PDF a partir de un array con el código HTML que representa el contenido

de las páginas del mismo y lo envía al buffer de salida actual (normalmente, la conexión

establecida con el cliente) junto a los encabezados HTTP que indican su tipo y tamaño. Tras el

envío del contenido, esta función no finaliza la ejecución del script actual.

Los metadatos del archivo generado, como su título, asunto, palabras clave y autor se toman

de los tags <meta> del código HTML, si en éste están definidos.

Si se omite el nombre de archivo, el PDF enviado tendrá el nombre por defecto download.pdf.

cEzPDFStreamer

# $intern : \Cezpdf

+ __construct(\Cezpdf $object) : void

+ stream_html_array_as_pdf(string[] $html[, string $filename]) : void+ stream_html_as_pdf(string $html[, string $filename]) : void+ mPDF_stream(\mPDF $document[, string $filename]) : void+ stream([string $filename]) : void

<<Usa>>

index.php

Figura 5.8: Diagrama UML de la clase cEzPDFStreamer

Page 148: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

148 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

MailValidator

+ rfc3696_strip_comments(string $comment, string $email [, string $replace]) : string

Signup

+ validate(string $email) : boolean

+ is_rfc3696_valid_email_address(string $email) : boolean

<<Usa>>

Figura 5.9: Diagrama UML de la clase MailValidator

MailValidator

Esta clase proporciona un validador de direcciones de correo electrónico de acuerdo al formato

especificado en el RFC 3696. El código de esta clase es una adaptación básica de un validador

programado por Cal Henderson licenciado dualmente bajo las licencias open source Creative Commons

BY-SA y GPLv3.

5.4.3.6.1 Métodos

public static function validate(string $email) : boolean

Comprueba si la sintaxis de una dirección de correo electrónico es válida. Este método es un

alias de is_rfc3696_valid_email_address().

public static function rfc3696_strip_comments($comment, $email [, $replace]) : string

Elimina los comentarios que pueda haber en una dirección de correo electrónico

proporcionada.

public static function is_rfc3696_valid_email_address($email) : boolean

Comprueba si la sintaxis de una dirección de correo electrónico es válida.

Page 149: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 149

OverviewData

Esta clase implementa objetos para representar las estadísticas generales agregadas sobre el número

de usuarios registrados, autores, envíos de papers e ingresos.

5.4.3.7.1 Atributos

public $ingresos: integer

Cantidad de dinero recaudada.

public $totalpapers: integer

Número de papers registrados en el sistema.

public $totalpapersaceptados: integer

Número de papers registrados en el sistema en estado aceptado.

public $totalusuarios: integer

Número de usuarios registrados en el sistema.

public $totalusuariospago: integer

Número de usuarios registrados en el sistema cuyo pago ha sido confirmado.

public $totalautores: integer

Número de usuarios registrados en el sistema que han enviado algún paper.

public $totalautorespago: integer

Número de usuarios registrados en el sistema que han enviado algún paper y cuyo pago ha

sido confirmado.

public $totalpaperspago: integer

Número de papers enviados por usuarios cuyo pago ha sido confirmado.

public $ratio_papersperautor: float

Proporción entre papers enviados y autores registrados (es decir, teniendo en cuenta

solamente a aquellos usuarios que han enviado, al menos, un paper).

public $ratio_acceptedperauthor: float

Proporción entre papers aceptados y autores registrados (es decir, teniendo en cuenta

solamente a aquellos usuarios que han enviado, al menos, un paper).

public $ratio_papersperauthorsthatpaid: float

Proporción entre papers enviados y autores registrados cuyo pago ha sido confirmado (es

decir, teniendo en cuenta solamente a aquellos usuarios que han enviado, al menos, un paper

y han pagado).

public $ratio_acceptedpapersperauthorsthatpaid: float

Proporción entre papers aceptados y autores registrados cuyo pago ha sido confirmado (es

decir, teniendo en cuenta solamente a aquellos usuarios que han enviado, al menos, un paper

y han pagado).

Page 150: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

150 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

5.4.3.7.2 Métodos

public function recalculateRatios() : void

Calcula y establece el valor de las propiedades que representan las diferentes proporciones

entre los datos. En caso de que el número de autores y/o el número de autores que han pagado

sean cero, el o los ratios correspondientes tomarán el valor cero.

<<Interfaz>>

IStatsOverviewData

+ $ratio_acceptedpapersperauthorsthatpaid : float

+ recalculateRatios() : void

+ $ingresos : integer

+ $ratio_papersperauthorsthatpaid : float

+ $totalpapers : integer

+ $ratio_acceptedperauthor : float

+ $totalusuariospago : integer

+ $ratio_papersperauthor : float

+ $totalautores : integer

+ $totalpapersaceptados : integer+ $totalusuarios : integer

+ $totalpaperspago : integer+ $totalautorespago : integer

<<Usa>>

Figura 5.10: Diagrama UML de la clase OverviewData

ScriptStats

Clase para obtener y calcular estadísticas generales de ejecución del script actual a partir de los datos

de entorno disponibles, de los proporcionados por el modelo base y de otros parámetros

proporcionados manualmente.

5.4.3.8.1 Atributos

protected static $start: float

Instante de inicio de ejecución del script.

5.4.3.8.2 Métodos

public static function saveStartTime([float $microtime]) : void

Almacena el timestamp en el que se ha realizado la solicitud de la página actual. Si no se

proporciona el instante de inicio de solicitud, toma como valor el instante (aproximado) de

llamada al método.

public static function guessStartTime() : float

Retorna el valor del instante de inicio de la solicitud de la página actual de la forma más precisa

posible. La implementación actual retornará el valor en coma flotante del instante de inicio de

Page 151: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 151

la solicitud proporcionado por el servidor si dicho valor está disponible (ya que éste es

almacenado por el intérprete antes de ejecutar la aplicación), utilizando el valor proporcionado

previamente a través saveStartTime() como último recurso.

public static function guessElapsedTime() : float

Retorna el número de segundos transcurridos (aproximadamente) entre el instante de llamada

al método y el menor timestamp de inicio de la solicitud actual disponible como un número en

coma flotante.

public static function guessElapsedTimeAsString() : string

Retorna el número de segundos transcurridos (aproximadamente) entre el instante de llamada

al método y el menor timestamp de inicio de la solicitud actual disponible como una cadena

de texto que representa un número en coma flotante redondeado a dos decimales.

public static function getQueryCount() : integer

Retorna el número de consultas SQL ejecutadas directamente contra la base de datos (es decir,

sin utilizar el ORM). Este valor es proporcionado por el modelo base (AbstractModel).

public static function getPeakMemoryUsage() : integer

Retorna la cantidad de memoria máxima utilizada por PHP hasta el momento en kilobytes,

redondeada a dos decimales.

Este método utiliza la función memory_get_peak_usage() del gestor de memoria de PHP,

indicando que no tenga en cuenta la memoria total solicitada por la máquina virtual Zend al

sistema operativo (que siempre solicita segmentos que sean múltiplos de una cantidad fija18),

sino solo aquella que ha sido utilizada directamente por la aplicación PHP.

Log4PHPQueryLogger

Wrapper para registrar las consultas SQL ejecutadas por Doctrine a través de Log4php.

5.4.3.9.1 Atributos

protected $log: \Logger

Referencia al logger a través del cual registrar las consultas SQL.

protected $dbPlatform : \Doctrine\DBAL\Platforms\AbstractPlatform

Tipo de gestor de bases de datos utilizado por Doctrine.

public static $count: integer

Número de consultas totales registradas a través de todas las instancias de la clase.

18 En general, la máquina virtual solicita al sistema operativo regiones de memoria que sean potencias de 2 y mantiene diferentes pools de memoria según el tamaño solicitado por el script (para datos de hasta 4KB, datos con un tamaño múltiplo de 4KB y datos con un tamaño múltiplo de 2MB), además de la memoria extra usada internamente por la máquina virtual para mantener datos adicionales asociados a la solicitud actual y su propia instancia dentro del proceso del servidor web.

Page 152: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

152 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

ScriptStats

+ saveStartTime([float $microtime]) : void

+ $start : float

<<Usa>>

index.php

AdminController

css.php

+ guessStartTime() : float

+ getPeakMemoryUsage() : integer

+ guessElapsedTimeAsString() : string+ getQueryCount() : integer

+ guessElapsedTime() : float

Figura 5.11: Diagrama UML de la clase ScriptStats

5.4.3.9.2 Métodos

public function __construct(\Logger $parent, \Doctrine\DBAL\Platforms\AbstractPlatform

$dbPlatform) : void

Crea una nueva instancia de un objeto utilizado para el envío de archivos PDF.

public function startQuery(string $sql [, mixed[] $params [, mixed[] $types]]) : void

Registra el inicio de una consulta SQL a través de log4php.

public function stopQuery() : void

Registra el final de una consulta SQL. La implementación actual no hace nada19.

MysqliWrapper

Capa de abstracción básica para realizar consultas directamente al servidor MySQL.

5.4.3.10.1 Atributos

public $counter: integer

Número de consultas SQL realizadas a través de la instancia actual.

public static $counter_static: integer

Número de consultas SQL realizadas a través de todas las instancias de la clase.

19 Esta funcionalidad podría utilizarse, por ejemplo, para registrar el tiempo necesario para ejecutar cada consulta en una ampliación posterior.

Page 153: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 153

5.4.3.10.2 Métodos

public function __construct(string $host , string $user, string $pass) : void

Crea una nueva instancia de un objeto para acceder directamente al servidor MySQL utilizado.

public function query(string $query [, integer $resultmode]) : mixed

Ejecuta una consulta SQL, actualizando los contadores internos de número de consultas.

El parámetro $resultmode representa la forma deseada de obtener los resultados. Consulte la

documentación de mysqli_query() de la API de PHP para obtener una lista de los valores

admitidos para este parámetro.

Retorna falso si se han producido errores. En otro caso:

Para consultas SELECT, SHOW, DESCRIBE o EXPLAIN retornará una instancia de

\mysqli_result.

Para otras consultas (incluyendo UPDATE y DELETE) retornará cierto.

AbstractModel

Implementación del modelo base, que proporciona métodos y objetos sobre los que construir el resto.

Entre las funcionalidades que proporciona se encuentra el acceso al gestor de entidades relacionales,

métodos para realizar consultas “directas” a la base de datos, caché, y logging.

Esta clase es abstracta (no puede ser instanciada).

5.4.3.11.1 Atributos

protected $affected_rows : integer

Número de filas modificadas por la última llamada a query().

protected $log : \Logger

Referencia a la instancia del logger log4php utilizado por la instancia actual.

protected $em : \Doctrine\ORM\EntityManager

Referencia al gestor de entidades Doctrine utilizado por el modelo actual.

protected static $cache : \Doctrine\Common\Cache\Cache

Referencia global a la instancia de cache utilizada por Doctrine para todos los modelos de la

aplicación.

protected static $initialized : boolean

Flag que indica si la referencia global al gestor de entidades Doctrine ha sido inicializada

previamente.

protected static $instance : \Doctrine\ORM\EntityManager

Referencia global a la instancia del gestor de entidades Doctrine utilizada por todos los

modelos.

Page 154: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

154 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

5.4.3.11.2 Métodos

public final function __construct() : void

Crea una instancia nueva de un modelo, obteniendo un logger para el modelo particular

invocado e inicializando la conexión global a la base de datos utilizada por todos los modelos

si fuera necesario. Este constructor no puede ser redefinido por los modelos concretos al

extender el modelo abstracto.

public static function getConnection() : \CMMSE\Core\MySQLiWrapper

Retorna una instancia a la conexión MySQLi utilizada por el modelo para realizar consultas

directas sobre la base de datos, creándola bajo demanda si fuese necesario.

rotected function select(string $table, string[] $conditions, [string[] $fields]) : \mysqli_result

Ejecuta una consulta SELECT * FORM tabla WHERE … simple sobre la tabla indicada y

retorna una referencia a un objeto que representa el conjunto de resultados obtenido. Este

método se proporciona por razones de compatibilidad (su uso está desaconsejado),

prefiriéndose el uso del gestor de entidades en detrimento de éste siempre que sea posible.

protected function selectjoin(string[] $tables, string[] $join_clauses, string[] $conditions,

[string[] $fields]) : \mysqli_result

Ejecuta una consulta SELECT * FORM tabla LEFT JOIN … WHERE … sobre la tabla

indicada y retorna una referencia a un objeto que representa el conjunto de resultados

obtenido. Este método se proporciona por razones de compatibilidad (su uso está

desaconsejado), prefiriéndose el uso del gestor de entidades en detrimento de éste siempre

que sea posible.

protected static function getBoolean(mixed $value) : boolean

Retorna el valor booleano asociado al valor numérico proporcionado. Se considera que un

valor equivale a cierto si es distinto de cero siguiendo las reglas estándar de conversión débil

de tipos de PHP (esto es, sin atender al tipo de dato proporcionado, permitiendo así convertir

en booleano valores de cadena como “0”).

protected function initializeDoctrine() : void

Inicializa la instancia interna del gestor de entidades Doctrine utilizado los modelos. Este

método interno es invocado durante la instanciación del primer modelo utilizado por la

aplicación; las invocaciones posteriores no producen ningún efecto.

public static function getCacheStats() : mixed

Retorna un array asociativo con estadísticas de acceso a la caché global utilizado por Doctrine

en todos los modelos, o null en caso de error.

Page 155: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 155

AbstractModel

# $log : Log4PHPQueryLogger

# getBoolean() : boolean

Log4PHPQueryLogger

# $count : integer

+ __construct(\Logger $parent, AbstractPlatform $dbPlatform)

MySQLiWrapper

+ $counter : integer

+ query(...) : mixed

EntityManager

<<Interfaz>>

SQLLogger

+ startQuery(string $sql[, mixed[] $params[, mixed[] $types]) : void

# $affected_rows : integer# $em : \Doctrine\ORM\EntityManager

# $instance : AbstractModel

ArrayCache

# $hits : integer

# updateStats(string $id) : void

ArrayCache

- $data : mixed[]

# doFetch(...) : mixed

\mysqli

...

+ query(string $query [, int $resultmode]) : mixed

# $cache : \Doctrine\Common\Cache\Cache# $initialized : boolean

+ __construct() : void

+ getCacheStats() : int[]+ getConnection() : MySQLiWrapper

# select(...) : \mysqli_result# selectjoin(...) : \mysqli_result# initializeDoctrine() : void

+ $counter_static : integer

+ __construct(string $host, string $user, string $pass) : void

+ $affected_rows : integer

+ __construct(...) : void

+ select_db(string $name) : boolean...

+ stopQuery() : void

# $misses : integer

# doFetch(string $id) : mixed

# doGetStats() : integer[]# doContains(string $id) : boolean

# $log : \Logger# $dbPlatform : string

+ stopQuery() : void

+ startQuery(string $sql[, mixed[] $params[, mixed[] $types]]) : void

# doFlush() : boolean

# doContains(...): boolean# doSave(...) : boolean# doDelete(..) : boolean

# doGetStats() : null

Figura 5.12: Diagrama UML de las clases AbstractModel, Log4PHPQueryLogger y MySQLiWrapper

Page 156: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

156 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

View

Clase base que representa el concepto genérico de vista. Es utilizada como padre de aquellas que

implementan métodos concretos de representación de datos (como la representación a partir de

plantillas o generadores PDF). Se trata de una clase de interfaz que no implementa ninguna

funcionalidad específica.

Esta clase es abstracta (no puede ser instanciada).

5.4.3.12.1 Métodos

Esta clase no define métodos propios.

Template

Implementación de vistas construidas a partir de plantillas de texto que soporta el acceso y la

modificación a las variables a remplazar en la plantilla utilizando la sintaxis de arrays.

5.4.3.13.1 Atributos

protected $bindings : string[]

Array asociativo con los valores a remplazar.

protected $t : \Twig_TemplateInterface

Referencia a la plantilla Twig utilizada internamente.

Métodos

public function __construct(string $path, [callable[] $filters, callable[] $functions, callable[]

$extensions) : void

Crea una nueva instancia de plantilla a partir de su ruta absoluta o relativa en el sistema de

archivos, o a partir de su ruta dentro de un espacio de nombres de plantilla definido (por

ejemplo, indicando @html/admin/stats como ruta). Se reconocen los siguientes espacios de

nombres:

@html: Para una ruta tipo @html/path_plantilla, se cargará el archivo

twig_templates/html/path_plantilla.html.tpl

@css: Para una ruta tipo @css/path_plantilla, se cargará el archivo

twig_templates/css/path_plantilla.tpl.css

@email: Para una ruta tipo @email/path_plantilla, se cargará el archivo

twig_templates/email/path_plantilla.txt.tpl

@pdf: Para una ruta tipo @pdf/path_plantilla, se cargará el archivo

twig_templates/pdf/path_plantilla.html.tpl

@testing: Para una ruta tipo @testing/path_plantilla, se cargará el archivo

twig_templates/testing/path_plantilla.tpl

Page 157: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 157

public function __toString() : string

Procesa la plantilla actual, generando un string a partir de su contenido y de los valores

proporcionados hasta el momento, o null si se produce un error.

public function offsetExists(mixed $offset) : boolean

Comprueba si se ha definido una variable de plantilla.

public function offsetGet(mixed $offset) : mixed

Retorna el valor asociado a una variable de plantilla o null si la variable solicitada no esté

definida

public function offsetSet(mixed $offset, mixed $value) : void

Establece el valor de una variable de plantilla.

public function offsetUnset(mixed $offset) : void

Retorna el valor asociado a una variable de plantilla.

PDFView

Clase base que representa el concepto genérico de “vista PDF”. Es utilizada como padre de aquellas

que implementan métodos concretos de generación de archivos PDF. Se trata de una clase de interfaz

que no implementa ninguna funcionalidad específica.

Esta clase es abstracta (no puede ser instanciada).

5.4.3.14.1 Métodos

abstract public function generar() : \cEzPDF

Retorna una instancia de un objeto que representa el archivo PDF generado.

Este método es abstracto, su propósito es forzar su redefinición en las clases hijas.

PDFResponse

Clase base que encapsula los datos necesarios para la generación de archivos PDF a partir de plantillas.

5.4.3.15.1 Atributos

public $template : \CMMSE\Core\Template

Referencia a la plantilla a utilizar para generar el PDF.

public $filename : string

Nombre del archivo a enviar al cliente.

public $error_code : integer

Código de error producido al generar la respuesta, o cero si no ha habido errores.

Page 158: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

158 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

5.4.3.15.2 Métodos

public function __construct(\CMMSE\Core\Template $template, string $filename, [integer

$error_code]) : void

Crea una nueva instancia que representa los datos de un archivo PDF a partir de una plantilla.

El archivo se enviará utilizando el nombre de archivo indicado. En caso de error, se retornará

el código del mismo en el parámetro pasado por referencia $error_code.

View

PDFResponse

+ $error_code : integer

+ __construct(\CMMSE\Core\Template $template, string $filename, [integer $error_code]) : void

Template

# $t : \Twig_TemplateInterface

+ __construct(string $path[, callable[] $filters [, callable[] $functions [, callable[] $extensions ]]]) : void

PDFView

+ generar() : \Cezpdf

# $bindings : string[]

+ offsetUnset(string $offset) : void

+ __toString() : string

+ offsetSet(string $offset, mixed $value) : void

+ offsetExists(string $offset) : boolean+ offsetGet(string $offset) : mixed

<<Interfaz>>

ArrayAccess

+ offsetExists(mixed $offset) : boolean

+ offsetUnset(mixed $offset) : void

+ offsetGet(mixed $offset) : mixed+ offsetSet(mixed $offset, mixed $value) : void

+ $template : \CMMSE\Core\Template+ $filename : string

EtiquetasBlancoVertical EtiquetasTodosVertical

….

<<Usa>>

Index.php

Figura 5.13: Diagrama UML de las clases usadas para implementar las vistas

Page 159: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 159

Controller

Implementación del controlador base.

Esta clase es abstracta (no puede ser instanciada).

5.4.3.16.1 Atributos

protected $log : \Logger

Referencia a la instancia del logger log4php utilizado por la instancia actual.

protected $parent : \CMMSE\Core\Controller

Referencia al controlador que ha instanciado al controlador actual, o null si se ha instanciado

directamente.

protected $modelFactory : \CMMSE\Interfaces\ModelFactory

Referencia a una instancia de la implementación de la factoría proveedora de instancias de

modelos utilizada por el controlador actual.

protected $handler404 : callable

Función, método, function object o equivalente a llamar por el controlador actual en caso de

que la URI no pueda ser enrutada.

5.4.3.16.2 Métodos

public final function __construct([Controller &$parent]) : void

Crea una nueva instancia de un controlador. En caso de existir, se permite el paso de una

referencia al controlador que instancia al actual.

Este método no puede ser redefinido por las clases hijas.

public function set404Handler(callable $callback) : void

Establece la función, método o equivalente a ejecutar en caso de que una URI no pueda ser

“encaminada”, es decir, cuando el cliente solicita una página que no existe.

Como valor de $callback se podrá utilizar un nombre de función o método, o un function object

o equivalente.

public function call404Handler() : mixed

Llama a la función, método o equivalente definida para ejecutarse en caso de que una URI no

pueda ser “encaminada”. En caso de no haber sido definido, se llamará al controlador por

defecto, que consiste en retornar un código de error HTTP 404 y finalizar la solicitud actual.

Retorna el valor devuelto por el controlador de errores 404 definido.

protected function assertParameterCountIsValid(string $methodName, integer

$parameterCount, integer $parametersForwarded) : boolean

Comprueba que el número de parámetros proporcionados coincide con los necesarios para

invocar la acción indicada, registrando un error en el archivo de depuración en disco de no ser

así.

Page 160: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

160 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

public function getModel(string $modelInterface) : \CMMSE\Interfaces\IModel

Obtiene una instancia de un modelo a partir del FQN de su interfaz.

Excepción: Si se solicita una instancia para una interfaz desconocida, se lanza una excepción

capturable de tipo \Exception.

public function chainRequest($class, string[] $args) : mixed

Encadena el remanente no procesado aún de la URI para ser procesado por un controlador

identificado por el FQN dado. Si los argumentos proporcionados no pueden ser encaminados

a través del controlador indicado, se invoca al controlador de errores 404 configurado. Si la

solicitud se ha podido encaminar, retorna los datos devueltos por la acción invocada; en otro

caso, el resultado devuelto por el controlador de errores definido.

FrontController

Implementación base de los controladores de primer nivel, encargados de la conversión inicial de la

URI solicitada por el cliente en una lista de parámetros y llamar a la acción oportuna para iniciar el

procesamiento de la misma20.

Esta clase es abstracta (no puede ser instanciada).

5.4.3.17.1 Métodos

public static function redirectIfURLIsIncorrect() : void

Comprueba que la URI solicitada tiene un formato correcto, enviando al cliente una redirección

HTTP con la URI correcta (y finalizando la ejecución de la solicitud actual) de no ser así.

Una URI se considera incorrecta desde el punto de vista del núcleo de la aplicación si no

termina en “.php” (solicitudes tipo /webcmmse/index.php) o con un backslash (tipo

/webcmmse/index.php/admin/). La URI a la que se redirige al cliente se forma a partir de la

original, concatenando un backslash al final de la misma.

Por ejemplo, /webcmmse/index.php se convierte en /webcmmse/index.php/;

/webcmmse/index.php/admin se convierte en /webcmmse/index.php/admin/. Esto se hace

así para que no haya URIs diferentes para una misma página, simplificando así el resto del

código encargado de “encaminar” las solicitudes.

public function dispatch_request() : mixed

Obtiene la URI solicitada por el cliente a partir de las variables de entorno del script actual y la

“encamina” a través de una instancia del controlador actual utilizando chainRequest().

Excepción: Si no se puede determinar la URI solicitada a partir de las variables de entorno, se

lanza una excepción capturable de tipo \Exception.

protected static function getRequestArgs () : string[]

Lee la URI solicitada y la convierte en un array de parámetros de solicitud. La URI se obtiene

en función de los datos puestos a disposición del script por el runtime de PHP (que dependerán

20 En desarrollo web este proceso es llamado normalmente despachar la solicitud.

Page 161: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 161

del tipo de servidor y configuración, variando, por ejemplo, entre configuraciones FastCGI y la

SAPI de Apache). También se tendrá en cuenta posibles configuraciones con mod_rewrite.

Excepción: Si no se puede determinar la URI solicitada se lanza una excepción capturable de

tipo \Exception.

Controller

# $parent : Controller

# assertParameterCountIsValid(...) : boolean

Logger

<<Interfaz>>

ModelFactory

+ getModel(string $modelInterface) : \CMMSE\Interfaces\IModel

FrontController

+ redirectIfURLIsIncorrect() : void

# $log : \Logger

# handler404 : \CMMSE\Core\HTTP404DieHandler# $modelFactory : \CMMSE\Interfaces\ModelFactory

+ __construct([Controller $parent]) : void+ set404Handler(callable $callback) : void+ call404Handler() : mixed

# getModel(string $modelInterface) : \CMMSE\Interfaces\IModel

+ chainRequest(string $class, string[+ $args) : string

# getRequestArgs() : string[]+ dispatchRequest() : string

HTTP404DieHandler

+ __invoke() : void

Figura 5.14: Diagrama UML de las clases base de los controladores

Page 162: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

162 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

5.4.4 \CMMSE\Exceptions

Este espacio de nombres contiene las excepciones propias de la aplicación.

GenericException

Clase usada para definir un tipo de excepción genérica de manera semántica sobre las excepciones

nativas del lenguaje. Carece de funcionalidad propia, y su propósito es distinguir las excepciones

generadas por la aplicación de aquellas generadas por el propio lenguaje y las librerías de terceros.

5.4.4.1.1 Métodos

Esta clase no define métodos propios.

ForbiddenException

Clase usada para indicar que una solicitud de página o acción no está permitida para las credenciales

asociadas a la sesión actual.

5.4.4.2.1 Métodos

Esta clase no define métodos propios.

UnauthenticatedException

Clase usada para indicar que una solicitud de página o acción no está permitida por realizarse desde

una sesión de un usuario sin autenticar.

5.4.4.3.1 Métodos

Esta clase no define métodos propios.

UnknownUserException

Clase usada para indicar que una solicitud de página o acción no está permitida por realizarse indicando

un usuario que no existe.

5.4.4.4.1 Métodos

Esta clase no define métodos propios.

Page 163: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 163

WrongPasswordException

Clase usada para indicar que la contraseña proporcionada en una solicitud de página o acción es

incorrecta.

5.4.4.5.1 Métodos

Esta clase no define métodos propios.

Exception

GenericException

ForbiddenException

UnknownUserException

UnauthenticatedException

WrongPasswordException

Figura 5.15: Diagrama UML de los tipos de excepciones de la aplicación

Page 164: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

164 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

5.4.5 \CMMSE\Traits

Espacio de nombres con la implementación de funcionalidades genéricas por medio de rasgos (traits)

que posibilitan la herencia horizontal de código compartido por varias clases.

ArrayAccessAccessors

Implementación genérica de los métodos de la interfaz de PHP ArrayAccess como alias de los métodos

tipo getPropiedad() y setPropiedad() de las entidades, permitiendo así acceder a dichos métodos

utilizando la sintaxis de acceso a arrays. Este tipo de acceso es utilizado desde las plantillas.

5.4.5.1.1 Métodos

public function offsetExists(string $offset) : boolean

Mapea los accesos isset($obj['clave']) como ($obj->getClave()!==null), es decir, asume que la

semántica asociada a que una clave exista equivale a que su nombre es válido para el objeto

actual y su valor no es nulo.

Excepción: Si se solicita una clave para la cual no existe un getter, se lanza una excepción

capturable de tipo \Exception.

public function offsetSet(string $offset, mixed $value) : void

Mapea los accesos $obj['clave'] = $valor como $obj->setClave($valor), es decir, asume que la

semántica asociada al cambio de valor de una clave equivale a una llamada al setter

correspondiente.

Excepción: Si se solicita una clave para la cual no existe un setter, se lanza una excepción

capturable de tipo \Exception.

public function offsetGet(string $offset) : mixed

Mapea los accesos de lectura a $obj['clave'] como $obj->getClave(), es decir, asume que la

semántica asociada a la lectura del valor de una clave equivale una llamada al getter

correspondiente.

Excepción: Si se solicita una clave para la cual no existe un getter, se lanza una excepción

capturable de tipo \Exception.

public function offsetUnset(string $offset) : void

Mapea las expresiones del lenguaje tipo unset($obj['clave']) como $obj->setClave(null), es

decir, asume que la semántica asociada a la eliminación del valor de una clave equivale una

llamada al setter correspondiente con un valor nulo como parámetro.

Excepción: Si se solicita una clave para la cual no existe un setter, se lanza una excepción

capturable de tipo \Exception.

Page 165: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 165

MagicAccessors

Implementación genérica de los métodos mágicos de PHP para acceder a propiedades de objeto como

alias de métodos tipo getPropiedad() / setPropiedad() utilizada desde las entidades, permitiendo así

acceder a dichos métodos utilizando la sintaxis de acceso a propiedades de objeto. Este tipo de acceso

es utilizado desde los controladores.

Los métodos proporcionados aquí solo tienen efecto al acceder a propiedades no declaradas o no

visibles desde el contexto de llamada. En otro caso se aplican los mecanismos de acceso a propiedades

normales del lenguaje.

5.4.5.2.1 Métodos

public function __isset(string $offset) : boolean

Mapea los accesos isset($obj->propiedad) como ($obj->getPropiedad()!==null), es decir, asume

que la semántica asociada a que una propiedad exista equivale a que su nombre es válido para

el objeto actual y su valor no es nulo.

Excepción: Si se solicita una clave para la cual no existe un getter, se lanza una excepción

capturable de tipo \Exception.

public function __set(string $offset, mixed $value) : void

Mapea los accesos $obj->clave = $valor como $obj->setClave($valor), es decir, asume que la

semántica asociada al cambio de valor de una propiedad equivale a una llamada al setter

correspondiente.

Excepción: Si se solicita una clave para la cual no existe un setter, se lanza una excepción

capturable de tipo \Exception.

public function __get(string $offset) : mixed

Mapea los accesos de lectura a $obj->clave como $obj->getClave(), es decir, asume que la

semántica asociada a la lectura del valor de una propiedad equivale una llamada al getter

correspondiente.

Excepción: Si se solicita una clave para la cual no existe un getter, se lanza una excepción

capturable de tipo \Exception.

public function __unset(string $offset) : void

Mapea las expresiones del lenguaje tipo unset($obj->clave) como $obj->setClave(null), es decir,

asume que la semántica asociada a la eliminación del valor de una propiedad equivale una

llamada al setter correspondiente con un valor nulo como parámetro.

Excepción: Si se solicita una clave para la cual no existe un setter, se lanza una excepción

capturable de tipo \Exception.

Page 166: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

166 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

ArrayAccessAccessors

+ offsetGet(string $offset) : mixed

+ offsetExists(string $offset) : boolean

+ offsetSet(string $offset, mixed $value) : void+ offsetUnset(string $offset) : void

MagicAccessors

+ __isset(string $offset) : boolean

+ __get(string $offset) : mixed+ __set(string $offset, mixed $value) : void+ __unset(string $offset) : void

\CMMSE\Doctrine

<<Usa>>

Figura 5.16: Diagrama UML de los traits de acceso a propiedades de objeto

EMailTemplateHelpers

Proporciona métodos para establecer el asunto de los correos electrónicos desde las plantillas a partir

de las cuales se genera su contenido. Para ello, la clase que implemente este trait debe instanciar las

plantillas de los correos como

new \CMMSE\Template('@namespace/ruta', [], ['subject' => __CLASS__.'::set_subject'] );

y en la plantilla debe establecerse el asunto con un tag tipo

{{ subject("CMMSE %d submit New paper of %s",email.year,email.author) }} Para obtener el asunto se deberá llamar a self::get_subject() después de haber llamado al método

__toString() de la plantilla o de realizar un cast de la misma a string, lo cual provoca que se procese su

código.

Page 167: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 167

5.4.5.3.1 Atributos

protected static $last_email_subject : string

Asunto obtenido por la última llamada a set_subject() realizada desde la plantilla.

5.4.5.3.2 Métodos

public static function set_subject(string $va_args [, …]) : void

Establece el asunto, utilizando una sintaxis análoga a la función sprintf().

protected static function get_subject() : string

Retorna el último asunto establecido.

protected static function get_email_template(string $path[, $prefix] ) : \CMMSE\Core\Template

Obtiene una instancia de plantilla para el identificador y namespace indicados. Si no se indica,

por defecto se buscan las plantillas en el espacio de nombres @email.

Mailer

Implementación de métodos para el envío de correos electrónicos utilizando los parámetros SMTP

indicados en la configuración del sitio. La implementación actual envía los correos utilizando la librería

open source PHPMailer.

5.4.5.4.1 Métodos

public static function send_email2(\CMMSE\Doctrine\Settings $settings, \CMMSE\Core\Email

$mail [, string[] $attachmentData [, string[] $attachmentfileName]]) : boolean

Envía un correo electrónico. Retorna cierto si se ha enviado el correo electrónico

correctamente, falso en otro caso.

Parámetros:

\CMMSE\Doctrine\Setting $settings: Datos de configuración del sitio.

\CMMSE\Core\EMail $mail: Objeto que representa el mensaje a enviar.

string[] $attachmentData: Si se proporciona éste y el siguiente parámetro, datos de archivos adjuntos a enviar.

string[] $attachmentfileName: Si se proporciona éste y el parámetro anterior, nombres de archivo de los archivos adjuntos a enviar.

public static function send_email_multi_attachment (\CMMSE\Doctrine\Settings $settings,

\CMMSE\Core\Email $mail [, string[] $attachmentData [, string[]

$attachmentfileName]]) : boolean

Envía un correo electrónico.

Este método es un alias del método anterior.

Page 168: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

168 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

public static function send_email_for_debug (\CMMSE\Doctrine\Settings $settings,

\CMMSE\Core\Email $mail, string $debugout) : boolean

Envía un correo electrónico guardando la salida de depuración de los mensajes intercambiados

entre la aplicación y el servidor SMTP. Retorna cierto si se ha enviado el correo electrónico

correctamente, falso en otro caso.

Parámetros:

\CMMSE\Doctrine\Setting $settings: Datos de configuración del sitio.

\CMMSE\Core\EMail $mail: Objeto que representa el correo electrónico a enviar.

string[] $attachmentData: Datos de archivos adjuntos a enviar.

string[] $attachmentfileName: Nombres de archivo de los archivos adjuntos.

string $debugout: Referencia a un string donde guardar los mensajes de depuración.

protected static function doSendMail(\CMMSE\Core\Email $mail, string[] $attachmentData,

string[] $attachmentfileName [, string $debug]) : boolean

Envía un correo electrónico guardando la salida de depuración de los mensajes intercambiados

entre la aplicación y el servidor SMTP. Retorna cierto si se ha enviado el correo electrónico

correctamente, falso en otro caso.

Parámetros:

\CMMSE\Core\EMail $mail: Objeto que representa el correo electrónico a enviar.

string[] $attachmentData: Datos de archivos adjuntos a enviar.

string[] $attachmentfileName: Nombres de archivo de los archivos.

string $debug: Referencia a un string donde guardar los mensajes de depuración.

Mailer

+ send_email2(...) : boolean

# doSendMail(...) : boolean

+ send_email_for_debug(...) : boolean+ send_email_multi_attachment(...) : boolean

EMailTemplateHelpers

# $last_email_subject : string

+ set_subject(string $va_args [, ...]) : void+ get_subject() : string+ get_email_template(string $path[, string $prefix]) : \CMMSE\Core\Template

\CMMSE\Controllers

<<Usa>>

Figura 5.17: Diagrama UML de los traits usados para generar y enviar los correos electrónicos

Page 169: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 169

ExtensionGetter

Proporciona un método para obtener la extensión (tipo de archivo) a partir de un nombre de archivo,

path completo o URL.

5.4.5.5.1 Métodos

public function getExtension(string $filename) : string

Obtener la extensión de un archivo a partir de su nombre o ruta, en minúsculas.

Excepción: Si el nombre de archivo proporcionado es o equivale a una cadena vacía el

comportamiento de este método no está definido.

ExtensionGetter

+ getExtension(string $filename) : string

Facturas

Figura 5.18: Diagrama UML del trait para obtener la extensión a partir de un nombre de archivo

CopyConstructor

Implementación genérica de métodos para facilitar la creación de nuevas instancias de objetos a partir

de instancias de sus clases padre. Es utilizado para simplificar la implementación de decoradores de

solo lectura.

5.4.5.6.1 Métodos

protected function assertSharesParent(object $source) : void

Función auxiliar que lanza una excepción si el objeto a partir del cual se construye una instancia

no es de un tipo que sea ancestro de su tipo de objeto, es decir, si la clase del nuevo objeto no

es un descendiente del objeto original.

Excepción: Si el tipo de $source no es un ancestro de la clase actual.

Page 170: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

170 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

protected function copyPropertiesFrom(object $source) : void

Copia el valor de las propiedades accesibles del objeto de origen a los atributos

correspondientes de la instancia actual. Las propiedades cuyos nombres empiecen por ‘__’ se

consideran especiales y no son copiadas21.

Excepción: Si el tipo de $source no es un ancestro de la clase actual.

CopyCtor

# copyPropertiesFrom(object $source) : void

\CMMSE\Decorators

# assertSharesParent(object $source) : void

<<Usa>>

Figura 5.19: Diagrama UML del trait de inicialización de objetos desde instancias compatibles

SystemLoadGetter

Implementación de un método para obtener valores de carga media del sistema, siempre que el

servidor sobre el que se ejecuta la aplicación lo permita.

5.4.5.7.1 Métodos

public static function getLoadString() : string

Obtener un string con los valores medios de carga UNIX de los últimos 1, 5 y 15 minutos

separados por comas. En sistemas que no soporten la función sys_getloadavg() (como

Windows) se retorna el string “N/A”.

21 En particular, el copiarlas causa problemas con las entidades de Doctrine (que utilizan la nomenclatura indicada para definir inicializadores).

Page 171: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 171

UploadErrStrGetter

Implementación de un método para obtener mensajes descriptivos en ingles de los códigos de error

retornados por PHP en el envío de archivos desde el cliente al servidor.

5.4.5.8.1 Métodos

protected static function getUploadErrorString(integer $code) : string

Obtener la descripción en inglés del error de envío de archivos asociado al código de la familia

UPLOAD_ERR_* proporcionado, o Unknown error si el código de error proporcionado es

desconocido.

SystemLoadGetter

+ getLoadString() : string

UploadErrStrGetter

# getUploadErrorString(integer $code) : string

AdminController

...

...

Homepage

...

...

AbstractPaperController

...

...

Factura

...

...

<<Usa>>

<<Usa>>

Figura 5.20: Diagrama UML de los traits de obtención de carga media del sistema y descripción de errores de envío de archivos

Page 172: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

172 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

5.4.6 \CMMSE\Doctrine

Este espacio de nombres contiene las clases utilizadas por el ORM (Doctrine) como interfaz a los datos

de la base de datos, proporcionando un modelo entidad-relación sobre las tablas relacionales. Para

cada clase y sus atributos se indica, además, las anotaciones utilizadas para definir la correspondencia

con las tablas y columnas del modelo relacional de la base de datos. Estas anotaciones están

precedidas del símbolo ‘@’, puede consultarse su documentación detallada en [DOC01].

El acceso a los atributos protegidos de las entidades se realiza utilizando métodos mágicos de acceso

utilizando la sintaxis de acceso a arrays y atributos heredados de los traits. Para ello, estas clases hacen

uso de los traits ArrayAccessAccessors y MagicAccessors.

Conference

Entidad que representa los datos de los simposios.

@Entity: Esta clase representa entidades de primer nivel del modelo E-R.

@Table(name=”conferencias”): Esta entidad representa los datos almacenados en la tabla

conferencias.

5.4.6.1.1 Atributos

protected $idconf : integer

Identificador del simposio en la base de datos.

@Id: Este atributo es una clave primaria de la tabla.

@GeneratedValue: El valor de este atributo es autogenerado por el SGBD.

@Column(type=”integer”, name=”idconf”, unique=true, nullable=false):

Este atributo se corresponde con la columna idconf de tipo entero.

Este atributo es único para todas las entidades.

Este atributo no puede tomar un valor nulo.

protected $title : string

Título del simposio.

@Column(type="string", name="title"): Este atributo se corresponde con la columna title de

tipo cadena.

protected $begin : \DateTime

Fecha y hora de inicio del simposio.

@Column(type="datetime", name="ts_begin"): Este atributo se corresponde con la

columna ts_begin de tipo fecha y hora.

5.4.6.1.2 Métodos

public function getId() : integer

Obtiene el identificador del simposio actual, o null si la entidad no se corresponde con datos

almacenados (aún) en la base de datos.

Page 173: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 173

public function getIdConf() : integer

Obtiene el identificador del simposio actual.

Este método es un alias del anterior.

public function getTitle() : string

Obtiene el título del simposio actual.

public function getBegin() : \DateTime

Obtiene la fecha y hora de inicio del simposio actual, o null si la fecha y hora no han sido

establecidos.

public function setId(integer $id) : void

Establece el identificador del simposio actual.

public function setIdConf(integer $id) : void

Establece el identificador del simposio actual.

Este método es un alias del anterior.

public function setTitle(string $title) : void

Establece el título del simposio actual.

public function setBegin([\DateTime $begin]) : void

Establece la fecha y hora de inicio del simposio actual. Si se omite el parámetro de la función,

borra la fecha y hora asociadas actualmente.

Page 174: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

174 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

<<Interfaz>>

ArrayAccess

...

Conference

# $idconf : integer

+ getId() : integer

# $title : string# $begin : \DateTime

+ getIdConf() : integer+ getTitle() : string

+ setBegin([\DateTime $begin]) : void

+ getBegin() : \DateTime

+ setTitle(string $title) : void

+ setId(integer $id) : void+ setIdConf(integer $id) : void

ArrayAccess

...

MagicAccessors

...

Figura 5.21: Diagrama UML de la entidad Conference

Page 175: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 175

InstrumentationSample

Entidad que representa una muestra de los datos de instrumentación recogidos por la aplicación para

una solicitud.

@Entity: Esta clase representa entidades de primer nivel del modelo E-R.

@Table(name=”instrumentation”): Esta entidad representa los datos almacenados en la tabla

instrumentation.

5.4.6.2.1 Atributos

protected $id: integer

Identificador de la muestra actual en la base de datos.

@Id: Este atributo es una clave primaria de la tabla.

@GeneratedValue: El valor de este atributo es autogenerado por el SGBD.

@Column(type=”integer”, name=”sample_id”, unique=true, nullable=false):

Este atributo se corresponde con la columna simple_id de tipo entero.

Este atributo es único para todas las entidades.

Este atributo no puede tomar un valor nulo.

protected $session_id : integer

Identificador de la sesión que ha realizado la solicitud.

@Column(type="integer", name="sid"): Este atributo se corresponde con la columna sid de

tipo entero.

protected $user_id : integer

Identificador del usuario que ha realizado la solicitud.

@Column(type="integer", name="uid"): Este atributo se corresponde con la columna uid de

tipo entero.

protected $is_admin : boolean

Flag que indica si el usuario que ha realizado la solicitud es un administrador.

@Column(type="integer", name="is_admin"): Este atributo se corresponde con la columna

sid de tipo cadena.

protected $load1 : float

Carga media del sistema del último minuto en el momento en el que se realizó la solicitud.

@Column(type="float", name="load1"): Este atributo se corresponde con la columna load1

de tipo decimal.

protected $load5 : float

Carga media del sistema de los últimos 5 minutos en el momento en el que se realizó la

solicitud.

@Column(type="float", name="load5"): Este atributo se corresponde con la columna load5

de tipo decimal.

Page 176: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

176 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

protected $load15 : float

Carga media del sistema de los últimos 15 minutos en el momento en el que se realizó la

solicitud.

@Column(type="float", name="load15"): Este atributo se corresponde con la columna

load15 de tipo decimal.

protected $mem_peak : integer

Cantidad máxima de memoria usada por el intérprete PHP para procesar la solicitud.

@Column(type="integer", name="max_mem_usage"): Este atributo se corresponde con la

columna max_mem_usage de tipo entero.

protected $num_queries_doctrine : integer

Número de consultas SQL realizadas a la base de datos a través de Doctrine durante la

solicitud.

@Column(type="integer", name="num_queries_doctrine"): Este atributo se corresponde

con la columna num_queries_doctrine de tipo entero.

protected $num_queries_mysqli : integer

Número de consultas SQL realizadas a la base de datos a través de MySQLi durante la

solicitud.

@Column(type="integer", name="num_queries_mysqli"): Este atributo se corresponde con

la columna num_queries_mysqli de tipo entero.

protected $remote_addr : string

IP del cliente o proxy que realizó la solicitud.

@Column(type="string", name="remote_addr"): Este atributo se corresponde con la

columna remote_addr de tipo cadena.

protected $forwarded_for : string

IP del cliente real que realizó la solicitud, en caso de haberla realizado a través de un proxy.

@Column(type="text", name="forwarded_for"): Este atributo se corresponde con la

columna forwarded_for de tipo cadena sin longitud máxima.

protected $request_method : string

Método HTTP utilizado por el cliente para realizar la solicitud.

@Column(type="string", name="request_method"): Este atributo se corresponde con la

columna request_method de tipo cadena.

protected $uri : string

URI solicitada por el cliente.

@Column(type="string", name="uri "): Este atributo se corresponde con la columna uri de

tipo cadena.

protected $host : string

Nombre de host utilizado por el cliente para referirse al servidor que atendió la solicitud.

@Column(type="string", name="host "): Este atributo se corresponde con la columna host

de tipo cadena.

Page 177: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 177

protected $user_agent: string

Identificador del navegador utilizado por el cliente, si se ha proporcionado.

@Column(type="text", name="user_agent "): Este atributo se corresponde con la columna

user_agent de tipo cadena sin longitud máxima.

protected $ts_begin : \DateTime

Fecha y hora del instante en el que se inició el procesamiento de la solicitud del cliente.

@Column(type="datetime", name="ts_begin"): Este atributo se corresponde con la

columna ts_begin de tipo fecha y hora.

protected $ts_saved : \DateTime

Fecha y hora del instante en el que se guardaron los datos de instrumentación de la solicitud

actual.

@Column(type="datetime", name="ts_saved"): Este atributo se corresponde con la

columna ts_saved de tipo fecha y hora.

protected $micro_ts_begin : float

Timestamp del instante en el que se inició el procesamiento de la solicitud del cliente, con

precisión de microsegundos.

@Column(type="decimal", name="micro_ts_begin"): Este atributo se corresponde con la

columna micro_ts_begin de tipo decimal.

protected $micro_ts_saved : float

Timestamp del instante en el que se guardaron los datos de instrumentación de la solicitud

del cliente, con precisión de microsegundos.

@Column(type="decimal", name="micro_ts_saved"): Este atributo se corresponde con la

columna micro_ts_saved de tipo dcimal.

protected $sysname : string

Nombre del sistema (“Linux”, “Windows”) instalado en el servidor que atendió la solicitud.

@Column(type="string", name="sysname"): Este atributo se corresponde con la columna

sysname de tipo cadena.

protected $nodename : string

Nombre del nodo (nombre del host o hostname) que atendió la solicitud actual.

@Column(type="string", name="nodename"): Este atributo se corresponde con la columna

nodename de tipo cadena.

protected $release : string

Versión del sistema operativo instalado en el servidor que atendió la solicitud actual.

@Column(type="string", name="release"): Este atributo se corresponde con la columna

release de tipo cadena.

protected $version : string

Tag de compilación del sistema operativo instalado en el servidor que atendió la solicitud

actual.

@Column(type="string", name="version"): Este atributo se corresponde con la columna

release de tipo cadena.

Page 178: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

178 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

5.4.6.2.2 Métodos

public function getId() : integer

Obtiene el identificador de la muestra actual, o null si la entidad no se corresponde con datos

almacenados (aún) en la base de datos.

public function getSession_id() : integer

Obtiene el identificador de la sesión asociada a la muestra actual, o null si no había ninguna

asociada.

public function getUser_id() : integer

Obtiene el identificador del usuario asociado a la muestra actual, o null si no había ninguno

asociado.

public function getIs_admin() : boolean

Obtiene el flag que indica si el usuario asociado a la muestra actual es un administrador.

public function getNum_queries_doctrine() : integer

Obtiene el número de consultas a la base de datos realizadas a través de Doctrine durante la

solicitud asociada a la muestra actual.

public function getNum_queries_mysqli() : integer

Obtiene el número de consultas a la base de datos realizadas a través de MySQLi durante la

solicitud asociada a la muestra actual.

public function getLoad1 () : float

Obtiene la carga media del sistema registrada para el último minuto durante la solicitud

asociada a la muestra actual.

public function getLoad5() : float

Obtiene la carga media del sistema registrada para los últimos 5 minutos durante la solicitud

asociada a la muestra actual.

public function getLoad15 () : float

Obtiene la carga media del sistema registrada para los últimos 15 minutos durante la solicitud

asociada a la muestra actual.

public function getMemPeak () : integer

Obtiene la cantidad máxima de memoria utilizada por el intérprete de PHP para procesar la

solicitud asociada a la muestra actual.

public function getRemote_addr () : string

Obtiene la IP del cliente o proxy que realizó la solicitud asociada a la muestra actual.

public function getForwarded_for() : string

Obtiene la IP del cliente real que realizó la solicitud asociada a la muestra actual, en caso de

haberla realizado a través de un proxy.

Page 179: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 179

public function getRequest_method() : string

Obtiene el método HTTP utilizado por el cliente para realizar la solicitud asociada a la muestra

actual.

public function getUri() : string

Obtiene la URI solicitada por el cliente.

public function getHost() : string

Obtiene el nombre de host utilizado por el cliente para referirse al servidor que atendió la

solicitud asociada a la muestra actual.

public function getUserAgent() : string

Obtiene el Identificador del navegador utilizado por el cliente durante la solicitud asociada a

la muestra actual, si se ha proporcionado, o null.

public function geTs_begin() : \DateTime

Obtiene la fecha y hora del instante en el que se inició el procesamiento de la solicitud asociada

a la muestra actual.

public function geTs_saved() : \DateTime

Obtiene la fecha y hora del instante en el que se guardaron los datos de instrumentación para

la solicitud asociada a la muestra actual.

public function gMicroTs_begin() : \DateTime

Obtiene el timestamp del instante en el que se inició el procesamiento de la solicitud asociada

a la muestra actual, con precisión de microsegundos.

public function getMicroTs_saved() : \DateTime

Obtiene el timestamp del instante en el que se guardaron los datos de instrumentación para

la solicitud asociada a la muestra actual, con precisión de microsegundos.

public function getSysname() : string

Obtiene el nombre del sistema (“Linux”, “Windows”) instalado en el servidor que atendió la

solicitud asociada a la muestra actual.

public function getNodename() : string

Obtiene el nombre del nodo (nombre del host o hostname) del servidor que atendió la solicitud

asociada a la muestra actual.

public function getRelease() : string

Obtiene la versión del sistema operativo instalado en el servidor que atendió la solicitud

asociada a la muestra actual.

public function getVersion() : string

Obtiene el tag de compilación del sistema operativo instalado en el servidor que atendió la

solicitud asociada a la muestra actual.

public function setId(integer $id) : void

Establece el identificador de la muestra actual.

Page 180: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

180 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

public function setSession_id(integer $session_id) : void

Establece el identificador de la sesión asociada a la muestra actual.

public function setUser_id(integer $user_id) : void

Establece el identificador del usuario asociado a la muestra actual.

public function setIs_admin(boolean $is_admin) : void

Establece el flag que indica si el usuario asociado a la muestra actual es un administrador.

public function setNum_queries_doctrine(integer $num_queries) : void

Establece el número de consultas a la base de datos realizadas a través de Doctrine durante la

solicitud asociada a la muestra actual

public function setNum_queries_mysqli(integer $num_queries) : void

Establece el número de consultas a la base de datos realizadas a través de MySQLi durante la

solicitud asociada a la muestra actual

public function setLoad1(float $load) : void

Establece la carga media del sistema registrada para el último minuto durante la solicitud

asociada a la muestra actual.

public function setLoad5(float $load) : void

Establece la carga media del sistema registrada para los últimos 5 minutos durante la solicitud

asociada a la muestra actual.

public function setLoad15(float $load) : void

Establece la carga media del sistema registrada para los últimos 15 minutos durante la solicitud

asociada a la muestra actual.

public function setMemPeak(integer $mem_peak) : void

Establece la cantidad máxima de memoria registrada durante la solicitud asociada a la muestra

actual.

public function setRemote_addr(string $remote_addr) : void

Establece la IP del cliente o proxy que realizó la solicitud asociada a la muestra actual.

public function setForwarded_for(string $forwarded_for) : void

Establece la IP del cliente real que realizó la solicitud asociada a la muestra actual, en caso de

haberla realizado a través de un proxy.

public function setRequest_method(string $request_method) : void

Establece el método HTTP utilizado por el cliente para realizar la solicitud asociada a la muestra

actual

public function setUri (string $uri) : void

Establece la URI solicitada por el cliente.

public function setHost(string $host) : void

Establece el nombre de host utilizado por el cliente para referirse al servidor que atendió la

solicitud asociada a la muestra actual.

Page 181: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 181

public function setUserAgent(string $user_agent) : void

Establece el identificador del navegador utilizado por el cliente durante la solicitud asociada a

la muestra actual.

public function setTs_begin(\DateTime $ts_begin) : void

Establece la fecha y hora del instante impreciso en el que se inició el procesamiento de la

solicitud asociada a la muestra actual, a partir de un objeto que representa la fecha y hora.

public function setTs_saved(\DateTime $ts_saved) : void

Establece la fecha y hora del instante impreciso en el que se guardaron los datos de

instrumentación para la solicitud asociada a la muestra actual, a partir de un objeto que

representa la fecha y hora.

public function setMicroTs_begin(float $ts_begin) : void

Establece la fecha y hora del instante preciso en el que se inició el procesamiento de la solicitud

asociada a la muestra actual, a partir de un número en coma flotante que representa un

timestamp con precisión de microsegundos.

public function setMicroTs_saved(float $ts_saved) : void

Establece la fecha y hora del instante en el que se guardaron los datos de instrumentación para

la solicitud asociada a la muestra actual, a partir de un número en coma flotante que

representa un timestamp con precisión de microsegundos.

public function setSysname(string $sysname) : string

Establece el nombre del sistema (“Linux”, “Windows”) instalado en el servidor que atendió la

solicitud asociada a la muestra actual.

public function setNodename(string $nodename) : void

Establece el nombre del nodo (nombre del host o hostname) del servidor que atendió la

solicitud asociada a la muestra actual.

public function setRelease(string $release) : string

Establece la versión del sistema operativo instalado en el servidor que atendió la solicitud

asociada a la muestra actual.

public function setVersion(string $version) : string

Establece el tag de compilación del sistema operativo instalado en el servidor que atendió la

solicitud asociada a la muestra actual.

Page 182: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

182 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

<<Interfaz>>

ArrayAccess

...

InstrumentationSample

# $id : integer# $user_id : integer

+ getId() : integer

+ setUserID(integer $id) : void+ setId(integer $id) : void

ArrayAccess

...

MagicAccessors

...

+ getUserID() : integer

# $remote_addr : string

+ getRemote_addr() : string

...

...

# $uri : string...

+ getURI() : string

+ setRemote_addr(string $addr) : void+ setURI(string $uri) : void

Figura 5.22: Diagrama UML de la entidad InstrumentationSample

Page 183: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 183

MailerSettings

Entidad que representa los datos de configuración para el envío de correos.

@Entity: Esta clase representa entidades de primer nivel del modelo E-R.

@Table(name=”mailer_settings”): Esta entidad representa los datos almacenados en la tabla

mailer_settings.

5.4.6.3.1 Atributos

protected $id: integer

Identificador de la fila de la base de datos que almacena los datos de configuración. En la

implementación actual el valor de este atributo siempre es uno.

@Id: Este atributo es una clave primaria de la tabla.

@GeneratedValue: El valor de este atributo es autogenerado por el SGBD.

@Column(type=”integer”, name=”server_id”, unique=true, nullable=false):

Este atributo se corresponde con la columna server_id de tipo entero.

Este atributo es único para todas las entidades.

Este atributo no puede tomar un valor nulo.

protected $host : string

Nombre de host del servidor de correo SMTP a utilizar.

@Column(type="string", name="host"): Este atributo se corresponde con la columna host

de tipo cadena.

protected $port : integer

Puerto a usar para conectar con el servidor SMTP a utilizar.

@Column(type="integer", name="port"): Este atributo se corresponde con la columna port

de tipo entero.

protected $user : string

Nombre de usuario a usar para conectar con el servidor SMTP a utilizar.

@Column(type="string", name="user"): Este atributo se corresponde con la columna user

de tipo cadena.

protected $pass : string

Contraseña a usar para conectar con el servidor SMTP a utilizar.

@Column(type="string", name="pass"): Este atributo se corresponde con la columna pass

de tipo cadena.

protected $from_addr : string

Dirección de correo electrónico de origen de los correos enviados.

@Column(type="string", name="from_addr"): Este atributo se corresponde con la columna

pass de tipo cadena.

Page 184: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

184 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

protected $from_name : string

Nombre de origen a usar en los correos enviados.

@Column(type="string", name="from_name"): Este atributo se corresponde con la columna

from_name de tipo cadena.

protected $encryption: string

Tipo de encriptación a utilizar en la conexión con el servidor SMTP. Los tipos válidos son “”

(una cadena vacía, para no usar encriptación), “tls” y “ssl”.

@Column(type="string", name="encryption"): Este atributo se corresponde con la columna

encryption de tipo cadena.

protected $smtp_auth: boolean

Determina si utilizar o no autentificación SMTP en la conexión con el servidor SMTP.

@Column(type="boolean", name="smtp_auth"): Este atributo se corresponde con la

columna smtp_auth de tipo booleano.

protected $enabled: boolean

Determina si el envío de correos está habilitado.

@Column(type="boolean", name="enabled"): Este atributo se corresponde con la columna

enabled de tipo booleano.

5.4.6.3.2 Métodos

public function getId() : integer

Obtiene el identificador de la fila de la base de datos que almacena los datos de configuración

de correo.

public function getHost() : string

Obtiene el nombre de host del servidor de correo SMTP a utilizar.

public function getPort() : integer

Obtiene el puerto del servidor de correo SMTP a utilizar.

public function getUser() : string

Obtiene el nombre de usuario utilizado para conectar con el servidor de correo SMTP a utilizar.

public function getPass() : string

Obtiene la contraseña utilizada para conectar con el servidor de correo SMTP a utilizar.

public function getFromAddr() : string

Obtiene la dirección de correo electrónico de origen a utilizar como remitente de los correos

enviados.

public function getFromName() : string

Obtiene el nombre de origen a utilizar como remitente de los correos enviados.

public function getEncryption() : string

Obtiene el tipo de encriptación a utilizar en la conexión con el servidor SMTP. Los tipos válidos

son “” (una cadena vacía, para no usar encriptación), “tls” y “ssl”.

Page 185: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 185

public function getSMTPAuth() : boolean

Obtiene el flag booleano que indica si el servidor SMTP requiere autentificación.

public function getEnabled() : boolean

Obtiene el flag booleano que indica si está habilitado el envío de correos.

public function setId(integer $id) : void

Establece el identificador de la fila de la base de datos que almacena los datos de configuración

de correo.

public function setHost(string $host) : void

Establece el nombre de host del servidor de correo SMTP a utilizar.

public function setPort(integer $port) : void

Establece el puerto del servidor de correo SMTP a utilizar.

public function setUser(string $user) : void

Establece el nombre de usuario utilizado para conectar con el servidor de correo SMTP a

utilizar.

public function setPass(string $pass) : void

Establece la contraseña utilizada para conectar con el servidor de correo SMTP a utilizar.

public function setFromAddr(string $from_addr) : void

Establece la dirección de correo electrónico de origen a utilizar como remitente de los correos

enviados.

public function setFromName(string $from_name) : void

Establece el nombre de origen a utilizar como remitente de los correos enviados.

public function setEncryption(string $encryption) : void

Establece el tipo de encriptación a utilizar en la conexión con el servidor SMTP. Los tipos válidos

son “” (una cadena vacía, para no usar encriptación), “tls” y “ssl”.

public function setSMTPAuth(boolean $smtp_auth) : void

Establece el flag booleano que indica si el servidor SMTP requiere autentificación.

public function setEnabled(boolean $enabled) : void

Establece el flag booleano que indica si está habilitado el envío de correos.

Page 186: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

186 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

<<Interfaz>>

ArrayAccess

...

MailerSettings

# $sid : integer# $host : string

+ getId() : integer

+ setHost(string $year) : void+ setId(integer $id) : void

ArrayAccess

...

MagicAccessors

...

+ getHost() : string

+ setPort(integer $port) : void

# $port : integer...

+ getPort() : integer

...

...

Figura 5.23: Diagrama UML de la entidad MailerSettings

Page 187: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 187

Paper

Entidad que representa los datos de los papers enviados.

@Entity: Esta clase representa entidades de primer nivel del modelo E-R.

@Table(name=”papers”): Esta entidad representa los datos almacenados en la tabla papers.

5.4.6.4.1 Atributos

protected $id : integer

Identificador del paper en la base de datos.

@Id: Este atributo es una clave primaria de la tabla.

@GeneratedValue: El valor de este atributo es autogenerado por el SGBD.

@Column(type=”integer”, name=”idpaper”, unique=true, nullable=false):

Este atributo se corresponde con la columna idpaper de tipo entero.

Este atributo es único para todas las entidades.

Este atributo no puede tomar un valor nulo.

protected $user_id : integer

Identificador del usuario que ha enviado el paper.

@Column(type="integer", name="iduser "): Este atributo se corresponde con la columna

iduser de tipo entero.

protected $conference : \CMMSE\Doctrine\Conference

Referencia a la conferencia asociada al paper.

@OneToOne(targetEntity=”CMMSE\Doctrine\Conference”): Este atributo referencia una

entidad de \CMMSE\Doctrine\Conference.

@JoinColumn(name=”idconf”, referencedColumnName=”idconf”):

Este atributo se corresponde con la columna idconf.

Este atributo coincide con el valor de la columna idconf de la tabla asociada a la

entidad referenciada.

protected $filename : string

Nombre de primer archivo enviado asociado al paper.

@Column(type="string", name="filename"): Este atributo se corresponde con la columna

filename de tipo cadena.

protected $newfilename : string

Nombre de último archivo enviado asociado al paper.

@Column(type="string", name="newfilename"): Este atributo se corresponde con la

columna newfilename de tipo cadena.

protected $title : string

Título del paper.

@Column(type="string", name="title"): Este atributo se corresponde con la columna title de

tipo cadena.

Page 188: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

188 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

protected $date : string

Fecha de envío del paper como una cadena de texto formateada.

@Column(type="string", name="date"): Este atributo se corresponde con la columna date

de tipo cadena.

protected $poster : boolean

Flag que indica si el paper es un poster.

@Column(type="boolean", name="poster"): Este atributo se corresponde con la columna

poster de tipo booleano.

protected $author1 : string

Nombre del primer autor asignado al paper.

@Column(type="string", name="author1"): Este atributo se corresponde con la columna

author1 de tipo cadena.

protected $author2 : string

Nombre del segundo autor asignado al paper.

@Column(type="string", name="author2"): Este atributo se corresponde con la columna

author2 de tipo cadena.

protected $author3 : string

Nombre del tercer autor asignado al paper.

@Column(type="string", name="author3"): Este atributo se corresponde con la columna

author3 de tipo cadena.

protected $author4 : string

Nombre del cuarto autor asignado al paper, o null si no se ha indicado.

@Column(type="string", name="author4"): Este atributo se corresponde con la columna

author4 de tipo cadena.

protected $author5 : string

Nombre del quinto autor asignado al paper, o null si no se ha indicado.

@Column(type="string", name="author5"): Este atributo se corresponde con la columna

author5 de tipo cadena.

protected $author6 : string

Nombre del sexto autor asignado al paper. o null si no se ha indicado.

@Column(type="string", name="author6"): Este atributo se corresponde con la columna

author6 de tipo cadena.

protected $author7 : string

Nombre del séptimo autor asignado al paper, o null si no se ha indicado.

@Column(type="string", name="author7"): Este atributo se corresponde con la columna

author7 de tipo cadena.

protected $author8 : string

Nombre del octavo autor asignado al paper, o null si no se ha indicado.

@Column(type="string", name="author8"): Este atributo se corresponde con la columna

author8 de tipo cadena.

Page 189: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 189

protected $author9 : string

Nombre del noveno autor asignado al paper, o null si no se ha indicado.

@Column(type="string", name="author9"): Este atributo se corresponde con la columna

author9 de tipo cadena.

protected $decision : boolean

Flag que indica si el paper ha entrado en proceso de revisión.

@Column(type="boolean", name="decision"): Este atributo se corresponde con la columna

decision de tipo cadena.

protected $aceptado : boolean

Flag que indica si el paper ha sido marcado como aceptado.

@Column(type="boolean", name="aceptado"): Este atributo se corresponde con la

columna aceptado de tipo cadena.

protected $created : \DataTime

Fecha y hora de creación de los datos del paper en la base de datos.

@Column(type="datetime", name="created"): Este atributo se corresponde con la columna

created de tipo fecha y hora.

5.4.6.4.2 Métodos

public function getId() : integer

Obtiene el identificador del paper actual.

public function getUserId() : integer

Obtiene el identificador del usuario que envió el paper actual.

public function getConferenceId() : integer

Obtiene el identificador del simposio asociado el paper actual.

public function getConference() : \CMMSE\Doctrine\Conference

Obtiene una instancia del simposio asociado al paper actual.

public function getFilename() : string

Obtiene el nombre de primer archivo enviado asociado al paper actual.

public function getNewFilename() : string

Obtiene el nombre de último archivo enviado asociado al paper actual.

public function getTitile () : string

Obtiene el título del paper actual.

public function getDate() : string

Obtiene la fecha y hora de envío del paper actual como una cadena de texto.

public function getPoster() : boolean

Obtiene un flag que indica si el paper actual es de tipo poster.

Page 190: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

190 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

public function getAuthor1() : string

Obtiene el nombre del primer autor asignado al paper actual.

public function getAuthor2() : string

Obtiene el nombre del segundo autor asignado al paper actual.

public function getAuthor3() : string

Obtiene el nombre del tercer autor asignado al paper actual.

public function getAuthor4() : string

Obtiene el nombre del cuarto autor asignado al paper actual.

public function getAuthor5() : string

Obtiene el nombre del quinto autor asignado al paper actual.

public function getAuthor6() : string

Obtiene el nombre del sexto autor asignado al paper actual.

public function getAuthor7() : string

Obtiene el nombre del séptimo autor asignado al paper actual.

public function getAuthor8() : string

Obtiene el nombre del octavo autor asignado al paper actual.

public function getAuthor9() : string

Obtiene el nombre del noveno autor asignado al paper actual.

public function getDecision() : boolean

Obtiene el flag que indica si el paper actual ha entrado en proceso de revisión.

public function getAceptado() : boolean

Obtiene el flag que indica si el paper actual ha sido marcado como aceptado.

public function getCreated() : \DateTime

Obtiene un objeto que representa la fecha y hora de creación de los datos del paper en la base

de datos.

public function setId(integer $id) : void

Establece el identificador del paper actual.

public function setUserId(integer $id) : void

Establece el identificador del usuario que envió el paper actual.

public function setConference(\CMMSE\Doctrine\Conference $conf) : void

Establece el simposio al que está asociado el paper actual.

public function setFilename(string $filename) : void

Establece el nombre de primer archivo enviado asociado al paper actual.

public function setNewFilename(string $newfilename) : void

Establece el nombre de último archivo enviado asociado al paper actual.

Page 191: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 191

public function setTitle(string $title) : void

Establece el título del paper actual.

public function setDate(string $title) : void

Establece la fecha y hora de envío (como una cadena) del paper actual.

public function setPoster(boolean $poster) : void

Establece el flag que indica si el paper actual es de tipo poster.

public function setAuthor1(string $author) : void

Establece el nombre del primer autor asignado al paper actual.

public function setAuthor2(string $author) : void

Establece el nombre del segundo autor asignado al paper actual.

public function setAuthor3(string $author) : void

Establece el nombre del tercer autor asignado al paper actual.

public function setAuthor4(string $author) : void

Establece el nombre del cuarto autor asignado al paper actual.

public function setAuthor5(string $author) : void

Establece el nombre del quinto autor asignado al paper actual.

public function setAuthor6(string $author) : void

Establece el nombre del sexto autor asignado al paper actual.

public function setAuthor7(string $author) : void

Establece el nombre del séptimo autor asignado al paper actual.

public function setAuthor8(string $author) : void

Establece el nombre del octavo autor asignado al paper actual.

public function setAuthor9(string $author) : void

Establece el nombre del noveno autor asignado al paper actual.

public function setDecision(boolean $decision) : boolean

Establece el flag que indica si el paper actual ha entrado en proceso de revisión.

public function setAceptado(boolean $aceptado) : boolean

Establece el flag que indica si el paper actual ha sido marcado como aceptado.

public function setCreated(\DateTime $created) : \DateTime

Establece la fecha y hora de creación de los datos del paper en la base de datos.

Page 192: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

192 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

<<Interfaz>>

ArrayAccess

...

Paper

# $id : integer# $user_id : integer

+ getId() : integer

+ setUserID(integer $id) : void+ setId(integer $id) : void

ArrayAccess

...

MagicAccessors

...

+ getUserID() : integer

# $conference : Conference

+ getConference() : Conference

...

...

# $title : string...

+ getTitle() : sring

+ setConference(Conference $c) : void+ setTitle(string $title) : void

Figura 5.24: Diagrama UML de la entidad Paper

Page 193: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 193

PaymentSettings

Entidad que representa los datos de configuración de pagos.

@Entity: Esta clase representa entidades de primer nivel del modelo E-R.

@Table(name=”payment_settings”): Esta entidad representa los datos almacenados en la

tabla payment_settings.

5.4.6.5.1 Atributos

protected $id: integer

Identificador de la fila de la base de datos que almacena los datos de configuración de pagos.

En la implementación actual el valor de este atributo siempre es uno.

@Id: Este atributo es una clave primaria de la tabla.

@GeneratedValue: El valor de este atributo es autogenerado por el SGBD.

@Column(type=”integer”, name=”row_id”, unique=true, nullable=false):

Este atributo se corresponde con la columna title_id de tipo entero.

Este atributo es único para todas las entidades.

Este atributo no puede tomar un valor nulo.

protected $spain_invoice_next_seq_id : integer

Siguiente número de factura libre para las facturas de España.

@Column(type=" integer ", name="spain_invoice_next_seq_id"): Este atributo se

corresponde con la columna spain_invoice_next_seq_id de tipo entero.

protected $out_invoice_next_seq_id : integer

Siguiente número de factura libre para las facturas de fuera España.

@Column(type=" integer ", name="out_invoice_next_seq_id"): Este atributo se

corresponde con la columna out_invoice_next_seq_id de tipo entero.

protected $red_invoice_next_seq_id : integer

Siguiente número de factura libre para las facturas de la Red.

@Column(type=" integer ", name="red_invoice_next_seq_id"): Este atributo se

corresponde con la columna red_invoice_next_seq_id de tipo entero.

protected $fees : integer

Cuota de inscripción a pagar.

@Column(type="integer", name="fees"): Este atributo se corresponde con la columna fees

de tipo entero.

protected $red_fees : integer

Cuota de inscripción a pagar.

@Column(type="integer", name="red_fees"): Este atributo se corresponde con la columna

red_fees de tipo entero.

Page 194: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

194 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

5.4.6.5.2 Métodos

public function getId() : integer

Obtiene el identificador de la fila de la base de datos que almacena los datos de configuración

de pagos.

public function getSpain_invoice_next_seq_id() : integer

Obtiene el siguiente número de secuencia para las facturas de España.

public function getOut_invoice_next_seq_id() : integer

Obtiene el siguiente número de factura para las facturas de fuera de España.

public function getRed_invoice_next_seq_id() : integer

Obtiene el siguiente número de factura para las facturas de la Red.

public function getFees() : integer

Obtiene la cantidad a pagar, en euros, como cuota de inscripción por defecto.

public function getRed_fees() : integer

Obtiene la cantidad a pagar, en euros, como cuota de inscripción por defecto para los usuarios

pertenecientes a la Red.

public function setId(integer $id) : void

Establece el identificador de la fila de la base de datos que almacena los datos de configuración

de pagos.

public function setSpain_invoice_next_seq_id(integer $id) : void

Establece el siguiente número de secuencia para las facturas de España.

public function setOut_invoice_next_seq_id(integer $id) : void

Establece el siguiente número de factura para las facturas de fuera de España.

public function setRed_invoice_next_seq_id(integer $id) : void

Establece el siguiente número de factura para las facturas de la Red.

public function setFees(integer $id) : void

Establece la cantidad a pagar, en euros, como cuota de inscripción por defecto.

public function setRed_fees(integer $id) : void

Establece la cantidad a pagar, en euros, como cuota de inscripción por defecto para los

usuarios pertenecientes a la Red.

Page 195: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 195

<<Interfaz>>

ArrayAccess

...

PaymentSettings

# $sid : integer

+ getId() : integer

# $spain_invoice_next_seq_id : integer

+ getOut_invoice_next_seq_id() : integer

+ setOut_invoice_next_seq_id(integer $year) : void+ setSpain_invoice_next_seq_id(integer $id) : void

ArrayAccess

...

MagicAccessors

...

+ getRed_invoice_next_seq_id() : integer

+ setRed_invoice_next_seq_id(integer $id) : void

# $out_invoice_next_seq_id : integer

# $red_fees : integer

+ getFees() : integer+ getRed_fees() : integer

# $fees : integer# $red_invoice_next_seq_id : integer

+ setId(integer $id) : void

+ setFees(integer $fees) : void+ setRed_fees(integer $fees) : void

+ getSpain_invoice_next_seq_id() : integer

Figura 5.25: Diagrama UML de la entidad PaymentSettings

Page 196: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

196 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

PersonTitle

Entidad que representa los datos de los posibles títulos asignados a los ponentes, como Señor, Señora

o Doctor.

@Entity: Esta clase representa entidades de primer nivel del modelo E-R.

@Table(name=”person_titles”): Esta entidad representa los datos almacenados en la tabla

person_titles.

5.4.6.6.1 Atributos

protected $id: integer

Identificador del título en la base de datos.

@Id: Este atributo es una clave primaria de la tabla.

@GeneratedValue: El valor de este atributo es autogenerado por el SGBD.

@Column(type=”integer”, name=”title_id”, unique=true, nullable=false):

Este atributo se corresponde con la columna title_id de tipo entero.

Este atributo es único para todas las entidades.

Este atributo no puede tomar un valor nulo.

protected $title_key : string

Clave del título (utilizada en los formularios).

@Column(type="string", name="title_key"): Este atributo se corresponde con la columna

title_key de tipo cadena.

protected $title : string

Nombre del título.

@Column(type="string", name="title"): Este atributo se corresponde con la columna title de

tipo cadena.

5.4.6.6.2 Métodos

public function getId() : integer

Obtiene el identificador del título actual.

public function getTitleKey() : string

Obtiene la clave del título actual utilizada en los formularios.

public function getTitle() : string

Obtiene el nombre del título actual.

public function setId(integer $id) : void

Establece el identificador del título actual.

public function setTitleKey (string $name) : void

Establece la clave del título actual utilizada en los formularios.

public function setTitle(string $title) : void

Establece el nombre del título actual.

Page 197: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 197

<<Interfaz>>

ArrayAccess

...

PersonTitle

# $id : integer

+ getId() : integer

# $title_key : string

+ getTitleKey() : string

+ setTitleKey(string $title_key) : void+ setId(integer $id) : void

ArrayAccess

...

MagicAccessors

...

# $title : string

+ getTitle() : string

+ setTitle(string $title) : void

Figura 5.26: Diagrama UML de la entidad PersonTitle

Page 198: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

198 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Poster

Entidad que representa los datos adicionales asociados a los papers de tipo poster.

@Entity: Esta clase representa entidades de primer nivel del modelo E-R.

@Table(name=”poster”): Esta entidad representa los datos almacenados en la tabla poster.

5.4.6.7.1 Atributos

protected $id: integer

Identificador del poster en la base de datos.

@Id: Este atributo es una clave primaria de la tabla.

@GeneratedValue: El valor de este atributo es autogenerado por el SGBD.

@Column(type=”integer”, name=”poster_id”, unique=true, nullable=false):

Este atributo se corresponde con la columna poster_id de tipo entero.

Este atributo es único para todas las entidades.

Este atributo no puede tomar un valor nulo.

protected $paper: \CMMSE\Doctrine\Paper

Referencia al paper asociado al poster.

@Id: Este atributo es una clave primaria de la tabla.

@OneToOne(targetEntity=”CMMSE\Doctrine\Poster”): Este atributo apunta a una entidad

de \CMMSE\Doctrine\Paper.

@JoinColumn(name=”paper_id”, referencedColumnName=”idpaper”):

Este atributo se corresponde con la columna paper_id.

Este atributo coincide con el valor de la columna idpaper de la tabla asociada a la

entidad referenciada.

protected $ts_begin : \DataTime

Fecha y hora de inicio de exposición del poster.

@Column(type="datetime", name="ts_begin"): Este atributo se corresponde con la

columna ts_begin de tipo fecha y hora.

protected $ts_end : \DataTime

Fecha y hora de fin de exposición del poster.

@Column(type="datetime", name="ts_end"): Este atributo se corresponde con la columna

ts_end de tipo fecha y hora.

protected $room: \CMMSE\Doctrine\Room

Referencia a la sala asociada al poster.

@OneToOne(targetEntity=”CMMSE\Doctrine\Room”): Este atributo apunta a una entidad

de \CMMSE\Doctrine\Room.

@JoinColumn(name=”room”, referencedColumnName=”room_id”):

Este atributo se corresponde con la columna room.

Este atributo coincide con el valor de la columna room_id de la tabla asociada a la

entidad referenciada.

Page 199: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 199

5.4.6.7.2 Métodos

public function getId() : integer

Obtiene el identificador del poster actual.

public function getPaper() : \CMMSE\Doctrine\Paper

Obtiene una instancia del paper asociado al poster actual.

public function geTs_begin() : \DateTime

Obtiene la fecha y hora de inicio de exposición del poster.

public function geTs_end() : \DateTime

Obtiene la fecha y hora de fin de exposición del poster.

public function getRoom () : \CMMSE\Doctrine\Room

Obtiene una instancia de la sala asociada al poster actual, o null si no se ha asociado ninguna.

public function setId(integer $id) : void

Establece el identificador del poster actual.

public function setPaper(\CMMSE\Doctrine\Paper $paper) : void

Establece el paper asociado al poster actual.

public function seTs_begin(\DateTime $ts_begin) : void

Establece la fecha y hora de inicio de exposición del poster.

public function seTs_end(\DateTime $ts_end) : void

Establece la fecha y hora de fin de exposición del poster.

public function setRoom([\CMMSE\Doctrine\Room $room]) : void

Establece la sala asociada al poster actual. Si se utiliza sin parámetros, se elimina la asociación

con cualquier sala que pudiese existir.

Page 200: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

200 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

<<Interfaz>>

ArrayAccess

...

Poster

# $id : integer

+ getId() : integer

# $paper : Poster

+ getPaper() : Paper

+ setPaper(Paper $paper) : void+ setId(integer $id) : void

ArrayAccess

...

MagicAccessors

...

# $room : Room

+ getTs_begin() : \DateTime

+ setTs_begin(\DateTime $ts) : void

# $ts_begin : \DateTime# $ts_end : \DateTime

+ getTs_end() : \DateTime+ getRoom() : Room

+ setTs_end(\DateTime $ts) : void+ setRoom(Room $room) : void

Figura 5.27: Diagrama UML de la entidad Poster

Page 201: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 201

Room

Entidad que representa los datos de las salas.

@Entity: Esta clase representa entidades de primer nivel del modelo E-R.

@Table(name=”rooms”): Esta entidad representa los datos almacenados en la tabla rooms.

5.4.6.8.1 Atributos

protected $id: integer

Identificador de la sala en la base de datos.

@Id: Este atributo es una clave primaria de la tabla.

@GeneratedValue: El valor de este atributo es autogenerado por el SGBD.

@Column(type=”integer”, name=”room_id”, unique=true, nullable=false):

Este atributo se corresponde con la columna room_id de tipo entero.

Este atributo es único para todas las entidades.

Este atributo no puede tomar un valor nulo.

protected $name : string

Nombre de la sala.

@Column(type="string", name="name"): Este atributo se corresponde con la columna name

de tipo cadena.

5.4.6.8.2 Métodos

public function getId() : integer

Obtiene el identificador de la sala actual, o null si la entidad no se corresponde con datos

almacenados (aún) en la base de datos.

public function getName() : string

Obtiene el nombre de la sala actual.

public function setId(integer $id) : void

Establece el identificador de la sala actual.

public function setName(string $name) : void

Establece el nombre de la sala actual.

Page 202: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

202 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

<<Interfaz>>

ArrayAccess

...

Room

# $id : integer

+ getId() : integer

# $name : string

+ getName() : string

+ setName(string $title) : void+ setId(integer $id) : void

ArrayAccess

...

MagicAccessors

...

Figura 5.28: Diagrama UML de la entidad Room

Page 203: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 203

Session

Entidad que representa los datos de las sesiones de usuario.

@Entity: Esta clase representa entidades de primer nivel del modelo E-R.

@Table(name=”session”): Esta entidad representa los datos almacenados en la tabla sessions.

5.4.6.9.1 Atributos

protected $sid: integer

Identificador de la sala en la base de datos.

@Id: Este atributo es una clave primaria de la tabla.

@GeneratedValue: El valor de este atributo es autogenerado por el SGBD.

@Column(type=”integer”, name=”sid”, unique=true, nullable=false):

Este atributo se corresponde con la columna sid de tipo entero.

Este atributo es único para todas las entidades.

Este atributo no puede tomar un valor nulo.

protected $hash : string

Hash de la sesión.

@Column(type="string", name="hash"): Este atributo se corresponde con la columna hash

de tipo cadena.

protected $data : string

Datos de la sesión serializados.

@Column(type="string", name="data"): Este atributo se corresponde con la columna data

de tipo cadena.

protected $expired : integer

Entero que representa si la sesión ha expirado. El valor 0 indica que la sesión ha expirado,

cualquier otro indica lo contrario.

@Column(type="integer", name="expired"): Este atributo se corresponde con la columna

expired de tipo entero.

5.4.6.9.2 Métodos

public function getId() : integer

Obtiene el identificador de la sesión actual.

public function getHash() : string

Obtiene el hash de la sesión actual.

public function getData() : string

Obtiene los datos de sesión serializados.

public function getExpired() : integer

Obtiene el flag que indica si la sesión ha expirado, como un entero. El valor 0 indica que la

sesión ha expirado, cualquier otro indica lo contrario.

Page 204: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

204 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

public function setId(integer $id) : void

Establece el identificador de la sesión actual.

public function setHash(string $name) : void

Establece el hash de la sala actual.

public function setData(string $data) : void

Establece los datos asociados a la sesión serializados.

public function setExpired(integer $expired) : void

Establece el flag que indica si la sesión ha expirado. Si se le pasa cualquier valor distinto de cero

como parámetro se marca la sesión como expirada y viceversa.

<<Interfaz>>

ArrayAccess

...

Session

# $sid : integer

+ getId() : integer

# $hash : string

+ getHash() : string

+ setHash(string $hash) : void+ setId(integer $id) : void

ArrayAccess

...

MagicAccessors

...

+ getData() : string

+ setData(string $data) : void

# $data : string# $expired : integer

+ getExpired() : boolean

+ setExpired(integer $expired) : void

Figura 5.29: Diagrama UML de la entidad Session

Page 205: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 205

Settings

Entidad que representa los datos de configuración de la aplicación.

@Entity: Esta clase representa entidades de primer nivel del modelo E-R.

@Table(name=”settings”): Esta entidad representa los datos almacenados en la tabla settings.

5.4.6.10.1 Atributos

protected $id: integer

Identificador de la fila de la base de datos que almacena los datos de configuración de la

aplicación. En la implementación actual el valor de este atributo siempre es uno.

@Id: Este atributo es una clave primaria de la tabla.

@GeneratedValue: El valor de este atributo es autogenerado por el SGBD.

@Column(type=”integer”, name=”idsetting”, unique=true, nullable=false):

Este atributo se corresponde con la columna idsetting de tipo entero.

Este atributo es único para todas las entidades.

Este atributo no puede tomar un valor nulo.

protected $year : integer

Año de celebración (edición) de la conferencia.

@Column(type="string", name="yearconf"): Este atributo se corresponde con la columna

yearconf de tipo entero.

protected $date : string

Fecha(s) de celebración de la conferencia, como una cadena de texto.

@Column(type="string", name="dateconf"): Este atributo se corresponde con la columna

dateconf de tipo cadena.

protected $place : string

Lugar de celebración de la conferencia.

@Column(type="string", name="placeconf"): Este atributo se corresponde con la columna

placeconf de tipo cadena.

protected $url : string

URL de la web de la conferencia.

@Column(type="string", name="urlconf"): Este atributo se corresponde con la columna

urlconf de tipo cadena.

protected $date_facturas : string

Fecha(s) a mostrar en las facturas generadas, como una cadena de texto.

@Column(type="string", name="datefirmafact"): Este atributo se corresponde con la

columna datefirmafact de tipo cadena.

protected $date_certificados : string

Fecha(s) a mostrar en los certificados generadas, como una cadena de texto.

@Column(type="string", name="datefirmacert"): Este atributo se corresponde con la

columna datefirmacert de tipo cadena.

Page 206: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

206 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

protected $cif: string

CIF de la organización del congreso.

@Column(type="string", name="cif"): Este atributo se corresponde con la columna cif de

tipo cadena.

protected $isbn: string

ISBN de la publicación que contendrá los papers presentados en el congreso.

@Column(type="string", name="isbn"): Este atributo se corresponde con la columna isbn de

tipo cadena.

protected $issn: string

ISSN de la publicación que contendrá los papers presentados en el congreso.

@Column(type="string", name="issn"): Este atributo se corresponde con la columna issn de

tipo cadena.

protected $email: string

Lista de direcciones de correo électrónico concatenadas a las que se enviarán las

notificaciones.

@Column(type="string", name="email"): Este atributo se corresponde con la columna issn

de tipo cadena.

protected $closed: boolean

Flag que indica si el acceso público a la aplicación está habilitado.

@Column(type="boolean", name="bbddonoff"): Este atributo se corresponde con la

columna bbddonoff de tipo booleano.

protected $red_cif: string

CIF del patrocinador de la conferencia, si lo hubiera, o null.

@Column(type="string", name="red_cif"): Este atributo se corresponde con la columna

red_cif de tipo cadena.

protected $red_name: string

Nombre del patrocinador de la conferencia, si lo hubiera, o null.

@Column(type="string", name="red_name"): Este atributo se corresponde con la columna

red_name de tipo cadena.

protected $red_address: string

Dirección del patrocinador de la conferencia, si lo hubiera, o null.

@Column(type="string", name="red_address"): Este atributo se corresponde con la

columna red_address de tipo cadena.

protected $red_company: string

Nombre de la compañía patrocinadora de la conferencia (a nombre de la cual se emiten las

facturas), si lo hubiera, o null.

@Column(type="strng", name="red_company"): Este atributo se corresponde con la

columna red_company de tipo cadena.

Page 207: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 207

protected $tipoetiqueta: integer

Entero que representa el tipo de etiquetas (horizontal/vertical) a generar.

@Column(type="integer", name="tipoetiqueta"): Este atributo se corresponde con la

columna tipoetiqueta de tipo entero.

protected $sizeetiqueta: integer

Entero que representa el tamaño de las etiquetas a generar.

@Column(type="integer", name="sizeetiqueta"): Este atributo se corresponde con la

columna sizeetiqueta de tipo entero.

protected $plazo_cerrado: boolean

Booleano que indica si el plazo de envío de papers está cerrado.

@Column(type="boolean", name="plazo_cerrado "): Este atributo se corresponde con la

columna plazo_cerrado de tipo booleano.

5.4.6.10.2 Métodos

public function getIsDefault() : boolean

Obtiene un flag que indica si los datos de configuración representados por la instancia actual

han sido leídos desde la base de datos.

public function getId() : integer

Obtiene el identificador de la fila de la base de datos que almacena los datos de configuración.

public function getIdSetting() : integer

Obtiene el identificador de la fila de la base de datos que almacena los datos de configuración.

Este método es un alias del anterior.

public function getYear() : integer

Obtiene el año de celebración (edición) de la conferencia configurado.

public function getDate() : string

Obtiene la(s) fecha(s) configurada(s) de celebración de la conferencia, como una cadena de

texto.

public function getPlace() : string

Obtiene el lugar de celebración de la conferencia.

public function getURL() : string

Obtiene la URL de la web de la conferencia.

public function getDateFacturas() : string

Obtiene la(s) fecha(s) a mostrar en las facturas generadas, como una cadena de texto.

public function getDateCertificados() : string

Obtiene la(s) fecha(s) a mostrar en los certificados generados, como una cadena de texto.

public function getCIF() : string

Obtiene el CIF asociado a la organización de la conferencia.

Page 208: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

208 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

public function getISBN() : string

Obtiene el ISBN de la publicación que contendrá los papers presentados en el congreso.

public function getISSN() : string

Obtiene el ISSN de la publicación que contendrá los papers presentados en el congreso.

public function getEMail() : string

Obtiene una cadena de texto con la lista de direcciones de correo electrónico concatenadas a

las que se enviarán las notificaciones.

public function getClosed() : boolean

Obtiene el flag que indica si el acceso público a la aplicación está habilitado.

public function getRedCIF() : string

Obtiene el CIF del patrocinador de la conferencia, si lo hubiera, o null.

public function getRedName() : string

Obtiene el nombre del patrocinador de la conferencia, si lo hubiera, o null si no hay

patrocinador.

public function getRedAddress() : string

Obtiene la dirección de facturación del patrocinador de la conferencia, si lo hubiera, o null si

no hay patrocinador.

public function getRedCompany() : string

Obtiene el nombre de la compañía patrocinadora de la conferencia (a nombre de la cual se

emiten las facturas), si la hubiera, o null si no hay patrocinador.

public function getTipoEtiqueta() : integer

Obtiene el tipo de etiquetas (horizontal/vertical) a generar, representado como un entero. El

valor 0 indica etiquetas verticales; el valor 1, horizontales; otros valores no están definidos y

provocan que se generen etiquetas verticales.

public function getSizeEtiqueta() : integer

Obtiene el tamaño de las etiquetas a generar, representado como un entero. En la

implementación actual, el valor 9 representa etiquetas de 9,2x6,25cm; el valor 15, 15x7,5cm;

otros valores no están definidos y provocan que se generen etiquetas de 15x7,5cm.

public function getPlazoCerrado() : boolean

Obtiene un flag que indica si el plazo de envío de papers está cerrado.

public function setId(integer $id) : void

Obtiene el identificador de la fila de la base de datos que almacena los datos de configuración.

public function setIdSetting(integer $id) : void

Obtiene el identificador de la fila de la base de datos que almacena los datos de configuración.

Este método es un alias del anterior.

Page 209: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 209

public function setYear(integer $year) : void

Obtiene el año de celebración (edición) de la conferencia configurado.

public function setDate(string $date) : void

Establece la(s) fecha(s) de celebración de la conferencia, como una cadena de texto.

public function setPlace(string $place) : void

Establece el lugar de celebración de la conferencia.

public function setURL(string $url) : void

Establece la URL de la web de la conferencia.

public function setDateFacturas(string $date) : void

Establece la(s) fecha(s) a mostrar en las facturas generadas, como una cadena de texto.

public function setDateCertificados(string $date) : void

Establece la(s) fecha(s) a mostrar en los certificados generados, como una cadena de texto.

public function setCIF(string $cif) : void

Establece el CIF asociado a la organización de la conferencia.

public function setISBN(string $isbn) : void

Establece el ISBN de la publicación que contendrá los papers presentados en el congreso.

public function setISSN(string $issn) : void

Establece el ISSN de la publicación que contendrá los papers presentados en el congreso.

public function setEMail(string $email) : void

Establece la lista de direcciones de correo electrónico a las que se enviarán las notificaciones

a partir de una lista de direcciones de correo concatenadas (separadas por comas).

public function setClosed(boolean $closed) : void

Establece el flag que indica si el acceso público a la aplicación está habilitado.

public function setRedCIF(string $cif) : void

Establece el CIF del patrocinador de la conferencia, si lo hubiera, o null si no hay

patrocinador.

public function setRedName(string $red_name) : void

Establece el nombre del patrocinador de la conferencia, si lo hubiera, o null si no hay

patrocinador.

public function setRedAddress(string $red_address) : void

Establece la dirección de facturación del patrocinador de la conferencia, si lo hubiera, o null si

no hay patrocinador.

public function setRedCompany(string $red_company) : void

Establece el nombre de la compañía patrocinadora de la conferencia (a nombre de la cual se

emiten las facturas), si la hubiera, o null si no hay patrocinador.

Page 210: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

210 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

public function setTipoEtiqueta(integer $tipo_etiqueta) : void

Establece el tipo de etiquetas a generar. El valor 0 representa etiquetas verticales; el valor 1,

horizontales; otros valores no están definidos y provocan que se generen etiquetas verticales.

public function setSizeEtiqueta(integer $size_etiqueta) : void

Obtiene el tamaño de las etiquetas a generar. En la implementación actual, el valor 9

representa etiquetas de 9,2x6,25cm; el valor 15, 15x7,5cm; otros valores no están definidos y

provocan que se generen etiquetas de 15x7,5cm.

public function setPlazoCerrado(boolean $cerrado) : void

Obtiene un flag que indica si el plazo de envío de papers está cerrado.

<<Interfaz>>

ArrayAccess

...

Settings

# $sid : integer

+ getIsDefault() : boolean

# $year : string

+ getId() : integer

+ setYear(integer $year) : void+ setId(integer $id) : void

ArrayAccess

...

MagicAccessors

...

+ getYear() : integer

+ setPlace(string $place) : void

# $place : string...

+ getPlace() : string

...

...

Figura 5.30: Diagrama UML de la entidad Settings

Page 211: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 211

Trip

Entidad que representa los datos de las excursiones.

@Entity: Esta clase representa entidades de primer nivel del modelo E-R.

@Table(name=”trips”): Esta entidad representa los datos almacenados en la tabla trips.

5.4.6.11.1 Atributos

protected $id: integer

Identificador de la excursión en la base de datos.

@Id: Este atributo es una clave primaria de la tabla.

@GeneratedValue: El valor de este atributo es autogenerado por el SGBD.

@Column(type=”integer”, name=”trip_id”, unique=true, nullable=false):

Este atributo se corresponde con la columna trip_id de tipo entero.

Este atributo es único para todas las entidades.

Este atributo no puede tomar un valor nulo.

protected $name : string

Nombre de la excursión.

@Column(type="string", name="name"): Este atributo se corresponde con la columna name

de tipo cadena.

5.4.6.11.2 Métodos

public function getId() : integer

Obtiene el identificador de la excursión actual, o null si la entidad no se corresponde con datos

almacenados (aún) en la base de datos.

public function getName() : string

Obtiene el nombre de la excursión actual.

public function setId(integer $id) : void

Establece el identificador de la excursión actual.

public function setName(string $name) : void

Establece el nombre de la excursión actual.

Page 212: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

212 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

<<Interfaz>>

ArrayAccess

...

Trip

# $id : integer

+ getId() : integer

# $name : string

+ getName() : string

+ setName(string $title) : void+ setId(integer $id) : void

ArrayAccess

...

MagicAccessors

...

Figura 5.31: Diagrama UML de la entidad Trip

Page 213: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 213

User

Entidad que representa los datos básicos asociados a los usuarios.

@Entity: Esta clase representa entidades de primer nivel del modelo E-R.

@Table(name=”usuarios”): Esta entidad representa los datos almacenados en la tabla trips.

5.4.6.12.1 Atributos

protected $id: integer

Identificador del usuario en la base de datos.

@Id: Este atributo es una clave primaria de la tabla.

@GeneratedValue: El valor de este atributo es autogenerado por el SGBD.

@Column(type=”integer”, name=”iduser”, unique=true, nullable=false):

Este atributo se corresponde con la columna iduser de tipo entero.

Este atributo es único para todas las entidades.

Este atributo no puede tomar un valor nulo.

protected $password : string

Contraseña del usuario codificada con MD5.

@Column(type="string", name="password"): Este atributo se corresponde con la columna

password de tipo cadena.

protected $firstname : string

Nombre de pila del usuario.

@Column(type="string", name="firstname"): Este atributo se corresponde con la columna

firstname de tipo cadena.

protected $lastname : string

Apellidos del usuario.

@Column(type="string", name="lastname"): Este atributo se corresponde con la columna

lastname de tipo cadena.

protected $email : string

Dirección de correo electrónico del usuario.

@Column(type="string", name="email"): Este atributo se corresponde con la columna

lastname de tipo cadena.

protected $company : string

Nombre de la compañía o institución a la que pertenece el usuario.

@Column(type="string", name="company"): Este atributo se corresponde con la columna

company de tipo cadena.

protected $title : string

Título honorífico aplicado al usuario.

@Column(type="string", name="title"): Este atributo se corresponde con la columna title de

tipo cadena.

Page 214: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

214 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

protected $country : string

País de origen del usuario.

@Column(type="string", name="country", nullable=false): Este atributo se corresponde con

la columna country de tipo cadena.

protected $state : string

Estado, comunidad autónoma o subdivisión análoga de origen del usuario.

@Column(type="string", name="state", nullable=true): Este atributo se corresponde con la

columna state de tipo cadena.

protected $city : string

Ciudad de origen del usuario.

@Column(type="string", name="city", nullable=true): Este atributo se corresponde con la

columna city de tipo cadena.

protected $address : string

Dirección del usuario (texto libre).

@Column(type="string", name="address", nullable=true): Este atributo se corresponde con

la columna address de tipo cadena.

protected $postalcode : string

Código postal del usuario.

@Column(type="string", name="postalcode", nullable=true): Este atributo se corresponde

con la columna postalcode de tipo cadena.

protected $telephone : string

Número de teléfono del usuario.

@Column(type="string", name="telephone", nullable=true): Este atributo se corresponde

con la columna telephone de tipo cadena.

protected $factura : string

Nombre del archivo de justificante de pago enviado por el usuario, o null si no ha enviado

ninguno.

@Column(type="string", name="factura", nullable=true): Este atributo se corresponde con

la columna factura de tipo cadena.

protected $fees : string

Cuota de inscripción para el usuario (en euros), o null si tiene asignada la cuota por defecto.

@Column(type="string", name="fees", nullable=true): Este atributo se corresponde con la

columna factura de tipo cadena.

protected $type : string

Tipo de usuario.

@Column(type="string", name="type", nullable=false): Este atributo se corresponde con la

columna factura de tipo cadena.

Page 215: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 215

5.4.6.12.3 Métodos

public function getId() : integer

Obtiene el identificador del usuario actual.

public function getPassword() : string

Obtiene el password (cifrado) del usuario.

public function getFirstname() : string

Obtiene el nombre de pila del usuario.

public function getLastname() : string

Obtiene el apellido del usuario.

public function getEmail() : string

Obtiene la dirección de correo electrónico del usuario.

public function getCompany() : string

Obtiene el nombre de la compañía o institución del usuario, o null si el usuario no tiene uno

asignado.

public function getTitle() : string

Obtiene el título honorífico asociado al usuario.

public function getCountry() : string

Obtiene el nombre del país del usuario.

public function getState() : string

Obtiene el nombre del estado, comunidad autónoma o subdivisión análoga de origen del

usuario, o null si el usuario no tiene uno asignado.

public function getCity() : string

Obtiene la ciudad de origen del usuario, o null si el usuario no tiene una asignada.

public function getAddress() : string

Obtiene la dirección del usuario tal como éste la ha indicado (texto libre), o null si el usuario no

tiene una asignada.

public function getPostalcode() : string

Obtiene el código postal del usuario, o null si el usuario no tiene uno asignado.

public function getTelephone() : string

Obtiene el número de teléfono del usuario, o null si el usuario no tiene uno asignado.

public function getFactura() : string

Obtiene el nombre del archvo enviado como justificante de pago por el usuario actual, o null si

el usuario no ha enviado ninguno.

public function getFees() : integer

Obtiene la cuota de inscripción a pagar por el usuario (en euros), o null si tiene asignada la

cuota por defecto.

Page 216: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

216 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

public function getType() : integer

Obtiene el tipo de cuenta del usuario como un entero. El valor 1 representa las cuentas de

administrador; el 2, las de ponente; el 3, las de editor.

public function setId(integer $id) : void

Establece el identificador del usuario actual.

public function setPassword(string $password) : void

Establece el password (encriptado) del usuario.

public function setFirstname(string $firstname) : void

Establece el nombre de pila del usuario.

public function setLastname(string $lastname) : void

Establece el apellido del usuario.

public function setEmail(string $email) : void

Establece el password (encriptado) del usuario.

public function setCompany(string $company) : void

Establece el nombre de la compañía o institución del usuario.

public function setTitle(string $title) : void

Establece el título honorífico asociado al usuario.

public function setCountry(string $country) : void

Establece el nombre del país del usuario.

public function setState(string $state) : void

Establece el estado, comunidad autónoma o subdivisión análoga de origen del usuario.

public function setCity(string $city) : void

Establece la ciudad de origen del usuario.

public function setAddress(string $address) : void

Establece la dirección del usuario como texto libre.

public function setPostalcode(string $postalcode) : void

Establece el código postal del usuario.

public function setTelephone(string $telephone) : void

Establece el número de teléfono del usuario.

public function setFactura(string $factura) : void

Establece el nombre de archivo del justificante de pago enviado por el usuario.

public function setFees(string $fees) : void

Establece la cuota de inscripción a pagar por el usuario.

public function setType(string $type) : void

Establece el tipo de cuenta del usuario.

Page 217: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 217

<<Interfaz>>

ArrayAccess

...

User

# $sid : integer# $password : string

+ getId() : integer

+ setPassword(string $year) : void+ setId(integer $id) : void

ArrayAccess

...

MagicAccessors

...

+ getPassword() : string

# $firstname : string

+ getFirstname() : string

...

...

# $lastname : string...

+ getLastname() : string

+ setFirstname(string $firstname) : void+ setLastname(string $lastname) : void

Figura 5.32: Diagrama UML de la entidad User

Page 218: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

218 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

UserBillingInfo

Entidad que representa los datos básicos asociados a los usuarios.

@Entity: Esta clase representa entidades de primer nivel del modelo E-R.

@Table(name=”facturacion”): Esta entidad representa los datos almacenados en la tabla

facturacion.

5.4.6.13.1 Atributos

protected $id: integer

Identificador del usuario en la base de datos cuyos datos de facturación representa este

objeto.

@Id: Este atributo es una clave primaria de la tabla.

@GeneratedValue: El valor de este atributo es autogenerado por el SGBD.

@Column(type=”integer”, name=”iduser”, unique=true, nullable=false):

Este atributo se corresponde con la columna iduser de tipo entero.

Este atributo es único para todas las entidades.

Este atributo no puede tomar un valor nulo.

protected $user: \CMMSE\Doctrine\User

Referencia al usuario asociado a los datos de facturación.

@Id: Este atributo es una clave primaria de la tabla.

@OneToOne(targetEntity=”CMMSE\Doctrine\User”): Este atributo apunta a una entidad de

\CMMSE\Doctrine\User.

@JoinColumn(name=”iduser”, referencedColumnName=”iduser”):

Este atributo se corresponde con la columna iduser.

Este atributo coincide con el valor de la columna iduser de la tabla asociada a la entidad

referenciada.

protected $factura : string

Nombre de archivo del justificante de pago enviado por el usuario.

@Column(type="string", name="factura", nullable=true):Este atributo se corresponde con

la columna factura de tipo cadena.

protected $pago : boolean

Flag que indica si el pago del usuario ha sido confirmado.

@Column(type="boolean", name="pago", nullable=false): Este atributo se corresponde con

la columna pago de tipo booleano.

protected $billnumber : integer

Número de factura asignado al usuario.

@Column(type="integer", name="billnumber", nullable=true): Este atributo se corresponde

con la columna billnumber de tipo entero.

Page 219: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 219

protected $billcif : string

CIF a usar en la factura del usuario.

@Column(type="string", name="billcif", nullable=true): Este atributo se corresponde con la

columna billcif de tipo cadena.

protected $billcompany : string

Compañía que pagará la factura del usuario.

@Column(type="string", name="billcompany", nullable=true): Este atributo se corresponde

con la columna billcompany de tipo cadena.

protected $billaddress : string

Dirección de facturación para la emisión de la factura del usuario.

@Column(type="string", name="billaddress", nullable=true): Este atributo se corresponde

con la columna billaddress de tipo cadena.

protected $billname : string

Nombre del beneficiario para la emisión de la factura del usuario.

@Column(type="string", name="billname", nullable=true): Este atributo se corresponde

con la columna billname de tipo cadena.

protected $bill_red : string

Flag que indica si la factura emitida es de un usuario patrocinado.

@Column(type="boolean", name="bill_red", nullable=false): Este atributo se corresponde

con la columna bill_red de tipo booleano.

protected $billnumber_red : string

Número de la factura según la numeración del patrocinador.

@Column(type="integer", name="billnumber_red", nullable=false): Este atributo se

corresponde con la columna bill_red de tipo entero.

protected $fees : integer

Cuota de inscripción, en euros.

@Column(type="integer", name="fees ", nullable=false): Este atributo se corresponde con

la columna fees de tipo entero.

protected $billprint : boolean

Flag que indica si la factura del usuario está lista para ser impresa.

@Column(type="boolean", name="billprint ", nullable=false): Este atributo se corresponde

con la columna billprint de tipo booleano.

5.4.6.13.2 Métodos

public function getId() : integer

Obtiene el identificador del usuario cuyos datos de facturación representa el objeto actual, o

null si la entidad no se corresponde con datos almacenados (aún) en la base de datos.

public function getUser() : \CMMSE\Doctrine\User

Obtiene una instancia de un objeto que representa al usuario asociado a los datos de

facturación representados por el objeto actual.

Page 220: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

220 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

public function getFactura() : string

Obtiene el nombre de archivo del justificante de pago enviado por el usuario asociado a los

datos de facturación representados por el objeto actual.

public function getPago() : boolean

Obtiene el flag que indica si el pago del usuario asociado a los datos de facturación

representados por el objeto actual ha sido confirmado.

public function getBillnumber() : integer

Obtiene el número de factura asignado al usuario asociado a los datos de facturación

representados por el objeto actual, o null en caso de que no se le haya asignado uno.

public function getBillCIF() : string

Obtiene el CIF del usuario asociado a los datos de facturación representados por el objeto

actual, o null en caso de que no se haya indicado.

public function getBillCompany() : string

Obtiene el nombre de la compañía, empresa o institución que se encargará del pago de la

factura del usuario asociado a los datos de facturación representados por el objeto actual, o

null en caso de que no se haya indicado.

public function getBillAddress() : string

Obtiene la dirección de facturación a utilizar en la factura generada para el usuario asociado a

los datos de facturación representados por el objeto actual, o null en caso de que no se haya

indicado.

public function getBillName() : string

Obtiene el nombre del beneficiario para la emisión de la factura generada para el usuario

asociado a los datos de facturación representados por el objeto actual, o null en caso de que

no se haya indicado.

public function getBill_red() : boolean

Obtiene el flag que indica si los datos de facturación representados por el objeto actual se

correspondes con un usuario patrocinado.

public function getBillnumber_red() : integer

Obtiene el número de factura del patrocinador asignado al usuario asociado a los datos de

facturación representados por el objeto actual, o null en caso de que no se le haya asignado

uno.

public function getFees() : integer

Obtiene la cuota de inscripción a pagar, en euros, por el usuario asociado a los datos de

facturación representados por el objeto actual, o null en caso de que tenga asignada la cuota

por defecto.

public function getBillprint() : integer

Obtiene el flag que indica si la factura del usuario representado por el objeto actual está lista

para ser impresa.

Page 221: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 221

public function setId(integer $id) : void

Establece el identificador del usuario cuyos datos de facturación representa el objeto actual.

public function setUser(\CMMSE\Doctrine\User $user) : void

Establece el usuario asociado a los datos de facturación representados por el objeto actual.

public function setFactura(string $factura) : void

Establece el nombre de archivo del justificante de pago enviado por el usuario asociado a los

datos de facturación representados por el objeto actual.

public function setPago(boolean $pago) : void

Establece el flag que indica si el pago del usuario ha sido confirmado asociado a los datos de

facturación representados por el objeto actual.

public function setBillnumber(integer $billnumber) : void

Establece el número de factura asignado al usuario asociado a los datos de facturación

representados por el objeto actual.

public function setBillCIF(string $billcif) : void

Establece el CIF del usuario asociado a los datos de facturación representados por el objeto

actual.

public function setBillCompany(string $billcompany) : void

Establece el nombre de la compañía, empresa o institución que se encargará del pago de la

factura del usuario asociado a los datos de facturación representados por el objeto actual.

public function setBillAddress(string $billaddress) : void

Establece la dirección de facturación a utilizar en la factura generada para el usuario asociado

a los datos de facturación representados por el objeto actual.

public function setBillName(string $billname) : void

Establece el nombre del beneficiario para la emisión de la factura generada para el usuario

asociado a los datos de facturación representados por el objeto actual.

public function setBill_red(boolean $bill_red) : void

Establece el flag que indica si los datos de facturación representados por el objeto actual se

correspondes con un usuario patrocinado.

public function setBillnumber_red(integer $billnumber_red) : void

Establece el número de factura del patrocinador asignado al usuario asociado a los datos de

facturación representados por el objeto actual.

public function setFees(integer $fees) : void

Establece la cuota de inscripción a pagar, en euros, por el usuario asociado a los datos de

facturación representados por el objeto actual, o null para asignarle la cuota por defecto.

public function setBillprint(integer $billprint) : void

Establece el flag que indica si la factura del usuario representado por el objeto actual está lista

para ser impresa.

Page 222: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

222 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

<<Interfaz>>

ArrayAccess

...

UserBillingInfo

# $sid : integer# $user : User

+ getId() : integer

+ setUser(User $u) : void+ setId(integer $id) : void

ArrayAccess

...

MagicAccessors

...

+ getUser() : User

# $factura : string

+ getFactura() : string

...

...

# $pago : boolean...

+ getPago() : boolean

+ setFactura(string $factura) : void+ setPago(boolean $pago) : void

Figura 5.33: Diagrama UML de la entidad UserBillingInfo

Page 223: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 223

5.4.7 \CMMSE\Decorators

Espacio de nombres que contiene clases usadas para extender las entidades con funcionalidades

adicionales. Estas clases son utilizadas, principalmente, para proporcionar a las plantillas HTML los

atributos originales con otros formatos (como formatos adicionales para fechas) o para añadir

atributos derivados de los datos disponibles (por ejemplo, añadir a los usuarios un atributo que indique

si ha pagado la cuota de inscripción).

Autor

Decorador que extiende las entidades que representan a los usuarios para proporcionar campos

adicionales con el número de papers y posters enviados.

5.4.7.1.1 Atributos

protected $numPapers: integer

Número de papers enviados por el usuario.

protected $numPosters : integer

Número de papers de tipo poster enviados por el usuario.

5.4.7.1.2 Métodos

public function __construct(\CMMSE\Doctrine\User $source, integer $num_papers, integer

$num_posters) : void

Crea una nueva instancia del decorador a partir de una instancia de usuario y el número de

papers y posters que éste ha enviado.

public function getNumPapers() : integer

Obtiene el número de papers enviados por el usuario.

public function getNumPosters() : integer

Obtiene el número de papers de tipo poster enviados por el usuario.

Page 224: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

224 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

PagoUsuario

Decorador que extiende las entidades que representan a los usuarios para proporcionar un campo

adicional que indica si ha pagado.

5.4.7.2.1 Atributos

protected $pago: boolean

Flag que indica si el pago del usuario ha sido confirmado.

5.4.7.2.2 Métodos

public function __construct(\CMMSE\Doctrine\User $source, boolean $haPagado) : void

Crea una nueva instancia del decorador a partir de una instancia de usuario y un booleano que

indique si ha pagado o no.

public function getPago() : boolean

Obtiene el flag que indicia si el usuario ha pagado.

User

Autor

# $numPosters : integer

+ getNumPapers() : integer

CopyConstructor

# copyPropertiesFrom(object $src) : void

# $numPapers : integer

+ __construct(...) : void

+ getNumPosters() : integer

PagoUsuario

# $pago : boolean

+ getPago() : boolean

Figura 5.34: Diagrama UML de los decoradores Autor y PagoUsuario

Page 225: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 225

Conference

Decorador que extiende las entidades que representan los simposios para proporcionar datos

adicionales sobre el número de papers presentados en ellas y su fecha y hora de inicio en formatos

adicionales.

5.4.7.3.1 Atributos

protected $numPapers: integer

Número de papers enviados por el usuario.

protected $numPosters : integer

Número de papers de tipo poster enviados por el usuario.

5.4.7.3.2 Métodos

public function __construct(\CMMSE\Doctrine\Conference $source, integer $num_papers,

integer $num_posters) : void

Crea una nueva instancia del decorador a partir de una instancia de simposio y el número de

papers y posters presentados en él.

public function getNunPapers() : integer

Obtiene el número de papers presentados en el simposio.

public function getNumPosters() : integer

Obtiene el número de papers de tipo poster presentados en el simposio.

public function getBeginDateTime() : \DateTime

Obtiene la fecha de inicio del simposio.

public function getBegin() : string

Obtiene la fecha de inicio del simposio en el formato “<dia de la semana (3 letras)>, <dia del

mes (2 dígitos)> <nombre del mes (3 letras)> <año (4 dígitos)> <hora>:<minutos>:<segundos>”.

Por ejemplo, “Thu, 10 Apr 2014 12:00:00”.

public function getBeginAsUNIXTimestamp() : string

Obtiene la fecha de inicio del simposio como un timestamp UNIX.

public function getBeginAsISO8601() : string

Obtiene la fecha de inicio del simposio en el formato ISO-8601, por ejemplo “2014-04-

10T12:00:00+00:00”

public function getBeginForDTLocal() : string

Obtiene la fecha de inicio del simposio en el formato esperado por los tags <input> de tipo

datetime-local de HTML5.

Page 226: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

226 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Conference

Conference

# $numPosters : integer

+ getNumPapers() : integer

CopyConstructor

# copyPropertiesFrom(object $src) : void

# $numPapers : integer

+ __construct(...) : void

+ getNumPosters() : integer

+ getBeginAsUNIXTimestamp() : string

+ getBeginDateTime() : \DateTime+ getBegin() : string

+ getBeginAsISO8601() : string+ getBeginForDTLocal() : string

Figura 5.35: Diagrama UML del decorador Conference

Page 227: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 227

Paper

Decorador que extiende las entidades que representan los papers para proporcionar datos adicionales

para los listados.

5.4.7.4.1 Atributos

protected $posterData: \CMMSE\Decoratos\Poster

Decorador con datos adicionales para papers de tipo poster.

protected $dia: string

Número de día de envío del paper.

protected $mes: string

Número de mes de envío del paper, con ceros iniciales

protected $anio: string

Año de envío del paper.

protected $hora: string

Hora de envío del paper.

protected $ampm: string

String que indica si la hora es anterior o posterior al mediodía.

protected $email: string

Dirección de correo electrónico del usuario que envió el paper.

protected $pago: boolean

Flag que indica si el pago del usuario que envió el paper ha sido confirmado.

5.4.7.4.2 Métodos

public function __construct(\CMMSE\Doctrine\Paper $source, boolean $pago, string $email [,

\CMMSE\Decorators\Poster $posterData]) : void

Crea una nueva instancia del decorador a partir de una instancia de un paper.

public function getEMail() : string

Obtiene la dirección de correo electrónico del usuario que envió el paper.

public function getPago() : boolean

Obtiene el flag que indicia si el usuario ha pagado.

public function getDia() : string

Obtiene el número de día de envío del paper.

public function getMes() : string

Obtiene el número de mes de envío del paper.

public function getAnio() : string

Obtiene el año de envío del paper.

Page 228: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

228 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

public function getHora() : string

Obtiene la hora de envío del paper.

public function getAMPM() : string

Retorna el string “AM” o “PM” según si la hora es anterior o posterior al mediodía.

public function getIDPaper() : integer

Obtiene el identificador del paper.

public function getIDUser() : integer

Obtiene el identificador del usuario que envió el paper.

public function getIDConf() : integer

Obtiene el identificador de la conferencia asociada al paper.

public function getDateUNIX() : string

Obtiene la fecha de envío del paper como un timestamp UNIX.

public function getPoster() : \CMMSE\Decorators\Poster

Obtiene la información adicional de poster, si ésta ha sido proporcionada en la llamada al

constructor.

public function getDate() : string

Obtiene la fecha de envío del paper como un timestamp UNIX.

public function getTitle_Conference() : string

Obtiene el título de la conferencia en la que se presentará el paper.

public function getHasPoster() : boolean

Obtiene un flag que indica si el paper actual tiene asociado un poster.

public function getDecision() : string

Obtiene el flag de decisión como una cadena, retornando ‘1’ para el valor cierto y ‘0’ para el

valor falso.

public function getAceptado() : string

Obtiene el flag de aceptación como una cadena, retornando ‘1’ para el valor cierto y ‘0’ para el

valor falso.

Page 229: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 229

Poster

Decorador que extiende las entidades que representan los posters para añadir formatos adicionales a

sus fechas de exposición.

5.4.7.5.1 Métodos

public function __construct(\CMMSE\Doctrine\Poster $source) : void

Crea una nueva instancia del decorador a partir de una instancia de un poster.

public function getBegin() : string

Obtiene la fecha de inicio de exposición del poster en el formato “<dia de la semana (3 letras)>,

<dia del mes (2 dígitos)> <nombre del mes (3 letras)> <año (4 dígitos)>

<hora>:<minutos>:<segundos>”. Por ejemplo, “Thu, 10 Apr 2014 12:00:00”.

public function getBegin_NoSeconds() : string

Obtiene la fecha de inicio de exposición del poster en el formato “<dia de la semana (3 letras)>,

<dia del mes (2 dígitos)> <nombre del mes (3 letras)> <año (4 dígitos)> <hora>:<minutos>”. Por

ejemplo, “Thu, 10 Apr 2014 12:00”.

public function getBeginAsUNIXTimestamp() : string

Obtiene la fecha de inicio de exposición del poster como un timestamp UNIX.

public function getBeginAsISO8601() : string

Obtiene la fecha de inicio de exposición del poster según el formato ISO-8601. Por ejemplo,

2014-04-10T15:52:01+0000.

public function getBeginForDTLocal() : string

Obtiene la fecha de inicio de exposición del poster en el formato esperado por los tags <input>

de tipo datetime-local de HTML5.

public function getEnd() : string

Obtiene la fecha de fin de exposición del poster en el formato “<dia de la semana (3 letras)>,

<dia del mes (2 dígitos)> <nombre del mes (3 letras)> <año (4 dígitos)>

<hora>:<minutos>:<segundos>”. Por ejemplo, “Thu, 10 Apr 2014 12:00:00”.

public function getEnd_NoSeconds() : string

Obtiene la fecha de fin de exposición del poster en el formato “<dia de la semana (3 letras)>,

<dia del mes (2 dígitos)> <nombre del mes (3 letras)> <año (4 dígitos)> <hora>:<minutos>”. Por

ejemplo, “Thu, 10 Apr 2014 12:00”.

public function getEndAsUNIXTimestamp() : string

Obtiene la fecha de fin de exposición del poster como un timestamp UNIX.

public function getEndAsISO8601() : string

Obtiene la fecha de fin de exposición del poster según el formato ISO-8601. Por ejemplo, 2014-

04-10T15:52:01+0000.

Page 230: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

230 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

public function getEndForDTLocal() : string

Obtiene la fecha de fin de exposición del poster en el formato esperado por los tags <input>

de tipo datetime-local de HTML5.

Room

Decorador que extiende las entidades que representan las salas para proporcionar datos adicionales

sobre los posters presentados en ellas.

5.4.7.6.1 Atributos

protected $posters: \CMMSE\Doctrine\Poster[]

Array con los posters presentados en la sala.

5.4.7.6.2 Métodos

public function __construct(\CMMSE\Doctrine\Room $source, \CMMSE\Doctrine\Poster[]

$posters) : void

Crea una nueva instancia del decorador a partir de una instancia de una sala y un array con los

posters presentados en ella.

public function getNumPosters() : integer

Obtiene el número de posters expuestos en la sala.

public function getPosterList() : \CMMSE\Doctrine\Poster[]

Obtiene la lista de posters presentados en la sala.

Page 231: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 231

Poster

Poster

# $numPosters : integer

+ getBegin() : string

CopyConstructor

# copyPropertiesFrom(object $src) : void

# $numPapers : integer

+ __construct(...) : void

+ getEndForDTLocal() : string

Paper

# $pago : boolean

+ getEMail() : string

Room

# $posters : Poster[]

+ __construct(...) : void

Room

+ getNumPosters() : int+ getPosterList() : Poster[]

+ getBeginAsISO8601() : string

+ getEnd_NoSeconds() : string

+ getBeginAsUNIXTimestamp()+ getBegin_NoSeconds(): string

+ getEndAsUNIXTimestamp()

+ getBeginForDTLocal() : string

+ getEndAsISO8601() : string

+ getEnd() : string

# $email : string

# $posterData : Poster

# $mes : string

# $ampm : string

# $dia : string

# $hora : string# $anio : string

+ getAcptado() : integer

+ getPago() : boolean

+ __construct(...) : void

+ getHora() : string

+ getDecision() : integer

+ getDia() : string

+ getPoster() : Poster

+ getIDUser() : integer

+ getHasPoster() : bool

+ getDate() : string

+ getIDPaper() : integer

+ getIDConf() : integer+ getDateUNIX() :string

+ getMes() : string+ getAnio() : string

+ getAMPM() : string

+ getTitle_Conferencia() : string

Figura 5.36: Diagrama UML de los decoradores Paper, Poster y Room

Page 232: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

232 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Settings

Decorador que extiende la información de configuración del sitio añadiendo nombres alternativos para

sus campos.

5.4.7.7.1 Métodos

public function __construct(\CMMSE\Doctrine\Settings $source) : void

Crea una nueva instancia del decorador a partir de una instancia de la configuración del sitio.

public function get__isDefault() : boolean

Obtiene un flag que indica si los datos de configuración representados por la instancia actual

no han sido leídos desde la base de datos.

public function __isDefault() : boolean

Obtiene un flag que indica si los datos de configuración representados por la instancia actual

no han sido leídos desde la base de datos.

public function getYearConf() : integer

Obtiene el año de celebración de la conferencia.

public function getDateConf() : string

Obtiene un string que representa la fecha de celebración de la conferencia.

public function getPlaceConf() : string

Obtiene un string que representa el lugar de celebración de la conferencia.

public function getURLConf() : string

Obtiene un string con la URL de la web de la conferencia.

public function getDateFirmaFact() : string

Obtiene un string que representa la fecha a mostrar en las facturas emitidas.

public function getDateFirmaCert () : string

Obtiene un string que representa la fecha a mostrar en los certificados de presentación.

Page 233: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 233

Settings

Settings

+ get__isDefault() : boolean

CopyConstructor

# copyPropertiesFrom(object $src) : void

+ __construct(...) : void

+ __isDefault() : boolean

+ getDateFirmaFact() : string

+ getDateConf() : string+ getYearConf() : integer

+ getPlaceConf() : string+ getURLConf() : string

+ getDateFirmaCert() : string

Figura 5.37: Diagrama UML del decorador Settings

Page 234: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

234 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

UserBilling

Decorador que extiende las entidades que representan los datos de facturación de los usuarios para

proporcionar campos adicionales.

5.4.7.8.1 Atributos

protected $extension: string

Extensión del archivo que contiene la factura del usuario.

protected $single_image : boolean

Flag que indica si la factura del usuario es una imagen.

protected $default_fee : integer

Cuota de inscripción a pagar por defecto.

5.4.7.8.2 Métodos

public function __construct(\CMMSE\Doctrine\UserBillingInfo $source, string $extension,

boolean $single_image, integer $defaultFee) : void

Crea una nueva instancia del decorador a partir de una instancia de la información de

facturación del usuario, la extensión del archivo que contiene el justificante de pago enviado,

un flag que indica si el justificante es una imagen y la cuota de inscripción por defecto.

public function getExtension () : string

Obtiene la extensión del nombre de archivo que contiene el justificante de pago enviado por

el usuario.

public function getSingleImage() : boolean

Obtiene un flag que indica si el justificante de pago enviado por el usuario es un archivo de

imagen.

public function getSingle_Image() : boolean

Obtiene un flag que indica si el justificante de pago enviado por el usuario es un archivo de

imagen.

Este método es un alias del anterior.

public function getPagado() : boolean

Obtiene un flag que indica si el pago del usuario ha sido confirmado.

public function getAuto() : boolean

Obtiene un flag que indica si el usuario tiene asignada la cuota por defecto.

public function getCuota() : integer

Obtiene la cuota a pagar por el usuario.

Page 235: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 235

UserBillingInfo

UserBilling

# $default_fee : integer

+ getExtension() : string

CopyConstructor

# copyPropertiesFrom(object $src) : void

# $extension : string

+ __construct(...) : void

+ getSingleImage() : string

+ getPagado() : boolean+ getSingle_Image() : string

+ getAuto() : boolean+ getCuota() : integer

# $single_image : boolean

Figura 5.38: Diagrama UML del decorador UserBilling

Page 236: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

236 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

5.4.8 \Proxies

Este espacio de nombres contiene proxys autogenerados por Doctrine para aquellas entidades que

contienen referencias a otras entidades. Estos proxys extienden a las entidades originales y su

propósito es construir de forma automática y transparente las instancias de las clases referenciadas

antes de su uso.

Se autogeneran proxys para las entidades Conference, Paper, Room y User.

<<Interfaz>>

Proxy

Room

...

...

...

...+ getId() : integer

+ setId(integer $id) : void

Room

Figura 5.39: Diagrama UML de ejemplo para el proxy generado a partir de la entidad Room

Page 237: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 237

5.4.9 \CMMSE\PDFViews

Este espacio de nombres y sus descendientes contienen clases que representan las vistas usadas para

generar las páginas de etiquetas. Estas vistas están implementadas como clases independientes que

contienen llamadas directas a los métodos de la librería ezPDF debido a la dificultad de definir las

páginas de etiquetas de manera uniforme utilizando CSS y HTML.

Etiquetas

Vista genérica que contiene los atributos y operaciones compartidas por todas las vistas usadas para

generar archivos PDF de etiquetas.

Esta clase es abstracta (no puede ser instanciada).

5.4.9.1.1 Atributos

protected $settingsModel: \CMMSE\Interfaces\Models\ISettings

Referencia al modelo de configuración utilizado.

protected $settings: \CMMSE\Doctrine\Settings

Referencia a la configuración dinámica utilizada.

5.4.9.1.2 Métodos

public function __construct(\CMMSE\Interfaces\Models\ISettings $settingsModel) : void

Crea una nueva instancia del generador a partir de una instancia del modelo de configuración.

Page 238: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

238 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

EtiquetasBlancoVertical

+ generar() : \CezPDF

View PDFView

+ generar() : \CezPDF

<<Interfaz>>

IUser

<<Interfaz>>

ISettings

<<Interfaz>>

ITrips

EtiquetasTodosVertical

# $userModel : IUser

+ generar() : \CezPDF

EtiquetasHorizontalRestaurant

+ generar() : \CezPDF

EtiquetasBlancoHorizontal

+ generar() : \CezPDF

EtiquetasHorizontalOrgan

+ generar() : \CezPDF

EtiquetasHorizontalExcursion

# $tripsModel : ITrips

EtiquetasHorizontalDinnerGala

+ generar() : \CezPDF

EtiquetasTodosHorizontal

# $userModel : IUser

+ generar() : \CezPDF+ __construct(ISettings, IUser) : void

Etiquetas

# $settingsModel : ISettings

+ __construct(...) : void

EtiquetasHorizontalRestaurant

+ generar() : \CezPDF

EtiquetasBlancoHorizontal

+ generar() : \CezPDF

EtiquetasHorizontalOrgan

+ generar() : \CezPDF

EtiquetasHorizontalExcursion

# $tripsModel : ITrips

+ generar() : \CezPDF

EtiquetasHorizontalDinnerGala

+ generar() : \CezPDF

+ __construct(ISettings, ITrips) : void

EtiquetasTodosHorizontal

# $userModel : IUser

+ generar() : \CezPDF+ __construct(ISettings, IUser) : void

# $settings : Settings

+ __construct(ISettings, ITrips) : void+ generar() : \CezPDF

+ __construct(...) : void

<< Usa >>

Figura 5.40: Diagrama UML de las vistas usadas para generar las etiquetas

Page 239: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 239

EtiquetasBlancoVertical

Vista que implementa la generación de archivos PDF con 8 etiquetas en blanco en sentido vertical.

5.4.9.2.1 Métodos

public function generar () : \Cezpdf

Genera un PDF con una página A4 que contiene 8 etiquetas en blanco en sentido vertical y

devuelve una referencia al objeto que lo representa.

EtiquetasTodosVertical

Vista que implementa la generación de archivos PDF con las etiquetas nominativas para todos los

ponentes. Los archivos generados contienen con 4 etiquetas por página en sentido vertical.

5.4.9.3.1 Atributos

protected $userModel: \CMMSE\Interfaces\Models\IUser

Referencia al modelo de usuarios utilizado.

5.4.9.3.2 Métodos

public function __construct(\CMMSE\Interfaces\Models\ISettings $settingsModel,

\CMMSE\Interfaces\Models\IUser $userModel) : void

Crea una nueva instancia del generador a partir de una instancia del modelo de configuración

y del modelo de usuarios.

public function generar () : \Cezpdf

Genera un PDF que contiene 4 etiquetas nominativas en sentido vertical por página y devuelve

una referencia al objeto que lo representa.

5.4.10 \CMMSE\PDFViews\Labels15x25

Este espacio de nombres contiene clases que representan las vistas usadas para generar las páginas

de etiquetas con tamaño 15 x 7,5 cm.

EtiquetasBlancoHorizontal

Vista que implementa la generación de archivos PDF con 4 etiquetas en blanco en sentido horizontal

y tamaño 15 x 7,5 cm.

5.4.10.1.1 Métodos

public function generar () : \Cezpdf

Genera un PDF con una página A4 que contiene 4 etiquetas en blanco en sentido horizontal y

devuelve una referencia al objeto que lo representa.

Page 240: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

240 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

EtiquetasHorizontalDinnerGala

Vista que implementa la generación de archivos PDF con 4 etiquetas para asistir a la cena de gala en

sentido horizontal y tamaño 15 x 7,5 cm.

5.4.10.2.1 Métodos

public function generar () : \Cezpdf

Genera un PDF con una página A4 que contiene 4 etiquetas para asistir a la cena de gala en

sentido horizontal y devuelve una referencia al objeto que lo representa.

EtiquetasHorizontalExcursion

Vista que implementa la generación de archivos PDF con 4 etiquetas por página para asistir a las

excursiones en sentido horizontal y tamaño 15 x 7,5 cm. Cada página contiene las etiquetas para una

de las excursiones programadas.

5.4.10.3.1 Atributos

protected $tripsModel: \CMMSE\Interfaces\Models\ITrips

Referencia al modelo de excursiones utilizado.

5.4.10.3.2 Métodos

public function __construct(\CMMSE\Interfaces\Models\ISettings $settingsModel,

\CMMSE\Interfaces\Models\ITrips $tripsModel) : void

Crea una nueva instancia del generador a partir de una instancia del modelo de configuración

y del modelo de excursiones.

public function generar () : \Cezpdf

Genera un PDF con tantas páginas A4 como excursiones haya programadas y devuelve una

referencia al objeto que lo representa. Cada página contiene 4 etiquetas en sentido horizontal

para asistir a una de las excursiones.

EtiquetasHorizontalOrgan

Vista que implementa la generación de archivos PDF con 4 etiquetas por página para distinguir a los

miembros de la organización en sentido horizontal y tamaño 15 x 7,5 cm.

5.4.10.4.1 Métodos

public function generar () : \Cezpdf

Genera un PDF con una página A4 que contiene 4 etiquetas en sentido horizontal no

nominativas para distinguir a los miembros de la organización del congreso y devuelve una

referencia al objeto que lo representa.

Page 241: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 241

EtiquetasHorizontalRestaurant

Vista que implementa la generación de archivos PDF con 4 etiquetas de restaurante no nominativas

por página en sentido horizontal y tamaño 15 x 7,5 cm.

5.4.10.5.1 Métodos

public function generar () : \Cezpdf

Genera un PDF con una página A4 que contiene 4 etiquetas de restaurante no nominativas en

sentido horizontal y devuelve una referencia al objeto que lo representa.

EtiquetasTodosHorizontal

Vista que implementa la generación de archivos PDF con las etiquetas nominativas para todos los

ponentes. Los archivos generados contienen con 4 etiquetas por página en sentido horizontal y tamaño

15 x 7,5 cm.

5.4.10.6.1 Atributos

protected $userModel: \CMMSE\Interfaces\Models\IUser

Referencia al modelo de usuarios utilizado.

5.4.10.6.2 Métodos

public function __construct(\CMMSE\Interfaces\Models\ISettings $settingsModel,

\CMMSE\Interfaces\Models\IUser $userModel) : void

Crea una nueva instancia del generador a partir de una instancia del modelo de configuración

y del modelo de usuarios.

public function generar () : \Cezpdf

Genera un PDF que contiene 4 etiquetas nominativas en sentido horizontal por página y

devuelve una referencia al objeto que lo representa.

Page 242: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

242 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

5.4.11 \CMMSE\PDFViews\Labels92x625

Este espacio de nombres contiene clases que representan las vistas usadas para generar las páginas

de etiquetas con tamaño 9,2 x 6,25 cm.

EtiquetasBlancoHorizontal

Vista que implementa la generación de archivos PDF con 4 etiquetas en blanco en sentido horizontal

y tamaño 9,2 x 6,25 cm.

5.4.11.1.1 Métodos

public function generar () : \Cezpdf

Genera un PDF con una página A4 que contiene 8 etiquetas en blanco en sentido horizontal y

devuelve una referencia al objeto que lo representa.

EtiquetasHorizontalDinnerGala

Vista que implementa la generación de archivos PDF con 8 etiquetas para asistir a la cena de gala en

sentido horizontal y tamaño 9,2 x 6,25 cm.

5.4.11.2.1 Métodos

public function generar () : \Cezpdf

Genera un PDF con una página A4 que contiene 8 etiquetas para asistir a la cena de gala en

sentido horizontal y devuelve una referencia al objeto que lo representa.

EtiquetasHorizontalExcursion

Vista que implementa la generación de archivos PDF con 8 etiquetas por página para asistir a las

excursiones en sentido horizontal y tamaño 9,2 x 6,25 cm. Cada página contiene las etiquetas para una

de las excursiones programadas.

5.4.11.3.1 Atributos

protected $tripsModel: \CMMSE\Interfaces\Models\ITrips

Referencia al modelo de excursiones utilizado.

5.4.11.3.2 Métodos

public function __construct(\CMMSE\Interfaces\Models\ISettings $settingsModel,

\CMMSE\Interfaces\Models\ITrips $tripsModel) : void

Crea una nueva instancia del generador a partir de una instancia del modelo de configuración

y del modelo de excursiones.

Page 243: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 243

public function generar () : \Cezpdf

Genera un PDF con tantas páginas A4 como excursiones haya programadas y devuelve una

referencia al objeto que lo representa. Cada página contiene 8 etiquetas en sentido horizontal

para asistir a una de las excursiones.

EtiquetasHorizontalOrgan

Vista que implementa la generación de archivos PDF con 8 etiquetas por página para distinguir a los

miembros de la organización en sentido horizontal y tamaño 9,2 x 6,25 cm.

5.4.11.4.1 Métodos

public function generar () : \Cezpdf

Genera un PDF con una página A4 que contiene 8 etiquetas en sentido horizontal no

nominativas para distinguir a los miembros de la organización del congreso y devuelve una

referencia al objeto que lo representa.

EtiquetasHorizontalRestaurant

Vista que implementa la generación de archivos PDF con 8 etiquetas de restaurante no nominativas

por página en sentido horizontal y tamaño 9,2 x 6,25 cm.

5.4.11.5.1 Métodos

public function generar () : \Cezpdf

Genera un PDF con una página A4 que contiene 4 etiquetas de restaurante no nominativas en

sentido horizontal y devuelve una referencia al objeto que lo representa.

EtiquetasTodosHorizontal

Vista que implementa la generación de archivos PDF con las etiquetas nominativas para todos los

ponentes. Los archivos generados contienen con 8 etiquetas por página en sentido horizontal y tamaño

9,2 x 6,25 cm.

5.4.11.6.1 Atributos

protected $userModel: \CMMSE\Interfaces\Models\IUser

Referencia al modelo de usuarios utilizado.

5.4.11.6.2 Métodos

public function __construct(\CMMSE\Interfaces\Models\ISettings $settingsModel,

\CMMSE\Interfaces\Models\IUser $userModel) : void

Crea una nueva instancia del generador a partir de una instancia del modelo de configuración

y del modelo de usuarios.

Page 244: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

244 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

public function generar () : \Cezpdf

Genera un PDF que contiene 8 etiquetas nominativas en sentido horizontal por página y

devuelve una referencia al objeto que lo representa.

Page 245: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 245

5.4.12 \CMMSE\Interfaces

Este espacio de nombres y sus descendientes contienen la interfaz esperada para diferentes

componentes de la aplicación.

IModel

Interfaz padre de la que heredan las interfaces de los modelos del sitio.

5.4.12.1.1 Métodos

Esta interfaz no define métodos propios.

IPermissionCheck

Interfaz usada por las clases que implementan la comprobación de permisos necesarios de la sesión

actual para realizar diferentes acciones.

5.4.12.2.1 Métodos

public function assertHasPermission(mixed[] $sessionData,

\CMMSE\Interfaces\Models\IUser $userModel) : void

Comprueba que la sesión pasada como parámetro tiene permiso para ver el contenido

solicidado. Este método debe ser redefinido por los objetos concretos que implementen la

interfaz, y debe lanzar una excepción en caso de que la sesión no reuna los requisitos

necesarios.

onConstruct

Interfaz implementada por los controladores que requieren ejecutar código adicional tras su

instanciación.

5.4.12.3.1 Métodos

public function onConstruct() : void

Método a ejecutar en las instancias de los objetos recién creados. Este método debe ser

redefinido por los controladores que requieran realizar operaciones adicionales tras su

instanciación, como la obtención de referencias a modelos o la creación de objetos internos.

Page 246: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

246 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

ModelFactory

Interfaz implementada por las clases encargadas de proporcionar instancias de los modelos de la

aplicación.

5.4.12.4.1 Métodos

public function getModel(string $modelInterface) : \CMMSE\Interfaces\IModel

Retorna una referencia a un modelo a partir del FQN de su interfaz. En caso de que se solicite

un modelo a partir de una interfaz desconocida, la función debe lanzar una excepción.

<<Interfaz>>

onConstruct

+ onConstruct() : void

<<Interfaz>>

ModelFactory

+ getModel(string $fwn) : IModel

<<Interfaz>>

IPermissionCheck

+ assertHasPermission(...) : void

<<Interfaz>>

IModel

<<Interfaz>>

IAuthors

...

<<Interfaz>>

IUser

...

<<Proporciona>>

...

Figura 5.41: Diagrama UML de las interfaces principales

Page 247: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 247

5.4.13 \CMMSE\Interfaces\Models

Este espacio de nombres y sus descendientes contienen las interfaces esperadas para los modelos de

la aplicación y que son usadas para instanciarlos.

<<Interfaz>>

IModel

<<Interfaz>>

IAuthors

...

<<Interfaz>>

IConferences

...

<<Interfaz>>

IInvoices

...

<<Interfaz>>

IPapers

...

<<Interfaz>>

IRooms

...

<<Interfaz>>

ISettings

...

<<Interfaz>>

ITrips

...

<<Interfaz>>

IBilling

...

<<Interfaz>>

IInstrumentation

...

<<Interfaz>>

ILogin

...

<<Interfaz>>

IPayments

...

<<Interfaz>>

ISession

...

<<Interfaz>>

IStats

...

<<Interfaz>>

IUser

...

Figura 5.42: Diagrama UML general de las interfaces de los modelos

Page 248: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

248 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

IAuthors

Interfaz del modelo de la página del listado de autores.

5.4.13.1.1 Métodos

public function getList(\CMMSE\Interfaces\Models\IPapers $paperModel,

\CMMSE\Interfaces\Models\IUser $userModel) :\CMMSE\Decorators\Autor[]

Obtiene la lista de autores utilizando los métodos de las instancias de los modelos de papers y

usuarios proporcionadas.

<<Interfaz>>

IModel

<<Interfaz>>

IAuthors

+ getList(IPapers $paperModel,IUser $userModel) : \CMMSE\Decorators\Autor[]

Autor User

<< Proporciona >>

Figura 5.43: Diagrama UML de la interfaz del modelo del listado de autores

Page 249: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 249

IBilling

Interfaz del modelo con las operaciones de facturación.

5.4.13.2.1 Métodos

public function setUserBillFile(integer $user_id, string $filename) : boolean

Asocia el nombre de archivo dado como justificante de pago del usuario asociado al

identificador proporcionado.

public function setUserFees(integer $user_id, integer $cuota) : boolean

Actualiza la cuota a pagar por el usuario asociado al identificador proporcionado.

public function setBillPrintFlag(integer $user_id, boolean $flag) : boolean

Actualiza el flag que indica si la factura del usuario asociado al identificador proporcionado está

lista para imprimirse.

public function setUserBillInfo(integer $user_id, string $company. string $address, string $cif,

boolean $red, string $billname) : boolean

Actualiza la información de facturación del usuario asociado al identificador proporcionado.

Exceptuando el identificador de usuario y el flag de pertenencia a la red, cualquier parámetro

pasado como null hará que la información correspondiente existente sea borrada de la base

de datos (pasando a tomar el valor por defecto).

public function createUserBillingInfo(integer $user_id) : boolean

Crea los datos de facturación vacíos (por defecto) para el usuario asociado al identificador

proporcionado. Es utilizado durante el registro de usuarios.

public function deleteUserBillingInfo(integer $user_id) : boolean

Elimina los datos de facturación del usuario asociado al identificador proporcionado, si existen.

Es utilizado durante el borrado de usuarios.

public function updateBillNumberRed(integer $user_id, integer $billno) : boolean

Actualiza el número de factura emitida por el patrocinador para el usuario indicado. Si se pasa

null como número de factura, se elimina el número de factura del patrocinador asociado al

usuario, en caso de existir.

public function updateBillRedFlag(integer $user_id, boolean $flag) : boolean

Actualiza el flag que indica que un usuario pertenece a la red, es decir, si el patrocinador cubre

toda o parte de su cuota de inscripción.

public function getUserBillingInfo(integer $user_id) : \CMMSE\Doctrine\UserBillingInfo

Obtiene la información de facturación del usuario indicado.

public function getUsersThatHavePaid ([integer $typeuser]) : mixed[][]

Retorna una lista de arrays asociativos con la información de los usuarios que han pagado. Si

se indica un tipo de usuario, el array devuelto solo incluirá a los usuarios del tipo indicado.

Page 250: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

250 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

public function getUsersNeedingInvoice(boolean $pago) : mixed[][]

Retorna una lista de arrays asociativos con la información de los usuarios que han solicitado

factura. Si se asigna el valor cierto a su parámetro, solo retorna la información de los usuarios

cuyo pago haya sido confirmado.

public function getUsersPendingBillRedNumberFromSpain() :

\CMMSE\Doctrine\UserBillingInfo[]

Retorna una lista con la información de facturación de los usuarios de España de tipo ponente,

con CIF y compañía asignados, pertenecientes a la red, que hayan pagado y que no tengan aún

asignado un número de factura de la red.

public function getUsersWithUnassignedBillNumberFromSpain() :

\CMMSE\Doctrine\UserBillingInfo[]

Retorna una lista con la información de facturación de los usuarios de España de tipo ponente,

con CIF y compañía asignados, que hayan pagado y que no tengan aún asignado un número de

factura.

public function getUsersWithUnassignedBillNumberNotFromSpain() :

\CMMSE\Doctrine\UserBillingInfo[]

Retorna una lista con la información de facturación de los usuarios de fuera de España de tipo

ponente, con CIF y compañía asignados, que hayan pagado y que no tengan aún asignado un

número de factura.

public function getUsersWithAssignedBillNumber([boolean $billprint]) : mixed[][]

Retorna una lista de arrays asociativos con la información de facturación de los usuarios de tipo

ponente, con CIF y compañía asignados, que tengan asignado un número de factura y,

opcionalmente, cuyas facturas estén marcadas como listas para imprimir.

public function updateBillNumber(integer $iduser, integer $billnumber) : boolean

Actualiza el número de factura asociado al usuario con el identificador dado.

public function getBillingInfoByBillNumber(integer $billnumber) :

\CMMSE\Doctrine\UserBillingInfo

Obtiene la información de facturación de un usuario cuyo número de factura asignado coincida

con el número dado. En caso de no existir un usuario con el número de factura indicado, se

retorna null.

public function setPaidFlag(integer $iduser, boolean $paid) : boolean

Cambia el valor del flag que indica si el pago del usuario indicado ha sido confirmado.

public function getPaidFlag(integer $iduser) : boolean

Obtiene el valor del flag que indica si el pago del usuario indicado ha sido confirmado.

public function deleteBillNumber(integer $iduser) : boolean

Borra (poniendo a null) el número de factura asignado al usuario indicado.

Page 251: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 251

<<Interfaz>>

IModel

<<Interfaz>>

IBilling

+ setUserBillFile(integer $user_id, string $filename) : boolean

UserBillingInfo

<< Proporciona >>

+ setBillPrintFlag(integer $user_id, boolean $flag) : boolean+ setUserFees(integer $user_id, integer $cuota) : boolean

+ createUserBillingInfo(integer $user_id) : boolean

+ setUserBillInfo(integer $user_id, string $company, string $address, string $cif, boolean $red, string $billname) : boolean

+ deleteUserBillingInfo(integer $user_id) : void

+ updateBillRedFlag(insteger $user_id, boolean $flag) : boolean

+ updateBillNumberRed(integer $user_id, integer $billno) : boolean

+ getUserBillingInfo(integer $user_id) : \CMMSE\Doctrine\UserBillingInfo+ getUsersThatHavePaid([integer $typeuser]) : mixed[][]

+ getUsersPendingBillRedNumberFromSpain() : \CMMSE\Doctrine\UserBillingInfo[]

+ getUsersNeedingInvoice([boolean $pago]) : mixed[][]

+ getUsersWithUnassignedBillNumberFromSpain() : \CMMSE\Doctrine\UserBillingInfo[]+ getUsersWithUnassignedBillNumberNotFromSpain() : \CMMSE\Doctrine\UserBillingInfo[]+ getUsersWithAssignedBillNumber([boolean $billprint]) : mixed[][]+ updateBillNumber(integer $user_id, integer $billno) : boolean

+ deleteBillNumber(integer $user_id) : boolean

+ getBillingInfoByBillNumber(integer $billno) : \CMMSE\Doctrine\UserBillingInfo+ setPaidFlag(integer $user_id, boolean $paid) : boolean+ getPaidFlag(integer $user_id) : boolean

Figura 5.44: Diagrama UML de la interfaz del modelo de gestión de facturacion

Page 252: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

252 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

IConferences

Interfaz del modelo con las operaciones de gestión de los simposios.

5.4.13.3.1 Métodos

public function addConference(string $title) : \CMMSE\Doctrine\Conference

Crea un nuevo simposio con el título dado y retorna una referencia al objeto que lo representa.

public function editTitle(integer $conference_id, string $title) : \CMMSE\Doctrine\Conference

Cambia el título del simposio con el identificador proporcionado y retorna una referencia al

objeto que lo representa. En caso de no existir un simposio con el identificador dado este

método no hace nada y retorna null.

public function editBeginDate(integer $conference_id, \DateTime $new_date) :

\CMMSE\Doctrine\Conference

Cambia la fecha y hora de inicio del simposio con el identificador proporcionado y retorna una

referencia al mismo. En caso de no existir un simposio con el identificador dado este método

no hace nada y retorna null.

public function deleteConference(integer $conference_id) : void

Elimina del simposio con el identificador proporcionado. En caso de no existir un simposio con

el identificador dado este método no hace nada.

public function getConferenceList() : \CMMSE\Decorators\Conference[]

Obtiene una lista con la información de todos los simposios existentes en la base de datos.

public function getConference(integer $id) : \CMMSE\Doctrine\Conference

Obtiene un objeto que representa el simposio asociado al identificador proporcionado. En caso

de no existir un simposio con el identificador dado este método retorna null.

public function getConferenceDecorator(integer $id) : \CMMSE\Decorators\Conference

Obtiene un decorador con información adicional del simposio asociado al identificador

proporcionado. En caso de no existir un simposio con el identificador dado este método

retorna null.

Page 253: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 253

<<Interfaz>>

IModel

<<Interfaz>>

IConferences

+ addConference(string $name) : \CMMSE\Doctrine\Conference

Conference

<< Proporciona >>

+ editBeginDate(integer $id, \DateTime $new_date) : \CMMSE\Doctrine\Conference

+ editTitle(integer $id, string $name) : \CMMSE\Doctrine\Conference

+ getConference(integer $id) : \CMMSE\Doctrine\Conference+ deleteConference(integer $id) : void

+ getConferenceDecorator(integer $id) : \CMMSE\Decorators\Conference

Conference

+ getConferenceList() : \CMMSE\Decorators\Conference[]

Figura 5.45: Diagrama UML de la interfaz del modelo de gestión de simposios

Page 254: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

254 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

IInstrumentation

Interfaz del modelo con las operaciones de recolección de datos de instrumentación

5.4.13.4.1 Métodos

public function saveData() : void

Guarda información estadística relativa a la solicitud actual.

public function saveStartTime () : void

Guarda el instante actual como el de inicio de la solicitud actual.

<<Interfaz>>

IModel

<<Interfaz>>

IInstrumentation

+ saveData() : void+ saveStartTime() : void

Figura 5.46: Diagrama UML de la interfaz del modelo de instrumentación

IInvoices

Interfaz del modelo con las operaciones para listar justificantes y facturas.

5.4.13.5.1 Métodos

public function getExtension(string $filename) : string

Obtiene la extensión de un archivo a partir de su nombre.

public function getAll(integer $default_fees) : \CMMSE\Doctrine\UserBillingInfo[]

Obtiene la información de facturación de todos los ponentes.

Page 255: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 255

public function getProofs(integer $default_fees) : \CMMSE\Doctrine\UserBillingInfo[]

Obtiene la información de facturación de todos los ponentes que no han solicitado factura.

public function getInvoices(integer $default_fees) : \CMMSE\Doctrine\UserBillingInfo[]

Obtiene la información de facturación de todos los ponentes que han solicitado factura.

public function getUserInvoice(integer $user_id, integer $default_fees) : object

Obtiene la información de facturación de un ponente a partir de su identificador de usuario.

<<Interfaz>>

IModel

<<Interfaz>>

IInvoices

+ getExtension() : string

UserBillingInfo

<< Proporciona >>

+ getAll(integer $default_fees) : \CMMSE\Doctrine\UserBilingInfo[]

+ getInvoices(integer $default_fees) : \CMMSE\Doctrine\UserBilingInfo[]

+ getProofs(integer $default_fees) : \CMMSE\Doctrine\UserBilingInfo[]

+ getUserInvoice(integer $user_id, integer $default_fees) : object

Figura 5.47: Diagrama UML de la interfaz del modelo del listado de facturas y justificantes

Page 256: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

256 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

ILogin

Interfaz del modelo con las operaciones de validación de credenciales de inicio de sesión de los

usuarios.

5.4.13.6.1 Métodos

public function setSessionUser(mixed[] &$sessoinData, \CMMSE\Doctrine\User $user) : void

Asocia el usuario indicado a una sesión.

public function logout(midex[] &$sessionData) : void

Asocia el identificador del usuario anónimo (no autentificado) a la sesión proporcionada.

public function hasCredetials(midex[] &$post) : boolean

Comprueba si se han proporcionado los datos necesarios para la autentificación.

public function getUserForCredentials(mixed[] &$post) : \CMMSE\Doctrine\User

Comprueba que las credenciales proporcionadas corresponden a un usuario existente,

devolviendo una instancia del mismo en caso afirmativo.

Page 257: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 257

<<Interfaz>>

IModel

<<Interfaz>>

ILogin

+ setSessionUser(mixed[] &$sessionData, \CMMSE\Doctrine\User $user) : void

User

<< Proporciona >>

+ hasCredentials(string[] $post) : boolean+ logout(midex[] &$sessionData) : void

+ getUserForCredentials(string[] $post) : \CMMSE\Doctrine\User

Figura 5.48: Diagrama UML de la interfaz del modelo de inicio de sesión

Page 258: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

258 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

IPapers

Interfaz del modelo con las operaciones de gestión de los papers.

5.4.13.7.1 Métodos

public function getPapersLocalPath() : string

Obtiene la ruta absoluta del directorio del servidor donde se almacenan los papers enviados.

public function setPaperDates(integer $paper_id, \DateTime $start, \DateTime $end) : boolean

Guarda el rango de fechas de exposición de un poster.

public function setPaperRoom(integer $paper_id[, \CMMSE\Doctrine\Room $r]) : boolean

Modifica o elimina la asociación de un paper de tipo poster y la sala donde se expone.

public function getPaperPosterInfo(integer $paper_id) : \CMMSE\Doctrine\Poster

Obtiene la información adicional (fechas y sala) asociada a los papers de tipo poster.

public function getPosterCountForUser(integer $user_id) : integer

Obtiene el número de posters enviados por un ponente a partir de su identificador de usuario.

public function getPaperCountForUser(integer $user_id) : integer

Obtiene el número de papers enviados por un ponente, incluidos los posters, a partir de su

identificador de usuario.

public function setAcceptedFlag(integer $paper_id, boolean $accepted) : boolean

Marca o desmarca un paper como aceptado.

public function setDecisionFlag(integer $paper_id, boolean $decision) : boolean

Marca o desmarca un paper como en proceso de revisión.

public function getAcceptedPapers([integer $user_id]) : string[][]

Obtiene la lista de papers aceptados, completa o para un usuario determinado, como arrays

de cadenas de texto.

public function deleteUserPapersFromDB(integer $user_id) : void

Elimina los registros asociados a los papers enviados por el usuario indicado de la base de datos.

Los archivos enviados se mantienen en el servidor.

public function getPaperTitlesForUser(integer $user_id) : string[]

Obtiene una lista con los títulos de los papers enviados por el usuario indicado.

public function getPaperListForUser(integer $user_id) : object[][]

Obtiene la lista de papers enviados por el usuario indicado como arrays de cadenas de texto.

public function getUserPaper(integer $paper_id, integer $user_id) : string[]

Obtiene la información de un paper como arrays de cadenas de texto a partir de su

identificador y el del usuario que lo envió.

Page 259: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 259

public function getUserPaperByTitle(integer $user_id, string $title) :

\CMMSE\Doctrine\Paper[]

Obtiene la información de los papers de un usuario determinado a partir de su identificador de

usuario y del título del mismo. La comparación con el título se realiza utilizando el operador

SQL LIKE.

public function getPapersByTitle(string $title) : \CMMSE\Doctrine\Paper[]

Obtiene la información de los papers cuyo título coincida el título dado. La comparación con el

título se realiza utilizando el operador SQL LIKE.

public function getPaper(integer $paper_id) : \CMMSE\Doctrine\Paper

Obtiene la información de un paper como un objeto a partir de su identificador.

public function setPaperTitle(integer $paper_id, string $title) : void

Cambia el título del paper indicado.

public function resetNewPaperFilename(integer $paper_id, integer $user_id) : void

Borra el valor del campo que almacena el nombre de archivo del último envío del paper

indicado.

public function setNewPaperFilename(integer $paper_id, integer $user_id, string $filename) :

boolean

Cambia el valor del campo que almacena el nombre de archivo del último envío del paper

indicado.

public function setPaperFilename(integer $paper_id, integer $user_id, string $filename) :

boolean

Cambia el valor del campo que almacena el nombre de archivo del primer envío del paper

indicado.

public function insertNewPaper(integer $user_id, integer $conference_id, string $filename,

string $fecha, boolean $poster, string[] $authors, integer &$paper_id) :

\CMMSE\Doctrine\Paper

Almacena los datos de un nuevo paper en la base de datos.

public function deletePaper(integer $paper_id, integer $user_id) : boolean

Elimina un paper dado su identificador y el del usuario que lo envió.

public function getPosterList([boolean $accepted]) : \CMMSE\Decorators\Poster[]

Obtiene la lista de posters, opcionalmente filtrados por estado (aceptados o no).

public function getPaperList() : \CMMSE\Doctrine\Paper[]

Obtiene la lista con todos los papers de la base de datos.

public function getDecoratorList() : \CMMSE\Decorators\Paper[]

Obtiene la lista con todos los papers de la base de datos envueltos en decoradores.

Page 260: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

260 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

<<Interfaz>>

IModel

<<Interfaz>>

IPapers

+ getPapersLocalPath() : string

Paper

<< Proporciona >>

+ setPaperRoom(integer $paper_id, \CMMSE\Doctrine\Room $r) : boolean

+ setPapersDates(integer $paper_id, \DateTime $start, \DateTime $end) : boolean

+ getPosterCountForUser(integer $user_id) : integer

+ getPaperPosterInfo(integer $paper_id) : \CMMSE\Doctrine\Poster

+ getPaperCountForUser(integer $user_id) : integer

+ setDecisionFlag(integer $paper_id, boolean $flag) : boolean+ setAcceptedFlag(integer $paper_id, boolean $flag) : boolean

+ getAcceptedPapers([integer $user_id]) : string[][]+ deleteUserPapersFromDB(integer $user_id) : void

+ getPaperListForUser([integer $user_id]) : object[]+ getPaperTitlesForUser(integer $user_id) : string[]

+ getUserPaper(integer $paper_id, integer $user_id) : string[]+ getUserPaperByTitle(integer $user_id, string $title) : \CMMSE\Doctrine\Paper[]+ getPapersByTitle(string $title) : \CMMSE\Doctrine\Paper[]+ getPaper(integer $paper_id) : \CMMSE\Doctrine\Paper

+ setPaperFilename(integer $paper_id, string $filename) : boolean

+ setPaperTitle(integer $paper_id, string $title) : void+ resetNewPaperFilename(integer $paper_id, integer $user_id) : void+ setNewPaperFilename(integer $paper_id, integer $user_id, string $filename) : boolean

Poster Poster Paper

+ insertNewPaper(integer $user_id, integer $conference_id, string $filename, string $fecha, boolean $poster, string[] $authors, integer &$paper_id) : \CMMSE\Doctrine\Paper

+ getDecoratorList() : \CMMSE\Decorators\Paper[]

+ deletePaper(integer $paper_id, integer $user_id) : boolean+ getPosterList[boolean $accepted]) : \CMMSE\Decorators\Poster[]+ getPaperList() : \CMMSE\Doctrine\Paper[]

Figura 5.49: Diagrama UML de la interfaz del modelo de gestión de papers

Page 261: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 261

IPayments

Interfaz del modelo con las operaciones de gestión de la configuración de pagos.

5.4.13.8.1 Métodos

public function getWritelock() : void

Obtiene un bloqueo exclusivo de escritura sobre los datos de configuración de pagos22.

public function releaseWritelock() : void

Libera un bloqueo exclusivo de escritura sobre los datos de configuración de pagos adquirido

previamente.

public function getPaymentSettings() : \CMMSE\Doctrine\PaymentSettings

Obtiene los datos de configuración de los pagos.

public function setPaymentSettings(\CMMSE\Doctrine\PaymentSettings $settings) :

\CMMSE\Doctrine\PaymentSettings

Modifica la configuración de pagos a partir de los datos proporcionados, y libera cualquier

bloqueo exclusivo de escritura que pudiese haber sobre éstos.

22 Utilizado para evitar condiciones de carrera en caso de que varias sesiones de administrador soliciten de forma simultánea la asignación automática de números de factura para aquellas que no lo tengan asignado aún.

Page 262: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

262 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

<<Interfaz>>

IModel

<<Interfaz>>

IPayments

+ getWriteLock() : void

PaymentSettings

<< Proporciona >>

+ getPaymentSettings() : \CMMSE\Doctrine\PaymentSettings+ releaseWriteLock() : void

+ setPaymentSettings(\CMMSE\Doctrine\PaymentSettings $settings) : \CMMSE\Doctrine\PaymentSettings

Figura 5.50: Diagrama UML de la interfaz del modelo de gestión de pagos

Page 263: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 263

IRooms

Interfaz del modelo con las operaciones de gestión de salas.

5.4.13.9.1 Métodos

public function createRoom(string $name) : integer

Crea una nueva sala con el nombre indicado y retorna su identificador.

public function setRoomName(integer $id, string $name) : void

Edita el nombre de una sala existente.

public function deleteRoom(integer $id) : void

Elimina una sala existente.

public function getRoomList() : \CMMSe\Doctrine\Room[]

Obtiene la lista de salas existentes.

public function getRoom(integer $id) : \CMMSE\Doctrine\Room

Obtiene los datos de una sala existente a partir de su identificador.

public function getExtendedRoomInfo(\CMMSE\Doctrine\Room $room) :

\CMMSE\Decorators\Room

Obtiene un decorador con datos adicionales sobre el número de posters de una sala existente.

Page 264: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

264 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

<<Interfaz>>

IModel

<<Interfaz>>

IRooms

+ createRoom(string $name) : integer

Room

<< Proporciona >>

+ deleteRoom(integer $id) : void+ setRoomName(integer $id, string $name) : void

+ getRoom(integer $id) : \CMMSE\Doctrine\Room+ getRoomList() : \CMMSE\Doctrine\Room[]

+ getRoomExtendedInfo(\CMMSE\Doctrine\Room $room) : \CMMSE\Decorators\Room

Room

Figura 5.51: Diagrama UML de la interfaz del modelo de gestión de salas

Page 265: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 265

ISession

Interfaz del modelo con las operaciones de gestión de las sesiones de usuario.

5.4.13.10.1 Métodos

public function startSession() : void

Inicia una sesión nueva o continúa una existente.

<<Interfaz>>

ISession

+ startSession() : void

Session

<< Usa >>

<<Interfaz>>

SessionHandlerInterface

<<Interfaz>>

IModel

Figura 5.52: Diagrama UML de la interfaz del modelo de gestión de sesiones

Page 266: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

266 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

ISettings

Interfaz del modelo con las operaciones de gestión de la configuración.

5.4.13.11.1 Métodos

public function getSettings() : \CMMSE\Doctrine\Settings

Obtiene la configuración del sitio almacenada en la base de datos.

public function setSettings(\CMMSE\Doctrine\Settings $settings) : void

Guarda en la base de datos la configuración del sitio.

public function getMailSettings() : \CMMSE\Doctrine\MailerSettings

Obtiene la configuración de envío de correos almacenada en la base de datos.

public function setMailSettings(\CMMSE\Doctrine\MailerSettings $settings) : void

Guarda la configuración de envío de correos almacenada en la base de datos.

public function getTipoEtiqueta() : integer

Obtiene el tipo de etiqueta configurado.

public function setPlazo(boolean $cerrado) : boolean

Abre o cierra el plazo de envío de papers.

public function setRedSettings(string $name, string $company, string $address, string $cif) :

boolean

Modifica la configuración relativa al patrocinador de la conferencia.

public function setMail([string[] $mail]) : boolean

Modifica la lista de direcciones de correo a las que enviar las notificaciones.

public function setDBOpen(boolean $open) : boolean

Habilita o deshabilita el registro de usuarios.

Page 267: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 267

<<Interfaz>>

IModel

<<Interfaz>>

ISettings

+ getSettings() : \CMMSE\Doctrine\Settings

Settings

<< Proporciona >>

+ getMailSettings() : \CMMSE\Doctrine\MailerSettings+ setSettings(\CMMSE\Doctrine\Settings $settings) : void

+ getTipoEtiqueta() : integer

+ setMailSettings(\CMMSE\Doctrine\MailerSettings $settings) : void

+ setPlazo(boolean $cerrado) : boolean

MailerSettings

+ setRedSettings(string $name, string $company, string $address, string $cif) : boolean+ setMail([string[] $mail]) : boolean+ setDBOpen(boolean $open) : boolean

Figura 5.53: Diagrama UML de la interfaz del modelo de configuración

Page 268: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

268 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

IStats

Interfaz del modelo con las operaciones de obtención de los datos de la página de estadísticas del

panel de administración.

5.4.13.12.1 Métodos

public function getCountryRatios() : integer[]

Obtiene el número de asistentes de cada país, retornándolo como un array de enteros

indexado por el nombre del mismo.

public function getValues(\CMMSE\Doctrine\PaymentSettings &$payments) :

\CMMSE\Core\OverviewData

Retorna un conjunto de datos estadísticos básicos sobre los ingresos, los usuarios y los papers

del congreso.

<<Interfaz>>

IModel

<<Interfaz>>

IStats

+ getCountryRatios() : integer[]

OverviewData

<< Proporciona >>

+ getValues(\CMMSE\Doctrine\PaymentSettings $settings) : \CMMSE\Core\OverviewData

Figura 5.54: Diagrama UML de la interfaz del modelo de gestión de estadísticas

Page 269: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 269

ITrips

Interfaz del modelo con las operaciones de gestión de excursiones.

5.4.13.13.1 Métodos

public function createTrip(string $name) : integer

Crea una nueva excursión a partir de su nombre descriptivo y retorna su identificador.

public function setTripName(integer $id, string $name) : void

Edita el nombre de una excursión existente.

public function deleteTrip(integer $id) : void

Elimina una excursión existente.

public function getTripList() : \CMMSe\Doctrine\Trip[]

Obtiene la lista de excursiones existentes.

public function getTrip(integer $id) : \CMMSE\Doctrine\Trip

Obtiene los datos de una excursión existente a partir de su identificador.

<<Interfaz>>

IModel

<<Interfaz>>

ITrips

+ createTrip(string $name) : integer

Trip

<< Proporciona >>

+ deleteTrip(integer $id) : void+ setTripName(integer $id, string $name) : void

+ getTrip(integer $id) : \CMMSE\Doctrine\Trip+ getTripList() : \CMMSE\Doctrine\Trip[]

Figura 5.55: Diagrama UML de la interfaz del modelo de gestión de excursiones

Page 270: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

270 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

IUser

Interfaz del modelo con las operaciones de gestión de usuarios.

5.4.13.14.1 Métodos

public function getTitles() : string[]

Obtiene la lista de títulos honoríficos almacenados en la base de datos como cadenas de texto.

public function getRandomPasowrd() : string

Obtiene una contraseña aleatoria.

public function testUserPassword(integer $user_id, string $password) : boolean

Comprueba si una contraseña coincide con la del usuario correspondiente al identificador

proporcionado.

public function setUserPassword(integer $user_id, string $password) : boolea

Modifica la contraseña del usuario correspondiente al identificador proporcionado.

public function listUsers([integer $type]) : mixed[][]

Obtiene la lista de usuarios como arrays de valores escalares, opcionalmente filtrada por tipo.

public function fetchUserEntityByEMail(string $email) : \CMMSE\doctrine\User

Obtiene la información asociada al usuario asociado a la dirección de correo electrónico

proporcionada.

public function updateUser(integer $userid, string $firstName, string $lastName, string

$company, string $address, string $person_title, string $country, string $state, string

$city, string $postalcode, string $telephone) : boolean

Modifica la información de un usuario.

public function getUserObj(integer $id) : \CMMSE\Doctrine\User

Obtiene información del usuario con el identificador indicado.

public function getUsers(integer[] $ids) : \CMMSE\Doctrine\User[]

Obtiene información de los usuarios con los identificadores indicados.

public function getSpeakers() : \CMMSE\Doctrine\User[]

Obtiene la lista de ponentes.

public function deleteUserFromDB(integer $user_id) : void

Elimina la información del usuario indicado de la base de datos.

public function insertUser(mixed[] $post) : integer

Registra la información de un nuevo en la base de datos. Esta función no crea una entrada de

facturación asociada al usuario.

Page 271: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 271

<<Interfaz>>

IModel

<<Interfaz>>

IUser

+ getTitles() : string[]

User

<< Proporciona >>

+ testUserPassword(integer $user_id, string $password) : boolean+ getRandomPassword() : string

+ listUsers([integer $type]) : mixed[]+ setUserPassword(integer $user_id, string $password) : boolean

+ fetchUserEntityByEMail(string $email) : \CMMSE\Doctrine\User

+ insertUser(string[] $post) : integer

+ updateUser(integer $id, string $firstName, string $lastName, string $company, string address, string $person_title, string $country, string $state, string $city, string $postalcode, string $telephone) : boolean

+ deleteUserFromDB(integer $user_id) : void+ getSpeakers() : \CMMSE\Doctrine\User[]

+ getUserObj(integer $id) : \CMMSE\Doctrine\User+ getUsers(integer[] $ids) : \CMMSE\Doctrine\User[]

Figura 5.56: Diagrama UML de la interfaz del modelo de gestión de usuarios

Page 272: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

272 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

5.4.14 \CMMSE\Permissions

Este espacio de nombres contiene clases utilizadas para realizar comprobaciones de permisos.

Admin

Implementa la comprobación de permisos para las páginas de administración.

5.4.14.1.1 Métodos

public function assertHasPerission(mixed[] $session_data, \CMMSE\Interfaces\Models\IUser

&$userModel) : void

Comprueba que la sesión proporcionada corresponde a un usuario identificado con permisos

administrativos. En caso de no ser así lanza una excepción de tipo UnauthenticatedException

o ForbiddenException del espacio de nombres \CMMSE\Exceptions.

<<Interfaz>>

IPermissionCheck

+ assertHasPermission(...) : void

Admin

+ assertHasPermission(...) : void

Figura 5.57: Diagrama UML de la clase que comprueba si la sesión posee permisos administrativos

Page 273: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 273

5.4.15 \CMMSE\Models

Este espacio de nombres contiene los modelos de la aplicación, implementados a partir de las

interfaces de \CMMSE\Interfaces\Models.

Autores

Implementación del modelo utilizado en la página del listado de autores.

5.4.15.1.1 Métodos

Los métodos proporcionados por este modelo y su semántica se corresponden con los de su interfaz,

\CMMSE\Interfaces\Models\IAuthors.

Conferencias

Implementación del modelo con las operaciones de gestión de los simposios.

5.4.15.2.1 Métodos

Los métodos proporcionados por este modelo y su semántica se corresponden con los de su interfaz,

\CMMSE\Interfaces\Models\IConferences.

Facturacion

Implementación del modelo con las operaciones de facturación.

5.4.15.3.1 Métodos

Los métodos proporcionados por este modelo y su semántica se corresponden con los de su interfaz,

\CMMSE\Interfaces\Models\IBilling.

Facturas

Implementación del modelo con las operaciones de obtención de datos de facturas y justificantes de

pago.

5.4.15.4.1 Atributos

protected static $allowed_extensions: string[]

Lista de extensiones de archivo válidas para los justificantes enviados por los usuarios.

5.4.15.4.2 Métodos

Los métodos proporcionados por este modelo y su semántica se corresponden con los de su interfaz,

\CMMSE\Interfaces\Models\IInvoices.

Page 274: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

274 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Instrumentation

Implementación del modelo utilizado para recolectar datos de instrumentación.

5.4.15.5.1 Métodos

Los métodos proporcionados por este modelo y su semántica se corresponden con los de su interfaz,

\CMMSE\Interfaces\Models\IInstrumentation.

Login

Implementación del modelo con las operaciones de validación de credenciales de inicio de sesión de

los usuarios.

5.4.15.6.1 Métodos

Los métodos proporcionados por este modelo y su semántica se corresponden con los de su interfaz,

\CMMSE\Interfaces\Models\ILogin.

Papers

Implementación del modelo con las operaciones de gestión de papers.

5.4.15.7.1 Métodos

Los métodos proporcionados por este modelo y su semántica se corresponden con los de su interfaz,

\CMMSE\Interfaces\Models\IPapers.

Payments

Implementación del modelo con las operaciones de gestión de la configuración de pagos.

5.4.15.8.1 Atributos

protected $row_id: integer

Identificador de la fila de la base de datos que contiene la configuración de pagos.

5.4.15.8.2 Métodos

Los métodos proporcionados por este modelo y su semántica se corresponden con los de su interfaz,

\CMMSE\Interfaces\Models\IPayments.

Page 275: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 275

Rooms

Implementación del modelo con las operaciones de gestión de salas.

5.4.15.9.1 Métodos

Los métodos proporcionados por este modelo y su semántica se corresponden con los de su interfaz,

\CMMSE\Interfaces\Models\IRooms.

Session

Implementación del modelo con las operaciones de gestión de sesiones de usuario. Los datos de las

sesiones se almacenan en la base de datos.

5.4.15.10.1 Métodos

Los métodos proporcionados por este modelo y su semántica se corresponden con los de sus interfaes,

\CMMSE\Interfaces\Models\ISession y \SessionHandler.

Settings

Implementación del modelo con las operaciones de gestión de la configuración.

5.4.15.11.1 Métodos

Los métodos proporcionados por este modelo y su semántica se corresponden con los de su interfaz,

\CMMSE\Interfaces\Models\ISettings.

Stats

Implementación del modelo con las operaciones de obtención de los datos de la página de estadísticas

del panel de administración.

5.4.15.12.1 Métodos

Los métodos proporcionados por este modelo y su semántica se corresponden con los de su interfaz,

\CMMSE\Interfaces\Models\IStats.

Trips

Implementación del modelo con las operaciones de gestión de las excursiones.

5.4.15.13.1 Métodos

Los métodos proporcionados por este modelo y su semántica se corresponden con los de su interfaz,

\CMMSE\Interfaces\Models\ITrips.

Page 276: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

276 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

User

Implementación del modelo con las operaciones de gestión de usuarios.

5.4.15.14.1 Métodos

Los métodos proporcionados por este modelo y su semántica se corresponden con los de su interfaz,

\CMMSE\Interfaces\Models\IUser.

5.4.16 \CMMSE\Models\Factories

Este espacio de nombres contiene las factorías usadas internamente por los controladores para

instanciar los modelos.

La implementación actual contiene una única factoría en este espacio de nombres, siendo posible en

futuras ampliaciones añadir factorías alternativas y/o factorías que hereden y extiendan la actual. De

esta forma se permite, de un modo sencillo, modificar la aplicación para utilizar implementaciones

alternativas de los modelos que aumenten el rendimiento y/o añadan soporte para otros almacenes

de datos: mecanismos de caché de datos (APC, Memcached…), almacenamiento de las entidades en

un gestor de bases de datos distinto de MySQL, uso de gestores de datos NoSQL, almacenamiento

selectivo de entidades en bases de datos o archivos independientes23, características de versionado de

los datos…

ModelFactory

Implementación de la factoría encargada de proporcionar instancias de los modelos a los

controladores.

5.4.16.1.1 Métodos

public static function getModel(string $modelInterface) : \CMMSE\Core\AbstractModel

Obtiene una instancia de un modelo a partir del FQN de su interfaz.

23 Por ejemplo, se podrían almacenar los datos de instrumentación en ficheros en lugar de en la base de datos.

Page 277: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 277

<<Interfaz>>

IAuthors

...

<<Interfaz>>

IUser

...

Autores

...

User

...

ModelFactory

+ getModel(string $fqn)

AbstractController

# getModel($fqn)

Login Calendar

<<Interfaz>>

ModelFactory

+ getModel(string $fqn)

...

...

...

...

...

BBDD

Figura 5.58: Diagrama UML de la factoría de modelos

Page 278: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

278 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

5.4.17 \CMMSE\Controllers

Este espacio de nombres y sus descendientes contienen los controladores de la aplicación. En este

espacio de nombres raíz se encuentran los controladores de las partes de la aplicación accesibles sin

necesidad de autenticación y el controlador de las páginas de los editores.

Calendar Download

Editor Login

Recover Signup

Controller

<<Interfaz>>

onConstruct

+ onConstruct() : void

Figura 5.59: Diagrama UML de los controladores de las acciones de invitado y editores

Page 279: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 279

Calendar

Implementación del controlador para la descarga de calendarios iCal. Los calendarios son generados

asumiendo que las fechas y horas almacenadas de la base de datos están escritas para la zona horaria

española (Europe/Madrid, con un incremento de 2 horas respecto a UTC-DST).

5.4.17.1.1 Atributos

protected $conferenceModel : \CMMSE\Interfaces\Models\IConferences

Referencia al modelo de gestión de conferencias utilizado.

protected $papersModel : \CMMSE\Interfaces\Models\IPapers

Referencia al modelo de gestión de papers utilizado.

protected $userModel : \CMMSE\Interfaces\Models\IUser

Referencia al modelo de gestión de usuarios utilizado.

5.4.17.1.2 Métodos

public function onConstruct() : void

Método invocado al crear nuevas instancias de la clase, encargado de inicializar las instancias

de los modelos utilizados por el controlador.

public function action_conferences() : string

Genera una respuesta en formato iCal con el calendario de conferencias, enviando, además,

los encabezados que indican el tipo de archivo directamente al cliente.

public function action_posters() : string

Genera una respuesta en formato iCal con el calendario de exposición de los posters, enviando,

además, los encabezados que indican el tipo de archivo directamente al cliente.

Download

Implementación de un controlador para la descarga de los papers enviados desde las páginas de

ponentes.

5.4.17.2.1 Atributos

protected $userModel : \CMMSE\Interfaces\Models\IUser

Referencia al modelo de gestión de conferencias utilizado.

protected $settingsModel : \CMMSE\Interfaces\Models\ISettings

Referencia al modelo de configuración dinámica utilizado.

protected $papersBaseURI : string

URI base para la descarga de papers.

protected $config : \CMMSE\Core\Configuration

Referencia a la configuración estática de la aplicación.

Page 280: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

280 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

5.4.17.2.2 Métodos

public function onConstruct() : void

Método invocado al crear nuevas instancias de la clase, encargado de inicializar las instancias

de los modelos y los atributos utilizados por el controlador.

public function any(string[] $args) : string

Acción invocada al solicitar la descarga de un paper. Este método envía directamente los

encabezados y los datos del archivo solicitado, finalizando tras ello el tratamiento de la solicitud

actual.

Editor

Implementación del controlador encargado de generar los listados de papers para los editores.

5.4.17.3.1 Atributos

protected $conferencesModel : \CMMSE\Interfaces\Models\IConferences

Referencia al modelo de gestión de conferencias utilizado.

protected $papersModel : \CMMSE\Interfaces\Models\IPapers

Referencia al modelo de gestión de papers utilizado.

protected $userModel : \CMMSE\Interfaces\Models\IUser

Referencia al modelo de gestión de usuarios utilizado.

protected $sessionModel : \CMMSE\Interfaces\Models\ISession

Referencia al modelo de gestión de sesiones utilizado.

5.4.17.3.2 Métodos

public function onConstruct() : void

Método invocado al crear nuevas instancias de la clase, encargado de inicializar las instancias

de los modelos y los atributos utilizados por el controlador.

public function default_action() : \CMMSE\Core\Template

Acción invocada al solicitar el listado de papers para los editores.

Page 281: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 281

Login

Implementación del controlador encargado de gestionar la identificación de usuarios registrados y

administradores.

5.4.17.4.1 Atributos

protected $model : \CMMSE\Interfaces\Models\ILogin

Referencia al modelo de gestión de identificación de usuarios utilizado.

protected $settingsModel : \CMMSE\Interfaces\Models\ISettings

Referencia al modelo de configuración dinámica utilizado.

protected $sessionModel : \CMMSE\Interfaces\Models\ISession

Referencia al modelo de gestión de sesiones utilizado.

protected $settings : \CMMSE\Doctrine\Settings

Referencia a la configuración dinámica utilizada.

protected $config : \CMMSE\Core\Configuration

Referencia a la configuración estática de la aplicación.

5.4.17.4.2 Métodos

public function onConstruct() : void

Método invocado al crear nuevas instancias de la clase, encargado de inicializar las instancias

de los modelos y los atributos utilizados por el controlador.

public function default_action() : \CMMSE\Core\Template

Acción invocada al solicitar el formulario de login o al enviar las credenciales de autentificación.

public function action_logout() : \CMMSE\Core\Template

Acción invocada al solicitar la finalización de la sesión de usuario actual.

protected function getPublicClosedPage() : string

Método interno utilizado para generar una página con un mensaje de error, en los casos en los

que el usuario que se identifica no se aun administrador y el acceso a las páginas públicas está

deshabilitado.

protected function getLoginForm([string $error]) : string

Método interno utilizado por la acción por defecto para generar el código HTML del formulario

de login.

protected function getLoginForm([string $error]) : string

Método interno utilizado por la acción por defecto que comprueba los datos de inicio de sesión

proporcionados y redirige o genera la página correspondiente.

Page 282: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

282 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Recover

Implementación del controlador encargado de gestionar las solicitudes de restablecimiento de

contraseña.

5.4.17.5.1 Atributos

protected $userModel : \CMMSE\Interfaces\Models\IUser

Referencia al modelo de gestión de usuarios utilizado.

protected $settingsModel : \CMMSE\Interfaces\Models\ISettings

Referencia al modelo de configuración dinámica utilizado.

protected $settings : \CMMSE\Doctrine\Settings

Referencia a la configuración dinámica utilizada.

5.4.17.5.2 Métodos

public function onConstruct() : void

Método invocado al crear nuevas instancias de la clase, encargado de inicializar las instancias

de los modelos y los atributos utilizados por el controlador.

public function default_action() : \CMMSE\Core\Template

Acción invocada al solicitar el formulario para introducir los datos de la cuenta cuya contraseña

se solicita restablecer.

public function action_post() : \CMMSE\Core\Template

Acción invocada al enviar los datos de la cuenta de ponente cuya contraseña se solicita

restablecer.

Signup

Implementación del controlador encargado de gestionar las solicitudes de alta de nuevos ponentes.

5.4.17.6.1 Atributos

protected $userModel : \CMMSE\Interfaces\Models\IUser

Referencia al modelo de gestión de usuarios utilizado.

protected $billingModel : \CMMSE\Interfaces\Models\IBilling

Referencia al modelo de facturación utilizado.

protected $settingsModel : \CMMSE\Interfaces\Models\ISettings

Referencia al modelo de configuración dinámica utilizado.

protected $settings : \CMMSE\Doctrine\Settings

Referencia a la configuración dinámica utilizada.

Page 283: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 283

5.4.17.6.2 Métodos

public function onConstruct() : void

Método invocado al crear nuevas instancias de la clase, encargado de inicializar las instancias

de los modelos y los atributos utilizados por el controlador.

public function default_action() : \CMMSE\Core\Template

Acción invocada al solicitar y/o enviar el formulario con los datos de la nueva cuenta de

ponente a crear. En caso de estar enviando los datos del formulario y no producirse errores en

la creación de la nueva cuenta, la acción redirige al formulario de login.

protected function sendAdminNotificationEMail(string $firstName, string $lastName, string

$mail) : void

Método interno invocado tras la creación nuevas cuentas de usuario encargado de enviar la

notificación de nuevo usuario registrado a las cuentas de los gestores de la conferencia

configuradas en la aplicación.

protected function sendConfirmationEMail(string $to, string $firstName) : boolean

Método interno invocado tras la creación nuevas cuentas de usuario encargado de enviar el

correo electrónico de confirmación de registro a la cuenta de correo proporcionada por el

usuario. En caso de que haya errores en el envío del el correo por parte de esta función, el

registro del nuevo usuario (iniciado por default_action() )no se lleva a cabo.

Page 284: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

284 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

5.4.18 \CMMSE\Controllers\User

Este espacio de nombres contiene los controladores de las páginas accesibles para los ponentes

identificados.

AbstractPaperController

Implementación de un controlador base abstracto con la funcionalidad común a todas las páginas de

la sección de papers de las páginas de ponente.

5.4.18.1.1 Atributos

protected $conferenceModel : \CMMSE\Interfaces\Models\IConferences

Referencia al modelo de gestión de conferencias utilizado.

protected $paperModel : \CMMSE\Interfaces\Models\IPapers

Referencia al modelo de gestión de papers utilizado.

protected $userModel : \CMMSE\Interfaces\Models\IUser

Referencia al modelo de gestión de usuarios utilizado.

protected $settingsModel : \CMMSE\Interfaces\Models\ISettings

Referencia al modelo de configuración dinámica utilizado.

protected $settings : \CMMSE\Doctrine\Settings

Referencia a la configuración dinámica utilizada.

5.4.18.1.2 Métodos

public function onConstruct() : void

Método invocado al crear nuevas instancias de la clase, encargado de inicializar las instancias

de los modelos utilizados por el controlador.

protected static function getPostAuthors() : string[]

Método auxiliar para obtener un array con los nombres de autores proporcionados por el

ponente al enviar un nuevo paper.

protected static function getPaperDownloadURL(string $archivo) : string

Método auxiliar para obtener la URL completa de descarga de un paper a partir de su nombre

de archivo, la configuración de la aplicación y el host utilizado para acceder al sitio.

protected static function getPaperLocalPath(string $basename) : string

Método auxiliar para obtener la ruta local del servidor donde se guarda el paper indicado.

Page 285: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 285

Controller

AbstractPaperControllerPaperPlazoCerrado

NewPaper Paper OnePaper

<<Interfaz>>

onConstruct

+ onConstruct() : void

Figura 5.60: Diagrama UML de los controladores de gestión de papers de las páginas de usuario

Page 286: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

286 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Paper

Implementación del controlador para las páginas de la sección de papers de las páginas de ponente.

5.4.18.2.1 Métodos

public function any(array $a) : \CMMSE\Core\Template

Método invocado al solicitar la página de un paper concreto del usuario, encadenando la

solicitud al controlador OnePaper.

public function default_action() : \CMMSE\Core\Template

Acción invocada al solicitar el formulario de envío de un nuevo paper o seleccionar uno enviado

previamente para su modificación.

public function action_submit_new() : void

Acción invocada al enviar el formulario con los datos de un nuevo paper, encadenando la

solicitud al controlador NewPaper.

NewPaper

Implementación del controlador encargado de gestionar el envío de nuevos papers.

5.4.18.3.1 Métodos

public function default_action() : string

Acción invocada al enviar un nuevo paper. Tras el envío, esta acción envía una notificación a

los administradores y redirige a la lista de papers enviados por el usuario.

public function sendNewPaperNotification(string $correspauthor, string $correspmail, string

$archivo, integer $idconf, string $title, string $author) : void

Método interno encargado de enviar el correo electrónico de notificación de envío de nuevo

paper a los administradores.

OnePaper

Implementación del controlador de gestión de un paper ya enviado en las páginas de usuario.

5.4.18.4.1 Métodos

public function any(array $a) : \CMMSE\Core\Template

Acción invocada al solicitar la página con la interfaz de gestión de un paper enviado

previamente.

public function action_upload(array $a) : void

Acción invocada al enviar un archivo con la nueva versión de un paper. Tras guardar la nueva

versión, este método redirige a la página de gestión del paper.

Page 287: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 287

public function action_delete(array $a) : void

Acción invocada al solicitar la eliminación de un paper. Tras la eliminación, este método

redirige a la lista de papers del usuario.

protected function doSaveNewPaper(integer $paper_id, integer $user_id, string

$original_filename, string $localpath) : void

Método interno encargado de guardar los archivos enviados y actualizar los datos del paper en

la base de datos.

protected function doUserPaperDeletion(integer $user_id, integer $paper_id) : void

Método interno encargado de eliminar los archivos asociados a un paper enviado previamente,

actualizar los datos de la base de datos y enviar notificaciones de ello a los administradores.

protected function sendNewPaperSubmitNotification(string $correspauthor, string

$correspemail, string $archivo) : void

Método interno encargado de enviar las notificaciones del envío de un nuevo paper a los

administradores.

PaperPlazoCerrado

Implementación del controlador encargado de mostrar una página informativa a los ponentes al entrar

en la sección de papers cuando el envío de éstos está deshabilitado.

5.4.18.5.1 Atributos

protected $conferenceModel : \CMMSE\Interfaces\Models\IConferences

Referencia al modelo de gestión de simposios utilizado.

protected $paperModel : \CMMSE\Interfaces\Models\IPapers

Referencia al modelo de gestión de papers utilizado.

protected $userModel : \CMMSE\Interfaces\Models\IUser

Referencia al modelo de gestión de usuarios utilizado.

protected $settingsModel : \CMMSE\Interfaces\Models\ISettings

Referencia al modelo de configuración dinámica utilizado.

protected $settings : \CMMSE\Doctrine\Settings

Referencia a la configuración dinámica utilizada.

protected $config : \CMMSE\Core\Configuration

Referencia a la configuración estática de la aplicación.

5.4.18.5.2 Métodos

public function onConstruct() : void

Método invocado al crear nuevas instancias de la clase, encargado de inicializar las instancias

de los modelos utilizados por el controlador.

Page 288: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

288 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

public function default_action() : \CMMSE\Core\Template

Acción encargada de mostrar una página a los usuarios informando de que el plazo de envío

de papers ha finalizado, impidiendo el envío de nuevos papers y la modificación de los ya

enviados.

public function any(array $args) : \CMMSE\Core\Template

Acción encargada de impedir la modificación de un paper ya existente si el plazo de envío está

cerrado cuando se accede utilizando una URL que incluye el identificador de un paper,

mostrando una página al usuario informando de que el plazo de envío de papers ha finalizado.

Factura

Implementación del controlador para las páginas de la sección de facturas de las páginas de ponente.

5.4.18.6.1 Atributos

protected $invoiceModel : \CMMSE\Interfaces\Models\IInvoices

Referencia al modelo de gestión de facturas utilizado.

protected $facturacionModel : \CMMSE\Interfaces\Models\IBilling

Referencia al modelo de gestión de facturación utilizado.

protected $userModel : \CMMSE\Interfaces\Models\IUser

Referencia al modelo de gestión de usuarios utilizado.

protected $settingsModel : \CMMSE\Interfaces\Models\ISettings

Referencia al modelo de configuración dinámica utilizado.

protected $settings : \CMMSE\Doctrine\Settings

Referencia a la configuración dinámica utilizada.

5.4.18.6.2 Métodos

public function onConstruct() : void

Método invocado al crear nuevas instancias de la clase, encargado de inicializar las instancias

de los modelos utilizados por el controlador.

public function default_action() : \CMMSE\Core\Template

Acción invocada al solicitar el formulario de envío del justificante de pago.

public function action_delete(array $args) : void

Acción invocada al solicitar la eliminación de los datos de facturación enviados previamente

por el usuario. Tras la eliminación, esta acción redirige a la acción por defecto.

public function action_setbillinfo() : void

Acción invocada al enviar los datos necesarios para emitir una factura para el usuario. Tras ello,

esta acción redirige a la acción por defecto.

Page 289: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 289

public function action_sendinvoice() : void

Acción invocada al enviar el archivo con el justificante del pago del usuario. Este método guarda

el justificante y envía una notificación por correo electrónico a los administradores. Tras ello,

esta acción redirige a la acción por defecto.

UserChange

Implementación del controlador que permite a los ponentes identificados cambiar sus datos de

registro en el congreso.

5.4.18.7.1 Atributos

protected $userModel : \CMMSE\Interfaces\Models\IUser

Referencia al modelo de gestión de usuarios utilizado.

protected $config : \CMMSE\Core\Configuration

Referencia a la configuración estática de la aplicación.

5.4.18.7.2 Métodos

public function onConstruct() : void

Método invocado al crear nuevas instancias de la clase, encargado de inicializar las instancias

de los modelos utilizados por el controlador.

public function default_action() : \CMMSE\Core\Template

Acción encargada de generar el formulario enviado a los usuarios para editar sus datos de

registro en el congreso y de recibir los nuevos datos modificados.

protected function handlePost(integer $user_id, string[] $post) : boolean

Método auxiliar usado para actualizar los datos del usuario a partir de los suministrados a

través del formulario de edición.

UserHome

Implementación del controlador raíz de las páginas enviadas a los ponentes identificados previamente

en la aplicación. La labor principal de este controlador es comprobar que la sesión del cliente se

corresponde con un ponente identificado y, en ese caso, redirigir la solicitud al controlador adecuado

según la URI solicitada.

5.4.18.8.1 Atributos

protected $userModel : \CMMSE\Interfaces\Models\IUser

Referencia al modelo de gestión de usuarios utilizado.

protected $settingsModel : \CMMSE\Interfaces\Models\ISettings

Referencia al modelo de configuración dinámica utilizado.

Page 290: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

290 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

protected $settings : \CMMSE\Doctrine\Settings

Referencia a la configuración dinámica utilizada.

protected $config : \CMMSE\Core\Configuration

Referencia a la configuración estática de la aplicación.

public $user : \CMMSE\Doctrine\User

Referencia a un objeto que representa al usuario identificado en la aplicación. Es utilizado para

exponer su información al resto de controladores, de forma que estos puedan mostrar su

información en las páginas generadas (como su dirección de correo electrónico o enlaces a las

acciones de gestión de su cuenta).

5.4.18.8.2 Métodos

public function onConstruct() : void

Método invocado al crear nuevas instancias de la clase, encargado de inicializar las instancias

de los modelos utilizados por el controlador.

public function default_action() : \CMMSE\Core\Template

Acción encargada de mostrar una página a los usuarios identificados con enlaces a las distintas

acciones disponibles e información básica sobre su cuenta.

protected function checkCredentials() : void

Método interno para comprobar la información de usuario asociada a la sesión actual y, en

caso de no corresponderse con un usuario identificado, redirigir a la página de login. Este

método es invocado como primer paso en todas las acciones de este controlador.

public function action_paper(array $args) : \CMMSE\Core\Template

Acción invocada al solicitar las páginas de gestión de papers, encadenando la solicitud al

controlador de usuarios Paper.

public function action_invoice (array $args) : \CMMSE\Core\Template

Acción invocada al solicitar las páginas de gestión de pagos, encadenando la solicitud al

controlador de usuarios Factura.

public function action_setpassword(array $args) : \CMMSE\Core\Template

Acción invocada al solicitar las páginas de cambio de contraseña, encadenando la solicitud al

controlador de usuarios UserPass.

public function action_change (array $args) : \CMMSE\Core\Template

Acción invocada al solicitar las páginas de cambio de datos de usuario, encadenando la solicitud

al controlador de usuarios UserChange.

Page 291: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 291

UserPass

Implementación del controlador encargado de mostrar el formulario para cambiar la contraseña en las

páginas de ponentes.

5.4.18.9.1 Atributos

protected $userModel : \CMMSE\Interfaces\Models\IUser

Referencia al modelo de gestión de usuarios utilizado.

protected $config : \CMMSE\Core\Configuration

Referencia a la configuración estática de la aplicación.

5.4.18.9.2 Métodos

public function onConstruct() : void

Método invocado al crear nuevas instancias de la clase, encargado de inicializar las instancias

de los modelos utilizados por el controlador.

public function default_action() : \CMMSE\Core\Template

Acción encargada de mostrar una página a los usuarios identificados con un formulario para

cambiar la contraseña de su cuenta.

UserChange UserHome UserPass Factura

Controller

Figura 5.61: Diagrama UML de los controladores de gestión de perfil de las páginas de usuario

Page 292: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

292 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

5.4.19 \CMMSE\Controllers\Admin

Este espacio de nombres contiene los controladores de las páginas accesibles para los administradores

identificados previamente.

AdminController

Implementación del controlador raíz de las páginas de administración. La labor principal de este

controlador es comprobar que la sesión del cliente se corresponde con un administrador identificado

y, en ese caso, “encaminar” la solicitud al controlador adecuado según la URI solicitada.

5.4.19.1.1 Atributos

protected $userModel : \CMMSE\Interfaces\Models\IUser

Referencia al modelo de gestión de usuarios utilizado.

protected $sesessionModel : \CMMSE\Interfaces\Models\ISettings

Referencia al modelo de gestión de sesiones utilizado.

protected $current_tab : string

Indica cual es la sección de administración solicitada al resto de controladores.

5.4.19.1.2 Métodos

public function onConstruct() : void

Método invocado al crear nuevas instancias de la clase, encargado de inicializar las instancias

de los modelos utilizados por el controlador.

public function checkCredentials([boolean $redirect [, boolean $ajax]]) : void

Método interno usado para comprobar si el usuario actual es un administrador y, en caso

contrario dirigir al usuario a la página de login o generar una respuesta JSON de error en

función del tipo de contenido solicitado.

public function getAdminView(string $sectionData) : \CMMSE\Core\Template

Método interno usado para generar las páginas HTML de la interfaz de administración a partir

del contenido HTML generado por los subcontroladores, la plantilla que define el HTML base

de la interfaz, las estadísticas de rendimiento de la solicitud actual y la configuración del sitio.

public function default_action() : \CMMSE\Core\Template

Acción invocada por defecto cuando no se especifica una subsección del panel de

administración. La implementación actual se comporta como si se hubiese solicitado la sección

de administración de usuarios.

public function action_json(array $args) : string

Acción invocada al solicitar la realización de una acción asíncrona por medio de AJAX. Este

método toma los datos proporcionados por el controlador

\CMMSE\Controllers\Admin\JSONController y los retorna al usuario en formato JSON,

generando, además, el encabezado HTTP necesario de tipo de contenido.

Page 293: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 293

public function action_download(array $args) : string

Acción invocada para generar los archivos de los listados descargables desde el panel de

administración, encadenando la solicitud al controlador \CMMSE\Controllers\Admin

\Download.

public function action_pdfs(array $args) : \CMMSE\Core\PDFResponse

Acción invocada para generar los archivos PDF descargables desde el panel de administración,

encadenando la solicitud al controlador \CMMSE\Controllers\Admin \PDFs.

public function action_users(array $args) : \CMMSE\Core\Template

Acción invocada para generar la interfaz de administración de usuarios, encadenando la

solicitud al controlador \CMMSE\Controllers\Admin \Usuarios.

public function action_justificantes(array $args) : \CMMSE\Core\Template

Acción invocada para generar la interfaz de administración de justificantes de pago,

encadenando la solicitud al controlador \CMMSE\Controllers\Admin \Facturas.

public function action_facturas(array $args) : \CMMSE\Core\Template

Acción invocada para generar la interfaz de administración de facturas, encadenando la

solicitud al controlador \CMMSE\Controllers\Admin \Justificantes.

public function action_conferencias(array $args) : \CMMSE\Core\Template

Acción invocada para generar la interfaz de administración de simposios, encadenando la

solicitud al controlador \CMMSE\Controllers\Admin \Conferencias.

public function action_autores() : \CMMSE\Core\Template

Acción invocada para generar el listado de autores de la interfaz de administración,

encadenando la solicitud al controlador \CMMSE\Controllers\Admin \Autores.

public function action_papers(array $args) : \CMMSE\Core\Template

Acción invocada para generar la interfaz de administración de papers enviados, encadenando

la solicitud al controlador \CMMSE\Controllers\Admin \Papers.

public function action_rooms(array $args) : \CMMSE\Core\Template

Acción invocada para generar la interfaz de administración de salas disponibles, encadenando

la solicitud al controlador \CMMSE\Controllers\Admin \Rooms.

public function action_trips(array $args) : \CMMSE\Core\Template

Acción invocada para generar la interfaz de administración de excursiones, encadenando la

solicitud al controlador \CMMSE\Controllers\Admin \Trips.

public function action_resumen() : \CMMSE\Core\Template

Acción invocada para generar la página de estadísticas generales del congreso, encadenando

la solicitud al controlador \CMMSE\Controllers\Admin \Stats.

public function action_settings(array $args) : \CMMSE\Core\Template

Acción invocada para generar la interfaz de administración general de la aplicación,

encadenando la solicitud al controlador \CMMSE\Controllers\Admin \Settings.

Page 294: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

294 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Autores

Implementación del controlador encargado del listado de autores de las páginas de administración.

5.4.19.2.1 Atributos

protected $autorModel : \CMMSE\Interfaces\Models\IAuthors

Referencia al modelo de gestión de autores utilizado.

protected $papersModel : \CMMSE\Interfaces\Models\IPapers

Referencia al modelo de gestión de papers utilizado.

protected $userModel : \CMMSE\Interfaces\Models\IUser

Referencia al modelo de gestión de usuarios utilizado.

5.4.19.2.2 Métodos

public function onConstruct() : void

Método invocado al crear nuevas instancias de la clase, encargado de inicializar las instancias

de los modelos utilizados por el controlador.

public function default_action() : \CMMSE\Core\Template

Acción encargada de generar el listado de autores a partir de los datos proporcionados por los

modelos.

Page 295: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 295

Controller<<Interfaz>>

onConstruct

<<Interfaz>>

IModel

<<Interfaz>>

IUser

<<Interfaz>>

ISession

AdminController

<< instancia >>1

1

Autores Download

Facturas Justificantes Papers

PDFs Rooms Settings

Conferencias

UsuariosTripsStats

JSONController

...

...

Figura 5.62: Diagrama UML de los controladores principales de administración

Page 296: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

296 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Conferencias

Implementación del controlador encargado de la administración de simposios.

5.4.19.3.1 Atributos

protected $conferenceModel : \CMMSE\Interfaces\Models\IConferences

Referencia al modelo de gestión de conferencias utilizado.

protected $config : \CMMSE\Core\Configuration

Referencia a la configuración estática de la aplicación.

5.4.19.3.2 Métodos

public function onConstruct() : void

Método invocado al crear nuevas instancias de la clase, encargado de inicializar las instancias

de los modelos utilizados por el controlador.

public function default_action() : \CMMSE\Core\Template

Acción encargada de generar el listado de simposios y las estadísticas y acciones disponibles

para cada uno a partir de los datos proporcionados por los modelos.

public function action_add_conference() : void

Acción invocada al solicitar la creación de un simposio, proporcionando su título. Tras la

creación, este método redirige al listado de simposios del panel de administración.

public function action_delete_conference(array $args) : void

Acción invocada al solicitar la eliminación de un simposio. Tras la eliminación, este método

redirige al listado de simposios del panel de administración.

Download

Implementación del controlador encargado de generar los archivos de los listados descargables desde

el panel de administración.

5.4.19.4.1 Atributos

protected $invoicesModel : \CMMSE\Interfaces\Models\IInvoices

Referencia al modelo de gestión de facturas utilizado.

protected $billingModel : \CMMSE\Interfaces\Models\IBilling

Referencia al modelo de gestión de facturación utilizado.

protected $paymentsModel : \CMMSE\Interfaces\Models\IPayments

Referencia al modelo de gestión de la configuración de pagos utilizado.

protected $authorModel : \CMMSE\Interfaces\Models\IAuthors

Referencia al modelo de gestión de autores utilizado.

Page 297: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 297

protected $conferenceModel : \CMMSE\Interfaces\Models\IConferences

Referencia al modelo de gestión de conferencias utilizado.

protected $paperModel : \CMMSE\Interfaces\Models\IPapers

Referencia al modelo de gestión de papers utilizado.

protected $userModel : \CMMSE\Interfaces\Models\IUser

Referencia al modelo de gestión de usuarios utilizado.

5.4.19.4.2 Métodos

public function onConstruct() : void

Método invocado al crear nuevas instancias de la clase, encargado de inicializar las instancias

de los modelos utilizados por el controlador.

public function action_users_html() : \CMMSE\Core\Template

Acción invocada al solicitar la descarga del listado de ponentes en formato HTML.

public function action_users_excel() : void

Acción invocada al solicitar la descarga del listado de ponentes en formato Excel. Este método

no retorna, y escribe su salida directamente al buffer de salida.

public function action_papers_html() : \CMMSE\Core\Template

Acción invocada al solicitar la descarga del listado de ponentes en formato HTML.

public function action_papers_excel() : void

Acción invocada al solicitar la descarga del listado de ponentes en formato Excel. Este método

no retorna, y escribe su salida directamente al buffer de salida.

public function action_autores_excel() : void

Acción invocada al solicitar la descarga del listado de autores (usuarios que han enviado algún

paper) en formato Excel. Este método no retorna, y escribe su salida directamente al buffer de

salida.

protected function sendExcelHTTPHeaders(string $filename) : void

Método interno encargado de enviar los encabezados HTTP necesarios para que el cliente

reconozca los datos enviados como un archivo Excel.

Facturas

Implementación del controlador encargado de la sección de gestión de facturas del panel de

administración.

5.4.19.5.1 Atributos

protected $facturaModel : \CMMSE\Interfaces\Models\IInvoices

Referencia al modelo de gestión de justificantes de pago utilizado.

protected $facturacionModel : \CMMSE\Interfaces\Models\IBilling

Referencia al modelo de gestión de facturación utilizado.

Page 298: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

298 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

protected $settingsModel : \CMMSE\Interfaces\Models\ISettings

Referencia al modelo de configuración dinámica utilizado.

protected $paymentsModel : \CMMSE\Interfaces\Models\IPayments

Referencia al modelo de gestión de la configuración de pagos utilizado.

protected $config : \CMMSE\Core\Configuration

Referencia a la configuración estática de la aplicación.

protected $payments : \CMMSE\Doctrine\PaymentSettings

Referencia a la configuración de pagos utilizada.

5.4.19.5.2 Métodos

public function onConstruct() : void

Método invocado al crear nuevas instancias de la clase, encargado de inicializar las instancias

de los modelos utilizados por el controlador.

public function default_action() : \CMMSE\Core\Template

Acción encargada de generar la página con el listado de información de los usuarios que no han

solicitado factura y las opciones disponibles para cada uno.

public function action_set_paidflag(array $args) : void

Acción encargada de cambiar el flag de la base de datos que indica si el pago de un usuario que

ha solicitado factura está confirmado. Tras el cambio, este método redirige al listado de

usuarios que han solicitado factura.

public function action_savefees (array $args) : void

Acción invocada al solicitar cambiar manualmente la cantidad a pagar por un usuario concreto

que ha solicitado factura. Tras el cambio, este método redirige al listado de usuarios que han

solicitado factura.

public function action_set_billok(array $args) : void

Acción invocada al solicitar marcar una factura como lista para imprimir. Tras el cambio, este

método redirige al listado de usuarios que han solicitado factura.

public function action_set_seqno_spain() : void

Acción invocada al solicitar asignar automáticamente un número de factura para todos los

usuarios de España cuyo pago está confirmado que hayan solicitado factura, y que no tienen

un número asignado aún. Tras el cambio, este método redirige al listado de usuarios que han

solicitado factura.

public function action_set_numfactout() : void

Acción invocada al solicitar asignar automáticamente un número de factura para todos los

usuarios de fuera de España cuyo pago está confirmado que hayan solicitado factura, y que no

tienen un número asignado aún. Tras el cambio, este método redirige al listado de usuarios

que han solicitado factura.

Page 299: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 299

public function action_saveone(array $args) : void

Acción invocada al solicitar cambiar el número de factura de un usuario, o borrar el asignado.

Tras el cambio, este método redirige al listado de usuarios que han solicitado factura.

Justificantes

Implementación del controlador encargado de la sección de gestión de justificantes de pago del panel

de administración.

5.4.19.6.1 Atributos

protected $userModel : \CMMSE\Interfaces\Models\IUser

Referencia al modelo de gestión de usuarios utilizado.

protected $pagosModel : \CMMSE\Interfaces\Models\IPayments

Referencia al modelo de gestión de la configuración de pagos utilizado.

protected $justificantesModel : \CMMSE\Interfaces\Models\IInvoices

Referencia al modelo de gestión de facturas utilizado.

protected $facturacionModel : \CMMSE\Interfaces\Models\IBilling

Referencia al modelo de gestión de facturación utilizado.

5.4.19.6.2 Métodos

public function onConstruct() : void

Método invocado al crear nuevas instancias de la clase, encargado de inicializar las instancias

de los modelos utilizados por el controlador.

public function default_action() : \CMMSE\Core\Template

Acción encargada de generar la página con el listado de información de los usuarios que no

requieren factura y las opciones disponibles para cada uno.

public function action_set_paidflag(array $args) : void

Acción encargada de cambiar el flag de la base de datos que indica si el pago de un usuario que

no ha solicitado factura está confirmado. Tras el cambio, este método redirige al listado de

usuarios que no han solicitado factura.

public function action_save_feesone(array $args) : void

Acción invocada al solicitar cambiar manualmente la cantidad a pagar por un usuario concreto

que no ha solicitado factura. Tras el cambio, este método redirige al listado de usuarios que no

han solicitado factura.

Papers

Implementación del controlador encargado de la sección de gestión de papers del panel de

administración.

Page 300: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

300 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

5.4.19.7.1 Atributos

protected $userModel : \CMMSE\Interfaces\Models\IUser

Referencia al modelo de gestión de usuarios utilizado.

protected $papersModel : \CMMSE\Interfaces\Models\IPapers

Referencia al modelo de gestión de papers utilizado.

protected $roomsModel : \CMMSE\Interfaces\Models\IRooms

Referencia al modelo de gestión de salas utilizado.

protected $settingsModel : \CMMSE\Interfaces\Models\ISettings

Referencia al modelo de configuración dinámica utilizado.

protected $settings : \CMMSE\Doctrine\Settings

Referencia a la configuración dinámica utilizada.

protected $config : \CMMSE\Core\Configuration

Referencia a la configuración estática de la aplicación.

5.4.19.7.2 Métodos

public function onConstruct() : void

Método invocado al crear nuevas instancias de la clase, encargado de inicializar las instancias

de los modelos utilizados por el controlador.

public function default_action() : \CMMSE\Core\Template

Acción encargada de generar la página con el listado de papers enviados y las opciones

disponibles para cada uno.

public function action_decision(array $args) : void

Acción encargada de cambiar el flag de la base de datos que indica si un paper ha entrado en

proceso de revisión. Tras el cambio, este método redirige al listado de papers enviados.

public function action_aceptar(array $args) : void

Acción encargada de cambiar el flag de la base de datos que indica si un paper ha sido aceptado

para su presentación en el congreso. Tras el cambio, este método envía una notificación al

autor y a la lista de direcciones configuradas y redirige al listado de papers enviados.

public function action_edit_title(array $args) : void

Acción encargada de cambiar el título de un paper desde el panel de administración sin utilizar

AJAX. Tras el cambio, este método redirige al listado de papers enviados.

public function sendAcceptedMailToAdmin(integer $paperID, integer $userID) : void

Método interno usado para enviar una notificación por correo electrónico a los

administradores informando de que un paper ha sido aceptado para su presentación en el

congreso.

Page 301: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 301

public function sendAcceptedMailToCorrespondingAuthor(integer $paperID, integer $userID)

: void

Método interno usado para enviar una notificación por correo electrónico al autor asociado a

un paper informando de que éste ha sido aceptado para su presentación en el congreso.

PDFs

Implementación del controlador raíz para los archivos PDF generados desde las páginas de

administración. La labor principal de este controlador es comprobar que la sesión del cliente se

corresponde con un administrador identificado y, en ese caso, “encaminar” la solicitud al controlador

adecuado según la URI solicitada.

5.4.19.8.1 Atributos

protected $userModel : \CMMSE\Interfaces\Models\IUser

Referencia al modelo de gestión de usuarios utilizado.

5.4.19.8.2 Métodos

public function onConstruct() : void

Método invocado al crear nuevas instancias de la clase, encargado de inicializar las instancias

de los modelos utilizados por el controlador.

public function action_etiquetas(array $args) : \CMMSE\Core\PDFResponse

Acción invocada al solicitar generar alguno de los PDFs de etiquetas, que retorna los datos

proporcionados por \CMMSE\Controllers\Admin\PDF\Etiquetas sin modificar para que las

capas superiores generen el archivo PDF correspondiente a partir de ellos.

public function action_facturas(array $args) : \CMMSE\Core\PDFResponse

Acción invocada al solicitar generar alguno de los PDFs de las facturas, que retorna los datos

proporcionados por \CMMSE\Controllers\Admin\PDF\Facturas sin modificar para que las

capas superiores generen el archivo PDF correspondiente a partir de ellos.

public function action_justificantes(array $args) : \CMMSE\Core\PDFResponse

Acción invocada al solicitar generar alguno de los PDFs de los justificantes de pago, que retorna

los datos proporcionados por \CMMSE\Controllers\Admin\PDF\Justificantes sin modificar para

que las capas superiores generen el archivo PDF correspondiente a partir de ellos.

public function action_ponencias(array $args) : \CMMSE\Core\PDFResponse

Acción invocada al solicitar generar alguno de los PDFs con los certificados de presentación de

ponencias, que retorna los datos proporcionados por

\CMMSE\Controllers\Admin\PDF\Ponencias sin modificar para que las capas superiores

generen el archivo PDF correspondiente a partir de ellos.

public function action_certificados(array $args) : \CMMSE\Core\PDFResponse

Acción invocada al solicitar generar alguno de los PDFs con los certificados de asistencia al

congreso, que retorna los datos proporcionados por

Page 302: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

302 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

\CMMSE\Controllers\Admin\PDF\Certificados sin modificar para que las capas superiores

generen el archivo PDF correspondiente a partir de ellos.

Rooms

Implementación del controlador encargado de la administración de salas.

5.4.19.9.1 Atributos

protected $roomModel : \CMMSE\Interfaces\Models\IRooms

Referencia al modelo de gestión de salas utilizado.

protected $config : \CMMSE\Core\Configuration

Referencia a la configuración estática de la aplicación.

5.4.19.9.2 Métodos

public function onConstruct() : void

Método invocado al crear nuevas instancias de la clase, encargado de inicializar las instancias

de los modelos utilizados por el controlador.

public function default_action() : \CMMSE\Core\Template

Acción encargada de generar el listado de salas y acciones disponibles para cada una a partir

de los datos proporcionados por el modelo.

public function action_add_room() : void

Acción invocada al solicitar la creación de una sala, proporcionando su nombre. Tras la

creación, este método redirige al listado de salas del panel de administración.

public function action_delete_room(array $args) : void

Acción invocada al solicitar la eliminación de una sala. Tras la eliminación, este método redirige

al listado de salas del panel de administración.

Settings

Implementación del controlador encargado de la sección de configuración de la aplicación del panel

de administración.

5.4.19.10.1 Atributos

protected $paymentsModel : \CMMSE\Interfaces\Models\IPayments

Referencia al modelo de gestión de la configuración de pagos utilizado.

protected $settingsModel : \CMMSE\Interfaces\Models\ISettings

Referencia al modelo de configuración dinámica utilizado.

protected $settings : \CMMSE\Doctrine\Settings

Referencia a la configuración dinámica utilizada.

Page 303: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 303

protected $payments : \CMMSE\Doctrine\PaymentSettings

Referencia a la configuración de pagos utilizada.

protected $config : \CMMSE\Core\Configuration

Referencia a la configuración estática de la aplicación.

5.4.19.10.2 Métodos

public function onConstruct() : void

Método invocado al crear nuevas instancias de la clase, encargado de inicializar las instancias

de los modelos utilizados por el controlador.

public function default_action() : \CMMSE\Core\Template

Acción encargada de generar la página con los formularios de configuración de la aplicación.

public function action_set_invoicespain() : void

Acción invocada al solicitar cambiar el número de la siguiente factura emitida para los ponentes

de España. Tras el cambio, este método redirige a la página de configuración de la aplicación.

public function action_set_invoiceothers() : void

Acción invocada al solicitar cambiar el número de la siguiente factura emitida para los

ponentes de fuera de España. Tras el cambio, este método redirige a la página de configuración

de la aplicación.

public function action_change_term() : void

Acción invocada al solicitar abrir o cerrar el plazo de envío de papers. Tras el cambio, este

método redirige a la página de configuración de la aplicación.

public function action_change_public_access() : void

Acción invocada al solicitar abrir o cerrar el acceso público a la página. Tras el cambio, este

método redirige a la página de configuración de la aplicación.

public function action_set_conference_params() : void

Acción invocada al solicitar cambiar los parámetros básicos de la conferencia, incluyendo año,

fechas, lugar, CIF e ISBN. Tras el cambio, este método redirige a la página de configuración de

la aplicación.

public function action_set_email_server() : void

Acción invocada al solicitar cambiar los datos del servidor SMTP utilizado para el envío de

correos. Tras el cambio, este método redirige a la página de configuración de la aplicación.

public function action_test_email () : \CMMSE\Core\Template

Acción invocada al solicitar comprobar el funcionamiento del envío de correos con la última

configuración guardada, proporcionando la salida de depuración detallada con los mensajes

intercambiados entre la aplicación y el servidor SMTP al intentar el envío de un correo de

prueba a una dirección indicada previamente.

Page 304: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

304 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

public function action_set_email () : \CMMSE\Core\Template

Acción invocada al solicitar cambiar la lista de direcciones de correo a las que enviar las

notificaciones de la aplicación. Tras el cambio, este método redirige a la página de

configuración de la aplicación.

Stats

Implementación del controlador encargado de generar la página de estadísticas del panel de

administración.

5.4.19.11.1 Atributos

protected $statsModel : \CMMSE\Interfaces\Models\IStats

Referencia al modelo de estadísticas utilizado.

protected $paymentsModel : \CMMSE\Interfaces\Models\IPayments

Referencia al modelo de gestión de la configuración de pagos utilizado.

protected $settingsModel : \CMMSE\Interfaces\Models\ISettings

Referencia al modelo de configuración dinámica utilizado.

protected $settings : \CMMSE\Doctrine\Settings

Referencia a la configuración dinámica utilizada.

protected $payments : \CMMSE\Doctrine\PaymentSettings

Referencia a la configuración de pagos utilizada.

5.4.19.11.2 Métodos

public function onConstruct() : void

Método invocado al crear nuevas instancias de la clase, encargado de inicializar las instancias

de los modelos utilizados por el controlador.

public function default_action () : \CMMSE\Core\Template

Acción encargada de generar la página con las estadísticas básicas de la conferencia a partir de

los datos disponibles en la base de datos.

Trips

Implementación del controlador encargado de la administración de excursiones.

5.4.19.12.1 Atributos

protected $tripsModel : \CMMSE\Interfaces\Models\ITrips

Referencia al modelo de gestión de excursiones utilizado.

protected $config : \CMMSE\Core\Configuration

Referencia a la configuración estática de la aplicación.

Page 305: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 305

5.4.19.12.2 Métodos

public function onConstruct() : void

Método invocado al crear nuevas instancias de la clase, encargado de inicializar las instancias

de los modelos utilizados por el controlador.

public function default_action() : \CMMSE\Core\Template

Acción encargada de generar el listado de excursiones programadas y acciones disponibles

para cada una a partir de los datos proporcionados por el modelo.

public function action_add_trip() : void

Acción invocada al solicitar la creación de una excursión, proporcionando su nombre. Tras la

creación, este método redirige al listado de excursiones del panel de administración.

public function action_delete_trip(array $args) : void

Acción invocada al solicitar la eliminación de una excursión. Tras la eliminación, este método

redirige al listado de excursiones del panel de administración.

Usuarios

Implementación del controlador encargado de la administración de las cuentas de ponente.

5.4.19.13.1 Atributos

protected static $actions_default : string[][]

Matriz asociativa con las URIs de los controladores usados para generar las etiquetas cuando

parte de éstas deben estar orientadas en sentido vertical.

protected static $actions_etiqueta1 : string[][]

Matriz asociativa con las URIs de los controladores usados para generar las etiquetas cuando

todas ellas deben estar orientadas en sentido horizontal.

protected $userModel : \CMMSE\Interfaces\Models\IUser

Referencia al modelo de gestión de usuarios utilizado.

protected $paperModel : \CMMSE\Interfaces\Models\IPapers

Referencia al modelo de gestión de papers utilizado.

protected $facturacionModel : \CMMSE\Interfaces\Models\IBilling

Referencia al modelo de gestión de facturación utilizado.

protected $settingsModel : \CMMSE\Interfaces\Models\ISettings

Referencia al modelo de configuración dinámica utilizado.

protected $settings : \CMMSE\Doctrine\Settings

Referencia a la configuración dinámica utilizada.

protected $config : \CMMSE\Core\Configuration

Referencia a la configuración estática de la aplicación.

Page 306: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

306 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

5.4.19.13.2 Métodos

public function onConstruct() : void

Método invocado al crear nuevas instancias de la clase, encargado de inicializar las instancias

de los modelos utilizados por el controlador.

public function default_action() : \CMMSE\Core\Template

Acción encargada de generar el listado de usuarios y las acciones disponibles para cada una a

partir de los datos proporcionados por el modelo.

public function action_delete(array $args) : void

Acción invocada al solicitar la eliminación de un usuario y todos los usuarios asociados a él.

Tras la eliminación, este método envía una respuesta de redirección HTTP para dirigir al

navegador al listado de usuarios del panel de administración.

Page 307: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 307

5.4.20 \CMMSE\Controllers\Admin\JSON

Este espacio de nombres contiene los controladores usados para realizar las diferentes acciones AJAX

del panel de administración.

JSONController

Implementación del controlador raíz de las acciones AJAX de las páginas de administración. La labor

principal de este controlador es encadenar la solicitud al controlador adecuado según la URI solicitada.

5.4.20.1.1 Atributos

protected $userModel : \CMMSE\Interfaces\Models\IUser

Referencia al modelo de gestión de usuarios utilizado.

protected $sesessionModel : \CMMSE\Interfaces\Models\ISettings

Referencia al modelo de gestión de sesiones utilizado.

5.4.20.1.2 Métodos

public function onConstruct() : void

Método invocado al crear nuevas instancias de la clase, encargado de inicializar las instancias

de los modelos utilizados por el controlador.

public function action_pagos(array $args) : string[]

Acción invocada al solicitar la realización de una acción asíncrona de gestión de pagos por

medio de AJAX. Este método toma los datos proporcionados por el controlador

\CMMSE\Controllers\Admin\JSON\Pagos y los retorna sin cambios al controlador de

administración.

public function action_papers(array $args) : string[]

Acción invocada al solicitar la realización de una acción asíncrona de gestión de papers por

medio de AJAX. Este método toma los datos proporcionados por el controlador

\CMMSE\Controllers\Admin\JSON\Papers y los retorna sin cambios al controlador de

administración.

public function action_conferencias(array $args) : string[]

Acción invocada al solicitar la realización de una acción asíncrona de gestión de simposios por

medio de AJAX. Este método toma los datos proporcionados por el controlador

\CMMSE\Controllers\Admin\JSON\Conferencias y los retorna sin cambios al controlador de

administración.

Page 308: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

308 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

public function action_rooms(array $args) : string[]

Acción invocada al solicitar la realización de una acción asíncrona de gestión de salas por medio

de AJAX. Este método toma los datos proporcionados por el controlador

\CMMSE\Controllers\Admin\JSON\Rooms y los retorna sin cambios al controlador de

administración.

JSONController

Conferencias Pagos Papers Rooms

Controller

<< instancia >>

Figura 5.63: Diagrama UML de los controladores de las acciones AJAX

Conferencias

Implementación del controlador encargado de las acciones AJAX de administración de simposios.

5.4.20.2.1 Atributos

protected $conferenceModel : \CMMSE\Interfaces\Models\IConferences

Referencia al modelo de gestión de simposios utilizado.

protected $userModel : \CMMSE\Interfaces\Models\IUser

Referencia al modelo de gestión de usuarios utilizado.

Page 309: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 309

5.4.20.2.2 Métodos

public function onConstruct() : void

Método invocado al crear nuevas instancias de la clase, encargado de inicializar las instancias

de los modelos utilizados por el controlador.

public function action_edit_title(string[] $params) : string[]

Acción invocada al solicitar la modificación del título de un simposio utilizando AJAX.

public function action_edit_date(string[] $params) : string[][]

Acción invocada al solicitar la modificación de la fecha de inicio de un simposio utilizando AJAX.

Pagos

Implementación del controlador encargado de las acciones AJAX de gestión de pagos.

5.4.20.3.1 Atributos

protected $facturacionModel : \CMMSE\Interfaces\Models\IBilling

Referencia al modelo de gestión de facturación utilizado.

protected $facturasModel : \CMMSE\Interfaces\Models\IInvoices

Referencia al modelo de gestión de justificantes de pago y facturas utilizado.

protected $paymentsModel : \CMMSE\Interfaces\Models\IPayments

Referencia al modelo de gestión de la configuración de pagos utilizado.

protected $userModel : \CMMSE\Interfaces\Models\IUser

Referencia al modelo de gestión de usuarios utilizado.

protected $payments : \CMMSE\Doctrine\PaymentSettings

Referencia a la configuración de pagos utilizada.

5.4.20.3.2 Métodos

public function onConstruct() : void

Método invocado al crear nuevas instancias de la clase, encargado de inicializar las instancias

de los modelos utilizados por el controlador.

public function action_setpaidflag(string[] $params) : string[]

Acción invocada al solicitar la modificación del flag que indica que un usuario ha pagado

utilizando AJAX.

public function action_setbillprintflag(string[] $params) : string[]

Acción invocada al solicitar la modificación del flag que indica que la factura de un usuario está

lista para imprimirse utilizando AJAX.

public function action_setbillno(string[] $params) : string[]

Acción invocada al solicitar la modificación del número de factura de un usuario utilizando

AJAX.

Page 310: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

310 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

public function action_setfee(string[] $params) : string[]

Acción invocada al solicitar la modificación de la cuota a pagar por un usuario (o restablecer a

la cuota por defecto) utilizando AJAX.

public function action_getbillstatus(string[] $params) : string[]

Acción invocada al solicitar los datos del pago de un usuario (estado, número de factura,

archivo con el justificante, cuota…) utilizando AJAX.

Papers

Implementación del controlador encargado de las acciones AJAX de administración de salas.

5.4.20.4.1 Atributos

protected $papersModel : \CMMSE\Interfaces\Models\IPapers

Referencia al modelo de gestión de papers utilizado.

protected $roomsModel : \CMMSE\Interfaces\Models\IRooms

Referencia al modelo de gestión de salas utilizado.

5.4.20.4.2 Métodos

public function onConstruct() : void

Método invocado al crear nuevas instancias de la clase, encargado de inicializar las instancias

de los modelos utilizados por el controlador.

public function action_edittitle (string[] $params) : string[]

Acción invocada al solicitar la modificación del título de un paper utilizando AJAX.

public function action_edit_room(string[] $params) : string[][]

Acción invocada al solicitar la modificación de la sala y las fechas de exposición de un poster

utilizando AJAX.

public function action_setdecisionflag (string[] $params) : string[]

Acción invocada al solicitar la modificación del flag de decisión de un paper utilizando AJAX.

public function action_setacceptedflag(string[] $params) : string[]

Acción invocada al solicitar la modificación del flag de aceptación de un paper utilizando AJAX.

Tras el cambio, este método envía una notificación al autor y a la lista de direcciones

configuradas.

protected function parseSentDates(string[] $params) : mixed[]

Método interno utilizado para interpretar las fechas enviadas de exposición de un poster. Este

método retorna un array con un entero que representa el identificador del paper y dos objetos

\DateTime que representan la fecha de inicio y fin de exposición.

Page 311: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 311

Rooms

Implementación del controlador encargado de las acciones AJAX de administración de salas.

5.4.20.5.1 Atributos

protected $roomsModel : \CMMSE\Interfaces\Models\IRooms

Referencia al modelo de gestión de salas utilizado.

protected $userModel : \CMMSE\Interfaces\Models\IUser

Referencia al modelo de gestión de usuarios utilizado.

5.4.20.5.2 Métodos

public function onConstruct() : void

Método invocado al crear nuevas instancias de la clase, encargado de inicializar las instancias

de los modelos utilizados por el controlador.

public function action_edit_name(string[] $params) : string[]

Acción invocada al solicitar la modificación del nombre de una sala utilizando AJAX.

Page 312: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

312 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

5.4.21 \CMMSE\Controllers\Admin\PDF

Este espacio de nombres contiene los controladores utilizados para generar los distintos archivos PDF

accesibles desde el panel de administración.

Certificados

Implementación del controlador encargado de generar los certificados PDF de asistencia al congreso.

5.4.21.1.1 Atributos

protected $facturacionModel : \CMMSE\Interfaces\Models\IBilling

Referencia al modelo de gestión de facturación utilizado.

protected $userModel : \CMMSE\Interfaces\Models\IUser

Referencia al modelo de gestión de usuarios utilizado.

protected $settingsModel : \CMMSE\Interfaces\Models\ISettings

Referencia al modelo de configuración dinámica utilizado.

protected $settings : \CMMSE\Doctrine\Settings

Referencia a la configuración dinámica utilizada.

5.4.21.1.2 Métodos

public function onConstruct() : void

Método invocado al crear nuevas instancias de la clase, encargado de inicializar las instancias

de los modelos utilizados por el controlador.

public function action_one(string[] $params) : \CMMSE\Core\PDFResponse

Acción invocada al solicitar el certificado de asistencia de un único usuario.

public function action_seleccionados() : \CMMSE\Core\PDFResponse

Acción invocada al solicitar el certificado de asistencia de un conjunto de usuarios

seleccionados desde la página de administración de usuarios.

public function action_todos() : \CMMSE\Core\PDFResponse

Acción invocada al solicitar el certificado de asistencia de todos los usuarios registrados.

public function action_todos_pagado() : \CMMSE\Core\PDFResponse

Acción invocada al solicitar el certificado de asistencia de todos los usuarios registrados cuyo

pago ha sido confirmado.

Page 313: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 313

\CMMSE\PDFViews

Certificados Etiquetas Facturas Justificates Ponencias

Controller

<< usa >>

Figura 5.64: Diagrama UML de los controladores PDF de la sección de administración

Page 314: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

314 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Etiquetas

Implementación del controlador encargado de generar las etiquetas en formato PDF.

5.4.21.2.1 Atributos

protected $tripsModel : \CMMSE\Interfaces\Models\ITrips

Referencia al modelo de gestión de excursiones utilizado.

protected $userModel : \CMMSE\Interfaces\Models\IUser

Referencia al modelo de gestión de usuarios utilizado.

protected $settingsModel : \CMMSE\Interfaces\Models\ISettings

Referencia al modelo de configuración dinámica utilizado.

5.4.21.2.2 Constantes

FN_ALL_H : string

Contiene el nombre de archivo base para los archivos que contienen las etiquetas de todos los

usuarios en sentido horizontal.

FN_ALL_V : string

Contiene el nombre de archivo base para los archivos que contienen las etiquetas de todos los

usuarios en sentido vertical.

FN_BLANK_H : string

Contiene el nombre de archivo base para los archivos que contienen las etiquetas en blanco

en sentido horizontal.

FN_BLANK_V : string

Contiene el nombre de archivo base para los archivos que contienen las etiquetas en blanco

en sentido vertical.

FN_REST_H : string

Contiene el nombre de archivo base para los archivos que contienen las etiquetas de

restaurante.

FN_ORG_H : string

Contiene el nombre de archivo base para los archivos que contienen las etiquetas para los

miembros de la organización del congreso.

FN_EXC_H : string

Contiene el nombre de archivo base para los archivos que contienen las etiquetas para la

asistencia a excursiones.

FN_EXC_H : string

Contiene el nombre de archivo base para los archivos que contienen las etiquetas para la

asistencia a la cena de gala.

Page 315: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 315

5.4.21.2.3 Métodos

public function onConstruct() : void

Método invocado al crear nuevas instancias de la clase, encargado de inicializar las instancias

de los modelos utilizados por el controlador.

public function action_blanco_vertical() : \CMMSE\Core\PDFResponse

Acción invocada al solicitar el PDF con las etiquetas en blanco en sentido vertical.

public function action_blanco_horizontal15() : \CMMSE\Core\PDFResponse

Acción invocada al solicitar el PDF con las etiquetas en blanco en sentido horizontal con un

tamaño de 15x7,5 cm.

public function action_blanco_horizontal9() : \CMMSE\Core\PDFResponse

Acción invocada al solicitar el PDF con las etiquetas en blanco en sentido horizontal con un

tamaño de 9,2x6,25 cm.

public function action_todos_vertical() : \CMMSE\Core\PDFResponse

Acción invocada al solicitar el PDF con las etiquetas nominativas para todos los ponentes en

sentido vertical.

public function action_todos_horizontal15() : \CMMSE\Core\PDFResponse

Acción invocada al solicitar el PDF con las etiquetas nominativas para todos los ponentes en

sentido horizontal con un tamaño de 15x7,5 cm.

public function action_todos_horizontal9() : \CMMSE\Core\PDFResponse

Acción invocada al solicitar el PDF con las etiquetas nominativas para todos los ponentes en

sentido horizontal con un tamaño de 9,2x6,25 cm.

public function action_horizontal_restaurant15() : \CMMSE\Core\PDFResponse

Acción invocada al solicitar el PDF con las etiquetas de restaurante en sentido horizontal con

un tamaño de 15x7,5 cm.

public function action_horizontal_restaurant9() : \CMMSE\Core\PDFResponse

Acción invocada al solicitar el PDF con las etiquetas de restaurante en sentido horizontal con

un tamaño de 9,2x6,25 cm.

public function action_horizontal_organ15() : \CMMSE\Core\PDFResponse

Acción invocada al solicitar el PDF con las etiquetas distintivas para los miembros de la

organización en sentido horizontal con un tamaño de 15x7,5 cm.

public function action_horizontal_organ9() : \CMMSE\Core\PDFResponse

Acción invocada al solicitar el PDF con las etiquetas distintivas para los miembros de la

organización en sentido horizontal con un tamaño de 9,2x6,25 cm.

public function action_horizontal_excursion15() : \CMMSE\Core\PDFResponse

Acción invocada al solicitar el PDF con las etiquetas para la asistencia a las excursiones

programadas en sentido horizontal con un tamaño de 15x7,5 cm.

Page 316: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

316 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

public function action_horizontal_excursion9() : \CMMSE\Core\PDFResponse

Acción invocada al solicitar el PDF con las etiquetas para la asistencia a las excursiones

programadas en sentido horizontal con un tamaño de 9,2x6,28 cm.

public function action_horizontal_dinnergala15() : \CMMSE\Core\PDFResponse

Acción invocada al solicitar el PDF con las etiquetas para la asistencia a la cena de gala en

sentido horizontal con un tamaño de 15x7,5 cm.

public function action_horizontal_dinnergala9() : \CMMSE\Core\PDFResponse

Acción invocada al solicitar el PDF con las etiquetas para la asistencia a la cena de gala en

sentido horizontal con un tamaño de 9,2x6,28 cm.

Facturas

Implementación del controlador encargado de generar las facturas en formato PDF.

5.4.21.3.1 Atributos

protected $facturacionModel : \CMMSE\Interfaces\Models\IBilling

Referencia al modelo de gestión de facturación utilizado.

protected $papersModel : \CMMSE\Interfaces\Models\IPapers

Referencia al modelo de gestión de papers utilizado.

protected $paymentsModel : \CMMSE\Interfaces\Models\IPayments

Referencia al modelo de gestión de la configuración de pagos utilizado.

protected $userModel : \CMMSE\Interfaces\Models\IUser

Referencia al modelo de gestión de usuarios utilizado.

protected $settingsModel : \CMMSE\Interfaces\Models\ISettings

Referencia al modelo de configuración dinámica utilizado.

protected $payments : \CMMSE\Doctrine\PaymentSettings

Referencia a la configuración de pagos utilizada.

protected $settings : \CMMSE\Doctrine\Settings

Referencia a la configuración dinámica utilizada.

5.4.21.3.2 Métodos

public function onConstruct() : void

Método invocado al crear nuevas instancias de la clase, encargado de inicializar las instancias

de los modelos utilizados por el controlador.

public function action_one(string[] $params) : \CMMSE\Core\PDFResponse

Acción invocada al solicitar la factura de un único usuario.

Page 317: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 317

public function action_one_todo(string[] $params) : \CMMSE\Core\PDFResponse

Acción invocada al solicitar la factura de un único usuario usando como cuota, en caso de que

no se haya establecido una cuota personalizada para él, la cuota de inscripción multiplicada

por el número de papers enviados (o por 1 en caso de que no haya enviado ninguno).

public function action_todos() : \CMMSE\Core\PDFResponse

Acción invocada al solicitar la factura de todos los usuarios que la han solicitado y tienen

asignado un número de factura.

public function action_todos_listas() : \CMMSE\Core\PDFResponse

Acción invocada al solicitar la factura de todos los usuarios que la han solicitado, tienen

asignado un número de factura y sus facturas han sido marcadas como listas para imprimir.

public function action_todos_listas_paganportodo() : \CMMSE\Core\PDFResponse

Acción invocada al solicitar la factura de todos los usuarios que la han solicitado, tienen

asignado un número de factura y sus facturas han sido marcadas como listas para imprimir

usando como cuota, para cada usuario sin una cuota personalizada establecida, la cuota de

inscripción multiplicada por el número de papers enviados (o por 1 en caso de que no haya

enviado ninguno).

public function action_seleccionados() : \CMMSE\Core\PDFResponse

Acción invocada al solicitar la factura de un conjunto de usuarios seleccionados desde la página

de facturas.

public function action_todos_seleccionados_paganportodo() : \CMMSE\Core\PDFResponse

Acción invocada al solicitar la factura de un conjunto de usuarios seleccionados desde la página

de facturas con número de factura asignado, usando como cuota, para cada usuario sin una

cuota personalizada establecida, la cuota de inscripción multiplicada por el número de papers

enviados (o por 1 en caso de que no haya enviado ninguno).

public function action_todos() : \CMMSE\Core\PDFResponse

Acción invocada al solicitar la factura de todos los usuarios registrados con número de factura

asignado.

public function action_todos_paganportodo() : \CMMSE\Core\PDFResponse

Acción invocada al solicitar la factura de todos los usuarios registrados con número de factura

asignado usando como cuota, para cada usuario sin una cuota personalizada establecida, la

cuota de inscripción multiplicada por el número de papers enviados (o por 1 en caso de que no

haya enviado ninguno).

Justificantes

Implementación del controlador encargado de generar los justificantes de pago en formato PDF.

5.4.21.4.1 Atributos

protected $factModel : \CMMSE\Interfaces\Models\IBilling

Referencia al modelo de gestión de facturación utilizado.

Page 318: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

318 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

protected $paperModel : \CMMSE\Interfaces\Models\IPapers

Referencia al modelo de gestión de papers utilizado.

protected $paymentsModel : \CMMSE\Interfaces\Models\IPayments

Referencia al modelo de gestión de la configuración de pagos utilizado.

protected $userModel : \CMMSE\Interfaces\Models\IUser

Referencia al modelo de gestión de usuarios utilizado.

protected $settingsModel : \CMMSE\Interfaces\Models\ISettings

Referencia al modelo de configuración dinámica utilizado.

protected $payments : \CMMSE\Doctrine\PaymentSettings

Referencia a la configuración de pagos utilizada.

protected $settings : \CMMSE\Doctrine\Settings

Referencia a la configuración dinámica utilizada.

5.4.21.4.2 Métodos

public function onConstruct() : void

Método invocado al crear nuevas instancias de la clase, encargado de inicializar las instancias

de los modelos utilizados por el controlador.

public function action_todos() : \CMMSE\Core\PDFResponse

Acción invocada al solicitar los justificantes de pago de todos los usuarios que no han solicitado

factura.

public function action_todos_paganportodo() : \CMMSE\Core\PDFResponse

Acción invocada al solicitar los justificantes de pago de todos los usuarios que no han solicitado

factura, usando como cuota, para cada usuario sin una cuota personalizada establecida, la

cuota de inscripción multiplicada por el número de papers enviados (o por 1 en caso de que no

haya enviado ninguno).

public function action_todospagado() : \CMMSE\Core\PDFResponse

Acción invocada al solicitar el justificante de pago de todos los usuarios que no han solicitado

factura y cuyo pago ha sido confirmado.

public function action_todospagado_paganportodo() : \CMMSE\Core\PDFResponse

Acción invocada al solicitar el justificante de pago de todos los usuarios que no han solicitado

factura y cuyo pago ha sido confirmado, usando como cuota, para cada usuario sin una cuota

personalizada establecida, la cuota de inscripción multiplicada por el número de papers

enviados (o por 1 en caso de que no haya enviado ninguno).

public function action_seleccionados() : \CMMSE\Core\PDFResponse

Acción invocada al solicitar los justificantes de pago de un conjunto de usuarios seleccionados

desde la página de justificantes.

Page 319: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 319

public function action_seleccionados_paganportodo() : \CMMSE\Core\PDFResponse

Acción invocada al solicitar los justificantes de pago de un conjunto de usuarios seleccionados

desde la página de justificantes, usando como cuota, para cada usuario sin una cuota

personalizada establecida, la cuota de inscripción multiplicada por el número de papers

enviados (o por 1 en caso de que no haya enviado ninguno).

Ponencias

Implementación del controlador encargado de generar los certificados de presentación de ponencia

en formato PDF.

5.4.21.5.1 Atributos

protected $billingModel : \CMMSE\Interfaces\Models\IBilling

Referencia al modelo de gestión de facturación utilizado.

protected $paperModel : \CMMSE\Interfaces\Models\IPapers

Referencia al modelo de gestión de papers utilizado.

protected $userModel : \CMMSE\Interfaces\Models\IUser

Referencia al modelo de gestión de usuarios utilizado.

protected $settingsModel : \CMMSE\Interfaces\Models\ISettings

Referencia al modelo de configuración dinámica utilizado.

protected $settings : \CMMSE\Doctrine\Settings

Referencia a la configuración dinámica utilizada.

5.4.21.5.2 Métodos

public function onConstruct() : void

Método invocado al crear nuevas instancias de la clase, encargado de inicializar las instancias

de los modelos utilizados por el controlador.

public function action_one(string[] $params) : \CMMSE\Core\PDFResponse

Acción invocada al solicitar el certificado de la ponencia de un único paper.

public function action_todos() : \CMMSE\Core\PDFResponse

Acción invocada al solicitar los certificados de presentación de las ponencias para todos los

papers aceptados.

public function action_todospagado() : \CMMSE\Core\PDFResponse

Acción invocada al solicitar los certificados de presentación de todas las ponencias presentadas

por usuarios cuyo pago ha sido confirmado.

public function action_seleccionadas() : \CMMSE\Core\PDFResponse

Acción invocada al solicitar los certificados de presentación de un conjunto de ponencias

seleccionados desde la lista de papers enviados.

Page 320: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

320 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

5.4.22 \CMMSE\Controllers\Frontcontrollers

Este espacio de nombres contiene los controladores raíz de la aplicación. Éstos son invocados en

primer lugar en respuesta a las solicitudes de los clientes y se encargan de generar una respuesta,

generalmente realizando nuevas solicitudes a otros controladores.

CSS

Implementación del controlador raíz encargado de generar las hojas de estilo CSS de forma dinámica

a partir de plantillas basándose en la configuración de directorios del sitio almacenada en los archivos

de configuración.

5.4.22.1.1 Métodos

protected function getCSS(string $template) : \CMMSE\Core\Template

Método interno utilizado para generar una hora de estilos CSS a partir de la plantilla

identificada por el parámetro proporcionado, en la cual remplaza las referencias a la URI base

de los archivos estáticos y de otras plantillas CSS que pudiesen estar presentes en la plantilla

indicada por sus valores reales, además de enviar los encabezados HTTP necesarios de tipo de

contenido para indicar que el archivo es una hoja de estilos.

public function default_action() : \CMMSE\Core\Template

Esta acción es invocada cuando no se especifica que hoja de estilos se desea obtener y retorna

una hoja de estilos vacía.

public function action_admin() : \CMMSE\Core\Template

Acción invocada al solicitar la hoja de estilos del panel de administración.

public function action_cmxform() : \CMMSE\Core\Template

Acción invocada al solicitar la hoja de estilos con declaraciones adicionales para formularios,

importada desde la hoja de estilos screen usada en las páginas de usuario.

public function action_estilo() : \CMMSE\Core\Template

Acción invocada al solicitar la hoja de estilos general de la aplicación, la cual incluye el estilo

principal de párrafos, encabezados y validación de contraseñas con jQuery.

public function action_fancybox() : \CMMSE\Core\Template

Acción invocada al solicitar la hoja de estilos asociada al plugin jQuery usado en el panel de

administración para mostrar los justificantes de pago enviados de tipo imagen sin necesidad

de cargar una página nueva.

public function action_reset() : \CMMSE\Core\Template

Acción invocada al solicitar la hoja de estilos encargada de restablecer los estilos por defecto

del navegador para párrafos, enlaces, encabezados, listas y formularios, importada desde la

hoja de estilos screen usada en las páginas de usuario.

Page 321: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 321

public function action_screen() : \CMMSE\Core\Template

Acción invocada al solicitar la hoja de estilos para pantallas estándar, usada en las páginas de

usuario.

public function action_stickyfooter() : \CMMSE\Core\Template

Acción invocada al solicitar la hoja de estilos con las declaraciones necesarias para mantener

el pie de página de las páginas de administración y usuarios en la parte inferior de la ventana

del navegador.

public function action_user() : \CMMSE\Core\Template

Acción invocada al solicitar la hoja de estilos general de las páginas públicas.

Homepage

Implementación del controlador principal de la aplicación, encargado de encaminar las solicitudes al

subcontrolador adecuado, además de realizar las comprobaciones necesarias para permitir o denegar

el acceso a partes de la aplicación en función de la configuración actual de la misma.

5.4.22.2.1 Atributos

protected $instrumentationModel : \CMMSE\Interfaces\Models\IInstrumentation

Referencia al modelo de instrumentación utilizado.

protected $sessionModel : \CMMSE\Interfaces\Models\ISession

Referencia al modelo de gestión de sesiones de usuario utilizado.

protected $settingsModel : \CMMSE\Interfaces\Models\ISettings

Referencia al modelo de configuración dinámica utilizado.

protected $settings : \CMMSE\Doctrine\Settings

Referencia a la configuración dinámica utilizada.

protected $config : \CMMSE\Doctrine\Configuration

Referencia a la configuración estática de la aplicación.

5.4.22.2.2 Métodos

public function onConstruct() : void

Método invocado al crear nuevas instancias de la clase, encargado de inicializar las instancias

de los modelos utilizados por el controlador. Además, este método guarda el instante de inicio

de la solicitud actual de forma que pueda ser almacenado más adelante en la tabla de

instrumentación.

public function __destruct() : void

Método invocado cuando se han destruido todas las referencias al controlador principal, lo

cual ocurre al finalizar la solicitud actual. Este método se encarga de añadir una entrada en los

archivos de registro de la aplicación informando del final de la solicitud y la carga media del

sistema, además de solicitar al modelo de instrumentación que recolecte y guarde en la base

de datos información de depuración.

Page 322: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

322 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

protected function getClosedPage() : string

Método interno usado para enviar al cliente un estado HTTP 410 (que indica que la aplicación

ya no está disponible) junto a un mensaje que indica que el acceso completo al sistema está

cerrado. Es usado desde las acciones del controlador cuando el acceso a la aplicación ha sido

deshabilitado completamente desde el archivo de configuración.

protected function getPublicClosedPage() : string

Método interno usado para enviar al cliente un estado HTTP 410 (que indica que la aplicación

ya no está disponible) junto a un mensaje que indica que el acceso público al sistema está

cerrado. Es usado desde las acciones del controlador cuando el acceso a la aplicación ha sido

deshabilitado para los usuarios que no sean administradores desde la interfaz de

administración.

public function default_action() : \CMMSE\Core\Template

Esta acción es invocada cuando se accede a la página de inicio de la aplicación y muestra

información general sobre la misma y, si la configuración lo permite, enlaces para iniciar sesión

o crear una nueva cuenta de ponente.

public function action_bootstrap(string[] $params) : string

Acción invocada al solicitar una hoja de estilos, un archivo con código Javascript o un archivo

de fuentes TTF del framework Bootstrap, utilizado como base de la interfaz gráfica de la

aplicación. Además del contenido propiamente dicho, este método envía al cliente los

encabezados HTTP necesarios para que éste reconozca el tipo de datos enviados.

public function action_editor(string[] $params) : \CMMSE\Core\Template

Acción invocada al solicitar las páginas de los editores, encadenando la solicitud al controlador

\CMMSE\Controllers\Editor.

public function action_admin(string[] $params) : mixed

Acción invocada al solicitar una página de la interfaz de administración, encadenando la

solicitud al controlador \CMMSE\Controllers\Admin\AdminController.

public function action_user(string[] $params) : \CMMSE\Core\Template

Acción invocada al solicitar una página de la interfaz de administración, encadenando la

solicitud al controlador \CMMSE\Controllers\User\UserHome.

public function action_calendar(string[] $params) : string

Acción invocada al solicitar un calendario en formato iCal, encadenando la solicitud al

controlador \CMMSE\Controllers\Calendar.

public function action_download(string[] $params) : void

Acción invocada al solicitar una página de la interfaz de administración, encadenando la

solicitud al controlador \CMMSE\Controllers\User\Download. Exceptuando las solicitudes de

documentos HTML, el controlador invocado envía directamente los datos solicitados al cliente

y cierra la conexión, lo cual hace que la invocación de este método no retorne.

public function action_recover(string[] $params) : \CMMSE\Core\Template

Acción invocada al solicitar restablecer la contraseña de una cuenta de ponente, encadenando

la solicitud al controlador \CMMSE\Controllers\Recover.

Page 323: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 323

public function action_login(string[] $params) : \CMMSE\Core\Template

Acción invocada al solicitar el formulario para introducir las credenciales de acceso a la

aplicación, introducir dichas credenciales o solicitar la finalización de la sesión actual,

encadenando la solicitud al controlador \CMMSE\Controllers\Login.

public function action_register(string[] $params) : \CMMSE\Core\Template

Acción invocada al solicitar el formulario de registro de un nuevo usuario o al introducir los

datos necesarios para ello, encadenando la solicitud al controlador

\CMMSE\Controllers\Signup.

Homepage

+ default_action() : Template

CSS

......+ action_user(string[] $args) : mixed

# getCSS(string $template) : Template+ default_action() : Template+ action_admin(string[] $args) : mixed+ action_estilo() : Template

\CMMSE\Models

Controller

Frontcontroller

+ dispatch_request() : mixed...

Figura 5.65: Diagrama UML de los Frontcontrollers

Page 324: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

324 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

5.5 Diseño físico de datos

En este apartado se describe cómo y dónde se almacenan los datos utilizados internamente y/o

gestionados por la aplicación, entre los que se encuentra la configuración básica, los archivos utilizados

para generar las páginas y la documentación, las imágenes proporcionadas a los clientes para mostrar

la interfaz de usuario a partir del código HTML y CSS, y los archivos enviados por los ponentes. En los

últimos apartados se detalla la estructura de los datos almacenados por la aplicación en la base de

datos y un estudio de los cambios necesarios en la misma para su normalización.

El directorio webcmmse, mencionado en los siguientes apartados, está ubicado por defecto en

/var/www/webcmmse.

5.5.1 Archivos estáticos internos

Los archivos estáticos, como las imágenes y fuentes TrueType utilizadas para generar los PDFs o los

archivos adjuntos a los correos que notifican la aceptación de un paper, se encuentran en los

directorios indicados en la sección “files” del archivo de configuración (por defecto apuntan al

directorio “data” relativo al directorio padre de webcmmse).

Las plantillas usadas paga generar las páginas HTML, las hojas de estilo CSS, los correos electrónicos y

los documentos PDF están ubicadas en el directorio twig_templates ubicado en webcmmse. Este

directorio no es configurable.

5.5.2 Archivos estáticos públicos

Los archivos estáticos accesibles públicamente a través de solicitudes HTTP, como scripts Javascript no

generados dinámicamente o imágenes, se encuentran ubicados en los directorios, relativos a

webcmmse, static (en el caso de las imágenes), js (para los scripts Javascript) y tablesorter (para los

scripts Javascript de ordenación de tablas en el cliente). Las rutas de estos directorios son configurables

modificando los parámetros correspondientes del archivo de configuración.

5.5.3 Archivos de usuario

Los archivos enviados por los usuarios se almacenan en los directorios, relativos a webcmmse, papers

(para los papers enviados) y facturas (para los justificantes de pago enviados). El servidor web necesita

tener permisos de escritura sobre estos directorios y sus contenidos para el correcto funcionamiento

de la aplicación.

Page 325: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 325

5.5.4 Configuración estática de la aplicación

La configuración estática comprende todos aquellos datos que, por su naturaleza, no pueden ser

almacenados en la base de datos (por ejemplo, las propias credenciales de acceso a la misma), o

información que se ha decidido no mantener en la base de datos para simplificar la administración, al

tratarse de parámetros que rara vez varían. Además, los parámetros del registro de depuración

(log4php) también son configurables.

La aplicación utiliza dos archivos de configuración, log4php.xml y webcmmse.ini, que deberán estar

situados en el subdirectorio conf dentro del directorio raíz de instalación (normalmente

/var/www/conf). Estos archivos son generados automáticamente durante la instalación a partir de la

información proporcionada durante la misma.

log4php.xml

Este archivo es utilizado para configurar el sistema de logging, por ejemplo para mostrar los mensajes

de depuración en consola (en el caso de sistemas de de desarrollo basados en el servidor web

integrado de PHP) o guardarlos en disco para su análisis posterior en caso de ser necesario.

Consulte la documentación de log4php24 para obtener más detalles sobre la sintaxis y las opciones

configurables desde este archivo.

webcmmse.ini

Este archivo contiene la configuración estática completa de la aplicación a excepción de la

configuración del sistema de logging. Se trata de un archivo .ini tradicional dividido en 4 secciones. Los

parámetros de tipo URI contienen un string representando una dirección entre comillas relativa al

hostname del servidor web (salvo que se indique otra cosa); los valores admitidos en los campos de

tipo boolean son true y false (sin comillas).

Sección “web”

Parámetro Tipo Ejemplo

open boolean open = true

Habilita o deshabilita el acceso completo a la aplicación. El valor false provoca que la pantalla

principal muestre el mensaje “System closed” en lugar de los enlaces de registro y login, y el

intento de acceso a cualquier otra URL retornará el mensaje “The system is closed”.

root URI root = "/webcmmse"

URI base de la aplicación.

24 https://logging.apache.org/log4php/

Page 326: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

326 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Parámetro Tipo Ejemplo

base_uri URI base_uri = "/webcmmse/index.php/"

URI base de acceso a las páginas dinámicas.

base_css_uri URI base_css_uri ="/webcmmse/css.php/"

URI base a partir de la cual se construyen las direcciones de acceso a las hojas de estilo

CSS generadas dinámicamente.

static_base_uri URI static_base_uri="/webcmmse/static/"

URI base de los archivos estáticos de la interfaz de usuario (imágenes).

favicon_uri URI favicon_uri = "/webcmmse/static/favicon32.png"

URI del favicon (icono mostrado en marcadores) de la aplicación.

bootstrap_css_root URI bootstrap_css_root =

"/webcmmse/index.php/bootstrap/css/"

URI base de acceso a las hojas de estilo de Bootstrap.

bootstrap_js_root URI bootstrap_js_root =

"/webcmmse/index.php/bootstrap/js/"

URI base de acceso a los archivos javascript de Bootstrap.

tablesorter_js_uri URI tablesorter_js_uri =

"/webcmmse/tablesorter/jquery.tablesorter.min.js"

URI del script de ordenación de tablas en el lado del cliente.

fancybox_js_uri URI fancybox_js_uri =

"/webcmmse/js/jquery.fancybox.js"

URI del script usado para mostrar las facturas enviadas como imágenes en un lightbox.

jquery_plugin_root URI jquery_plugin_root = "/webcmmse/js/"

URI base de los plugins de jQuery (validadores de formularios).

admin_js_uri URI admin_js_uri = "/webcmmse/js/admin.js"

URI del script con las funcionalidades dinámicas de las páginas de administración.

use_errorexception boolean use_errorexception = false

Indica si los errores estándar de PHP deben convertirse en excepciones. Solo debe tomar

el valor true en entornos de desarrollo.

paper_download_

base_uri

URI paper_download_base_uri = "papers/"

URI relativa a la base de la aplicación (parámetro root) para descargar los papers enviados.

Page 327: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 327

Parámetro Tipo Ejemplo

paper_base_ local_path URI paper_base_local_path = "webcmmse/papers"

Path relativo al directorio padre de webcmmse donde almacenar los papers.

invoice_download_

base_uri

URI invoice_download_base_uri = "facturas/"

URI relativa a la base de la aplicación (parámetro root) para descargar los justificantes de

pago enviados.

invoice_base_ local_path URI invoice_base_local_path="webcmmse/facturas"

Path relativo al directorio padre de webcmmse donde almacenar los justificantes de pago

enviados.

paper_email_

download_protocol

IANA URI

scheme

paper_email_download_protocol = "http"

Protocolo de las direcciones de descarga de papers mostradas en los correos enviados.

paper_email_

download_host

Domain

name o IP

paper_email_download_host =

"pirweb.edv.uniovi.es"

Nombre de host o IP usado en las direcciones de descarga de papers mostradas en los

correos enviados.

paper_email_

download_prepend

URI paper_email_download_prepend ="download/"

Cadena de texto incluida entre base_uri y el nombre de archivo de los papers usada para

generar los enlaces de descarga de papers incluídos en los correos enviados.

Sección “files”

Parámetro Tipo Ejemplo

data_path URI relativa data_path ="data"

Path relativo al directorio padre de webcmmse donde se encuentran los archivos de datos

auxiliares (imágenes para los PDFs y archivo CSV con la lista de países).

font_path URI relativa font_path = "data/fonts"

Path relativo a la URI base con las fuentes TrueType usadas para generar los PDFs.

paper_templates URI relativa paper_templates = "cmmse2014.cls, word.zip"

Nombre de los archivos (situados en el data_path y separados por comas) a adjuntar en

los correos electrónicos que notifican a los ponentes de que un paper ha sido aceptado.

Page 328: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

328 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Sección “database”

Parámetro Tipo Ejemplo

host Domain name o IP host ="localhost"

Nombre de host o IP usado para conectar al servidor MySQL que hospeda la base de datos

de la aplicación.

user string user = "cmmse"

Nombre de usuario usado para conectar al servidor MySQL que hospeda la base de datos

de la aplicación.

pass string pass = "MySQLCmmse"

Contraseña usada para conectar al servidor MySQL que hospeda la base de datos de la

aplicación.

name string name = "cmmse"

Nombre de la base de datos usada por la aplicación.

Sección “doctrine”

Estos parámetros se usan para acceder a la base de datos a través del ORM (Doctrine) y sus valores

deben coincidir con los de la sección anterior.

Parámetro Tipo Ejemplo

host Domain name o IP host ="localhost"

Nombre de host o IP usado para conectar al servidor MySQL que hospeda la base de datos

de la aplicación.

user string user = "cmmse"

Nombre de usuario usado para conectar al servidor MySQL que hospeda la base de datos

de la aplicación.

pass string pass = "MySQLCmmse"

Contraseña usada para conectar al servidor MySQL que hospeda la base de datos de la

aplicación.

name string name = "cmmse"

Nombre de la base de datos usada por la aplicación.

driver string driver = "mysqli"

Driver de Doctrine usado para acceder a la base de datos.

Page 329: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 329

5.5.5 Modelo entidad-relación de la base de datos

El modelo entidad-relación general de los datos almacenados en la base de datos por la aplicación es

el siguiente:

Sala

se expone en

Poster

ES_UN

PaperUsuario envia

TítuloHonorífico

tiene un

FacturacionUsuario

se corresponde con

Simposio

MuestraInstrumentacion

presentado en

Sesión

generada en

estando logueado

Excursión

n

11

n

n1

1

1

0,1

n

n

0,1 0,1

n

ConfiguraciónPagos

ConfiguraciónEMail

ConfiguraciónGeneral

Figura 5.66: Modelo entidad-relación general

Esta figura solo describe el modelo entidad-relación parcialmente. A continuación se incluyen las

diferentes entidades del mismo de forma detallada.

Page 330: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

330 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Modelo entidad-relación: Usuario y TítuloHonrífico

Las entidades Usuario representan a los ponentes, administradores y editores, mientras que los títulos

honoríficos representan las opciones que los ponentes pueden seleccionar al registrarse (Mr., Ms.,

Prof.).

Por razones de compatibilidad, asociada a los títulos honoríficos se incluye una clave alfanumérica

utilizada internamente por la aplicación (en lugar de la clave primaria ID), y asociados a los usuarios se

incluye el nombre de archivo del justificante de pago enviado (si lo hubiese enviado y bajo el nombre

factura) y la cuota a pagar por el usuario (o null si no difiere de la cuota por defecto).

Usuario

TítuloHonorífico

tiene un

ID Título Clave

ID

Contraseña

Nombre

Apellidos

E-Mail

Compañía

DatosDireccion

Teléfono

DatosNombre

País Estado Ciudad

Dirección CódigoPostal

Factura

Cuota

n

1

Tipo

FechaAlta

Figura 5.67: Modelo entidad-relación de los usuarios y los títulos honoríficos

Modelo entidad-relación: FacturacionUsuario

Las entidades FacturacionUsuario representan los datos utilizados para la gestión de pagos asociados

a cada ponente. En los casos en los que no esté contemplado que el usuario realice pagos

(Administradores), esta tabla almacena valores nulos para él (nuevamente por razones de

compatibilidad con el código original), resultando en una relación con cardinalidad 1 en ambos

extremos.

Page 331: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 331

Usuario

FacturacionUsuario

se corresponde con

ID

JustificantePago

Pagó?

NúmeroFactura

CIFCompañía

Dirección

NombreBeneficiario

PerteneceREDNúmeroFacturaRED

Cuota

ListaParaImprimir EstadoDatosRED

DatosFactura

1

1

Figura 5.68: Modelo entidad-relación de los datos de facturación de los usuarios

Modelo entidad-relación: Paper, Poster, Simposio y Sala

Las entidades Paper representan las publicaciones enviadas por los ponentes para presentar en el

congreso. Almacenan su título, la lista de autores, la fecha de envío (tanto formateada como en forma

de fecha SQL, esta última identificada por el atributo FechaCreación), su estado (si ha entrado en

revisión y si ha sido aceptada) y los archivos asociados al primer y último envío.

Para los papers que incluyen un poster, se dispone de la entidad débil Poster. Los Posters, que

dependen funcionalmente del Paper asociado a ellos (con el cual comparten el identificador),

almacenan información adicional para que los administradores gestionen en qué sala y en qué

intervalo de fechas será expuesto.

Por razones de compatibilidad, la lista de autores se almacena junto al paper (existiendo un límite de

9 autores por paper), y el estado se almacena como dos flags binarios (que indican si ha entrado en

proceso de revisión y, si es el caso, si tras la revisión ha sido aceptada su publicación).

Page 332: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

332 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Sala

se expone en

Poster

ID

Nombre

ES_UN

Paper

Usuario

enviado por

Simposio presentado en

ID FechaInicio

Título

ID

InicioExposición

FinExposición

FechaCreación

ID

Autores

Archivos

Título Fechas

Estado

PrimerEnvío

ÚltimoEnvío

FechaEnvío

FechaCreación

EnRevisión

Aceptado

Autor2

Autor4Autor3

Autor5

Autor6

Autor7

Autor8

Autor9Autor1

1

n1 n

1

n

Figura 5.69: Modelo entidad-relación de papers, posters, simposios y salas

Modelo entidad-relación: Excursión

Las entidades Excursión representan los datos de las excursiones y actividades complementarias que

se realizarán durante la conferencia. Se trata de entidades simples que solo almacenan un identificador

y un nombre descriptivo, y que no forman parte de ninguna relación con otras entidades.

Excursión

ID Nombre

Figura 5.70: Modelo entidad-relación de las excursiones

Page 333: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 333

Modelo entidad-relación: MuestraInstrumentación y Sesión

La información de las sesiones se guarda en una tabla que mantiene los datos desestructurados de la

misma junto a su identificador, hash de sesión (utilizado para localizar sus datos sin enviar su clave

primaria a través de la red 25 ) y un flag que indica si ha expirado. Los datos de esta tabla son

referenciados desde otra en la que se guarda información de depuración de la aplicación.

Usuario

MuestraInstrumentacion

Sesión

generada en estando conectado

ID Hash Datos Expiró

ID

Carga del Sistema

Consultas BDIdentificación

del Cliente

Solicitud

Identificación del Servidor

Instantes de Muestreo

Nodo

SistemaOperativo

DistribuciónSO

VersiónSO

1min

5min

15min

MemoriaMáxima

Consultas MySQLi

Consultas Doctrnie

IP_Real

IP_Remota

Inicio Fin

Entero Decimal Entero Decimal

HostServidor

MétodoHTTP

URI

0,1

n

0,1

n

Navegador

Figura 5.71: Modelo entidad-relación de las muestras de instrumentación

25 Enviar las claves primarias de sesión a través de la red en lugar de su hash permitiría a un atacante realizar un secuestro de sesión de manera trivial (probando identificadores enteros de forma secuencial).

Page 334: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

334 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Modelo entidad-relación: ConfiguraciónGeneral,

ConfiguraciónPagos y ConfiguraciónEMail

La configuración de la aplicación se almacena en 3 tablas. La tabla de configuración general almacena:

El año, fecha, lugar de celebración y URL del sitio web de la conferencia

El CIF de la organización, el ISBN y el ISSN asociados a las publicaciones

Una lista no normalizada con las direcciones de correo electrónico concatenadas a los que

enviar las notificaciones

La fecha de emisión de las facturas y los certificados de asistencia

Flags que indican si el acceso público a la página y el envío de papers están habilitados

Información asociada al patrocinador de la conferencia, en caso de haya uno

La configuración de envío de correos se almacena en una tabla aparte. Contiene información para

realizar la conexión al servidor de correo y la dirección de correo electrónico de origen de los mismos.

La configuración de los pagos y los números de factura disponibles se almacenan en otra tabla, que

contiene la cantidad a pagar en concepto de inscripción, la cantidad a pagar por aquellos usuarios que

cuenten con patrocinador (si lo hubiera) y el último número de factura usado para las facturas de

España, del extranjero y de los usuarios patrocinados.

Page 335: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 335

ConfiguraciónPagos

ConfiguraciónEMail

ConfiguraciónGeneral

ID

Año

Fecha

Localización

URL

FechaFacturas

FechaCertificados

CIF

ISBN

ISSN

ListaEmails

AccesoCerrado

InfoRED

CIF Nombre

DirecciónNombreComañía

ParametrosEtiquetas

Tipo Tamaño

PlazoCerrado

IDHost

Puerto

Usuario

Contraseña

Remitente

ParametrosConexión

Dirección

Nombre

TipoEncriptaciónAutentificación

SMTP

ID

NumSecuenciaFacturas

España

Extranjero

RED

Cuota

Estándar RED

Figura 5.72: Modelo entidad-relación de los datos de configuración

Page 336: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

336 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

5.5.6 Modelo relacional de la base de datos

La estructura de las tablas utilizadas en la aplicación se muestra a continuación a través de varios

diagramas. Los atributos unidos a través de flechas representan claves foráneas (apuntando hacia el

identificador de la tabla original de la cual toma su valor la columna del otro extremo), los marcados

como “CP” representan las claves primarias.

La correspondencia con el modelo entidad-relación descrito anteriormente es prácticamente directa.

Por tanto, lo dicho para entidades y atributos es aplicable a las tablas y sus columnas.

Page 337: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 337

conferencias

idconfCP

title

ts_begin

papers

idpaperCP

iduser

author6

author7

idconf

newfilename

author4

filename

author1

author2

title

poster

date

author5

author3

author9

aceptado

decision

author8

created

usuarios

iduserCP

password

firstname

postalcode

country

lastname

title

email

company

address

city

state

typeuser

telephone

factura

fees

created

person_titles

title_idCP

title_key

title

Figura 5.73: Modelo relacional de las tablas de usuarios, papers y conferencias

Page 338: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

338 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

papers

paper_idCP

poster

poster_idCP

paper_id

ts_end

ts_begin

created

room

rooms

room_idCP

name

trips

trip_idCP

name

...

Figura 5.74: Modelo relacional de las tablas de posters, salas y excursiones

facturacion

iduserCP

factura

pago

billnumber

billaddress

fees

bill_red

billcompany

billcif

billname

billnumber_red

billprint

usuarios

iduserCP

...

Figura 5.75: Modelo relacional de la tabla de facturación

Page 339: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 339

settings

idsettingCP

yearconf

bbddonoff

dateconf

placeconf

email

issn

isbn

cif

datefirmacert

urlconf

datefirmafact

red_cif

red_company

red_name

red_address

plazo_cerrado

tipoetiqueta

sizeetiqueta

mailer_settings

server_idCP

host

port

smtp_auth

from_addr

user

pass

from_name

encryption_type

enabled

payment_settings

row_idCP

spain_invoice_next_seq_id

out_invoice_next_seq_id

red_fees

red_invoice_next_seq_id

fees

Figura 5.76: Modelo relacional de las tablas de configuración

Page 340: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

340 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

sessions

sidCP

hash

data

expired

instrumentation

sample_idCP

sid

uid

is_admin

ts_begin

forwarded_for

host

uri

load1

user_agent

request_method

num_queries_doctrine

remote_addr

num_queries_mysqli

load5

max_mem_usage

load15

ts_saved

version

micro_ts_saved

micro_ts_begin

sysname

release

nodename

usuarios

iduserCP

...

Figura 5.77: Modelo relacional de las tablas de sesiones e instrumentación

Page 341: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 341

5.5.7 Normalización

Los requisitos para que una tabla cumpla, al menos, la primera forma normal son:

1. No hay orden de arriba-a-abajo en las filas.

2. No hay orden de izquierda-a-derecha en las filas.

3. No hay filas duplicadas.

4. Cada intersección de fila-y-columna contiene exactamente un valor del dominio aplicable (y

nada más).

5. Todas las columnas son regulares (es decir, las filas no contienen componentes como

identificadores o timestamps ocultos).

El diseño de la base de datos utilizada por la aplicación cumple los 3 primeros requisitos. Sin embargo,

su estructura fue inicialmente proporcionada por la organización del congreso, y no se ha llevado a

cabo su normalización (lo cual hubiese requerido modificaciones en partes de la aplicación que ya eran

completamente funcionales) por falta de tiempo.

A continuación se incluye la estructura normalizada equivalente a la original para las principales

entidades26. Este modelo contiene multitud de entidades débiles (cuya dependencia funcional respecto

a otras entidades es total) para satisfacer los requisitos 4 y 5.

26 Técnicamente la normalización debería realizarse a partir de la estructura de las tablas y no del modelo E-R original. Para los propósitos de este apartado debe asumirse que una entidad corresponde a una tabla, todo atributo mostrado se corresponde con una única columna y las relaciones que incluyen un nombre requieren la creación de tablas adicionales (las que no, o bien heredan identificadores o los almacenan en una columna de la tabla correspondiente a la entidad con cardinalidad variable).

Page 342: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

342 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Modelo entidad-relación normalizado: Usuario

En este caso se crearían tablas adicionales para cada tipo de usuario, desapareciendo el campo tipo

(que se obtendría comprobando en qué tabla existe una entrada para un identificador de usuario

dado).

Se añade una tabla adicional para mantener los nombres de usuario, referenciada desde las tablas de

editor y ponente. El valor efectivo de los atributos originales Compañía, País, Estado, Ciudad,

TítuloHonorifico, Dirección, CódigoPostal y Teléfono pasan a tablas separadas, añadiendo, además,

tablas adicionales para relacionarlas en todos los casos excepto para país (que se almacenaría en la

propia tabla de Ponentes por ser un atributo obligatorio).

Usuario

TítuloHonorífico1:N

ID

Título

Clave

ID

Contraseña

NombreApellidos

E-Mail

Nombre

Nombre

Nombre

Dirección

CódigoPostal

n 1

Tipo FechaAlta

Ponente

NombreUsuario

Dirección ID

CódigoPostal

País

Estado

Ciudad

ES_UN

NOTA: tipo se infiere de la

ocurrencia del ID en las otras tablas

Nombre

Compañía

ID

ID

ID

ID

ponente-título

1:N

ponente-compañía

1:N

1:N

ponente-estado

1:N

ponente-ciudad

ID

1:N

n 0,1ponente-direccion

1:Nn 0,1

ponente-cp

Dirección

Teléfono ID1:N

n 0,1ponente-direccion

n 0,1

n 1

n 0,1

n 0,1

Editor Administrador

1:N 1:N

n n

1 1

Figura 5.78: Modelo entidad-relación normalizado de usuarios

Page 343: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 343

Modelo entidad-relación normalizado: Papers, Posters, Salas y

Conferencias

Para los papers se crearía una tabla adicional para diferenciar si son o no de tipo poster. Esta tabla

guardaría una lista de los IDs de los papers que lo son. Además, se crearía una tabla para guardar la

sala en la que se exponen (en caso de estar definida) y una tabla para guardar las fechas de exposición

(nuevamente, en caso de estar definidas, siendo ambas fechas obligatorias para cumplir el requisito

de no existencia de valores nulos). La tabla de fechas es una entidad débil que comparte la clave

primaria con el poster al que pertenece, del cual depende funcionalmente. El identificador del ponente

que envía un paper y el simposio en el que se presenta se almacenan en la propia tabla de papers, ya

que nunca pueden tomar valores nulos.

Se añaden otras dos tablas adicionales, una para almacenar los nombres de los archivos enviados

(como una entidad débil con su propio identificador y el identificador del paper al que pertenece) y

otra para los autores. Para relacionar estos últimos con los papers se incluye una tabla más que guarda

pares (IDPaper,IDAutor) junto a la posición dentro de la lista de autores del paper. Para cumplir el

requisito de no permitir tuplas duplicadas (y reducir el espacio de almacenamiento necesario), las

entradas de la tabla de autores se comparten entre papers y se utiliza la tabla paper-autor para

mantener la relación entre papers y autores.

Page 344: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

344 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Sala 1:N

Poster

ID

Nombre

ES_UN

PaperPonente 1:N

Simposio 1:N

ID FechaInicioTítulo

ID

InicioExposición

FinExposición

FechaCreación

FechaPoster 1:1

Título Estado

ArchivoPaper

1:N

AutoresPaper

N:N

ID Nombre

Timestamp

ID Nombre

0,1

1poster-sala

1...n

1

1...n

1...n

paper-autor

0,1

0...n

1 0...n

1 0...n

NumSecuencia

Figura 5.79: Modelo entidad-relación normalizado de papers, posters, salas y simposios

Page 345: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 345

Modelo entidad-relación normalizado: Facturación

A partir de la tabla de facturación original se crean cuatro tablas adicionales para guardar los datos

que originalmente podían tomar valores nulos. De esta forma tenemos una tabla que representa una

entidad débil asociada a los ponentes (con los cuales comparte clave primaria) donde se guarda el flag

que indica si se ha realizado el pago y si pertenece al conjunto de ponentes patrocinados por la “red”

(inicialmente ambos toman el valor falso para todos los ponentes).

Se añade una tabla de cuotas, que contendrá la cantidad a pagar por los ponentes en el caso de que

éstos no tengan asignada la cuota por defecto. Para los casos en los que la cantidad a pagar por el

ponente sea la predeterminada esta tabla no tendrá un registro asociado.

Los números de factura se almacenan en otra tabla, asociados a los IDs de usuarios, para aquellos

usuarios a los que se les haya asignado. De manera similar se almacenan los nombres de archivo de los

justificantes enviados. Además, se añade una tabla adicional con los datos necesarios para emitir las

facturas: CIF, nombre de la Compañía, Dirección, Nombre del Beneficiario y el flag que indica si la

factura está Lista para Imprimir. Todos sus campos son obligatorios.

Ponente FacturacionUsuario1:1

JustificanteFactura

Pagó?

Número

CIFCompañía Dirección

NombreBeneficiario

PerteneceRED?

Cuota

ListaParaImprimir

ArchivoFactura

CuotasNúmerosFactura

DatosEmisiónFactura

1:1 1:1

1:11:1

IDUsuario

0,1 0,1

11

11

0,10,1

Figura 5.80: Modelo entidad-relación normalizado de los datos de facturación

Page 346: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

346 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Modelo entidad-relación normalizado: Configuración

A partir de la tabla de configuración original se crea una tabla para la configuración general, en la cual

se almacenarían los parámetros que no pueden tomar valores nulos: año y fecha de la conferencia,

fechas en las que se emiten las facturas y los justificantes, URL de la conferencia, CIF, ISBN y dos flags

que indican si el plazo de envío y el acceso público al sitio están o no habilitados. También se incluirían

dos columnas con el tipo y tamaño de las etiquetas.

En el caso de que se quisiera que alguno de los parámetros descritos anteriormente pudiese tomar

valores nulos, se tendrían que crear nuevas tablas asociados a ellos.

Para los parámetros opcionales se crearían tres tablas nuevas. El ISSN se guardarían en una tabla

independiente (vacía si no se dispone de él) asociado a un ID compartido con la tabla de configuración

general. La configuración de la Red, si existe, se almacenaría también en su propia tabla siguiendo un

método similar (considerando todos sus campos como obligatorios). Las diferentes direcciones a las

que enviar las notificaciones se almacenarían en una nueva tabla, asociadas al ID de la tabla de

configuración general, además de a su propio identificador de fila.

ConfiguraciónGeneral

ConfiguraciónISSN ConfiguraciónNotificaciones ConfiguraciónRED

1:1 1:N 1:1

1 1 1

ISSN

0, 1 0, n 0, 1

EMail CIF

NombreCompañia

Dirección

Nombre

ID

ISBN

Año Fecha URL CIF

PlazoCerrado AccesoCerrado

FechaFacturas

FechaJustificantes

ParametrosEtiquetas

Tipo

Tamaño

Figura 5.81: Modelo entidad-relación normalizado de los parámetros de configuración

Page 347: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 347

5.6 Diseño de la interfaz de usuario

La distribución de controles y el uso de la aplicación está descrito en detalle en los manuales; en esta

sección se detallan los criterios generales y tecnologías usadas para la construcción de la interfaz de

usuario.

Toda la interfaz de usuario está construida sobre el framework de presentación web Bootstrap,

haciendo uso de CSS3 y HTML5. En general, durante el diseño de la interfaz de usuario se han

distinguido dos roles generales: Por una parte, las páginas accesibles públicamente (bien como

Invitado o identificado con una cuenta de ponente), y por otra las páginas usadas para la gestión y

administración del congreso y la aplicación. Cada uno de ellos tiene asociado un conjunto distinto de

necesidades y prioridades:

En las páginas públicas, se considera prioritario el aspecto estético de la aplicación y su

funcionamiento correcto en el mayor número posible de navegadores web. Por tanto, se ha

prescindido del uso de funcionalidades avanzadas Javascript (incluyendo AJAX) y (en la medida

de lo posible) de parte de las nuevas tecnologías ofrecidas por HTML5. Las páginas públicas

están diseñadas para un ancho mínimo de pantalla de 1024 pixels, si bien se adaptan y son

usables en dispositivos con resoluciones de pantalla menores utilizando las funcionalidades

que Bootstrap proporciona para ello.

En la página de administración, se considera prioritario el aspecto funcional de la aplicación

respecto al soporte de un mayor número de navegadores (en particular, navegadores

antiguos). Por tanto, parte de las funcionalidades sólo están disponibles en navegadores que

soporten AJAX, CSS3 y HTML5 de forma razonablemente completa. Las páginas de

administración están diseñadas para un ancho mínimo de pantalla de 1400 pixeles, si bien se

han tomado ciertas medidas para proporcionar una interfaz usable (al menos parcialmente)

para resoluciones menores, incluyendo el remplazo de botones por versiones de menor

tamaño o la ocultación de ciertos datos bajo determinadas condiciones.

En ambos casos se ha tenido especial cuidado en no requierir el uso de scroll horizontal para la

visualización de las páginas (salvo en aquellos casos, dentro de la interfaz de administración, en los

que es técnicamente imposible).

Los archivos que contienen la implementación de la interfaz de usuario (Javascript, HTML y CSS) se

encuentran en los directorios descritos en los primeros apartados de la sección Diseño físico de datos.

Page 348: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

348 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

5.6.1 Interfaz pública

Las páginas públicas muestran el logotipo de la conferencia ocupando la mayor parte de la mitad

superior de la página (1), reservando la parte inferior para los datos y formularios. En las páginas

accesibles una vez el usuario se ha identificado se muestra un menú de navegación (2) entre el logotipo

de la conferencia y el contenido propiamente dicho. Todas las páginas muestran en su parte inferior

información sobre los administradores del sitio y dos enlaces para la descarga de calendarios iCal (3).

La mayor parte de los controles de los formularios están definidos utilizando las clases CSS que

Bootstrap proporciona para ello, mostrándose el botón por defecto para el envío de los formularios

en azul (4) y los botones que pueden provocar una pérdida de datos (borrado de justificantes,

papers,…) en rojo o naranja (5). El resto de botones se muestran en color blanco. Para facilitar su

localización, los botones tienen el doble de tamaño que el estándar.

Figura 5.82: Distribución de las pantallas de la interfaz pública

Page 349: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Diseño e implementación | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 349

5.6.2 Interfaz administrativa

Las páginas de administración muestran un menú de navegación en la parte superior (1) con enlaces a

los diferentes módulos junto al logotipo de la conferencia (en caso de disponer de ancho de pantalla

suficiente) y un enlace para cerrar sesión (2). Este meú es visible en todo momento, quedando anclado

a la parte superior del chrome27 del navegador. Ya que la longitud de los listados y de las páginas de

estadísticas mostradas se prevé considerable, para ahorrar espacio, no se muestra un logotipo a

tamaño completo como sí ocurre en las páginas de usuario, facilitando así la navegabilidad. En la parte

inferior se muestra un pie de página similar al mostrado en las páginas públicas. Para proporcionar una

experiencia de uso lo más cómoda y simple posible, se usan tonos claros en toda la interfaz de

administración, y el fondo de la misma no incluye imágenes o efectos de ningún tipo.

Al igual que en la interfaz pública, los controles de los formularios están definidos utilizando Bootstrap,

y los botones se muestran en distintos colores (3) en función de su naturaleza (azul para los botones

por defecto o aquellos que enlazan a las acciones más comunes, blanco para acciones secundarias,

verde para descarga de documentación relativa a facturación y rojo o naranja para aquellos que

enlazan a acciones que pueden provocar pérdida de información). En los casos en los que se muestran

direcciones de correo electrónico, éstas están definidas como enlaces que se abrirán con la aplicación

de envío de correo que el navegador del usuario tenga asociada a los enlaces mailto (4).

Figura 5.83: Distribución general de las pantallas de la interfaz de administración

La interfaz de administración hace un uso intensivo de funcionalidades de la librería jQuery, HTML5 y

Javascript y, por tanto, requiere que el navegador usado los soporte de forma completa. Los listados

de datos pueden ser ordenados haciendo clic en los encabezados de las mismas (5), realizándose dicho

ordenamiento en el cliente en lugar de requerir una recarga completa de la página (mejorando los

tiempos de respuesta y disminuyendo, además, el número de solicitudes HTTP enviadas al servidor); y

el color de fondo de las filas de los mismos intercala tonos claros y oscuros para ayudar a distinguir los

correspondientes a cada una. En caso de seleccionar parte de los registros de un listado (usando el

checkbox disponible en algunos de ellos), la fila completa será resaltada en naranja para facilitar su

localización posterior en caso de ser necesario. Igualmente, la fila sobre la que se encuentre el ratón

mostrará un color de fondo ligeramente más oscuro.

27 Aquí chrome se refiere al término genérico usado en el diseño de interfaces de usuario (que define la parte visible o útil de una interfaz de usuario) y no al navegador de Google.

Page 350: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Diseño e implementación

350 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Figura 5.84: Pantalla de administración con una fila seleccionada y una acción AJAX en curso

Exceptuando la creación y el borrado de entidades (usuarios, salas, simposios…), todas las acciones de

edición de datos se realizan utilizando AJAX, evitando así la recarga de la página y la necesidad de

realizar desplazamientos adicionales en los listados. Mientras están en curso, las acciones AJAX

muestran una animación en la esquina superior derecha de la pantalla, que será remplazada por un

mensaje informativo tras completarse. En función del éxito o no de dicha acción, el mensaje se

mostrará en verde (y desaparecerá en dos segundos) o rojo (y quedará fijo hasta que el usuario realice

otra acción que implique una llamada AJAX o cambie de página).

Para ayudar en el desplazamiento en los listados,

en el momento en que se realice un scroll vertical

se mostrará un enlace en la esquina inferior

derecha que lleva al inicio de la página (sin

recargarla) al hacer clic sobre él. Esto es útil, por

ejemplo, al revisar un listado de usuarios,

marcando parte de ellos, para luego solicitar

únicamente los certificados de asistencia de los

usuarios seleccionados.

Por último, cabe destacar que en el caso del listado

de usuarios, al ser el que muestra el mayor número

de atributos, parte de las columnas serán ocultadas automáticamente (y los botones serán

remplazados por un icono de menor tamaño) en el caso de que el ancho de la pantalla no sea suficiente

para mostrarl su contenido de forma clara. Esta acción puede deshacerse a través de un botón que se

mostrará a tal efecto en la parte superior de la página (provocando que se habilite también el

desplazamiento horizontal en la página).

Figura 5.85: Enlace de retorno a la parte superior de la página

Page 351: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Manuales | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 351

6 MANUALES

6.1 Manual de instalación

6.1.1 Prerrequisitos

Para la instalación de la aplicación será necesario disponer de una máquina que ejecute un sistema

operativo GNU/Linux actual y sobre el cual se esté ejecutando el servidor HTTP Apache con PHP 5.5

como módulo, y que éste no vaya a utilizarse para ejecutar ninguna otra aplicación ni servir ninguna

otra web28. Además, debe ejecutar el servidor de bases de datos MySQL de Oracle, y se debe de

disponer de un usuario en el mismo con permisos suficientes para crear una nueva base de datos,

nuevas tablas en la misma y ejecutar scripts .sql desde la sesión de terminal desde la que se ejecute la

instalación29.

Se asume que el usuario que realiza la instalación lo hace desde una terminal Bourne-Again SHell (bash)

de manera local o a través de una conexión SSH remota30. Se recomienda, aunque podría no ser

necesario, disponer de permisos para establecer el bit de ejecución del shell script utilizado para

realizar la instalación (en caso de no disponer de éstos, es posible que pueda ser ejecutado

anteponiendo el nombre del ejecutable del shell, de la forma /bin/bash script.sh).

Además, se asume que el usuario está familiarizado con el uso de las herramientas estándar de

GNU/Linux en línea de comandos y que el servidor dispone de acceso a Internet durante el proceso de

instalación (aunque esto podría no ser necesario en redes locales).

El proceso de instalación descrito en los siguientes apartados está pensado para llevarse a cabo sobre

una máquina (física o virtual) que ejecute Debian. El proceso podría variar en caso de utilizar otra

distribución Linux, aunque no deberían existir diferencias significativas.

Antes de continuar con el proceso de instalación es recomendable comprobar que la configuración del

servidor y/o de la red de la que forme parte permite realizar conexiones al servidor Apache desde el

exterior, y permite a los scripts PHP ejecutados por éste la conexión a los servidores adicionales (locales

o remotos) a utilizar (MySQL, SMTP, …). En concreto, se recomienda comprobar que, si los hubiera, los

firewalls (locales, como iptables, o cualquier otro presente en la red utilizada) y la configuración de

seguridad (en caso de utilizar módulos de seguridad como SELinux o AppArmor) permiten realizar

conexiones a servidores de correo desde el proceso del servidor web.

28 La aplicación asume que es servida desde el directorio webcmmse de la raíz pública del servidor web. Además, se crearán directorios adicionales en la raíz pública para archivos de datos y configuración, entre otros. 29 Otros permisos adicionales, como LOAD DATA INFILE, no son necesarios, ya que la instalación de la base de datos se realizará leyendo un archivo .sql desde la sesión local de usuario hacia el servidor. 30 El proceso de instalación aquí descrito no tiene en cuenta posibles riesgos de seguridad derivados del uso de una conexión remota no encriptada al servidor, como el envío de contraseñas en texto plano a través de redes públicas.

Page 352: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Manuales

352 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

6.1.2 Instalación de la aplicación

Para realizar el proceso de instalación deberá disponer de una copia del script de instalación, junto a

los subdirectorios que lo acompañan, en la máquina a utilizar como servidor y situarse en el directorio

que contiene el script install.sh como usuario root. En caso de tratarse de una máquina virtual o

remota, antes de iniciar la instalación deberá copiar a ella el instalador. Si la máquina de destino

permite conexiones SSH, normalmente podrá copiar el instalador utilizando los siguientes comandos

desde la máquina de origen:

cd directorio-del-instalador scp –r . root@maquina-destino:/directorio/destino

Figura 6.1: Copia del instalador al servidor

Como usuario root, deberá dar permisos de ejecución al script de instalación (chmod +x install.sh) y

posteriormente ejecutarlo (./install.sh). Tenga en cuenta que si realiza la instalación directamente

desde un medio extraíble, como un CD, es posible que el sistema tenga configurada la opción noexec

para el mismo y, por tanto, no permita la ejecución de programas desde él. En este caso deberá

ejecutarlo anteponiendo el nombre del ejecutable del intérprete (/bin/bash ./install.sh).

La primera fase de la instalación realizará una serie de comprobaciones en el sistema y preguntará los

parámetros de configuración a utilizar (directorio de instalación y credenciales de acceso a la base de

datos).

Page 353: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Manuales | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 353

Figura 6.2: Comprobaciones iniciales durante la instalación

En el caso de que el instalador no pueda encontrar en el sistema alguno de los componentes

necesarios, ejecute como root

apt-get install php5 php5-cli libapache2-mod-php5

apt-get install php5-mysqlnd php5-json php5-imagick php5-gd

Page 354: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Manuales

354 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

para instalar PHP junto a las extensiones necesarias, la consola de comandos de éste y el módulo de

Apache utilizado para permitir el uso de PHP, y vuelva a intentar la instalación. En caso de utilizar una

distribución Linux distinta de Debian, necesitará utilizar el comando equivalente de su gestor de

paquetes o una instalación desde el código fuente de PHP disponible en http://www.php.net 31.

Durante la instalación se le pedirá que proporcione el directorio de destino. El valor por defecto,

/var/www, será el correcto para la mayor parte de instalaciones en equipos que no vayan a ser

utilizados como servidor de otras aplicaciones web adiciones. Si no es el caso, tenga en cuenta que se

crearán 5 subdirectorios (“webcmmse”, “conf”, “data”, “private” y “scripts”) en la ruta que indique32.

Figura 6.3: Copia de los archivos de la aplicación

Tras la copia de archivos, el programa de instalación le solicitará los parámetros de conexión a la base

de datos (host, usuario, contraseña y base de datos a crear). La aplicación utilizara los parámetros que

indique33 para realizar una conexión estándar34 al servidor MySQL y crear una nueva base de datos con

el nombre que indique (si no existiese previamente) y las tablas necesarias junto a un usuario

administrador por defecto. Tenga en cuenta que la contraseña no será enmascarada (y será visible en

pantalla) mientras la teclee.

Tras crear la base de datos, se crearán archivos de configuración por defecto a partir de los datos

proporcionados durante la instalación.

31 La instalación y configuración de Apache, PHP y MySQL (y sus dependencias) está fuera del alcance de este manual. 32 Si existiesen conflictos entre los archivos de la aplicación y cualquier otro preexistente, se aconseja realizar la instalación en otro directorio y configurar un host virtual en Apache para la aplicación. 33 Utilizar “localhost” como dirección del servidor MySQL puede provocar que se intente conectar al servidor utilizando sockets UNIX. En caso de ser necesario, generalmente podrá forzar el uso de conexiones TCP utilizando “127.0.0.1” como dirección del servidor. 34 Utilizando los métodos que PHP dispone a tal efecto. La aplicación asume que la conexión al servidor MySQL es segura y, por tanto, no dispone de métodos de configuración más avanzados, como el uso explícito de sockets UNIX o la encriptación de la conexión por medio de SSL.

Page 355: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Manuales | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 355

Figura 6.4: Finalización de la instalación

Una vez finalizada la instalación, la aplicación será accesible en el subdirectorio webcmmse del servidor

web. En caso de haber realizado la instalación en el directorio raíz público del servidor, podrá acceder

a ella en http://<ip del servidor>/webcmmse/index.php

Figura 6.5: Página de inicio de la aplicación recién instalada

Page 356: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Manuales

356 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

6.1.3 Consideraciones de seguridad

Tenga en cuenta que la aplicación instalada mediante el procedimiento del apartado anterior tendrá

asignados los permisos de acceso a los archivos por defecto, lo cual puede impedir que el servidor web

acceda a ellos total o parcialmente. Se aconseja tomar las siguientes precauciones:

- Dar acceso de solo lectura y entrada en los directorios webcmmse, conf y data para el usuario

bajo el cual se ejecuta el servidor web.

- Mantener el acceso completo (lectura y escritura, además del permiso de entrada (x)) a los

directorios webcmmse/facturas y webcmmse/papers para el usuario bajo el cual se ejecuta el

servidor web35.

- Impedir que el servidor web sirva archivos de los directorios conf, data, private y scripts, bien

creando archivos .htaccess en los mismos, o bien a través de la configuración global del

servidor almacenada (normalmente) en el archivo /etc/httpd/conf/httpd.conf.

6.1.4 Configuración inicial de la aplicación

Tras la instalación inicial, que únicamente crea los archivos y la base de datos y genera la configuración

estática, será necesario realizar una serie de comprobaciones y ajustes antes de utilizar la aplicación

en un entorno de producción.

En general, las tareas de configuración deberán realizarse siguiendo los siguientes subapartados en el

orden en que son expuestos.

Rutas de archivo

La aplicación por defecto está configurada para operar desde el directorio webcmmse de la raíz del

servidor web. En caso de que esto no sea adecuado (por ejemplo, porque ha cambiado el nombre del

directorio o está sirviendo la página utilizando hosts virtuales) deberá editarse el archivo webcmmse.ini

(dentro del directorio conf) para remplazar todas las referencias a webcmmse en las rutas relativas de

la sección “web” por el nombre del directorio raíz utilizado.

La referencia a CMMSE_BASE_DIR de los comentarios del archivo de configuración se refiere al

directorio padre de webcmmse, es decir, el indicado como directorio de destino durante la instalación.

Conversión de errores PHP en excepciones

La aplicación, por defecto, está configurada para convertir en excepciones todos los errores que se

produzcan durante su ejecución en lugar de mostrar éstos como mensajes informativos en los

contenidos generados (HTML, CSS…). Esto permite capturar los errores y finalizar mostrando un

mensaje de “Error interno” al usuario (junto a un encabezado HTTP 500 de Error Interno del Servidor)

35 En caso de no disponer de permiso de escritura en estos directorios, la aplicación informará de ello en la página de configuración general de la interfaz de administración.

Page 357: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Manuales | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 357

en lugar del mensaje de error generado por PHP, que puede representar un riesgo de seguridad al

contener, generalmente, el nombre de archivo y línea en la que se produce el error.

El valor por defecto debería ser el adecuado en la práctica totalidad de situaciones. Sin embargo, si se

necesita revertir el control de errores a su comportamiento por defecto se deberá cambiar el valor del

parámetro use_errorexception de webcmmse.ini a false. Si fuera necesario, se aconseja, además,

modificar la configuración del propio servidor web para que oculte los errores y no los muestre en los

contenidos generados.

Registro de depuración en disco

Inicialmente la aplicación está configurada para no registrar los mensajes de depuración de su

actividad en archivos de disco y, en su lugar, los muestra en la consola de errores del intérprete de PHP

(que para el servidor integrado de desarrollo de PHP será la salida estándar que éste tenga asociada).

Esto es apropiado para la depuración de errores durante el desarrollo; sin embargo, no es adecuado

para un entorno de producción.

Para cambiar el comportamiento del registro de errores deberá modificar la configuración del

componente log4php utilizado por la aplicación a través del archivo log4php.xml del directorio conf.

Como medida de seguridad se recomienda guardar el registro de depuración en un archivo en disco,

partiendo del archivo de ejemplo log4php-di143.xml situado en el mismo directorio y modificando la

ruta en la que se generan los archivos de registro. Tenga en cuenta que el directorio que indique aquí

no será generado automáticamente, y deberá crearlo previamente y asignar permisos de escritura en

el mismo para el usuario bajo el que se ejecute el servidor web.

Cambio de la contraseña de root por defecto

La aplicación no dispone de un método para cambiar la contraseña de administración directamente

(desde la interfaz web) por razones de seguridad. En lugar de ello, se dispone de un shell script que

deberá ejecutarse en el servidor para realizar el cambio.

Desde una sesión de consola en el servidor (local o remota), deberá situarse en el directorio de scripts

de la aplicación (/var/www/scripts si ha utilizado la ruta por defecto) y ejecutar

./set_root_password.sh. Tras ello, se utilizará el intérprete PHP-cli del servidor y la configuración de la

aplicación para solicitarle la contraseña actual de administrador y, si es correcta, la nueva contraseña.

Parámetros de la conferencia y de envío de correo

Tras la instalación y la configuración inicial de los parámetros básicos de la aplicación (incluyendo el

cambio de la contraseña de administrador), deberá configurar los parámetros de la conferencia y de

envío de correos electrónicos. Éstos últimos son usados para el envío de notificaciones, entre las cuales

se encuentran avisos a los administradores sobre papers enviados y pagos realizados, y mensajes

informativos para los ponentes sobre el estado de envío de sus papers. Tenga en cuenta que estos

parámetros también podrán ser modificados de nuevo más adelante si fuese necesario, y que los

cambios en los mismos tienen efecto de forma inmediata.

Page 358: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Manuales

358 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Figura 6.6: Procedimiento de cambio de la contraseña de administrador

Tras iniciar sesión en la aplicación como administrador, deberá acceder a la sección de configuración

utilizando el enlace a la misma de la barra superior. Se mostrará una nueva página en la que podrá

habilitar el acceso público y el envío de papers, y establecer los números de factura.

Además, se le mostrará la ruta de los directorios que usa la aplicación para almacenar los papers y

justificantes de pago enviados por los usuarios, y se le informará en caso de que el la aplicación haya

detectado la imposibilidad de utilizar los citados directorios debido a problemas con los permisos del

sistema de archivos o limitaciones asociadas al usuario o al proceso del servidor web (lo cual impedirá

el envío de los mismos desde las páginas públicas).

Page 359: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Manuales | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 359

El primer grupo de parámetros, relativos a la información de la conferencia, tendrá asignados

parámetros por defecto tras la instalación, y deberá modificarlos para reflejar los datos reales de la

conferencia y la edición de la misma a administrar por la aplicación. Este grupo incluye datos sobre las

fechas de celebración, lugar, URL de la página informativa de la presente edición, identificadores para

las publicaciones, identificador fiscal (para las facturas generadas), cuota de inscripción y parámetros

asociados al diseño de las etiquetas generadas. Todos los parámetros podrán ser modificados

posteriormente; sin embargo, se recomienda completar este grupo de parámetros (o revisar que los

valores por defecto son correctos) como paso inicial de configuración tras la instalación.

Figura 6.7: Configuración de acceso y números de factura en un entorno de producción

Cada grupo de parámetros debe configurarse de forma independiente. Cuando termine de completar

el formulario de Información de la conferencia utilice el botón “Guardar” situado al final del mismo

para escribir los cambios en la base de datos.

Page 360: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Manuales

360 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Figura 6.8: Configuración de la información de la edición actual de la conferencia

A continuación deberá configurar los parámetros de envío de correos: servidor SMTP a utilizar, tipo de

encriptación y datos de autentificación del mismo (si fuesen necesarios), y la dirección y nombre del

remitente de los correos enviados automáticamente por el sistema. Cuando termine de definir la

configuración de la conexión deberá guardarla utilizando el botón “Guardar” situado al final de los

campos disponibles a tal efecto.

También podrá definir una lista de direcciones de correo a las cuales enviar las notificaciones

automáticas generadas por la aplicación. Podrá dejar la lista en blanco (lo cual deshabilita las

notificaciones) o especificar una o varias direcciones a las que enviarlas separadas por comas. Como

en los casos anteriores, tras modificar la lista de destinatarios de las notificaciones utilice el botón

“Guardar” situado bajo ésta para guardar los cambios introducidos.

Page 361: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Manuales | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 361

Figura 6.9: Configuración del servidor SMTP a utilizar en un entorno de producción

Por último, se recomienda que verifique que el envío de correo funciona correctamente, comprobando

que no hay problemas en los parámetros de conexión y autentificación SMTP o restricciones de otro

tipo en la red del servidor que impidan que éste envíe las notificaciones. Para ello, introduzca una

dirección de correo a la cual usted tenga acceso en el cuadro de texto situado junto a la etiqueta

“Enviar e-mail de prueba a” (al final de la página) y pulse sobre el botón “Comprobar funcionamiento”.

Figura 6.10: Formulario para el envío de un correo de prueba

Este proceso puede demorarse unos segundos. Si todo es correcto deberá ser redirigido a una página

con información de depuración (los mensajes intercambiados entre la aplicación y el servidor SMTP),

y llegará un correo electrónico de prueba breve a la dirección que haya indicado. En caso de haberse

producido errores, podrá verlos en la salida de depuración mostrada.

En algunos casos la salida de depuración podría mostrarse en blanco y el correo electrónico no llegará

a enviarse. Generalmente esto es síntoma de problemas a nivel de red (por ejemplo, restricciones de

firewalls software, como iptables, o de la red local en la que se encuentra el servidor).

Una vez que haya configurado todos los parámetros de la pestaña de configuración se recomienda que

siga los pasos del manual de administración para introducir la información de los simposios que

Page 362: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Manuales

362 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

tendrán lugar durante el congreso, las salas de las que se dispondrá y las excursiones que se llevarán

a cabo.

Figura 6.11: Salida de depuración mostrada tras el envío de un correo de prueba

Figura 6.12: Correo electrónico de prueba recibido en la dirección proporcionada

Page 363: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Manuales | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 363

6.2 Manual de usuario

6.2.1 Registro, login y gestión de cuenta de usuario

Registro de nuevo usuario

Para registrarse en la conferencia, deberá acceder al formulario para introducir sus datos a través del

botón “Register now” disponible en la página de inicio de la aplicación. Se le solicitarán sus datos

personales (incluyendo nombre, dirección y teléfono), una dirección de correo electrónico y una

contraseña.

Figura 6.13: Formulario de registro de nuevo usuario

Tenga en cuenta que la dirección de correo electrónico introducida no podrá ser modificada

posteriormente, y será usada tanto a modo de nombre de usuario para acceder a la aplicación como

para el envío de notificaciones automáticas y de los organizadores de la conferencia.

Page 364: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Manuales

364 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Tras completar y enviar el formulario, si los datos introducidos son correctos, se le redirigirá a la página

de inicio de sesión. Además, se le enviará un correo electrónico a la dirección proporcionada

confirmando su registro.

Figura 6.14: Notificación enviada confirmando el registro

Page 365: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Manuales | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 365

Login de usuario

Para acceder a la aplicación deberá acceder al formulario de inicio de sesión a través del botón “Login”

disponible en la página de inicio.

Figura 6.15: Formulario de inicio de sesión

En el formulario deberá introducir la dirección de correo electrónico utilizada durante el registro y su

contraseña, y hacer clic sobre el botón “Login”. Si los datos son correctos se le redirigirá a la página

principal de la interfaz de ponente, donde se le mostrará su información de registro.

Page 366: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Manuales

366 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Figura 6.16: Página principal de la interfaz de ponente

En cualquier momento podrá finalizar su sesión en la aplicación utilizando el enlace “Log out” situado

a la derecha del menú superior. Además, dependiendo de la configuración del servidor, es posible que

su sesión sea finalizada automáticamente por la aplicación tras un periodo prolongado de inactividad

en la misma.

Modificar datos personales

Una vez identificado en la aplicación con su cuenta de ponente, podrá modificar sus datos personales

a través del enlace etiquetado con su dirección de correo electrónico disponible en la parte superior

derecha de la aplicación. Este enlace está disponible en todas las páginas mientras se encuentre

identificado en la aplicación36.

Una vez en la página de edición de perfil, se le mostrará un formulario done podrá modificar su

nombre, institución asociada, dirección y teléfono. Tenga en cuenta que la dirección e institución

asociada introducidos aquí pueden ser distintos de los utilizados para emitir la factura para el pago de

los gastos de inscripción, ya que éstos son tratados de forma independiente.

Tras modificar sus datos, haga clic en el botón “Save” para guardarlos y volver a la página principal de

la interfaz de ponente. Si, por el contrario, decide que no quiere mantener los cambios realizados

36 La funcionalidad del botón “Change data” de la página principal de la interfaz de ponente es equivalente a la del enlace mencionado, y permite acceder al mismo formulario.

Page 367: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Manuales | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 367

puede utilizar el botón “Return” para volver a la página principal de la interfaz de ponente sin

guardarlos.

Figura 6.17: Formulario de edición de datos personales

Modificar contraseña

Para modificar su contraseña deberá acceder a la página principal de la aplicación (utilizando el enlace

etiquetado como “Home” de la esquina superior izquierda) y hacer clic en el botón “Change Password”.

Se le mostrará una nueva página con tres campos de texto en los que deberá introducir su contraseña

actual y la nueva contraseña. Las contraseñas se mostrarán enmascaradas mientras las teclee. Tenga

en cuenta, además, que la nueva contraseña deberá introducirse dos veces para evitar posibles

errores.

Figura 6.18: Formulario de cambio de contraseña

Page 368: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Manuales

368 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

La contraseña de usuario debe tener una longitud mínima de 6 caracteres, y en caso de que la nueva

contraseña introducida no cumpla este requisito se le informará de ello tras introducir su valor (antes

de su envío). En caso de que introduzca incorrectamente la contraseña anterior, se le volverá a mostrar

el formulario de edición y su contraseña no será modificada. De manera similar, no se realizarán

cambios si la nueva contraseña y su confirmación no coinciden.

Figura 6.19: Errores mostrados durante la edición del formulario de cambio de contraseña

Figura 6.20: Error mostrado al no proporcionar correctamente la contraseña actual

Figura 6.21: Error mostrado cuando la nueva contraseña y su confirmación no coinciden

Tras introducir los datos y hacer clic en el botón “Save”, si los datos son correctos, el sistema actualizará

la contraseña asociada a su cuenta de usuario y será redirigido a la página principal de la interfaz de

ponente. En caso de que decida no cambiar su contraseña mientras está en el formulario, puede volver

a la página principal de la interfaz de ponente utilizando el botón “Return”. Si utiliza cualquier otro

enlace de la interfaz mientras se encuentra en esta página su contraseña tampoco será modificada.

Page 369: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Manuales | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 369

Restablecer contraseña perdida

Si ha olvidado su contraseña, podrá restablecerla a través del enlace “Lost password?” disponible en

el formulario de login de usuario. En la siguiente página se le pedirá que introduzca la dirección de

correo electrónico asociada a su cuenta. Una vez la haya introducido, haga clic en el botón “Send new

password”; si la dirección proporcionada es correcta, se le enviará su nueva contraseña por correo

electrónico y será llevado al formulario de login.

Figura 6.22: Formulario para restablecer la contraseña de usuario

Deberá haber recibido un correo electrónico en la dirección asociada a su cuenta que contendrá su

nueva contraseña, que podrá utilizar en el formulario de login. Una vez identificado en la aplicación,

podrá cambiar su contraseña por otra que le sea más fácil de recordar siguiendo los pasos del apartado

anterior.

Figura 6.23: Correo electrónico con la nueva contraseña enviado tras restablecer la misma

Page 370: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Manuales

370 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

6.2.2 Envío y gestión de papers

Envío de un nuevo paper

Para enviar un nuevo paper deberá acceder a la pestaña “Paper” identificado con su cuenta de

ponente. En caso de que el plazo de envío esté abierto, se le mostrará un formulario donde podrá

introducir los datos del paper y seleccionar el archivo a enviar.

Figura 6.24: Formulario para el envío de un nuevo paper

En caso de que el plazo de envío se encuentre cerrado (bien por no haberse iniciado aún o por haber

terminado), se le mostrará un mensaje informándole de ello en lugar del formulario anterior.

Introduzca los datos del formulario y seleccione el archivo que contiene el artículo a presentar en la

conferencia. Deberá seleccionar una de las sesiones disponibles en “Special Session &

Minisymposiums”, introducir el título del artículo, la lista de autores37 (hasta 9) y marcar el checkbox

correspondiente en caso de que haya preparado un poster asociado al artículo.

37 Su cuenta quedará asociada al paper como corresponding author, el cual no es necesariamente parte de los autores del mismo. Desde el punto de vista de la aplicación esto significa que su cuenta de usuario será la única habilitada para su gestión, incluyendo el envío de nuevas versiones. Además, su cuenta será asociada al mismo a efectos contables (su presentación estará sujeta a la confirmación del pago de la cuota de inscripción desde su cuenta de usuario).

Page 371: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Manuales | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 371

Figura 6.25: Mensaje mostrado en la página de envío de papers cuando el plazo está cerrado

El archivo enviado en este paso, el título y la lista de autores no podrán ser modificados por usted

posteriormente, aunque sí podrá enviar un nuevo archivo asociado al artículo.

Figura 6.26: Formulario cumplimentado para el envío de un nuevo paper

Tras terminar de cumplimentar el formulario, haga clic en el botón “Submit” para enviar los datos del

artículo. Tenga en cuenta que el envío del artículo no garantiza su presentación en el congreso; tras el

envío los administradores iniciarán un proceso de revisión del mismo. Tanto al iniciarse la revisión de

Page 372: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Manuales

372 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

un artículo como en el momento en el que es aceptado para su presentación en el congreso se le

enviará un mensaje por correo electrónico informándole de ello.

Además, para evitar que dos o más ponentes envíen un mismo paper (por ejemplo, un paper del que

varios usuarios son coautores), el sistema no permitirá el envío de un paper cuyo título coincida con el

de algún otro paper enviado previamente por cualquier usuario.

En caso de que desee enviar varios archivos en el envío inicial o en el envío de la versión definitiva,

podrá hacerlo enviando un archivo comprimido con tantos archivos como desee (siempre que el

tamaño del archivo enviado no supere los límites establecidos en el servidor web).

Cuando el envío se complete, será llevado nuevamente a la página de envío de papers, la cual ahora

mostrará el paper recién enviado en la parte superior. Los papers mostrados en la parte superior

permiten acceder a una página para gestionar los mismos y ver su estado; la funcionalidad del

formulario inferior seguirá estando asociada al envío de papers nuevos.

Figura 6.27: Formulario de envío de un nuevo paper listando un paper enviado previamente

Page 373: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Manuales | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 373

Información y borrado de papers enviados

Desde la sección de papers, haciendo clic sobre el icono situado sobre el título de alguno de los papers

enviados, podrá acceder a la página de detalle del mismo. En esta página podrá ver el título del

simposio al que está asociado, su título y un indicador sobre si el mismo fue enviado como paper con

poster asociado. Además, se le mostrará la lista de autores.

Mientras el paper no haya entrado en revisión también podrá eliminarlo utilizando el botón “Delete”.

Tenga en cuenta que esta acción no puede deshacerse, aunque podrá repetir el proceso de envío.

Figura 6.28: Página de detalle de un paper antes de entrar en proceso de revisión

Figura 6.29: Página de detalle de un paper tras entrar en proceso de revisión

Page 374: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Manuales

374 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Una vez que los organizadores hayan revisado y aceptado el artículo enviado para su presentación en

el congreso, recibirá un correo electrónico de confirmación con instrucciones e información adicional.

Además, al acceder a la página de detalle del paper enviado, se le permitirá enviar un archivo adicional

que será asociado a éste como una nueva versión38.

Figura 6.30: Correo electrónico de confirmación enviado tras la aceptación de un paper

38 Sólo se permite un archivo adicional asociado a cada paper. Típicamente esta funcionalidad es usada para enviar la versión definitiva (revisada) del paper a presentar o un archivo con el poster asociado al paper (si lo hay). En caso de necesitar enviar más de un archivo adicional, puede subirlos al servidor en un archivo comprimido, o enviarlos por correo electrónico a la dirección indicada en la notificación de aceptación del paper.

Page 375: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Manuales | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 375

Envío de nueva versión de un paper existente

Desde la página de detalle de los papers, para aquellos que ya hayan sido revisados y aceptados por

los organizadores para su presentación en el congreso, podrá enviar versiones revisadas de los mismos.

Para ello deberá incluir un nuevo archivo a enviar en el campo “New versión of paper”. Tenga en cuenta

que solo se mantendrá en el servidor los archivos asociados al envío original y al último envío del paper.

Figura 6.31: Formulario de envío de nuevas versiones de papers

Tras el nuevo envío, volverá a ser llevado a la página de detalle del paper, en la cual ahora aparecerá

listado el nombre de archivo de la última versión enviada.

Figura 6.32: Formulario de envío de nuevas versiones de papers tras el envío de una revisión

Tenga en cuenta, además, que no podrá enviar nuevas versiones de los papers una vez que el plazo de

envío esté cerrado: en este caso la aplicación le informará de ello mostrando la misma pantalla que en

el caso de envío de nuevo paper cuando el plazo está cerrado.

Page 376: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Manuales

376 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

6.2.3 Gestión de pagos y datos fiscales

Tras registrarse en el congreso, deberá acreditar el pago de la cuota de inscripción a través de la

aplicación. Para realizar el pago deberá consultar la cantidad a ingresar y el número de cuenta en la

página de información general del congreso39, y obtener un archivo electrónico que acredite el pago a

través de la página web de su banco, solicitándolo en una sucursal física o escaneando el comprobante

en papel facilitado por su entidad bancaria.

La aplicación contempla dos modalidades de pago, dependiendo de si desea que se genere una factura

a pagar por una institución (por ejemplo, si su compañía o universidad se hará cargo del pago) o si solo

desea un justificante que acredite el pago. En el primer caso deberá proporcionar información

adicional para la emisión de una factura numerada (nombre de la institución que realizará el pago y

CIF asociado o número de identificación tributaria equivalente en su país de origen); en el segundo

caso no necesitará proporcionar información adicional y se le proporcionará una prueba de pago no

numerada. Los datos introducidos permitirán a los organizadores generar la documentación que

acredita el pago, la cual se le proporcionará físicamente y/o por correo electrónico según la

organización estime oportuno.

Una vez identificado en la aplicación, podrá acceder a la página de gestión de pagos a través de la

pestaña ”Payments / Invoices” del menú principal de la interfaz de ponente.

Figura 6.33: Página principal de la interfaz de gestión de pagos

39 http://gsii.der.usal.es/cmmse2014/ para la edición de 2014

Page 377: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Manuales | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 377

Registro y modificación de datos fiscales

Al hacer clic en el enlace “Payments / Invoices” del menú superior de la interfaz de ponente accederá

a la página de gestión de pagos. Una vez en ella, si desea que la organización emita una factura

numerada asociada al pago de su cuota de inscripción, deberá hacer clic sobre el botón etiquetado

“Do you need invoice? Click here”, tras lo cual se le mostrará un formulario donde introducir los datos

de la factura a emitir.

Los datos que introduzca en esta página serán asociados a su cuenta de usuario, y no tienen que

coincidir necesariamente con los datos utilizados durante el proceso de registro. Por ejemplo, la

institución que pagará la factura puede diferir de la utilizada durante el proceso de registro de su

cuenta de usuario.

Para la emisión de la factura deberá completar todos los campos: su nombre tal como desea que se

muestre en la factura, nombre de la institución que correrá con los gastos, su número de identificación

fiscal y su dirección postal. Si no ha introducido estos datos previamente, inicialmente se le mostrará

el formulario en blanco (y el campo nombre mostrará un valor por defecto a partir de sus datos

personales); en otro caso se mostrarán los datos proporcionados previamente y podrá modificarlos.

Figura 6.34: Página de registro y modificación de datos fiscales y envío de justificante de pago

Borrado de datos fiscales

Por defecto el sistema genera justificantes de pago simples para los gastos de inscripción. En caso de

que haya solicitado la emisión de una factura numerada (proporcionando para ello todos los datos

necesarios siguiendo los pasos del apartado anterior) y más adelante prefiera un justificante de pago

no asociado a una institución en su lugar, podrá acceder a la pantalla de gestión de pagos y hacer clic

en el botón “Delete invoice info, don’t need it”. El sistema borrará los datos adicionales guardados y

la organización le proporcionará un justificante de pago simple en su lugar.

Page 378: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Manuales

378 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Envío de justificante de pago

Desde la pantalla de gestión de pagos, una vez haya efectuado el ingreso de la cuota de inscripción

siguiendo los pasos de la página web de la conferencia, deberá enviar un justificante de pago en

formato digital. Para ello, deberá seleccionar el archivo que contenga el justificante a través del campo

“Proof of Payment” y hacer clic en el botón “Save”. Solo se permite realizar este paso mientras el pago

no se haya confirmado.

Figura 6.35: Pantalla para el envío del justificante de pago antes de su envío

Tras el envío, la pantalla anterior cambiará mostrando un botón que le permitirá visualizar el archivo

enviado.

Figura 6.36: Pantalla para el envío del justificante de pago tras su envio

En caso de que sea necesario, podrá enviar un nuevo justificante siguiendo el procedimiento anterior

tantas veces como desee (por ejemplo, en caso de que se equivoque al seleccionar el archivo a enviar)

mientras su pago de la cuota de inscripción no haya sido confirmado por parte de los organizadores.

Una vez que su pago se confirme, los datos de pago introducidos no podrán ser modificados.

Page 379: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Manuales | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 379

Proceso de confirmación del pago

Tras el envío inicial del justificante, podrá modificar los datos del mismo (en caso de solicitar factura:

nombre, CIF e institución que correrá con los gastos) o enviar un nuevo justificante de pago hasta que

los organizadores confirmen manualmente el pago de su cuota de inscripción.

En caso de no haber solicitado factura numerada, tras la confirmación del pago no podrá enviar un

nuevo justificante. Sin embargo, podrá proporcionar la información adicional necesaria para la emisión

de factura. Si lo hace, el pago necesitará pasar nuevamente por el proceso de confirmación por parte

de los organizadores, durante el cual se le asignará un número de factura.

Cuando su pago haya sido confirmado, se le informará de ello en la pantalla de gestión de pagos.

Además, en caso de haber solicitado factura, se le mostrará la información utilizada para la emisión de

la misma.

Figura 6.37: Pantalla para el envío del justificante de pago tras la confirmación del mismo

6.2.4 Acceso a los calendarios iCal

La aplicación pone a disposición de los usuarios de calendarios en formato electrónico iCal con la

programación de exposición de posters y la fecha y hora de inicio de cada simposio. Para acceder a

ellos, desde las páginas de ponente, dispondrá de dos enlaces en la parte interior junto a la etiqueta

“Download iCal”. El acceso a los calendarios no requiere registro ni login previos.

Estos calendarios pueden ser o bien descargados para luego ser abiertos con una aplicación de gestión

de calendarios, o bien importados directamente (copiando y pegando su URL) a otros servicios como

Google Calendar. Normalmente esta última opción permite, además, mantener el calendario

actualizado con los últimos cambios de horarios registrados en la aplicación y consultarlos desde

dispositivos móviles, y es el uso que se espera de los mismos por parte de los ponentes.

Page 380: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Manuales

380 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Figura 6.38: Calendario de inicio de los simposios

Figura 6.39: Calendario de exposición de posters

Figura 6.40: Calendario de exposición de posters (formato de agenda)

Page 381: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Manuales | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 381

6.3 Manual de administración

6.3.1 Acceso a la interfaz de administración y

configuración general

Acceso a la interfaz de administración

Para acceder a la interfaz de administración deberá acceder al formulario de inicio de sesión a través

del botón “Login” disponible en la página de inicio.

Figura 6.41: Formulario de inicio de sesión

Como e-mail deberá introducir “root”, y como contraseña la utilizada durante la instalación. Tras hacer

clic sobre el botón “Login”, si los datos son correctos, se le redirigirá a la interfaz de administración.

Por defecto se le mostrará la página de gestión de usuarios.

En cualquier momento podrá finalizar su sesión en la aplicación utilizando el enlace “Logout”

disponible en el submenú mostrado tras hacer clic en el enlace etiquetado con el nombre de usuario

usado para acceder a la interfaz de administración (este enlace está situado a la derecha del menú

superior). Además, dependiendo de la configuración del servidor, es posible que su sesión sea

finalizada automáticamente por la aplicación tras un periodo prolongado de inactividad en la misma.

Page 382: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Manuales

382 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Configuración general de la aplicación

A través del enlace “Configuración” disponible en el menú superior de la interfaz de administración

podrá acceder a una página para modificar los parámetros generales de la conferencia (año, fechas,

estilo de los documentos generados, numeración de las facturas…) y obtener información sobre los

directorios utilizados para guardar los archivos enviados por los usuarios.

Para obtener información detallada sobre el uso y modificación de estos parámetros y la información

mostrada en esta página, refiérase al apartado “Configuración de parámetros y de envío de correos”

del Manual de instalación.

Además de los parámetros anteriores, dispondrá de botones para habilitar o deshabilitar el acceso

público (es decir, el registro y la identificación con cuentas de ponente) y para habilitar o deshabilitar

el plazo de envío de papers:

- Deshabilitar el acceso público provoca que los ponentes vean el mensaje “Public access is

closed” al intentar hacer login (tras enviar sus credenciales), lo cual impide el uso completo de

la aplicación para todos los usuarios a excepción de los administradores.

- Deshabilitar el envío de papers hace que los ponentes previamente identificados vean el

mensaje “Submission closed” en la pestaña de gestión de papers, lo cual impide únicamente

el envío de nuevos papers y la modificación de los existentes por parte de los ponentes.

6.3.2 Gestión de salas

La aplicación permite registrar las salas que estarán disponibles durante la celebración del congreso.

Para ello deberá acceder a la opción “Salas” disponible en el menú superior de la interfaz de

administración. Las salas introducidas aquí podrán ser asignadas más adelante a la exposición de

papers de tipo poster.

En esta página se le mostrará un listado con el nombre de las salas actualmente registradas junto al

número de posters asignados a las mismas y un botón que permite su borrado. Además, dispondrá de

un formulario en la parte superior para la creación de nuevas salas.

Page 383: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Manuales | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 383

Figura 6.42: Interfaz de gestión de salas

Creación de nueva sala

Para registrar una nueva sala, desde la interfaz de gestión de salas, deberá introducir su nombre en el

campo de texto disponible en la parte superior de la página y hacer clic en el botón “Add new room”.

Tras ello se recargará el listado de salas, mostrando la nueva sala en el mismo.

Figura 6.43: Formulario de creación de una nueva sala

Edición de sala

Desde la interfaz de gestión de salas podrá modificar el nombre de las salas existentes. Para ello deberá

hacer clic en el botón “Edit” disponible a la derecha de los nombres de éstas, tras lo cual el nombre de

la sala seleccionada será remplazado por un cuadro de texto. Una vez introducido el nuevo nombre

podrá guardarlo permanentemente utilizando el botón verde, tras lo cual se le mostrará el listado de

salas actualizado.

Page 384: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Manuales

384 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Figura 6.44: Formulario de modificación de nombre de sala

También podrá cancelar la edición del nombre de la sala haciendo clic en el botón rojo marcado con

un aspa.

Borrado de sala

Para borrar una sala existente, desde el listado de salas, deberá utilizar el botón etiquetado como

“Delete” disponible en la última columna para la sala que desee eliminar. Tenga en cuenta que solo se

permite el borrado de salas que no estén asignadas a ningún poster40. La aplicación no le pedirá

confirmación para el borrado, pues podrá deshacerse introduciendo una nueva sala con el nombre de

la sala borrada. Tras realizar el borrado se recargará la página, mostrando el listado sin la sala

eliminada.

6.3.3 Gestión de simposios

Antes de habilitar el acceso público a la página, se recomienda definir los simposios en los que se

organizará el congreso. Durante el envío de los papers, los usuarios seleccionarán el simposio que

crean más adecuado para su presentación. Es recomendable, además, incluir un simposio genérico

para los envíos que no encajen en ninguna de las categorías predefinidas.

Para introducir los datos de los simposios deberá acceder a la opción “Conferencias” disponible en el

menú superior de la interfaz de administración. Los simposios introducidos aquí serán los que serán

mostrados a los usuarios durante el envío de nuevos papers. Además, las fechas de inicio que se

introduzcan aquí serán usadas en los calendarios iCal disponibles de forma pública para los ponentes.

En esta página se le mostrará un listado con el nombre de los simposios definidos actualmente junto

a su fecha y hora de inicio previstas, además de botones para la edición de sus atributos y el borrado

de aquellos que no tengan papers asignados. Además, dispondrá de un formulario en la parte superior

de la página para definir nuevos simposios.

40 En caso de que no esté permitido el borrado de una sala, el botón de borrado correspondiente a la misma se mostrará en color gris para indicar que la acción está deshabilitada.

Page 385: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Manuales | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 385

Figura 6.45: Interfaz de gestión de simposios

Creación de un nuevo simposio

Para registrar un nuevo simposio, desde la interfaz de gestión de simposios, deberá introducir su

nombre en el campo de texto disponible en la parte superior de la página y hacer clic en el botón “Add

new conference”. Tras ello, se recargará el listado de simposios, mostrando el simposio recién creado

en el mismo.

Figura 6.46: Formulario de creación de un nuevo simposio

Edición de simposio

Desde la interfaz de gestión de simposios podrá modificar el nombre de los simposios existentes. Para

ello deberá hacer clic en el botón “Edit” disponible a la derecha de los nombres de éstos, tras lo cual

el nombre del simposio seleccionado será remplazado por un cuadro de texto. Una vez introducido el

nuevo nombre podrá guardarlo permanentemente utilizando el botón verde, tras lo cual se le mostrará

el listado de simposios actualizado.

Figura 6.47: Edición del nombre de un simposio

Page 386: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Manuales

386 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Además, podrá modificar la fecha y hora de inicio de un simposio haciendo clic en el botón “Edit”

situado a la derecha de la fecha y hora configurada actualmente. Tras ello, se le mostrará un calendario

donde podrá seleccionar la nueva fecha41 . Igualmente, seleccionando la hora programada podrá

cambiarla, introduciendo un nuevo valor con el teclado o usando las flechas disponibles a la derecha

del valor actual. Tras introducir la nueva fecha y hora podrá guardarla permanentemente utilizando el

botón verde, tras lo cual se le mostrará el listado de simposios actualizado.

Figura 6.48: Edición de la fecha de inicio de un simposio

Borrado de simposios

Para borrar simposio, desde el listado de simposios, deberá utilizar el botón etiquetado como “Delete”

disponible en la última columna para el simposio que desee eliminar. Tenga en cuenta que solo se

permite el borrado de simposios que no tengan papers asignados 42 . La aplicación no le pedirá

confirmación para el borrado, pues podrá deshacerse introduciendo un nuevo simposio con el nombre

del simposio borrado. Tras realizar el borrado se recargará la página, mostrando el listado de simposios

actualizado.

6.3.4 Gestión de excursiones

La aplicación permite a los administradores un registro y gestión básico de todas aquellas actividades

adicionales que no se corresponden con el ámbito estándar de la conferencia, como visitas organizadas

o la asistencia a eventos lúdicos o culturales durante los días en los que se celebra, y que no están

relacionadas necesariamente con la presentación de papers o la exposición de resultados de estudios

académicos. En adelante, nos referiremos a las distintas actividades adicionales gestionadas desde

esta sección bajo el término genérico Excursiones.

Para acceder a la página de gestión de excursiones deberá acceder a la opción “Excursiones” disponible

en el menú superior de la interfaz de administración. Las actividades introducidas aquí serán utilizadas

41 Dependiendo del grado de soporte de su navegador del estándar HTML5, es posible que la edición de la fecha y hora utilizando los controles aquí descritos no esté disponible. En tal caso, deberá introducir la nueva fecha y hora a través de un cuadro de texto tradicional, respetando el formato utilizado por el valor que se muestre por defecto. En cualquier caso, el formato de la fecha y hora introducidas aquí será validado en última instancia por la aplicación que se ejecuta en el servidor web. 42 En caso de que no esté permitido el borrado de un simposio, el botón de borrado correspondiente al misma se mostrará en color gris para indicar que la acción está deshabilitada.

Page 387: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Manuales | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 387

más adelante para generar las hojas de etiquetas correspondientes. En esta página se le mostrará un

listado con el nombre de las actividades actualmente registradas junto a un botón que permite su

borrado. Además, dispondrá de un formulario en la parte superior para el registro de nuevas

excursiones programadas.

Figura 6.49: Interfaz de gestión de excursiones

Registro de una nueva excursión

Para registrar una nueva excursión, desde la página de gestión de excursiones, deberá introducir su

nombre en el campo de texto disponible en la parte superior de la página y hacer clic en el botón “Add

new trip”. Tras ello, se recargará el listado, mostrando la excursión recién creada en el mismo.

Figura 6.50: Creación de una nueva excursión

Borrado de los datos de una excursión

Para borrar una excursión, desde el listado de excursiones, deberá utilizar el botón etiquetado como

“Delete” disponible en la última columna para la excursión que desee eliminar. La aplicación no le

pedirá confirmación para el borrado, pues podrá deshacerse introduciendo una nueva excursión con

el nombre de la excursión borrada. Tras realizar el borrado se recargará la página, mostrando el listado

de excursiones actualizado.

Page 388: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Manuales

388 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

6.3.5 Gestión de usuarios

Para gestionar los ponentes registrados deberá acceder a la opción “Usuarios” disponible en el menú

superior de la interfaz de administración. Desde esta pantalla podrá ver una lista con todos los

ponentes registrados, borrar ponentes de forma individual, generar los certificados de asistencia

asociados todos o parte de ellos y descargar distintos tipos de hojas de etiquetas.

En esta página se le mostrará un listado con el nombre de todos los ponentes registrados hasta el

momento, su institución asociada, ciudad, estado y país, la dirección de correo electrónico usada para

el registro, su dirección postal y su teléfono. Además, en la parte superior de la página dispondrá de

enlaces para la descarga de certificados de asistencia, de hojas de etiquetas y del propio listado de

usuarios.

Figura 6.51: Interfaz de gestión de usuarios

En función del ancho de pantalla del dispositivo usado para acceder al panel de administración, es

posible que parte de las columnas de datos sean ocultadas automáticamente, o que los botones de

descarga de certificado y borrado para los usuarios individuales sean remplazados por versiones con

un ancho menor. En caso de ser necesario, este efecto podrá ser revertido utilizando el botón

“Deshacer” disponible junto al mensaje informativo mostrado en la parte superior del listado.

Figura 6.52: Listado de usuarios adaptado a un ancho de pantalla menor

En la parte superior derecha de la página dispondrá de un botón con una lista desplegable para

descargar el listado de usuarios completo en un archivo independiente en formato Excel o HTML.

Page 389: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Manuales | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 389

Descarga de certificados de asistencia

La aplicación permite la descarga de certificados que acrediten la asistencia al congreso a nombre de

los ponentes registrados. Para ello deberá acceder a su página de gestión utilizando el enlace

correspondiente de la parte superior de la página.

El archivo PDF generado contendrá una página por cada certificado solicitado. La descarga de

certificados de asistencia puede realizarse de cuatro formas diferentes:

- Mediante enlaces situados en la segunda columna del listado, disponible únicamente para

aquellos usuarios que hayan pagado la cuota de inscripción, si dicho pago ha sido confirmado.

Estos enlaces tienen la apariencia de un botón azul con la etiqueta “Certificado”.

- Seleccionando un subconjunto de usuarios, utilizando el checkbox disponible en la primera

columna para aquellos que cumplan los requisitos del apartado anterior y haciendo clic en el

botón azul “Certificados asistencia seleccionados” situado en la parte superior de la página.

- Solicitando todos los certificados de los usuarios que cumplan los requisitos del primer caso,

haciendo clic en el botón blanco “Certificados de asistencia han pagado” situado en la parte

superior de la página.

- Solicitando certificados para todos los usuarios (sin importar si el pago ha sido confirmado),

haciendo clic en el botón “Certificados asistencia todos” situado en la parte superior de la

página.

En el caso de seleccionar un subconjunto de ponentes, las filas correspondientes a los ponentes

seleccionados serán resaltadas en el momento en que marque el checkbox correspondiente.

Figura 6.53: Listado de usuarios con usuarios seleccionados

Page 390: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Manuales

390 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Figura 6.54: Certificado de asistencia

Page 391: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Manuales | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 391

Descarga de etiquetas

La aplicación permite la descarga de hojas de etiquetas de diferentes tipos con el propósito de

identificar a los asistentes y a los organizadores durante el congreso. Para ello deberá acceder a la

página de gestión de usuarios utilizando el enlace correspondiente de la parte superior de la página.

La aplicación proporciona los siguientes tipos de etiquetas:

- Etiquetas identificativas para los asistentes al congreso.

Se generará un documento con varias páginas que contendrá una etiqueta por cada

ponente registrado. Las etiquetas indicarán el nombre del ponente, su institución

asociada y su país de procedencia. El color de fondo de estas etiquetas será azul.

- Etiquetas para la asistencia a la Cena de Gala celebrada durante el congreso.

Se generará un documento con una única página con varias etiquetas no nominativas

con la leyenda “Dinner Gala”. El color de fondo de estas etiquetas será verde.

- Etiquetas para la asistencia a las excursiones y actividades adicionales.

Se generará un documento con una página por cada actividad programada. Cada

página contendrá etiquetas para la asistencia a una única actividad (mostrando el

título de la misma). El color de estas etiquetas será morado.

- Etiquetas identificativas para los miembros de la organización.

Se generará un documento con una única página con varias etiquetas no nominativas

con la leyenda “Organization”. El color de estas etiquetas será rojo.

- Etiquetas de restaurante.

Se generará un documento con una única página con varias etiquetas no nominativas

con la leyenda “Restaurant Ticket”. El color de estas etiquetas será amarillo.

- Etiquetas en blanco.

Se generará un documento con una única página con varias etiquetas (similares a las

etiquetas de asistencia) con un recuadro en blanco. Estas etiquetas están pensadas

para ser usadas para cualquier otro propósito no contemplado durante el desarrollo

de la aplicación.

Para descargar los archivos PDF con las etiquetas, deberá acceder a la página de gestión de usuarios y

utilizar los botones situados en la parte superior de la misma. El tamaño y la orientación de las

etiquetas generadas variará en función de la configuración de la aplicación. Para obtener información

detallada sobre la modificación de estos parámetros, refiérase al apartado “Configuración de

parámetros y de envío de correos” del Manual de instalación.

Figura 6.55: Botones de descarga de etiquetas

Page 392: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Manuales

392 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Figura 6.56: Hoja de etiquetas de asistencia (horizontales; 15 x 7,5 cm)

Page 393: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Manuales | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 393

Figura 6.57: Hoja de etiquetas de asistencia (horizontales; 9,2 x 6,25 cm)

Page 394: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Manuales

394 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Figura 6.58: Hojas de etiquetas de asistencia (verticales)

Page 395: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Manuales | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 395

Figura 6.59: Hoja de etiquetas de asistencia a la cena de gala (horizontales; 15 x 7,5 cm)

Page 396: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Manuales

396 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Figura 6.60: Hoja de etiquetas de asistencia a la cena de gala (horizontales; 9,2 x 6,25 cm)

Page 397: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Manuales | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 397

Figura 6.61: Hoja de etiquetas de asistencia a excursiones (horizontales; 15 x 7,5 cm)

Page 398: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Manuales

398 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Figura 6.62: Hoja de etiquetas de asistencia a excursiones (horizontales; 9,2 x 6,25 cm)

Page 399: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Manuales | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 399

Figura 6.63: Hoja de etiquetas identificativas para los organizadores (horizontales; 15 x 7,5 cm)

Page 400: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Manuales

400 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Figura 6.64: Hoja de etiquetas identificativas para los organizadores (horizontales; 9,2 x 6,25 cm)

Page 401: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Manuales | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 401

Figura 6.65: Hoja de etiquetas de restaurante (horizontales; 15 x 7,5 cm)

Page 402: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Manuales

402 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Figura 6.66: Hoja de tickets de restaurante (horizontales; 9,2 x 6,25 cm)

Page 403: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Manuales | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 403

Figura 6.67: Hoja de etiquetas en blanco (horizontales; 15 x 7,5 cm)

Page 404: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Manuales

404 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Figura 6.68: Hoja de etiquetas en blanco (horizontales; 9,2 x 6,25 cm)

Page 405: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Manuales | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 405

Figura 6.69: Hoja de etiquetas en blanco (verticales)

Page 406: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Manuales

406 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Borrado de usuario

Para borrar un usuario, desde el listado de usuarios, deberá utilizar el botón etiquetado como “Delete”

disponible en la última columna para el usuario que desee eliminar. La aplicación le pedirá

confirmación para el borrado43. Tras realizar el borrado se recargará la página, mostrando el listado de

usuarios actualizado.

El borrado de un usuario implica la eliminación de forma permanente de todos sus datos asociados

(papers, justificantes de pago e información de facturación, incluyendo todos los archivos subidos por

el usuario al servidor). Esta acción no puede deshacerse.

Notificaciones de registro de usuario

Tras el registro de un nuevo ponente, la aplicación enviará un correo electrónico notificando la

creación del nuevo usuario a la lista de direcciones de correo configuradas en la pestaña de

Configuración general. Los mensajes de correo generados serán similares al siguiente:

Figura 6.70: Notificación de registro de nuevo usuario

6.3.6 Gestión de pagos: Facturas y justificantes

La aplicación permite gestionar el pago individual de cada ponente en función de los datos que éste

proporcione. Se distinguen dos casos: aquellos ponentes que han solicitado la emisión de una factura

numerada y aquellos que no lo han hecho.

En el primer caso, el ponente habrá indicado a nombre de quién desea que se emita la factura, qué

institución (académica, comercial…) se hará cargo del pago, una dirección postal y un número de

identificación fiscal asociado a la misma (por ejemplo, un CIF en el caso de instituciones españolas o

43 En caso de que su navegador no soporte Javascript o se encuentre deshabilitado, no se le pedirá confirmación.

Page 407: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Manuales | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 407

un Identificador de Contribuyente (Taxpayer ID) en el caso de empresas estadounidenses)44. Utilizando

estos datos, el sistema generará una factura numerada.

En el segundo caso, el ponente no habrá proporcionado los datos del apartado anterior (o, si los ha

proporcionado, se trata de datos incompletos o que han sido eliminados posteriormente por el propio

ponente). Por tanto, el sistema generará un justificante simple, asociado al nombre del ponente y

firmado por la organización del congreso, que podrá ser utilizado para acreditar que el pago de la cuota

de inscripción se ha realizado.

Por defecto, el sistema genera justificantes de pago simples. Mientras el pago de su cuota de

inscripción no haya sido confirmado, los ponentes son libres de cambiar de un tipo de documento a

otro proporcionando o borrando los datos fiscales necesarios desde las páginas de gestión de su cuenta

de usuario.

Al hacer clic en la opción “Pagos” del menú superior de la interfaz de administración se mostrará un

menú con las opciones Facturas y Justificantes. Escogiendo una u otra opción accederá al listado de

usuarios que han solicitado factura o al listado de aquellos que no lo han hecho.

Figura 6.71: Menú de acceso a las páginas de gestión de facturas y justificantes de pago

En los siguientes subapartados se indica cómo realizar las acciones que son comunes tanto para los

usuarios que solicitan factura numerada como para aquellos que solo han solicitado un justificante

simple, mientras que el resto de acciones de gestión (que dependen de la modalidad de pago) están

detalladas en los apartados específicos de Gestión de facturas y Gestión de justificantes de pago.

Modificación de cuotas de inscripción

Por defecto, los ponentes tienen asignada una cuota predeterminada (modificable desde la pestaña

de Configuración general) pero, en caso de ser necesario, la aplicación permite modificar la cuota de

inscripción a pagar de forma individual por cualquier usuario45.

Para ello, tanto para los ponentes que han solicitado factura como para los que no lo han hecho, y para

cada uno de ellos, se dispone de un cuadro de texto en la columna etiquetada como “Total a pagar”.

44 Debido a la variedad de formatos de identificadores fiscales existentes en el mundo y al carácter internacional del congreso, la aplicación no realiza ningún tipo de validación del formato del identificador proporcionado por los usuarios. 45 La modificación de las cuotas de inscripción individuales requiere que el navegador utilizado soporte realizar solicitudes HTTP en segundo plano (AJAX).

Page 408: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Manuales

408 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

En el caso de los ponentes que han solicitado factura, la modificación de la cuota de inscripción sólo

puede realizarse para aquellos cuya factura no haya sido marcada como Lista para imprimir, en cuyo

caso la fila correspondiente mostrará el valor a pagar pero no permitirá su modificación. Para los

ponentes que no han solicitado factura (y, por tanto, solo requieren un justificante de pago simple) la

modificación de su cuota de inscripción puede realizarse en cualquier momento.

Tras modificar el valor mostrado y hacer clic en el botón “Guardar” disponible a su derecha la nueva

cuota de inscripción para el usuario quedará registrada en la base de datos, y será la que se utilice

posteriormente para generar su factura o su justificante de pago.

Figura 6.72: Formulario de modificación de cuota de inscripción

Igualmente, para volver a asignar la cuota por defecto a un usuario, podrá borrar el valor mostrado

(esto es, dejar el recuadro de texto en blanco) y hacer clic en el botón “Guardar”. Tras ello, su cuota

de inscripción personalizada será borrada de la base de datos y el cuadro de texto volverá a mostrar la

cuota por defecto.

Los usuarios a los que no se ha asignado una cuota de inscripción personalizada muestran el texto

“(auto)” junto al cuadro de texto usado para modificarla.

Confirmación de pagos

Para cada usuario mostrado en los listados (tanto de facturas como de justificantes simples) se dispone,

en la columna etiquetada como “Pagado”, de un enlace indicando si el pago del usuario ha sido

confirmado (esto es, el pago ya ha sido confirmado para los usuarios en los que este enlace muestra

el texto “Yes” y viceversa). Al hacer clic en dicho enlace el pago cambiará de estado, pasando a estar

confirmado o no en función de cuál fuera su estado anterior.

Esta acción puede ser revertida en cualquier momento haciendo clic de nuevo en el enlace, con la

excepción de aquellos usuarios que han solicitado factura y ésta ha sido marcada como Lista para

imprimir. En el caso de usuarios que no han indicado los datos necesarios para emitir una factura,

podrán hacerlo aunque el pago de su cuota de inscripción haya sido confirmado, tras lo cual un

administrador deberá revisar dichos datos, asignar un número de factura y marcar su factura como

Lista para imprimir. Los usuarios que solicitan factura no pueden modificar los datos de pago una vez

que el pago ha sido confirmado (aunque sí podrán consultar los datos proporcionados).

Para facilitar la labor de los administradores, la aplicación notificará por correo electrónico a la lista de

direcciones configurada para este propósito cada vez que un usuario envíe un justificante de pago.

Page 409: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Manuales | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 409

Figura 6.73: Notificación enviada al recibir un nuevo justificante de pago

6.3.7 Gestión de facturas

Para gestionar los pagos de los usuarios que hayan solicitado la emisión de una factura numerada

deberá acceder a la opción “Facturas” disponible al hacer clic en el enlace “Pagos” disponible en el

menú superior de la interfaz de administración. Desde esta pantalla podrá acceder a la lista con los

datos básicos (nombre, dirección de correo electrónico y país) de todos los ponentes que han solicitado

factura numerada, ver los documentos que éstos han enviado para acreditar el pago, modificar la cuota

a pagar de manera individual y los números de factura, confirmar pagos y generar las facturas que

acreditan que el pago correspondiente ha sido confirmado por los organizadores. Además, dispondrá

de dos botones para asignar números de factura secuenciales de manera automática para todos los

ponentes.

La página de gestión de facturas mostrará una fila por cada ponente que haya solicitado factura. En

ellas, para los ponentes que hayan enviado previamente un documento para justificar el pago,

dispondrá de un enlace para descargar el archivo enviado (a través del botón etiquetado como

“Justificante” disponible en las filas correspondientes), además de los controles necesarios para

realizar las diferentes acciones de gestión individuales.

Figura 6.74: Interfaz de gestión de facturas

Page 410: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Manuales

410 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Descarga de facturas

En la parte superior de la página dispondrá de dos botones para descargar en un único archivo PDF las

facturas generadas por la aplicación. En función de qué usuarios se desee considerar, la aplicación

permite obtener las facturas de tres formas diferentes:

- Seleccionando un subconjunto de los usuarios que han solicitado factura, de entre aquellos

cuyo pago ha sido confirmado, utilizando el checkbox disponible para éstos en la primera

columna del listado y haciendo clic en el botón verde “Descargar facturas seleccionados”

situado en la parte superior de la página.

- Solicitando las facturas de todos los usuarios que la hayan solicitado, cumplan los requisitos

del apartado anterior y cuya factura haya sido revisada y marcada como lista para imprimir,

haciendo clic en el botón verde “Descargar facturas listas para imprimir”.

- Solicitando la factura de un único usuario cuyo pago haya sido confirmado, haciendo clic en el

botón “Factura” de la fila asociada al usuario correspondiente.

En el caso de seleccionar un subconjunto de ponentes, las filas correspondientes a los ponentes

seleccionados serán resaltadas en el momento en que marque el checkbox correspondiente.

Figura 6.75: Listado de usuarios con factura solicitada con usuarios seleccionados

Asignación de números de factura

Antes de marcar una factura como lista para imprimir, es necesario que se le asigne a ésta un número

de factura. Para ello se dispone de un cuadro de texto en la columna “Número de factura” que permite

modificarlo. Además, se dispone de dos botones en la parte superior del listado para asignar de forma

automática los números de factura para todos los ponentes que residan en España y para aquellos que

residan en el extranjero.

En el caso de la asignación automática de números de factura, se asignarán números correlativos a

partir de los datos introducidos en la pestaña de Configuración general. Los números de factura se

asignan de forma creciente en el caso de las facturas para España y de forma decreciente para el

extranjero.

Page 411: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Manuales | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 411

Figura 6.76: Factura generada por la aplicación

Page 412: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Manuales

412 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Confirmación de datos de factura

Tras revisar los datos de pago de un usuario y la asignación de un número de factura, deberá confirmar

los datos marcando el checkbox “Lista para imprimir” asociado a la misma (situado en la primera

columna). Esta acción hará que las facturas correspondientes sean incluidas en el archivo descargable

de facturas listas, y no puede ser deshecha. Además, impide que el ponente modifique los datos

relativos al pago desde la pestaña correspondiente de la interfaz pública.

Figura 6.77: Detalle de la numeración de facturas y facturas listas para imprimir

6.3.8 Gestión de justificantes de pago

Para gestionar los pagos de los usuarios que no hayan solicitado factura deberá acceder a la opción

“Justificantes” disponible al hacer clic en el enlace “Pagos” disponible en el menú superior de la interfaz

de administración. Desde esta pantalla podrá acceder a la lista con los datos básicos (nombre, dirección

de correo electrónico y país) de todos los ponentes que no han solicitado factura numerada, ver los

documentos que éstos han enviado para acreditar el pago, modificar la cuota a pagar de manera

individual, confirmar pagos y generar los certificados de pago (“justificantes”) que acreditan que el

pago correspondiente ha sido confirmado por los organizadores.

La página de gestión de justificantes mostrará una fila por cada ponente que no haya solicitado factura.

En ellas, para los ponentes que hayan enviado previamente un documento para justificar el pago,

dispondrá de un enlace para descargar el archivo enviado (a través del botón etiquetado como

“Justificante” disponible en las filas correspondientes), además de los controles necesarios para

realizar las diferentes acciones de gestión individuales.

Page 413: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Manuales | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 413

Figura 6.78: Interfaz de gestión de justificantes de pago simple

Descarga de justificantes de pago

En la parte superior de la página dispondrá de tres botones para descargar en un único archivo PDF los

certificados de pago generados por la aplicación. En función de qué usuarios se desee considerar, la

aplicación permite obtener los certificados de tres formas diferentes:

- Seleccionando un subconjunto de los usuarios que no han solicitado factura, de entre aquellos

cuyo pago ha sido confirmado, utilizando el checkbox disponible para éstos en la primera

columna del listado y haciendo clic en el botón verde “Descargar justificante seleccionados”

situado en la parte superior de la página.

- Solicitando los certificados de pago de todos los usuarios que no hayan solicitado factura y

cumplan los requisitos del apartado anterior, haciendo clic en el botón verde “Descargar

justificante todos han pagado”

- Solicitando certificados de pago para para todos los usuarios que no hayan solicitado factura

(sin importar si el pago ha sido confirmado), haciendo clic en el botón “Descargar justificante

todos”

En el caso de seleccionar un subconjunto de ponentes, las filas correspondientes a los ponentes

seleccionados serán resaltadas en el momento en que marque el checkbox correspondiente.

Page 414: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Manuales

414 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Figura 6.79: Listado de usuarios con justificantes de pago simple con usuarios seleccionados

Page 415: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Manuales | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 415

Figura 6.80: Justificante de pago generado por la aplicación

Page 416: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Manuales

416 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

6.3.9 Gestión de papers

Para gestionar los papers enviados deberá acceder a la opción “Papers” disponible en el menú superior

de la interfaz de administración. Desde esta pantalla podrá gestionar el ciclo de revisión de los papers,

gestionar posters y solicitar los certificados de presentación asociados todos o parte de los papers

registrados en el sistema. En esta página se le mostrará un listado con el título de todos los papers

enviados hasta el momento, sus fechas de envío, la dirección de correo electrónico del usuario que lo

envió y el simposio al cual está asociado. Además, en la parte superior de la página dispondrá de

enlaces para descargar certificados de presentación de ponencias y del propio listado.

Figura 6.81: Interfaz de gestión de los papers enviados

Junto a cada paper, y en función del número de archivos enviados asociados a cada uno, se mostrará

uno o dos botones etiquetados como “File 1” y “File 2” para su descarga. También dispondrá de dos

botones en la parte superior derecha para descargar el listado de papers en un archivo independiente

en formato Excel o HTML.

Page 417: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Manuales | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 417

Modificación del título de un paper

La aplicación permite a los administradores editar los títulos de los papers registrados en el sistema,

de forma que puedan corregirse errores cometidos por los usuarios durante su envío o modificarlos

por cualquier otra razón que se estime conveniente. Para ello, desde la pantalla de gestión de papers,

deberá localizar el paper que desea modificar y hacer clic sobre su título; el título del paper será

remplazado por un cuadro de texto para modificarlo.

Para guardar los cambios de deberá hacer clic sobre el botón marcado en verde situado junto al cuadro

de texto usado para editar el título.

Figura 6.82: Formulario de edición del ltítulo de paper

Los datos mostrados se actualizarán en el momento, y se mostrará un mensaje en la parte superior de

la página informando de que los cambios han sido guardados. En caso de que después de haber

iniciado la edición decida mantener el título anterior podrá utilizar el botón marcado en rojo (situado

junto al anterior)46.

Proceso de revisión y aceptación de un paper

Tras el envío de un paper por parte de los ponentes, el proceso de revisión del mismo pasa por la

notificación del envío a los administradores, la confirmación de su recepción (marcando el paper como

En proceso de revisión) y finalmente su aceptación, si procede. Una vez que un paper ha sido aceptado,

el ponente dispone de la opción de enviar nuevas versiones del paper y/o archivos adicionales

relacionados con el mismo. Algunos de los cambios en el estado del proceso de revisión implican,

además, el envío de notificaciones por correo electrónico a las direcciones de correo configuradas con

este propósito y/o al ponente que realiza el envío.

46 Si el navegador lo soporta, la modificación de los títulos se realiza utilizando solicitudes HTTP en segundo plano (AJAX), por lo que el resto de cambios que hubiese pendientes durante la misma no se perderán. En otro caso, será llevado a una nueva página para realizar la modificación.

Page 418: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Manuales

418 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Figura 6.83: Notificación enviada a los administradores tras el envío de un nuevo paper

Inmediatamente después de producirse el envío de un nuevo paper, el sistema enviará una notificación

a los administradores con los datos del mismo. Tras ello, el paper se mostrará en la lista de envíos de

la sección de Papers de la interfaz de gestión, junto a la fecha del envío, el simposio elegido por el

ponente para su presentación, la dirección de correo electrónico del ponente y una indicación según

si el paper ha sido enviado como poster o no. En caso afirmativo, además, se podrá editar la sala y la

fecha y hora de inicio y fin de la exposición del mismo.

Figura 6.84: Nuevo paper listado en la página de administración antes de entrar en revisión

Tras la recepción del paper, un administrador podrá descargarlo para proceder a su revisión haciendo

clic en el botón etiquetado como “File 1” de la entrada correspondiente de la lista de papers enviados.

Para indicar el inicio de la misma, el administrador deberá marcar el checkbox “Iniciada revisión”47.

47 Para marcar el inicio de proceso de revisión de un paper es necesario que el navegador del administrador que realiza el proceso soporte la realización de solicitudes AJAX. El inicio del proceso de revisión de un paper no implica el envío de notificaciones a los administradores ni a los ponentes.

Page 419: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Manuales | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 419

Esta acción impide el borrado del paper por parte del ponente, el cual verá un mensaje informando de

este hecho en la página asociada al paper de la sección de Papers de la interfaz de gestión de ponentes.

El inicio del proceso de revisión de un paper es registrado en la base de datos, y puede demorarse

tanto como sea necesario. En particular, un administrador puede iniciar el proceso de revisión de un

paper, descargar el archivo asociado para su revisión y terminar la misma (aceptando el paper o

desmarcando el campo “Iniciada revisión”) en distintos momentos, iniciando una nueva sesión en la

aplicación con la cuenta de administración días después de haber iniciado la revisión. Igualmente el

proceso de finalización de revisión o la aceptación del paper puede realizarse desde un equipo y/o una

IP diferente a la que inició el proceso.

Para aceptar un paper para su presentación en el congreso, una vez que éste ha entrado en proceso

de revisión, deberá hacer clic en el campo “Aceptado” asociado al mismo48. Tras marcar un paper como

aceptado, el sistema enviará sendas notificaciones al ponente que lo envío y a la lista de direcciones

configurada para recibir notificaciones administrativas, y puede demorarse unos segundos.

Figura 6.85: Notificación enviada a los administradores tras aceptar un paper

Tras la aceptación de un paper, el ponente que lo envió podrá enviar un archivo adicional asociado al

mismo. En este caso se notificará de ello a los administradores por correo electrónico, pero el paper

se mantendrá en estado aceptado. El ponente podrá enviar un segundo archivo (sic) tantas veces como

desee, pero solo se mantendrán los archivos asociados al primer y al último envío de cada paper.

Todos los envíos implican el envío de notificaciones a las direcciones de correo electrónico

configuradas con este propósito. El archivo asociado al segundo envío de un paper, en caso de haberse

producido, puede descargarse haciendo clic en el botón etiquetado como “File 2” de la entrada

correspondiente de la lista de papers enviados.

48 Para aceptar un paper es necesario que el navegador del administrador que realiza el proceso soporte el uso de solicitudes HTTP en segundo plano (AJAX).

Page 420: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Manuales

420 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Figura 6.86: Notificación enviada a los administradores tras recibir una nueva versión de un paper

Tenga en cuenta que la aceptación de un paper implica el envío de un mensaje de correo electrónico

informando de ello al ponente asociado al mismo y que, aunque está soportado por la aplicación,

aceptar varias veces un paper (tras desmarcarlo como aceptado) implica el envío de varios mensajes

al ponente (uno por cada vez que se acepta), por lo que este proceso debe realizarse con cuidado. Por

favor, refiérase a la sección “Envío y gestión de papers” del manual de usuario para ver un ejemplo del

correo electrónico enviado al ponente en el momento en que uno de sus papers es aceptado por los

administradores.

Modificación de salas asignadas a la exposición de posters

Para los papers enviados como posters, la aplicación permite el registro de la sala en la que serán

expuestos y las fechas y horas de inicio y fin de exposición. Para ello, desde la pantalla de gestión de

papers, deberá localizar el poster que desea modificar y hacer clic sobre el enlace Editar situado junto

al intervalo de fechas y horas asignadas actualmente para el mismo.

El valor actual será remplazado por un formulario donde podrá seleccionar una sala y el horario. Para

facilitar la gestión, se permite seleccionar una sala en blanco (por ejemplo, en caso de que el lugar de

exposición no haya sido escogido o si sus datos no están aún en el sistema). Para guardar los cambios

de deberá hacer clic sobre el botón marcado en verde situado al final del formulario. En caso de que

tras iniciar la edición decida mantener los valores anteriores podrá utilizar el botón marcado en rojo49.

49 La modificación de la sala y las fechas asignadas requiere que el navegador soporte solicitudes HTTP en segundo plano (AJAX). El resto de cambios que hubiese pendientes durante esta acción no se perderán.

Page 421: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Manuales | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 421

Figura 6.87: Formulario de edición de sala y fechas de presentación de posters

Page 422: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Manuales

422 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Descarga de certificados de presentación de ponencias

La aplicación permite la descarga de certificados que acrediten la presentación de las ponencias a

nombre de los usuarios asociados al envío de cada paper. Para ello deberá acceder a su página de

gestión utilizando el enlace correspondiente de la parte superior de la página.

El archivo PDF generado contendrá una página por cada certificado solicitado. La descarga de

certificados de presentación de ponencias puede realizarse de cuatro formas diferentes:

- Mediante enlaces situados en la última columna del listado, disponible únicamente para

aquellos papers aceptados cuyo ponente asociado haya pagado la cuota de inscripción, si dicho

pago ha sido confirmado. Estos enlaces tienen la apariencia de un botón azul con la etiqueta

“Certificado”.

- Seleccionando un subconjunto de papers aceptados, utilizando el checkbox disponible en la

penúltima columna para aquellos que cumplan los requisitos del apartado anterior y haciendo

clic en el botón verde “Certificados de ponencias seleccionadas” situado en la parte superior

de la página.

- Solicitando todos los certificados de los papers que cumplan los requisitos del primer caso,

haciendo clic en el botón verde “Certificados de ponencias han pagado” situado en la parte

superior de la página.

- Solicitando todos los certificados de los papers aceptados (sin importar si el ponente asociado

ha realizado el pago), haciendo clic en el botón verde “Certificados de ponencias todos”

situado en la parte superior de la página.

En el caso de seleccionar un subconjunto de papers, las filas correspondientes a los papers

seleccionados serán resaltadas en el momento en que seleccione el checkbox correspondiente.

Figura 6.88: Listado de papers con papers seleccionados

Page 423: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Manuales | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 423

Figura 6.89: Certificado de presentación de ponencia

Page 424: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Manuales

424 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

6.3.10 Consulta de información estadística

Además de las labores de gestión de las distintas entidades asociadas al congreso (como la revisión de

papers, la definición de simposios y actividades, o la gestión de pagos), la aplicación permite la consulta

de una serie de datos estadísticos básicos generados a partir de la información recogida como parte

del uso que los ponentes hacen de la misma.

La interfaz dispone de dos módulos para la consulta de datos estadísticos. El primero de ellos muestra

qué usuarios han enviado papers para su presentación en el congreso, el número de envíos y datos

sobre su procedencia, además de permitir descargar un informe asociado. El segundo muestra un

resumen estadístico básico agregado sobre los papers enviados, los usuarios registrados y la

información de procedencia disponible sobre éstos.

Además, la aplicación guarda en la base de datos, de forma estructurada, información adicional sobre

el uso de la misma. Esta información incluye, para cada solicitud HTTP recibida:

IP del cliente que realiza la solicitud.

URI solicitada.

Número de consultas SQL y método utilizado (a través del ORM o consulta directa sobre la

BBDD).

Presencia de proxy y, en su caso, IP real que realiza la solicitud (si ha sido posible su detección).

Navegador y sistema operativo del cliente (si ha proporcionado esta información).

Fecha y hora de inicio y fin de la solicitud (calculadas en el servidor), y carga media del sistema

en el instante de finalización de la misma.

IP, nombre, sistema operativo y versión del mismo instalados en el servidor que atiende la

solicitud50.

Esta información no es accesible directamente desde la interfaz web, pero puede consultarse mediante

una conexión directa a la base de datos utilizando SQL. Se registra también información de depuración

detallada para todas las solicitudes en archivos .log. Esta información incluye modelos involucrados, el

texto de las consultas SQL realizadas, controladores ejecutados y métodos invocados en los mismos,

entre otros, y está pensada para la detección y corrección de errores graves en la aplicación en caso

de ser necesario.

50 En nuestro caso se dispone de un único servidor y estos datos son idénticos para todas las muestras. Sin embargo, podrían ser útiles en configuraciones con varios servidores web frontend o para diagnosticar errores producidos por actualizaciones del kernel, cambios en la configuración de red y/o en sistemas redundantes que dispongan de varios servidores web ejecutándose en diferentes distribuciones Linux o variantes de UNIX (BSD, Solaris, …).

Page 425: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Manuales | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 425

Listado de autores

A través de la opción “Autores” disponible en el menú superior de la interfaz de administración se

dispone de un listado de todos los usuarios registrados que han enviado algún paper para su

presentación en el congreso. Para cada uno de ellos se muestran nombre y apellidos, institución

asociada, país de procedencia, número de papers enviados y cuántos de ellos son de tipo poster.

Figura 6.90: Listado de autores

Además, en la parte inferior de la página, se dispone de un enlace para descargar los datos del listado,

incluyendo además la dirección de correo asociada a cada usuario, en un archivo Excel.

Figura 6.91: Enlace de descarga de la lista de autores en formato Excel

Información estadística agregada

Para acceder a las estadísticas generales deberá utilizar el enlace “Resumen” disponible en el menú

superior. A partir de los datos disponibles esta página muestra:

- Número total de papers enviados y papers aceptados.

- Número de ponentes registrados, y número de ponentes cuyo pago ha sido confirmado.

- Proporción de papers aceptados y totales por autor, y por autor cuyo pago ha sido confirmado.

- Países de procedencia de los usuarios (gráficamente, mediante un mapa del mundo).

Al pasar el ratón por encima de las gráficas de proporción de papers aceptados y usuarios que han

pagado se muestra un popup indicando los datos correspondientes a cada parte de la gráfica.

Igualmente, el mapa de países de procedencia mostrado en la parte inferior permite una vista

detallada del número total de ponentes de cada país al pasar el ratón sobre cada uno de ellos.

Al igual que ocurre en el listado de autores, la información de esta página se actualiza en tiempo real

en función de los datos registrados en el sistema cada vez que es cargada.

Page 426: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Manuales

426 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Figura 6.92: Página de estadísticas agregadas

Page 427: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Manuales | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 427

6.3.11 Registro de editores

La versión actual de la aplicación no dispone de un mecanismo integrado para el registro de editores

o la asignación de permisos de editor a usuarios existentes (al tratarse de una funcionalidad raramente

utilizada). Por tanto, este proceso deberá realizarse de forma manual a través de una conexión directa

a la base de datos de la aplicación.

Para convertir una cuenta de ponente existente en una cuenta de editor deberá utilizar un programa

cliente MySQL para conectarse al servidor de base de datos utilizado y ejecutar la siguiente consulta

SQL una vez seleccionada la base de datos utilizada por la palicación (remplazando [email protected] por la

dirección de correo del usuario a modificar):

SELECT iduser,firstname,lastname,email FROM usuarios WHERE email = ‘[email protected]’;

La consulta anterior deberá mostrar el ID del usuario, nombre y apellidos asociados a la dirección de

correo proporcionada. Si los datos son correctos y coinciden con los del usuario que desea modificar,

ejecute la siguiente consulta replazando el valor 123 mostrado en ella por el valor de identificador de

usuario obtenido por la consulta SELECT anterior (mostrado en la columna “iduser”):

UPDATE usuarios SET typeuser=3 WHERE id=123

Tras ello, cuando el usuario que acaba de modificar inicie sesión, será llevado a la interfaz de editor en

lugar de a la de ponente.

Page 428: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Manuales

428 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

6.4 Manual de editor

6.4.1 Acceso a la lista de papers enviados

Para acceder a la lista de papers deberá acceder al formulario de inicio de sesión a través del botón

“Login” disponible en la página de inicio.

Figura 6.93: Formulario de inicio de sesión

Para iniciar sesión deberá introducir los datos facilitados por la organización. Tenga en cuenta que

como e-mail deberá introducir el nombre de usuario que le proporcione la organización, el cual no

tendrá necesariamente el formato de una dirección de correo. Tras hacer clic sobre el botón “Login”,

si los datos son correctos, se le redirigirá a la lista de papers enviados.

En cualquier momento podrá finalizar su sesión en la aplicación utilizando el enlace “Logout”

disponible a la derecha del menú superior (este menú será siempre visible en la parte superior de la

página, incluso cuando realice scroll para desplazarse por la lista de papers). Además, dependiendo de

la configuración del servidor, es posible que su sesión sea finalizada automáticamente por la aplicación

tras un periodo prolongado de inactividad en la misma.

Page 429: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Manuales | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 429

6.4.2 Descarga de papers disponibles

Tras iniciar sesión, accederá a un listado simple de todos los papers enviados. Para cada uno se le

mostrará el título del paper y del simposio al que está asignado, y un icono para la descarga del archivo

asciado.

Figura 6.94: Interfaz de editor

6.4.3 Acceso a los calendarios iCal

La aplicación pone a disposición de los usuarios de calendarios en formato electrónico ICal con la

programación de exposición de posters y la fecha y hora de inicio de cada simposio. Para acceder a

ellos, desde las páginas de ponente, dispondrá de dos enlaces en la parte interior junto a la etiqueta

“Download iCal”. El acceso a los calendarios no requiere registro ni login previos.

Por favor, refiérase al apartado de “Acceso a los calendarios iCal” del manual de usuario para obtener

más detalles sobre su uso y un ejemplo de los datos disponibles al importar los calendarios a Google

Calendar u otro servicio similar.

Page 430: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Pruebas

430 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

7 PRUEBAS

7.1 Pruebas de uso en un entorno real

A partir del 1 de Marzo de 2014 se han puesto en producción de forma periódica versiones parciales

de la aplicación (prototipos), que han sido usadas por los ponentes y los organizadores para la

inscripción y gestión del congreso hasta su finalización. Durante este periodo se ha seguido una

metodología de trabajo basada en versiones parcialmente funcionales, dando prioridad a la

implementación de nuevas funcionalidades a medida que era necesario su uso en función de los

propios plazos de las distintas fases de inscripción y envío de papers requeridos por la organización.

En este periodo la implementación de nuevas funcionalidades se ha llevado a cabo de forma

simultánea a la corrección de los errores detectados en los distintos prototipos a medida que iban

surgiendo. Para esta labor, ha resultado de capital importancia los mecanismos de instrumentación y

registro de depuración (log4php) presentes en la aplicación, así como el feedback proporcionado por

los organizadores y los propios asistentes al congreso.

7.2 Pruebas unitarias

Durante el desarrollo se han definido pruebas unitarias para comprobar el correcto funcionamiento

de partes clave de la aplicación. Esto ha permitido la automatización de parte de las pruebas necesarias

y la detección automática de errores surgidos durante el desarrollo.

Estas pruebas no cubren casos de uso completos. En lugar de ello, están diseñadas para testear los

diferentes componentes de la aplicación de forma individual y automática, como mecanismo para

garantizar la calidad de la aplicación desarrollada durante todo el proceso y evitar posibles problemas

de regresión introducidos en las sucesivas iteraciones.

Para la implementación de estas pruebas se ha utilizado el framework open source PHPUnit. Estas

pruebas no cubren la aplicación completa. En lugar de ello se han centrado principalmente en la

verificación automática de los modelos y la documentación electrónica generada por la aplicación,

garantizando la consistencia de los modelos de datos entre sí y respecto a la información almacenada

en la base de datos, y las postcondiciones definidas sobre los datos generados por sus métodos.

En total se han definido 347 pruebas que se corresponden con TestCases de PHPUnit, realizando un

total de 3971 comprobaciones básicas (asserts) de las postcondiciones que deben cumplir los

resultados retornados por diferentes métodos de la aplicación. Para cada una se incluye su

identificador, una descripción, el resultado esperado y el resultado obtenido. El conjunto de baterías

incluye 4 pruebas cuyo resultado no es satisfactorio debido a funcionalidades que no pueden ser

testeadas de forma automática o a errores reales en la validación de direcciones de correo. Estas

pruebas han sido documentadas debidamente en los apartados correspondientes.

Page 431: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Pruebas | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 431

7.2.1 Tests\Core

AbstractControllerTestCase

Identificador Core\AbstractControllerTestCase#testGetModel

Descripción Comprueba que la obtención desde los controladores de instancias de modelos a partir de sus interfaces funciona correctamente.

R. Esperado Obtención de una instancia de un modelo que implemente la interfaz solicitada y herede del modelo abstracto.

Resultado Satisfactorio

Identificador Core\AbstractControllerTestCase#testOnConstruct

Descripción Comprueba que se invoca al método de inicialización definido por los controladores si éstos implementan la interfaz necesaria, y que no se producen errores para los controladores que no implementan dicha interfaz.

R. Esperado El método de inicialización es invocado para aquellos controladores que implementan la interfaz necesaria. El método de inicialización no es invocado para aquellos controladores que no implementan la interfaz necesaria.

Resultado Satisfactorio

Identificador Core\AbstractControllerTestCase#testChainRequestNoParams

Descripción Comprueba que la invocación de acciones de controladores sin proporcionar parámetros funciona correctamente.

R. Esperado Obtención de la respuesta generada por la acción del controlador invocada.

Resultado Satisfactorio

Identificador Core\AbstractControllerTestCase#testChainRequestNoParamsWithParam

Descripción Comprueba que la invocación de acciones de controladores que no esperan parámetros proporcionando parámetros funciona correctamente y produce una llamada al controlador de errores definido.

R. Esperado Invocación del manejador de errores de página no encontrada.

Resultado Satisfactorio

Identificador Core\AbstractControllerTestCase#testChainRequestDefaultAction

Descripción Comprueba que la invocación de la acción por defecto para controladores que la han definido funciona correctamente.

R. Esperado Obtención de la respuesta generada por la acción por defecto del controlador.

Resultado Satisfactorio

Identificador Core\AbstractControllerTestCase#testChainRequestNoDefaultAction

Descripción Comprueba que la invocación de la acción por defecto para controladores que no la han definido funciona correctamente y produce una llamada al controlador de errores definido.

R. Esperado Invocación del manejador de errores de página no encontrada.

Resultado Satisfactorio

Page 432: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Pruebas

432 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Identificador Core\AbstractControllerTestCase#testChainRequestOneParamWithParam

Descripción Comprueba que la invocación de acciones de controladores que esperan parámetros cuando éstos se proporcionan funciona correctamente y produce una llamada a la acción correspondiente.

R. Esperado Obtención de la respuesta generada por la acción invocada

Resultado Satisfactorio

Identificador Core\AbstractControllerTestCase#testChainRequestOneParamNoParams

Descripción Comprueba que la invocación de acciones de controladores que esperan parámetros cuando se le proporciona un array con cero parámetros funciona correctamente y no produce una llamada al controlador de errores definido.

R. Esperado Obtención de la respuesta generada por la acción invocada sin que se invoque al controlador de errores.

Resultado Satisfactorio

Identificador Core\AbstractControllerTestCase#testChainRequestCatchAllAction

Descripción Comprueba que la invocación de la acción de captura de solicitudes aleatorias de un controlador, cuando ésta ha sido definida, funciona correctamente y no produce una llamada al controlador de errores definido.

R. Esperado Obtención de la respuesta generada por la acción por defecto sin que se produzcan errores.

Resultado Satisfactorio

Identificador Core\AbstractControllerTestCase#testChainRequestCatchAllWrongSignature

Descripción Comprueba que la acción de captura de solicitudes aleatorias de un controlador, cuando los parámetros de ésta no han sido definidos correctamente, no llega a invocarse.

R. Esperado La función de captura de solicitudes aleatorias no es invocada.

Resultado Satisfactorio

Identificador Core\AbstractControllerTestCase#testNoRoute

Descripción Comprueba que la llamada a acciones no definidas por un controlador, cuando éste no define una acción de captura de solicitudes aleatorias, produce una llamada al controlador de errores definido.

R. Esperado Invocación del manejador de errores de página no encontrada.

Resultado Satisfactorio

AbstractFrontControlerTestCase

Identificador Core\AbstractFrontControllerTestCase#testDispatchNoURIInfo

Descripción Comprueba que el frontcontroller base lanza una excepción en caso de el servidor no haya proporcionado la URI de la página solicitada.

R. Esperado La función encargada de despachar las solicitudes HTTP recibidas produce una excepción.

Resultado Satisfactorio

Page 433: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Pruebas | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 433

Identificador Core\AbstractFrontControllerTestCase#testDispatchRequestURI

Descripción Comprueba que el frontcontroller base redirige las solicitudes a la acción oportuna basándose en la URI solicitada y devuelve el resultado generado por ella.

R. Esperado La función encargada de despachar las solicitudes HTTP recibidas retorna el contenido generado por la acción correcta del controlador Homepage.

Resultado Satisfactorio

Identificador Core\AbstractFrontControllerTestCase#testDispatchPathInfo

Descripción Comprueba que el frontcontroller base redirige las solicitudes a la acción oportuna basándose en la variable de entorno CGI PATH_INFO si ésta está definida y devuelve el resultado generado por ésta.

R. Esperado La función encargada de despachar las solicitudes HTTP recibidas retorna el contenido generado por la acción correcta del controlador invocado.

Resultado Satisfactorio

Identificador Core\AbstractFrontControllerTestCase#testDispatchRequestURI_indexphp

Descripción Comprueba que el frontcontroller base redirige las solicitudes a la acción por defecto cuando la URI de la solicitud solo contiene el nombre del punto de entrada predeterminado de la aplicación (index.php)

R. Esperado La función encargada de despachar las solicitudes HTTP recibidas retorna el contenido generado por la acción por defecto del controlador invocado.

Resultado Satisfactorio

ArrayCacheTestCase

Identificador Core\ArrayCacheTestCase#testInheritance

Descripción Comprueba que la implementación del caché de datos utilizado para las consultas a través del Doctrine es compatible con éste y hereda del caché de datos de doctrine basado en arrays PHP.

R. Esperado La creación de instancias de \CMMSE\Core\ArrayCache no produce errores y son consideradas instancias de \Doctrine\Common\Cache\ArrayCache, pudiendo ser utilizadas en lugar de éstas.

Resultado Satisfactorio

Identificador Core\ArrayCacheTestCase#testFetchNotEmpty

Descripción Comprueba que la lectura de datos para claves almacenadas previamente en caché no produce errores y que la llamada al método que comprueba si dichas claves están almacenadas en caché informa correctamente de su existencia.

R. Esperado La lectura de claves definidas retorna los datos asociados previamente a éstas, y la comprobación de existencia de las mismas retorna cierto.

Resultado Satisfactorio

Page 434: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Pruebas

434 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Identificador Core\ArrayCacheTestCase#testFetchEmpty

Descripción Comprueba que la lectura de datos para claves no almacenadas previamente en caché falla (sin producir excepciones) y que la llamada al método que comprueba si dichas claves están almacenadas en caché informa de su no existencia después de realizar un intento de lectura de éstas. En particular, estas comprobaciones se realizan sobre una instancia de caché vacía.

R. Esperado Tanto el intento de lectura de claves no definidas como la comprobación de existencia de éstas retornan falso.

Resultado Satisfactorio

Identificador Core\ArrayCacheTestCase#testDelete

Descripción Comprueba que el borrado de datos asociados a claves definidas previamente funciona correctamente, provocando que la lectura y la comprobación de existencia de éstas posterior a su borrado retornan los resultados esperados según la especificación de la API de Doctrine.

R. Esperado Tanto la lectura como la comprobación de existencia de claves borradas retorna falso sin afectar a la lectura y comprobación de existencia de otras claves definidas antes del borrado.

Resultado Satisfactorio

Identificador Core\ArrayCacheTestCase#testStats

Descripción Comprueba que la lectura y la comprobación de existencia tanto de claves definidas como no definidas previamente actualiza correctamente los contadores internos de número de aciertos y fallos de la caché, y que la llamada al método de lectura de dichos contadores los retorna en el formato esperado.

R. Esperado La lectura de claves borradas y no borradas retorna los valores esperados. Además, las estadísticas de número de aciertos y fallos retornadas posteriormente son consistentes con las operaciones realizadas.

Resultado Satisfactorio

ConfigurationTestCase

Identificador Core\ConfigurationTestCase#testGetInstance

Descripción Comprueba que el método de instanciación de la configuración retorna una instancia de la clase que representa la configuración estática del sitio.

R. Esperado Se obtiene una instancia de \CMMSE\Core\Configuration.

Resultado Satisfactorio

Identificador Core\ConfigurationTestCase#testIsSingleton

Descripción Comprueba que las llamadas sucesivas al método de instanciación de la configuración del sitio retornan siempre referencias al mismo objeto en lugar de crear nuevas instancias.

R. Esperado Dos solicitudes de instanciación de la configuración del sitio retornan referencias al mismo objeto, y sus hashes internos (identificadores únicos de instancia) coinciden.

Resultado Satisfactorio

Page 435: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Pruebas | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 435

Identificador Core\ConfigurationTestCase#testGetRootPath

Descripción Comprueba que la obtención de la ruta del directorio raíz de la aplicación retorna la ruta correcta, calculada en función de la ruta (conocida) del archivo que contiene el código de esta prueba unitaria.

R. Esperado La ruta del directorio obtenido por Configuration::getRootPath() y la calculada en función del archivo del test coinciden.

Resultado Satisfactorio

Identificador Core\ConfigurationTestCase#testHasKeys

Descripción Comprueba que la prueba de existencia de las claves definidas en el archivo de configuración a través de la clase Configuration coincide con las claves obtenidas mediante una una lectura de bajo nivel del mismo archivo.

R. Esperado Las claves obtenidas mediante la lectura directa del archivo de configuración producen cierto al realizarse una prueba de existencia de éstas sobre una instancia de la clase Configuration.

Resultado Satisfactorio

Identificador Core\ConfigurationTestCase#testGetKeys

Descripción Comprueba que la lectura del valor asociado a las claves definidas en el archivo de configuración a través de la clase Configuration coincide con el valor leído mediante una lectura de bajo nivel del mismo archivo.

R. Esperado Las claves y valores obtenidos mediante la lectura directa del archivo de configuración coinciden con los valores leídos a través de la clase Configuration.

Resultado Satisfactorio

MailValidatorTestCase

Identificador Core\MailValidatorTestCase#testGetInstance

Descripción Comprueba que la creación de nuevas instancias del validador de direcciones de correo electrónico se realiza sin errores.

R. Esperado La creación de una nueva instancia de la clase \CMMSE\Core\MailValidator sin errores.

Resultado Satisfactorio

Identificador Core\MailValidatorTestCase#testInvalidEMailsExpectedFail

Descripción Este test unitario contiene direcciones de correo electrónico no válidas [MAIL01] que se sabe que son marcadas incorrectamente como válidas por el validador: - [email protected] (Joe Smith) - [email protected] Hay que mencionar que, aunque las direcciones de este tipo sean consideradas como válidas, la aplicación no permite el registro de usuarios con ellas al retornarse un error al enviar el correo electrónico de confirmación a las mismas desde el servidor SMTP.

R. Esperado El método de validación retorna falso para todas las direcciones de la lista.

Resultado No satisfactorio

Page 436: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Pruebas

436 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Identificador Core\MailValidatorTestCase#testValidIPv6EMails

Descripción Comprueba que el validador de direcciones de correo electrónico define como válidas las direcciones del siguiente conjunto de direcciones válidas que utilizan una dirección IPv6 en la parte de dominio: - first.last@[IPv6:::12.34.56.78] - first.last@[IPv6:1111:2222:3333::4444:12.34.56.78] - first.last@[IPv6:1111:2222:3333:4444:5555:6666:12.34.56.78] - first.last@[IPv6:::1111:2222:3333:4444:5555:6666] - first.last@[IPv6:1111:2222:3333::4444:5555:6666] - first.last@[IPv6:1111:2222:3333:4444:5555:6666::] - test@[IPv6:1111:2222:3333:4444:5555:6666:7777:8888] - first.last@[IPv6:1111:2222:3333:4444:5555:6666:7777:8888] - test@[IPv6:1111:2222:3333:4444:5555::8888] - test@[IPv6:::3333:4444:5555:6666:7777:8888] Hay que mencionar que, aunque sean consideradas como válidas direcciones de correo que utilizan una IPv6 en la parte de dominio, la aplicación no permitirá utilizarlas durante el registro mientras el servidor SMTP utilizado no se encuentre en una red IPv6.

R. Esperado El método de validación retorna cierto para todas las direcciones de la lista.

Resultado Satisfactorio

Identificador Core\MailValidatorTestCase#testValidEMailsExpectedFail

Descripción Este test unitario contiene direcciones de correo electrónico válidas que contienen acentos, caracteres cirílicos, kanji, griegos o signos de puntuación, o utilizan direcciones IP en la parte de dominio sin delimitar; que se sabe que son marcadas incorrectamente como no válidas por el validador: - [email protected] - \[email protected] - very."(),:;<>[]".VERY."very@\\ very"[email protected] - Pelé@example.com - δοκιμή@παράδειγμα.δοκιμή

- 甲斐@黒川.日本 - чебурашка@ящик-с-апельсинами.рф

R. Esperado El método de validación retorna cierto para todas las direcciones de la lista.

Resultado No satisfactorio

Page 437: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Pruebas | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 437

Identificador Core\MailValidatorTestCase#testValidEmails

Descripción Comprueba que el validador de direcciones de correo electrónico define como válidas las direcciones del siguiente conjunto de direcciones válidas [MAIL01] [MAIL02]: - [email protected] - [email protected] - [email protected] - [email protected] - email@[123.123.123.123] - "email"@example.com - [email protected] - [email protected] - [email protected] - [email protected] - [email protected] - [email protected] - [email protected] - abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghiklm@iana.

org - much."more\ unusual"@example.com - very.unusual."@"[email protected] - "Abc\@def"@example.com - "Fred Bloggs"@example.com - "Joe\\Blow"@example.com - "Abc@def"@example.com - customer/[email protected] - !def!xyz%[email protected] - [email protected] - [email protected]

R. Esperado El método de validación retorna cierto para todas las direcciones de la lista.

Resultado Satisfactorio

Identificador Core\MailValidatorTestCase#testInvalidIPv6ExpectedFail

Descripción Este test unitario contiene direcciones de correo electrónico no válidas [MAIL02] que se sabe que son marcadas incorrectamente como válidas por el validador: - test@[IPv6:1111:2222:3333:4444:5555:6666::7777:8888] - test@[IPv6:1111:2222:3333:4444:5555:6666:255.255.255.255] - test@[IPv6:1111:2222:3333:4444:::255.255.255.255] - test@[IPv6:1111:2222:3333:4444::255.255.255.255] - test@[IPv6:::] - test@[IPv6:1111:2222:3333:4444:5555:6666:7777:255.255.255.255] Hay que mencionar que, aunque las direcciones de este tipo sean consideradas como válidas, la aplicación no permite el registro de usuarios con ellas al retornarse un error al enviar el correo electrónico de confirmación a las mismas desde el servidor SMTP.

R. Esperado El método de validación retorna falso para todas las direcciones de la lista.

Resultado No satisfactorio

Page 438: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Pruebas

438 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Identificador Core\MailValidatorTestCase#testInvalidEmails

Descripción Comprueba que el validador de direcciones de correo electrónico define como no válidas las direcciones del siguiente conjunto de direcciones de correo electrónico no válidas [MAIL01] [MAIL02]: - plainaddress - #@%^%#$@#$@#.com - @example.com - Joe Smith <[email protected]> - email.example.com - email@[email protected] - [email protected] - [email protected] - [email protected]

- あいうえお@example.com - email@example - [email protected] - [email protected] - [email protected] - [email protected] - email@[323.123.123.123] - email@[123.323.123.123] - email@[123.123.323.123] - email@[123.123.123.323] - abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghiklmn@ian

a.org - abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghiklm@abcd

efghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghikl.abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghikl.abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijkl

- [email protected] - A@b@[email protected] - "(),:;<>[\]@example.com - just"not"[email protected] - this\ is"really"not\[email protected]

R. Esperado El método de validación retorna falso para todas las direcciones de la lista.

Resultado Satisfactorio

OverviewDataTestCase

Identificador Core\OverviewDataTestCase#testNullRatios

Descripción Comprueba que el cálculo de las razones matemáticas (ratios) produce valores nulos (cero) al calcularlos sobre un conjunto de datos sin inicializar.

R. Esperado Las razones matemáticas (papers aceptados por autor, papers aceptados por número de autores que han pagado, papers por autor y papers por autores que han pagado) son iguales a cero.

Resultado Satisfactorio

Page 439: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Pruebas | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 439

Identificador Core\OverviewDataTestCase#testNotNullRatios

Descripción Comprueba que el cálculo de las razones matemáticas (ratios) sobre un conjunto de valores conocido produce los resultados correctos.

R. Esperado Las razones matemáticas (papers aceptados por autor, papers aceptados por número de autores que han pagado, papers por autor y papers por autores que han pagado) son iguales a los valores esperados para un conjunto de datos conocido.

Resultado Satisfactorio

ScriptStatsTestCase

Identificador Core\ScriptStatsTestCase#testPeakMemUsage

Descripción Comprueba que el valor de cantidad de memoria máxima utilizada obtenida por \CMMSE\Core\ScriptStats coincide con el valor de memoria máxima utilizada esperado obtenido previamente de manera directa.

R. Esperado El valor retornado por ScriptStats coincide con el valor obtenido previamente de manera directa.

Resultado Satisfactorio

Identificador Core\ ScriptStatsTestCase#testQueryCount

Descripción Comprueba que el número de consultas SQL ejecutadas reportado por ScriptStats es factible.

R. Esperado Un entero estrictamente mayor que cero.

Resultado Satisfactorio

Identificador Core\ ScriptStatsTestCase#testGuessElapsedTime

Descripción Comprueba que el valor de tiempo estimado de ejecución del script actual es correcto partiendo de un instante de inicio de ejecución del script actual conocido, y que su lectura como texto (string) coincide con el valor numérico.

R. Esperado El valor de tiempo estimado de ejecución es el esperado, y coincide con el valor leído como texto.

Resultado Satisfactorio

TemplateTestCase

Identificador Core\TemplateTestCase#testNewInstanceHTML

Descripción Comprueba que la creación de nuevas instancias de plantillas a partir de un archivo conocido del namespace @html no produce errores.

R. Esperado Se obtiene una instancia nueva de la plantilla sin generarse excepciones.

Resultado Satisfactorio

Identificador Core\TemplateTestCase#testNewInstanceEMail

Descripción Comprueba que la creación de nuevas instancias de plantillas a partir de un archivo de texto conocido que define el asunto y texto de un correo electrónico no produce errores y genera un mensaje con el asunto esperado.

R. Esperado El asunto del mensaje generado coincide con el asunto definido en la plantilla, y utiliza correctamente los parámetros proporcionados a ésta.

Resultado Satisfactorio

Page 440: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Pruebas

440 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Identificador Core\TemplateTestCase#testNewInstanceCSS

Descripción Comprueba que la creación de nuevas instancias de plantillas a partir de un archivo conocido del namespace @css no produce errores.

R. Esperado Se obtiene una instancia nueva de la plantilla sin generarse excepciones.

Resultado Satisfactorio

Identificador Core\TemplateTestCase#testSetValues

Descripción Comprueba que la comprobación de existencia de valores para etiquetas de plantilla definidos y no definidos y la asignación de valores a éstas funciona correctamente.

R. Esperado La comprobación de existencia de un valor no definido retorna falso y viceversa, y la lectura de valores retorna los datos asignados previamente.

Resultado Satisfactorio

Identificador Core\TemplateTestCase#testGetNullValue

Descripción Comprueba que la lectura de valores para etiquetas no definidas previamente retorna valores nulos.

R. Esperado El valor de una etiqueta no definida se retorna como null.

Resultado Satisfactorio

Identificador Core\TemplateTestCase#testUnsetValues

Descripción Comprueba que la eliminación de valores de etiquetas funciona correctamente y solo afecta a la etiqueta correspondiente.

R. Esperado La comprobación de existencia de valor para una etiqueta cuyo valor ha sido definido y eliminado previamente retorna falso, sin afectar a los valores esperados para otras etiquetas definidas.

Resultado Satisfactorio

Identificador Core\TemplateTestCase#testRender

Descripción Comprueba que la solicitud de renderizado de una plantilla conocida funciona correctamente.

R. Esperado El renderizado de la plantilla retorna una cadena de texto de longitud no nula.

Resultado Satisfactorio

Identificador Core\TemplateTestCase#testFilterFunction

Descripción Comprueba que el renderizado de plantillas que hacen uso de funciones de filtrado en sus etiquetas funciona correctamente.

R. Esperado El renderizado de la plantilla retorna una cadena de texto con el resultado de aplicar la función de filtrado, y dicho resultado coincide con el resultado esperado calculado previamente de forma independiente.

Resultado Satisfactorio

Identificador Core\TemplateTestCase#testSyntaxError

Descripción Comprueba que el renderizado de plantillas que contienen errores sintácticos retorna un resultado vacío sin generar excepciones.

R. Esperado El renderizado retorna una cadena vacía.

Resultado Satisfactorio

Page 441: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Pruebas | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 441

7.2.2 Tests\Entities

PropertyScopeConferenceTestCase

Identificador Entities\PropertyScopeConferenceTestCase#testExists

Descripción Comprueba que la clase \CMMSE\Doctrine\Conference es accesible.

R. Esperado La función interna que comprueba la existencia de clases retorna cierto.

Resultado Satisfactorio

Identificador Entities\PropertyScopeConferenceTestCase#testPropertyScope

Descripción Comprueba que la clase \CMMSE\Doctrine\Conference no contiene propiedades públicas definidas, realizándose todo el acceso a sus datos a través de sus métodos de lectura y modificación.

R. Esperado La enumeración de propiedades públicas de la clase retorna un conjunto vacío.

Resultado Satisfactorio

PropoertyScopeInstrumentationSampleTestCase

Identificador Entities\PropertyScopeInstrumentationTestCase#testExists

Descripción Comprueba que la clase \CMMSE\Doctrine\InstrumentationSample es accesible.

R. Esperado La función interna que comprueba la existencia de clases retorna cierto.

Resultado Satisfactorio

Identificador Entities\PropertyScopeInstrumentationTestCase#testPropertyScope

Descripción Comprueba que la clase \CMMSE\Doctrine\InstrumentationSample no contiene propiedades públicas definidas, realizándose todo el acceso a sus datos a través de sus métodos de lectura y modificación.

R. Esperado La enumeración de propiedades públicas de la clase retorna un conjunto vacío.

Resultado Satisfactorio

PropertyScopeMailerSettingsTestCase

Identificador Entities\PropertyScopeMailerSettingsTestCase#testExists

Descripción Comprueba que la clase \CMMSE\Doctrine\MailerSettings es accesible.

R. Esperado La función interna que comprueba la existencia de clases retorna cierto.

Resultado Satisfactorio

Identificador Entities\PropertyScopeMailerSettingsTestCase#testPropertyScope

Descripción Comprueba que la clase \CMMSE\Doctrine\MailerSettings no contiene propiedades públicas definidas, realizándose todo el acceso a sus datos a través de sus métodos de lectura y modificación.

R. Esperado La enumeración de propiedades públicas de la clase retorna un conjunto vacío.

Resultado Satisfactorio

Page 442: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Pruebas

442 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

PropertyScopePaperTestCase

Identificador Entities\PropertyScopePaperTestCase#testExists

Descripción Comprueba que la clase \CMMSE\Doctrine\Paper es accesible.

R. Esperado La función interna que comprueba la existencia de clases retorna cierto.

Resultado Satisfactorio

Identificador Entities\PropertyScopePaperTestCase#testPropertyScope

Descripción Comprueba que la clase \CMMSE\Doctrine\Paper no contiene propiedades públicas definidas, realizándose todo el acceso a sus datos a través de sus métodos de lectura y modificación.

R. Esperado La enumeración de propiedades públicas de la clase retorna un conjunto vacío.

Resultado Satisfactorio

PropertyScopePaymentSettingsTestCase

Identificador Entities\PropertyScopePaymentSettingsTestCase#testExists

Descripción Comprueba que la clase \CMMSE\Doctrine\PaymentSettings es accesible.

R. Esperado La función interna que comprueba la existencia de clases retorna cierto.

Resultado Satisfactorio

Identificador Entities\PropertyScopePaymentSettingsTestCase#testtPropertyScope

Descripción Comprueba que la clase \CMMSE\Doctrine\PaymentSettings no contiene propiedades públicas definidas, realizándose todo el acceso a sus datos a través de sus métodos de lectura y modificación.

R. Esperado La enumeración de propiedades públicas de la clase retorna un conjunto vacío.

Resultado Satisfactorio

PropertyScopePersonTitleTestCase

Identificador Entities\PropertyScopePersonTitleTestCase#testExists

Descripción Comprueba que la clase \CMMSE\Doctrine\PersonTitle es accesible.

R. Esperado La función interna que comprueba la existencia de clases retorna cierto.

Resultado Satisfactorio

Identificador Entities\PropertyScopePersonTitleTestCase#testPropertyScope

Descripción Comprueba que la clase \CMMSE\Doctrine\PersonTitle no contiene propiedades públicas definidas, realizándose todo el acceso a sus datos a través de sus métodos de lectura y modificación.

R. Esperado La enumeración de propiedades públicas de la clase retorna un conjunto vacío.

Resultado Satisfactorio

Page 443: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Pruebas | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 443

PropertyScopePosterTestCase

Identificador Entities\PropertyScopePosterTestCase#testExists

Descripción Comprueba que la clase \CMMSE\Doctrine\Poster es accesible.

R. Esperado La función interna que comprueba la existencia de clases retorna cierto.

Resultado Satisfactorio

Identificador Entities\PropertyScopePosterTestCase#testPropertyScope

Descripción Comprueba que la clase \CMMSE\Doctrine\Poster no contiene propiedades públicas definidas, realizándose todo el acceso a sus datos a través de sus métodos de lectura y modificación.

R. Esperado La enumeración de propiedades públicas de la clase retorna un conjunto vacío.

Resultado Satisfactorio

PropertyScopeRoomTestCase

Identificador Entities\PropertyScopeRoomTestCase#testExists

Descripción Comprueba que la clase \CMMSE\Doctrine\Room es accesible.

R. Esperado La función interna que comprueba la existencia de clases retorna cierto.

Resultado Satisfactorio

Identificador Entities\PropertyScopeRoomTestCase#testPropertyScope

Descripción Comprueba que la clase \CMMSE\Doctrine\Room no contiene propiedades públicas definidas, realizándose todo el acceso a sus datos a través de sus métodos de lectura y modificación.

R. Esperado La enumeración de propiedades públicas de la clase retorna un conjunto vacío.

Resultado Satisfactorio

PropertyScopeSessionTestCase

Identificador Entities\PropertyScopeSessionTestCase#testExists

Descripción Comprueba que la clase \CMMSE\Doctrine\Session es accesible.

R. Esperado La función interna que comprueba la existencia de clases retorna cierto.

Resultado Satisfactorio

Identificador Entities\PropertyScopeSessionTestCase#testPropertyScope

Descripción Comprueba que la clase \CMMSE\Doctrine\Session no contiene propiedades públicas definidas, realizándose todo el acceso a sus datos a través de sus métodos de lectura y modificación.

R. Esperado La enumeración de propiedades públicas de la clase retorna un conjunto vacío.

Resultado Satisfactorio

Page 444: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Pruebas

444 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

PropertyScopeSettingsTestCase

Identificador Entities\PropertyScopeSettingsTestCase#testExists

Descripción Comprueba que la clase \CMMSE\Doctrine\Settings es accesible.

R. Esperado La función interna que comprueba la existencia de clases retorna cierto.

Resultado Satisfactorio

Identificador Entities\PropertyScopeSettingsTestCase#testPropertyScope

Descripción Comprueba que la clase \CMMSE\Doctrine\Settings no contiene propiedades públicas definidas, realizándose todo el acceso a sus datos a través de sus métodos de lectura y modificación.

R. Esperado La enumeración de propiedades públicas de la clase retorna un conjunto vacío.

Resultado Satisfactorio

PropertyScopeUserTestCase

Identificador Entities\PropertyScopeUserTestCase#testExists

Descripción Comprueba que la clase \CMMSE\Doctrine\User es accesible.

R. Esperado La función interna que comprueba la existencia de clases retorna cierto.

Resultado Satisfactorio

Identificador Entities\PropertyScopeUserTestCase#testPropertyScope

Descripción Comprueba que la clase \CMMSE\Doctrine\User no contiene propiedades públicas definidas, realizándose todo el acceso a sus datos a través de sus métodos de lectura y modificación.

R. Esperado La enumeración de propiedades públicas de la clase retorna un conjunto vacío.

Resultado Satisfactorio

PropertyScopeUserBillingInfoTestCase

Identificador Entities\PropertyScopeUserBillingInfoTestCase#testExists

Descripción Comprueba que la clase \CMMSE\Doctrine\UserBillingInfo es accesible.

R. Esperado La función interna que comprueba la existencia de clases retorna cierto.

Resultado Satisfactorio

Identificador Entities\PropertyScopeUserBillingInfoTestCase#testPropertyScope

Descripción Comprueba que la clase \CMMSE\Doctrine\UserBillingInfo no contiene propiedades públicas definidas, realizándose todo el acceso a sus datos a través de sus métodos de lectura y modificación.

R. Esperado La enumeración de propiedades públicas de la clase retorna un conjunto vacío.

Resultado Satisfactorio

Page 445: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Pruebas | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 445

7.2.3 Tests\Entities\Doctrine

ConferenceTestCase

Identificador Entities\Doctrine\ConferenceTestCase#testExists

Descripción Comprueba que la clase \CMMSE\Doctrine\Conference es accesible.

R. Esperado La función interna que comprueba la existencia de clases retorna cierto.

Resultado Satisfactorio

Identificador Entities\Doctrine\ConferenceTestCase#testFetchByID

Descripción Comprueba que la obtención de una instancia conocida de \CMMSE\Doctrine\Conference a través del EntityManager de Doctrine no produce errores.

R. Esperado Se obtiene una referencia no nula a una instancia de la clase con el identificador esperado.

Resultado Satisfactorio

Identificador Entities\Doctrine\ConferenceTestCase#testGetters

Descripción Comprueba que los valores devueltos por los distintos métodos de lectura de datos son consistentes entre sí.

R. Esperado Todos los métodos de lectura de datos referidos al mismo atributo retornan el mismo valor.

Resultado Satisfactorio

Identificador Entities\Doctrine\ConferenceTestCase#testSetters

Descripción Comprueba que los métodos de modificación de datos funcionan correctamente y cambian el estado interno de la clase de la forma esperada.

R. Esperado El estado interno del objeto se modifica, y la posterior lectura de los datos modificados retorna los valores esperados.

Resultado Satisfactorio

Identificador Entities\Doctrine\ConferenceTestCase#testAccessors

Descripción Comprueba que la escritura de datos utilizando la sintaxis de array y los métodos mágicos de PHP funcionan correctamente.

R. Esperado El estado interno del objeto se modifica, y la posterior lectura de los datos modificados retorna los valores esperados.

Resultado Satisfactorio

InstrumentationTestCase

Identificador Entities\Doctrine\InstrumentationTestCase#testExists

Descripción Comprueba que la clase \CMMSE\Doctrine\Conference es accesible.

R. Esperado La función interna que comprueba la existencia de clases retorna cierto.

Resultado Satisfactorio

Page 446: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Pruebas

446 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Identificador Entities\Doctrine\InstrumentationTestCase#testFetchByID

Descripción Comprueba que la obtención de una instancia conocida de \CMMSE\Doctrine\Instrumentation a través del EntityManager de Doctrine no produce errores.

R. Esperado Se obtiene una referencia no nula a una instancia de la clase con el identificador esperado.

Resultado Satisfactorio

Identificador Entities\Doctrine\InstrumentationTestCase#testGetters

Descripción Comprueba que los valores devueltos por los distintos métodos de lectura de datos son consistentes entre sí.

R. Esperado Todos los métodos de lectura de datos referidos al mismo atributo retornan el mismo valor.

Resultado Satisfactorio

Identificador Entities\Doctrine\InstrumentationTestCase#testSetters

Descripción Comprueba que los métodos de modificación de datos funcionan correctamente y cambian el estado interno de la clase de la forma esperada.

R. Esperado El estado interno del objeto se modifica, y la posterior lectura de los datos modificados retorna los valores esperados.

Resultado Satisfactorio

MailerSettingsTestCase

Identificador Entities\Doctrine\MailerSettingsTestCase#testExists

Descripción Comprueba que la clase \CMMSE\Doctrine\MailerSettings es accesible.

R. Esperado La función interna que comprueba la existencia de clases retorna cierto.

Resultado Satisfactorio

Identificador Entities\Doctrine\MailerSettingsTestCase#testFetchByID

Descripción Comprueba que la obtención de una instancia conocida de \CMMSE\Doctrine\MailerSettings a través del EntityManager de Doctrine no produce errores.

R. Esperado Se obtiene una referencia no nula a una instancia de la clase con el identificador esperado.

Resultado Satisfactorio

Identificador Entities\Doctrine\MailerSettingsTestCase#testGetters

Descripción Comprueba que los valores devueltos por los distintos métodos de lectura de datos son consistentes entre sí.

R. Esperado Todos los métodos de lectura de datos referidos al mismo atributo retornan el mismo valor.

Resultado Satisfactorio

Identificador Entities\Doctrine\MailerSettingsTestCase#testSetters

Descripción Comprueba que los métodos de modificación de datos funcionan correctamente y cambian el estado interno de la clase de la forma esperada.

R. Esperado El estado interno del objeto se modifica, y la posterior lectura de los datos modificados retorna los valores esperados.

Resultado Satisfactorio

Page 447: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Pruebas | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 447

Identificador Entities\Doctrine\MailerSettingsTestCase#testAccessors

Descripción Comprueba que la escritura de datos utilizando la sintaxis de array y los métodos mágicos de PHP funcionan correctamente.

R. Esperado El estado interno del objeto se modifica, y la posterior lectura de los datos modificados retorna los valores esperados.

Resultado Satisfactorio

PaperTestCase

Identificador Entities\Doctrine\PaperTestCase#testExists

Descripción Comprueba que la clase \CMMSE\Doctrine\Paper es accesible.

R. Esperado La función interna que comprueba la existencia de clases retorna cierto.

Resultado Satisfactorio

Identificador Entities\Doctrine\PaperTestCase#testFetchRandom

Descripción Comprueba que la obtención de una instancia aleatoria de \CMMSE\Doctrine\Paper a través del EntityManager de Doctrine no produce errores.

R. Esperado Se obtiene una referencia no nula a una instancia de la clase.

Resultado Satisfactorio

Identificador Entities\Doctrine\PaperTestCase#testGetters

Descripción Comprueba que los valores devueltos por los distintos métodos de lectura de datos son consistentes entre sí.

R. Esperado Todos los métodos de lectura de datos referidos al mismo atributo retornan el mismo valor.

Resultado Satisfactorio

Identificador Entities\Doctrine\PaperTestCase#testSetters

Descripción Comprueba que los métodos de modificación de datos funcionan correctamente y cambian el estado interno de la clase de la forma esperada.

R. Esperado El estado interno del objeto se modifica, y la posterior lectura de los datos modificados retorna los valores esperados.

Resultado Satisfactorio

PaymentSettingsTestCase

Identificador Entities\Doctrine\PaymentSettingsTestCase#testExists

Descripción Comprueba que la clase \CMMSE\Doctrine\PaymentSettings es accesible.

R. Esperado La función interna que comprueba la existencia de clases retorna cierto.

Resultado Satisfactorio

Identificador Entities\Doctrine\PaymentSettingsTestCase#testFetch

Descripción Comprueba que la obtención de una instancia conocida de \CMMSE\Doctrine\PaymentSettings a través del EntityManager de Doctrine no produce errores.

R. Esperado Se obtiene una referencia no nula a una instancia de la clase.

Resultado Satisfactorio

Page 448: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Pruebas

448 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Identificador Entities\Doctrine\PaymentSettingsTestCase#testGetters

Descripción Comprueba que los valores devueltos por los distintos métodos de lectura de datos son consistentes entre sí.

R. Esperado Todos los métodos de lectura de datos referidos al mismo atributo retornan el mismo valor.

Resultado Satisfactorio

Identificador Entities\Doctrine\PaymentSettingsTestCase#testSetters

Descripción Comprueba que los métodos de modificación de datos funcionan correctamente y cambian el estado interno de la clase de la forma esperada.

R. Esperado El estado interno del objeto se modifica, y la posterior lectura de los datos modificados retorna los valores esperados.

Resultado Satisfactorio

PersonTitleTestCase

Identificador Entities\Doctrine\PersonTitleTestCase#testExists

Descripción Comprueba que la clase \CMMSE\Doctrine\PersonTitle es accesible.

R. Esperado La función interna que comprueba la existencia de clases retorna cierto.

Resultado Satisfactorio

Identificador Entities\Doctrine\PersonTitleTestCase#testFetchByID

Descripción Comprueba que la obtención de una instancia conocida de \CMMSE\Doctrine\PersonTitle a través del EntityManager de Doctrine no produce errores.

R. Esperado Se obtiene una referencia no nula a una instancia de la clase con el identificador esperado.

Resultado Satisfactorio

Identificador Entities\Doctrine\PersonTitleTestCase#testGetters

Descripción Comprueba que los valores devueltos por los distintos métodos de lectura de datos son consistentes entre sí.

R. Esperado Todos los métodos de lectura de datos referidos al mismo atributo retornan el mismo valor.

Resultado Satisfactorio

Identificador Entities\Doctrine\PersonTitleTestCase#testSetters

Descripción Comprueba que los métodos de modificación de datos funcionan correctamente y cambian el estado interno de la clase de la forma esperada.

R. Esperado El estado interno del objeto se modifica, y la posterior lectura de los datos modificados retorna los valores esperados.

Resultado Satisfactorio

Identificador Entities\Doctrine\PersonTitleTestCase#testAccessors

Descripción Comprueba que la escritura de datos utilizando la sintaxis de array y los métodos mágicos de PHP funcionan correctamente.

R. Esperado El estado interno del objeto se modifica, y la posterior lectura de los datos modificados retorna los valores esperados.

Resultado Satisfactorio

Page 449: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Pruebas | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 449

PosterTestCase

Identificador Entities\Doctrine\Poster#testExists

Descripción Comprueba que la clase \CMMSE\Doctrine\Poster es accesible.

R. Esperado La función interna que comprueba la existencia de clases retorna cierto.

Resultado Satisfactorio

Identificador Entities\Doctrine\PosterTestCase#testFetchOne

Descripción Comprueba que la obtención de una instancia aleatoria de \CMMSE\Doctrine\Poster a través del EntityManager de Doctrine no produce errores.

R. Esperado Se obtiene una referencia no nula a una instancia de la clase.

Resultado Satisfactorio

Identificador Entities\Doctrine\PosterTestCase#testGetters

Descripción Comprueba que los valores devueltos por los distintos métodos de lectura de datos son consistentes entre sí, incluyendo la sala y el paper referenciados por el poster.

R. Esperado Todos los métodos de lectura de datos referidos al mismo atributo retornan el mismo valor.

Resultado Satisfactorio

Identificador Entities\Doctrine\PosterTestCase#testSetters

Descripción Comprueba que los métodos de modificación de datos funcionan correctamente y cambian el estado interno de la clase de la forma esperada.

R. Esperado El estado interno del objeto se modifica, y la posterior lectura de los datos modificados retorna los valores esperados.

Resultado Satisfactorio

Identificador Entities\Doctrine\PosterTestCase#testAccessors

Descripción Comprueba que la escritura de datos utilizando la sintaxis de array y los métodos mágicos de PHP funcionan correctamente.

R. Esperado El estado interno del objeto se modifica, y la posterior lectura de los datos modificados retorna los valores esperados.

Resultado Satisfactorio

RoomTestCase

Identificador Entities\Doctrine\RoomTestCase#testExists

Descripción Comprueba que la clase \CMMSE\Doctrine\Room es accesible.

R. Esperado La función interna que comprueba la existencia de clases retorna cierto.

Resultado Satisfactorio

Identificador Entities\Doctrine\RoomTestCase#testFetchByID

Descripción Comprueba que la obtención de una instancia conocida de \CMMSE\Doctrine\Room a través del EntityManager de Doctrine no produce errores.

R. Esperado Se obtiene una referencia no nula a una instancia de la clase con el identificador esperado.

Resultado Satisfactorio

Page 450: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Pruebas

450 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Identificador Entities\Doctrine\RoomTestCase#testGetters

Descripción Comprueba que los valores devueltos por los distintos métodos de lectura de datos son consistentes entre sí.

R. Esperado Todos los métodos de lectura de datos referidos al mismo atributo retornan el mismo valor.

Resultado Satisfactorio

Identificador Entities\Doctrine\RoomTestCase#testSetters

Descripción Comprueba que los métodos de modificación de datos funcionan correctamente y cambian el estado interno de la clase de la forma esperada.

R. Esperado El estado interno del objeto se modifica, y la posterior lectura de los datos modificados retorna los valores esperados.

Resultado Satisfactorio

Identificador Entities\Doctrine\RoomTestCase#testAccessors

Descripción Comprueba que la escritura de datos utilizando la sintaxis de array y los métodos mágicos de PHP funcionan correctamente.

R. Esperado El estado interno del objeto se modifica, y la posterior lectura de los datos modificados retorna los valores esperados.

Resultado Satisfactorio

SessionTestCase

Identificador Entities\Doctrine\SessionTestCase#testExists

Descripción Comprueba que la clase \CMMSE\Doctrine\Session es accesible.

R. Esperado La función interna que comprueba la existencia de clases retorna cierto.

Resultado Satisfactorio

Identificador Entities\Doctrine\SessionTestCase#testCreateSession

Descripción Comprueba que no se producen errores en la creación y posterior lectura de los objetos que representan las sesiones de usuario, ni en la lectura de los datos asociados a éstas.

R. Esperado La creación, instanciación y lectura de los objetos de sesión no producen errores, y la lectura de los datos de éstas coincide con los datos asignados previamente.

Resultado Satisfactorio

Identificador Entities\Doctrine\SessionTestCase#testGetters

Descripción Comprueba que los valores devueltos por los distintos métodos de lectura de datos identificativos y de gestión de sesión son consistentes entre sí.

R. Esperado Todos los métodos de lectura de datos referidos al mismo atributo retornan el mismo valor.

Resultado Satisfactorio

Identificador Entities\Doctrine\SessionTestCase#testSetters

Descripción Comprueba que los métodos de modificación de datos identificativos de sesión funcionan correctamente y cambian el estado interno de la clase de la forma esperada.

R. Esperado El estado interno del objeto se modifica, y la posterior lectura de los datos modificados retorna los valores esperados.

Resultado Satisfactorio

Page 451: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Pruebas | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 451

Identificador Entities\Doctrine\SessionTestCase#testSetters2

Descripción Comprueba que la modificación de datos identificativos de sesión a través de los métodos de modificación de atributos mágicos de PHP funcionan correctamente y cambian el estado interno de la clase de la forma esperada.

R. Esperado El estado interno del objeto se modifica, y la posterior lectura de los datos modificados retorna los valores esperados.

Resultado Satisfactorio

SettingsTestCase

Identificador Entities\Doctrine\SettingsTestCase#testExists

Descripción Comprueba que la clase \CMMSE\Doctrine\Settings es accesible.

R. Esperado La función interna que comprueba la existencia de clases retorna cierto.

Resultado Satisfactorio

Identificador Entities\Doctrine\SettingsTestCase#testFetchEmpty

Descripción Comprueba que la lectura de un objeto vacío de configuración a través del método getEmptySettings() del modelo de sesiones retorna un objeto en el estado esperado.

R. Esperado Una referencia no nula a un objeto de configuración con un ID nulo y el flag que indica que no ha sido inicializado desde la base de datos a cierto.

Resultado Satisfactorio

Identificador Entities\Doctrine\SettingsTestCase#testFetchSettings

Descripción Comprueba que la lectura de un objeto de configuración con los valores actuales almacenados en la base de datos retorna un objeto en el estado esperado.

R. Esperado Una referencia no nula a un objeto de configuración con un ID no nulo e igual a 1 y el flag que indica que no ha sido inicializado desde la base de datos a falso.

Resultado Satisfactorio

Identificador Entities\Doctrine\SettingsTestCase#testGetters

Descripción Comprueba que los valores devueltos por los distintos métodos de lectura de los datos de configuración son consistentes entre sí.

R. Esperado Todos los métodos de lectura de datos referidos al mismo atributo retornan el mismo valor.

Resultado Satisfactorio

Identificador Entities\Doctrine\SettingsTestCase#testSetters

Descripción Comprueba que los métodos de modificación de datos de configuración funcionan correctamente y cambian el estado interno de la clase de la forma esperada

R. Esperado El estado interno del objeto se modifica, y la posterior lectura de los datos modificados retorna los valores esperados.

Resultado Satisfactorio

Page 452: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Pruebas

452 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

TripTestCase

Identificador Entities\Doctrine\TripTestCase#testExists

Descripción Comprueba que la clase \CMMSE\Doctrine\Trip es accesible.

R. Esperado La función interna que comprueba la existencia de clases retorna cierto.

Resultado Satisfactorio

Identificador Entities\Doctrine\TripTestCase#testFetchByID

Descripción Comprueba que la obtención de una instancia conocida de \CMMSE\Doctrine\Trip a través del EntityManager de Doctrine no produce errores.

R. Esperado Se obtiene una referencia no nula a una instancia de la clase con el identificador esperado.

Resultado Satisfactorio

Identificador Entities\Doctrine\TripTestCase#testGetters

Descripción Comprueba que los valores devueltos por los distintos métodos de lectura de los datos del objeto son consistentes entre sí.

R. Esperado Todos los métodos de lectura de datos referidos al mismo atributo retornan el mismo valor.

Resultado Satisfactorio

Identificador Entities\Doctrine\TripTestCase#testSetters

Descripción Comprueba que los métodos de modificación de datos funcionan correctamente y cambian el estado interno de la clase de la forma esperada.

R. Esperado El estado interno del objeto se modifica, y la posterior lectura de los datos modificados retorna los valores esperados.

Resultado Satisfactorio

Identificador Entities\Doctrine\TripTestCase#testAccessors

Descripción Comprueba que la escritura de datos utilizando la sintaxis de array y los métodos mágicos de PHP funcionan correctamente.

R. Esperado El estado interno del objeto se modifica, y la posterior lectura de los datos modificados retorna los valores esperados.

Resultado Satisfactorio

UserTestCase

Identificador Entities\Doctrine\UserTestCase#testExists

Descripción Comprueba que la clase \CMMSE\Doctrine\User es accesible.

R. Esperado La función interna que comprueba la existencia de clases retorna cierto.

Resultado Satisfactorio

Identificador Entities\Doctrine\UserTestCase#testFetchByID

Descripción Comprueba que la obtención de una instancia conocida de \CMMSE\Doctrine\User a través del EntityManager de Doctrine no produce errores.

R. Esperado Se obtiene una referencia no nula a una instancia de la clase con el identificador esperado.

Resultado Satisfactorio

Page 453: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Pruebas | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 453

Identificador Entities\Doctrine\UserTestCase#testGetters

Descripción Comprueba que los valores devueltos por los distintos métodos de lectura de los datos del objeto son consistentes entre sí.

R. Esperado Todos los métodos de lectura de datos referidos al mismo atributo retornan el mismo valor.

Resultado Satisfactorio

Identificador Entities\Doctrine\UserTestCase#testSetters

Descripción Comprueba que los métodos de modificación de datos funcionan correctamente y cambian el estado interno de la clase de la forma esperada.

R. Esperado El estado interno del objeto se modifica, y la posterior lectura de los datos modificados retorna los valores esperados.

Resultado Satisfactorio

Identificador Entities\Doctrine\UserTestCase#testAccessors

Descripción Comprueba que la escritura de datos utilizando la sintaxis de array y los métodos mágicos de PHP funcionan correctamente.

R. Esperado El estado interno del objeto se modifica, y la posterior lectura de los datos modificados retorna los valores esperados.

Resultado Satisfactorio

UserBillingInfoTestCase

Identificador Entities\Doctrine\UserBillingInfoTestCase#testExists

Descripción Comprueba que la clase \CMMSE\Doctrine\UserBillingInfo es accesible.

R. Esperado La función interna que comprueba la existencia de clases retorna cierto.

Resultado Satisfactorio

Identificador Entities\Doctrine\UserBillingInfoTestCase#testFetchRandom

Descripción Comprueba que la obtención de una instancia aleatoria de \CMMSE\Doctrine\UserBillingInfo a través del EntityManager de Doctrine no produce errores.

R. Esperado Se obtiene una referencia no nula a una instancia de la clase.

Resultado Satisfactorio

Identificador Entities\Doctrine\UserBillingInfoTestCase#testGetters

Descripción Comprueba que los valores devueltos por los distintos métodos de lectura de los datos del objeto son consistentes entre sí.

R. Esperado Todos los métodos de lectura de datos referidos al mismo atributo retornan el mismo valor.

Resultado Satisfactorio

Identificador Entities\Doctrine\UserBillingInfoTestCase#testSetters

Descripción Comprueba que los métodos de modificación de datos funcionan correctamente y cambian el estado interno de la clase de la forma esperada.

R. Esperado El estado interno del objeto se modifica, y la posterior lectura de los datos modificados retorna los valores esperados.

Resultado Satisfactorio

Page 454: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Pruebas

454 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

7.2.4 Tests\Decorators

ConferenceTestCase

Identificador Decorators\ConferenceTestCase#testInheritance

Descripción Comprueba que la creación de una nueva instancia del decorador a partir de una entidad funciona correctamente.

R. Esperado La instancia del decorador es considerada una subclase de la entidad a partir de la cual ha sido instanciado, y los atributos compartidos con ésta tienen los mismos valores.

Resultado Satisfactorio

Identificador Decorators\ConferenceTestCase#testGetters

Descripción Comprueba que los métodos de lectura para valores adicionales definidos por el decorador retornan los valores esperados.

R. Esperado Los métodos de lectura de los atributos adicionales definidos en el decorador retornan los valores esperados en función de los parámetros utilizados durante su instanciación y de los atributos del objeto a partir del cual ha sido instanciado.

Resultado Satisfactorio

PagoUsuarioTestCase

Identificador Decorators\PagoUsuarioTestCase#testInheritance

Descripción Comprueba que la creación de una nueva instancia del decorador a partir de una entidad funciona correctamente.

R. Esperado La instancia del decorador es considerada una subclase de la entidad a partir de la cual ha sido instanciado, y los atributos compartidos con ésta tienen los mismos valores.

Resultado Satisfactorio

Identificador Decorators\PagoUsuarioTestCase#testGetters

Descripción Comprueba que los métodos de lectura para valores adicionales definidos por el decorador retornan los valores esperados.

R. Esperado Los métodos de lectura de los atributos adicionales definidos en el decorador retornan los valores esperados en función de los parámetros utilizados durante su instanciación.

Resultado Satisfactorio

PaperTestCase

Identificador Decorators\PaperTestCase#testInheritance

Descripción Comprueba que la creación de una nueva instancia del decorador a partir de una entidad funciona correctamente.

R. Esperado La instancia del decorador es considerada una subclase de la entidad a partir de la cual ha sido instanciado, y los atributos compartidos con ésta tienen los mismos valores.

Resultado Satisfactorio

Page 455: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Pruebas | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 455

Identificador Decorators\PaperTestCase#testGetters

Descripción Comprueba que los métodos de lectura para valores adicionales definidos por el decorador retornan los valores esperados.

R. Esperado Los métodos de lectura de los atributos adicionales definidos en el decorador retornan los valores esperados en función de los parámetros utilizados durante su instanciación.

Resultado Satisfactorio

Identificador Decorators\PaperTestCase#testPosterGetters

Descripción Comprueba que los métodos de lectura para valores adicionales definidos por el decorador retornan los valores esperados cuando se proporcionan los atributos adicionales definidos para los posters.

R. Esperado Los métodos de lectura de los atributos adicionales definidos en el decorador retornan los valores esperados en función de los parámetros utilizados durante su instanciación, y los atributos adicionales para los posters coinciden.

Resultado Satisfactorio

Identificador Decorators\PaperTestCase#testPaperDateGetters

Descripción Comprueba que los métodos de lectura para los valores adicionales de fecha definidos por el decorador retornan los valores esperados cuando se proporcionan los atributos adicionales definidos para los posters.

R. Esperado Los métodos de lectura de los atributos adicionales definidos en el decorador retornan los valores esperados en función de los parámetros utilizados durante su instanciación, y los atributos adicionales derivados de la fecha de exposición del poster coinciden.

Resultado Satisfactorio

PosterTestCase

Identificador Decorators\PosterTestCase#testInheritance

Descripción Comprueba que la creación de una nueva instancia del decorador a partir de una entidad funciona correctamente.

R. Esperado La instancia del decorador es considerada una subclase de la entidad a partir de la cual ha sido instanciado, y los atributos compartidos con ésta tienen los mismos valores.

Resultado Satisfactorio

Identificador Decorators\PosterTestCase#testGetters

Descripción Comprueba que los métodos de lectura para los valores adicionales de fecha definidos por el decorador retornan los valores esperados.

R. Esperado Los métodos de lectura de los atributos adicionales definidos en el decorador retornan los valores esperados en función de los atributos del objeto a partir del cual ha sido instanciado, y los distintos métodos de representación de fechas coinciden entre sí.

Resultado Satisfactorio

Page 456: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Pruebas

456 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Identificador Decorators\PosterTestCase#testDeletePoster

Descripción Comprueba que la creación de un nuevo paper de tipo poster y su posterior eliminación funciona correctamente.

R. Esperado La creación y eliminación se realiza sin producirse excepciones, y los métodos que retornan el número de posters enviados por un usuario para el ponente asignado al poster creado retornan los valores esperados.

Resultado Satisfactorio

RoomTestCase

Identificador Decorators\RoomTestCase#testInheritance

Descripción Comprueba que la creación de una nueva instancia del decorador a partir de una entidad funciona correctamente.

R. Esperado La instancia del decorador es considerada una subclase de la entidad a partir de la cual ha sido instanciado, y los atributos compartidos con ésta tienen los mismos valores.

Resultado Satisfactorio

Identificador Decorators\RoomTestCase#testGetters

Descripción Comprueba que los métodos de lectura para los valores adicionales que gestionan la lista de posters asignados a la sala instanciada retornan los valores esperados.

R. Esperado La lista de posters retornada por el decorador coincide con la utilizada para su instanciación, y el método que retorna el número de posters asignados a la sala contiene el número esperado.

Resultado Satisfactorio

SettingsTestCase

Identificador Decorators\SettingsTestCase#testInheritance

Descripción Comprueba que la creación de una nueva instancia del decorador a partir de una entidad funciona correctamente.

R. Esperado La instancia del decorador es considerada una subclase de la entidad a partir de la cual ha sido instanciado, y los atributos compartidos con ésta tienen los mismos valores.

Resultado Satisfactorio

Identificador Decorators\SettingsTestCase#testFetchEmpty

Descripción Comprueba que la creación de una nueva instancia del decorador a partir de una entidad considerada vacía funciona correctamente

R. Esperado Los métodos derivados de los originales que informan de que los datos de la instancia no han sido inicializados a partir de datos leídos de la base de datos retornan cierto, y el método que retorna el identificador asociado en la base de datos para los datos retorna null.

Resultado Satisfactorio

Page 457: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Pruebas | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 457

Identificador Decorators\SettingsTestCase#testGetters

Descripción Comprueba que los métodos para obtener los datos de configuración a través de nombres alternativos funcionan correctamente.

R. Esperado Los métodos originales y los alternativos retornan los mismos valores.

Resultado Satisfactorio

UserBillingTestCase

Identificador Decorators\UserBillingTestCase#testInheritance

Descripción Comprueba que la creación de una nueva instancia del decorador a partir de una entidad funciona correctamente.

R. Esperado La instancia del decorador es considerada una subclase de la entidad a partir de la cual ha sido instanciado, y los atributos compartidos con ésta tienen los mismos valores.

Resultado Satisfactorio

Identificador Decorators\UserBillingTestCase#testGetters

Descripción Comprueba que los métodos de lectura para los valores adicionales definidos por el decorador retornan los valores esperados.

R. Esperado Los métodos de lectura de los atributos adicionales definidos en el decorador retornan los valores esperados en función de los atributos del objeto a partir del cual ha sido instanciado y de los valores proporcionados en su instanciación.

Resultado Satisfactorio

Identificador Decorators\UserBillingTestCase#testGettersDefaultFee

Descripción Comprueba que los métodos de lectura para los valores adicionales definidos por el decorador retornan los valores esperados cuando se proporciona un valor por defecto para la cuota y los datos de un usuario sin una cuota específica asignada.

R. Esperado Los métodos de lectura de los atributos adicionales definidos en el decorador retornan los valores esperados en función de los atributos del objeto a partir del cual ha sido instanciado y de los valores proporcionados en su instanciación. Como cuota del usuario se retorna la cuota por defecto definida.

Resultado Satisfactorio

Identificador Decorators\UserBillingTestCase#testNoDefaultFee

Descripción Comprueba que los métodos de lectura para los valores adicionales definidos por el decorador retornan los valores esperados cuando se proporciona un valor por defecto para la cuota y los datos de un usuario con una cuota específica asignada.

R. Esperado Los métodos de lectura de los atributos adicionales definidos en el decorador retornan los valores esperados en función de los atributos del objeto a partir del cual ha sido instanciado y de los valores proporcionados en su instanciación. Como cuota del usuario no se retorna la cuota por defecto definida.

Resultado Satisfactorio

Page 458: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Pruebas

458 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Identificador Decorators\UserBillingTestCase#testGettersPaid

Descripción Comprueba que los métodos de lectura para los valores adicionales definidos por el decorador retornan los valores esperados cuando se proporcionan los datos de un usuario cuyo pago ha sido confirmado.

R. Esperado Los métodos de lectura de los atributos adicionales definidos en el decorador retornan los valores esperados en función de los atributos del objeto a partir del cual ha sido instanciado y de los valores proporcionados en su instanciación. El flag que indica si el usuario ha pagado y sus alias retornan cierto.

Resultado Satisfactorio

Identificador Decorators\UserBillingTestCase#testGettersNotPaid

Descripción Comprueba que los métodos de lectura para los valores adicionales definidos por el decorador retornan los valores esperados cuando se proporcionan los datos de un usuario cuyo pago no ha sido confirmado.

R. Esperado Los métodos de lectura de los atributos adicionales definidos en el decorador retornan los valores esperados en función de los atributos del objeto a partir del cual ha sido instanciado y de los valores proporcionados en su instanciación. El flag que indica si el usuario ha pagado y sus alias retornan falso.

Resultado Satisfactorio

7.2.5 Tests\Models

AutoresTestCase

Identificador Models\AutoresTestCase#testGetList

Descripción Comprueba que la obtención del listado de autores funciona correctamente.

R. Esperado Una lista no vacía que contiene únicamente instancias de \CMMSE\Decorators\Autor en la que todos ellos tienen su tipo establecido a Ponente y sus números de papers y posters son enteros mayores o iguales que cero.

Resultado Satisfactorio

ConferenciasTestCase

Identificador Models\ConferenciasTestCase#test

Descripción Comprueba que la creación de nuevas conferencias (simposios) a través del modelo de conferencias funciona correctamente.

R. Esperado Un nuevo objeto \CMMSE\Doctrine\Conference no nulo cuya fecha de creación está establecida entre los instantes de llamada y retorno del método addConference() y cuyo título coincide con el esperado.

Resultado Satisfactorio

Identificador Models\ConferenciasTestCase#testEditTitle

Descripción Comprueba que la modificación del título de una conferencia existente a través del modelo de conferencias funciona correctamente.

R. Esperado La lectura posterior de la misma conferencia tras su modificación retorna una conferencia con el nuevo título.

Resultado Satisfactorio

Page 459: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Pruebas | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 459

Identificador Models\ConferenciasTestCase#testDeleteConference

Descripción Comprueba que la eliminación, a través del modelo de conferencias, de una conferencia creada previamente funciona correctamente.

R. Esperado El borrado de la conferencia se completa sin producirse errores, y un intento posterior de lectura de la misma retorna una referencia nula.

Resultado Satisfactorio

Identificador Models\ConferenciasTestCase#testGetDecorator

Descripción Comprueba que la solicitud al modelo de un decorador a partir de una conferencia creada previamente funciona correctamente

R. Esperado Se obtiene una referencia al decorador solicitado, y sus atributos coinciden con los de la conferencia a partir de la cual ha sido creado.

Resultado Satisfactorio

Identificador Models\ConferenciasTestCase#testGetDecoratorNullConf

Descripción Comprueba que la solicitud al modelo de un decorador a partir del identificador de una conferencia inexistente retorna el resultado esperado.

R. Esperado El método retorna null y no se generan excepciones.

Resultado Satisfactorio

Identificador Models\ConferenciasTestCase#testEditBeginDate

Descripción Comprueba que la modificación de la fecha de inicio de una conferencia creada previamente a través del modelo de conferencias funciona correctamente.

R. Esperado La lectura posterior de la misma conferencia tras su modificación retorna una conferencia con la nueva fecha de inicio.

Resultado Satisfactorio

Identificador Models\ConferenciasTestCase#testgetList

Descripción Comprueba que el listado de conferencias a través del modelo de conferencias funciona correctamente. Para ello se crea una nueva conferencia que debe ser retornada en el listado.

R. Esperado Una lista que contiene una conferencia conocida creada previamente.

Resultado Satisfactorio

FacturacionTestCase

Identificador Models\FacturacionTestCase#testGetUserBillingInfo

Descripción Comprueba que la obtención de la información de facturación para un ponente aleatorio funciona correctamente.

R. Esperado La información de facturación del ponente utilizado en la llamada al modelo.

Resultado Satisfactorio

Identificador Models\FacturacionTestCase#testGetUserBillingInfoWrongUser

Descripción Comprueba que la solicitud de la información de facturación para un ponente inexistente funciona correctamente.

R. Esperado La llamada al modelo produce una excepción.

Resultado Satisfactorio

Page 460: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Pruebas

460 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Identificador Models\FacturacionTestCase#testGetUsersNoBillNoFromSpain

Descripción Comprueba que la obtención del listado de usuarios de España sin número de factura asignado funciona correctamente.

R. Esperado Una lista con el número de usuarios esperado (obtenido de forma independiente) en la que éstos tienen el tipo establecido a ponente, el país a España, su CIF y compañía son no nulos y su número de factura es nulo.

Resultado Satisfactorio

Identificador Models\FacturacionTestCase#testGetUsersNoBillRedNoFromSpain

Descripción Comprueba que la obtención del listado de usuarios de España sin número de factura asignado pertenecientes a la red funciona correctamente.

R. Esperado Una lista con el número de usuarios esperado (obtenido de forma independiente) en la que éstos tienen el tipo establecido a ponente, el país a España, su CIF y compañía son no nulos y su número de factura asociado a la red es nulo.

Resultado Satisfactorio

Identificador Models\FacturacionTestCase#testGetUsersWithUnassignedBillNumberNotFromSpain

Descripción Comprueba que la obtención del listado de usuarios de fuera de España sin número de factura asignado funciona correctamente.

R. Esperado Una lista con el número de usuarios esperado (obtenido de forma independiente) en la que éstos tienen el tipo establecido a ponente, su país no es España, su CIF y compañía son no nulos y su número de factura es nulo.

Resultado Satisfactorio

Identificador Models\FacturacionTestCase#testSetUserBillInfo

Descripción Comprueba que la modificación de los datos de facturación de un usuario a través del modelo de facturación funciona correctamente.

R. Esperado La llamada para modificar los datos retorna cierto, y la lectura posterior de los datos de facturación retorna los nuevos datos.

Resultado Satisfactorio

Identificador Models\FacturacionTestCase#testCreateUserBillingInfo

Descripción Comprueba que la creación de los datos de facturación para nuevos ponentes funciona correctamente.

R. Esperado La llamada para crear los nuevos datos de facturación retorna cierto, y la lectura posterior de éstos retorna los datos por defecto esperados.

Resultado Satisfactorio

Identificador Models\FacturacionTestCase#testDeleteUserBillingInfo

Descripción Comprueba que la eliminación de los datos de facturación asociados a un usuario funciona correctamente.

R. Esperado El borrado de los datos de facturación asociados a un usuario recién creado no produce excepciones, y el intento de lectura posterior de éstos retorna null.

Resultado Satisfactorio

Page 461: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Pruebas | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 461

Identificador Models\FacturacionTestCase#testSetPaidFlag

Descripción Comprueba que la modificación del flag que indica que un usuario ha pagado se realiza correctamente.

R. Esperado Las modificaciones del flag retornan cierto, y las lecturas posteriores de los datos de facturación del usuario coinciden con el estado esperado.

Resultado Satisfactorio

Identificador Models\FacturacionTestCase#testSetBillPrintFlago

Descripción Comprueba que la modificación del flag que indica que la factura de un usuario está lista para imprimirse se realiza correctamente.

R. Esperado Las modificaciones del flag retornan cierto, y las lecturas posteriores de los datos de facturación del usuario coinciden con el estado esperado.

Resultado Satisfactorio

Identificador Models\FacturacionTestCase#testGetPaidFlag

Descripción Comprueba que la lectura directa a través del modelo del flag que indica que un usuario ha pagado funciona correctamente.

R. Esperado La lectura del flag retorna el valor esperado tras cada modificación.

Resultado Satisfactorio

Identificador Models\FacturacionTestCase#testUpdateBillNumber

Descripción Comprueba que la modificación directa a través del modelo del número de factura asociado a un usuario funciona correctamente.

R. Esperado La modificación del número de factura de un usuario utilizando un entero aleatorio retorna cierto, y las lecturas posteriores de los datos de facturación del usuario coinciden con el estado esperado.

Resultado Satisfactorio

Identificador Models\FacturacionTestCase#testUpdateBillNumberRed

Descripción Comprueba que la modificación directa a través del modelo del número de factura de red asociado a un usuario funciona correctamente.

R. Esperado La modificación del número de factura de red de un usuario utilizando un entero aleatorio retorna cierto, y las lecturas posteriores de los datos de facturación del usuario coinciden con el estado esperado.

Resultado Satisfactorio

Identificador Models\FacturacionTestCase#testUpdateBillRedFlag

Descripción Comprueba que la modificación directa a través del modelo del flag que indica que un usuario pertenece a la red funciona correctamente.

R. Esperado Las modificaciones del flag retornan cierto, y las lecturas posteriores de los datos de facturación del usuario coinciden con el estado esperado.

Resultado Satisfactorio

Identificador Models\FacturacionTestCase#testDeleteBillNumber

Descripción Comprueba que el borrado directo a través del modelo del número de factura asociado a un usuario funciona correctamente.

R. Esperado El borrado del número de factura retorna cierto, y las lecturas posteriores de los datos de facturación de usuario coinciden con el estado esperado.

Resultado Satisfactorio

Page 462: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Pruebas

462 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Identificador Models\FacturacionTestCase#testSetUserBillFile

Descripción Comprueba que la modificación directa a través del modelo del nombre de archivo del justificante de pago enviado por un usuario funciona correctamente.

R. Esperado La modificación del nombre de archivo del justificante de pago asociado al usuario retorna cierto, y las lecturas posteriores de sus datos de facturación coinciden con el estado esperado.

Resultado Satisfactorio

Identificador Models\FacturacionTestCase#testSetUserBillFileWrongUser

Descripción Comprueba que la modificación directa a través del modelo del nombre de archivo del justificante de pago asociado a un usuario inexistente funciona correctamente.

R. Esperado La llamada al modelo retorna falso sin lanzar excepciones.

Resultado Satisfactorio

Identificador Models\FacturacionTestCase#testSetUserFees

Descripción Comprueba que la modificación directa a través del modelo de la cuota a pagar por un usuario funciona correctamente.

R. Esperado La llamada al modelo retorna cierto, y las lecturas posteriores de los datos de facturación del usuario coinciden con el estado esperado.

Resultado Satisfactorio

Identificador Models\FacturacionTestCase#testSetUserFeesWrongUser

Descripción Comprueba que la modificación directa a través del modelo de la cuota a pagar por un usuario inexistente funciona correctamente.

R. Esperado La llamada al modelo retorna falso sin lanzar excepciones.

Resultado Satisfactorio

Identificador Models\FacturacionTestCase#testSetUserFeesWrongFees

Descripción Comprueba que la modificación directa a través del modelo de la cuota a pagar por un usuario cuando se usa una cantidad no válida funciona correctamente.

R. Esperado La llamada al modelo retorna falso sin lanzar excepciones.

Resultado Satisfactorio

Identificador Models\FacturacionTestCase#testGetUsersWithUnassignedBillNumberFromSpain

Descripción Comprueba que la obtención del listado de usuarios de España sin número de factura asignado funciona correctamente.

R. Esperado Una lista de usuarios en la que éstos tienen el tipo establecido a ponente, su país es España, su CIF y compañía son no nulos, su número de factura es nulo y su flag de pago tiene valor cierto.

Resultado Satisfactorio

FacturasTestCase

Identificador Models\FacturasTestCase#testGetAll

Descripción Comprueba que la obtención del listado de facturas y justificantes funciona correctamente.

R. Esperado Se retorna un listado con tantos elementos como ponentes, sin duplicados, y que solo contiene datos de facturación para usuarios de tipo ponente.

Resultado Satisfactorio

Page 463: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Pruebas | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 463

Identificador Decorators\FacturasTestCase#testGetAllDefaultFee

Descripción Comprueba que la obtención del listado de facturas y justificantes retorna correctamente a los usuarios sin cuota específica asignada.

R. Esperado Se retorna un listado con tantos elementos como ponentes, sin duplicados, que solo contiene datos de facturación para usuarios de tipo ponente, y que contiene a un usuario creado previamente sin cuota específica asignada. Para éste, la cuota retornada es igual a la cuota por defecto.

Resultado Satisfactorio

Identificador Models\FacturasTestCase#testNonDefaultFee

Descripción Comprueba que la obtención del listado de facturas y justificantes retorna correctamente a los usuarios con cuota específica asignada.

R. Esperado Se retorna un listado con tantos elementos como ponentes, sin duplicados, y que contiene a un usuario creado previamente con cuota específica asignada. Para éste, la cuota retornada es distinta de la cuota por defecto.

Resultado Satisfactorio

Identificador Models\FacturasTestCase#testGetProofs

Descripción Comprueba que la obtención del listado de justificantes de pago funciona correctamente.

R. Esperado Se retorna un listado sin duplicados, que solo contiene datos de facturación para usuarios de tipo ponente sin CIF y compañía asignados y con un número de elementos menor o igual al número de ponentes.

Resultado Satisfactorio

Identificador Models\FacturasTestCase#testGetProofsDefaultFee

Descripción Comprueba que la obtención del listado de justificantes de pago retorna correctamente a los usuarios sin cuota específica asignada.

R. Esperado Se retorna un listado sin duplicados, que solo contiene datos de facturación para usuarios de tipo ponente sin CIF y compañía asignados, con un número de elementos menor o igual al número de ponentes, y que contiene a un usuario creado previamente sin CIF ni compañía y sin cuota específica asignada.

Resultado Satisfactorio

Identificador Models\FacturasTestCase#testGetProofsNonDefaultFee

Descripción Comprueba que la obtención del listado de justificantes de pago retorna correctamente a los usuarios con cuota específica asignada.

R. Esperado Se retorna un listado sin duplicados, que solo contiene datos de facturación para usuarios de tipo ponente sin CIF y compañía asignados, con un número de elementos menor o igual al número de ponentes, y que contiene a un usuario creado previamente sin CIF ni compañía y con cuota específica asignada.

Resultado Satisfactorio

Identificador Models\FacturasTestCase#testGetInvoices

Descripción Comprueba que la obtención del listado de facturas funciona correctamente.

R. Esperado Se retorna un listado sin duplicados, que solo contiene datos de facturación para usuarios de tipo ponente con CIF y compañía asignados y con un número de elementos menor o igual al número de ponentes.

Resultado Satisfactorio

Page 464: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Pruebas

464 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Identificador Models\FacturasTestCase#testProofsAndInvoicesDontIntersect

Descripción Comprueba que los conjuntos de facturas y justificantes no intersectan, es decir, los ponentes retornados en la lista de justificantes no aparecen en la lista de facturas y viceversa.

R. Esperado La intersección de los conjuntos de IDs de usuario retornados en la lista de facturas y en la lista de justificantes es vacía.

Resultado Satisfactorio

Identificador Models\FacturasTestCase#testGetUserInvoice

Descripción Comprueba que la obtención de los datos de facturación de un usuario sin CIF y compañía asignados funciona correctamente.

R. Esperado Para un usuario sin CIF y compañía asignados, los datos retornados por el modelo coinciden con los datos leídos en la prueba de forma independiente.

Resultado Satisfactorio

InstrumentationTestCase

Identificador Models\InstrumentationTestCase#testSaveStartTime

Descripción Comprueba que el modelo de instrumentación guarda correctamente el instante de inicio de ejecución de script.

R. Esperado El instante de inicio retornado por el modelo no es nulo y está comprendido entre los instantes inmediatamente anterior y posterior de la llamada al método que almacena el timestamp de inicio de ejecución del script.

Resultado Satisfactorio

Identificador Models\InstrumentationTestCase#testMySQLQueryCount

Descripción Comprueba que el modelo de instrumentación retorna un número de consultas SQL factible.

R. Esperado Un entero mayor o igual que cero.

Resultado Satisfactorio

Identificador Models\InstrumentationTestCase#testGetServerKey

Descripción Comprueba que el modelo de instrumentación obtiene correctamente valores aleatorios referidos al entorno de ejecución del servidor.

R. Esperado El valor retornado para una clave aleatoria de $_SERVER coincide con el valor leído directamente desde la superglobal.

Resultado Satisfactorio

Identificador Models\InstrumentationTestCase#testSaveData

Descripción Comprueba que al guardar los datos de instrumentación no se produce una excepción.

R. Esperado La llamada al método que guarda los datos de instrumentación retorna sin producir excepciones.

Resultado Satisfactorio

Page 465: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Pruebas | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 465

Identificador Models\InstrumentationTestCase#testLoadAvg

Descripción Comprueba que la llamada para obtener los valores medios de carga del sistema de los últimos 1, 5 y 15 minutos funciona correctamente.

R. Esperado Un array con 3 números en coma flotante que representan los valores medios de carga del sistema de los últimos 1, 5 y 15 minutos.

Resultado Satisfactorio

Identificador Models\InstrumentationTestCase#testUname

Descripción Comprueba que la llamada para obtener información de identificación del servidor que ejecuta la aplicación funciona correctamente.

R. Esperado Un array con 5 strings.

Resultado Satisfactorio

Identificador Models\InstrumentationTestCase#testGetInstrumentationData

Descripción Comprueba que el método interno del modelo que genera un objeto que representa los datos de instrumentación para la solicitud actual funciona correctamente y retorna valores factibles.

R. Esperado Un objeto InstrumentationSample cuya cantidad de memoria pico utilizada por el script es mayor o igual a la cantidad obtenida de forma independiente, y cuyos instantes (en coma flotante y redondeados) de inicio de ejecución son menores que los instantes de almacenamiento en la base de datos.

Resultado Satisfactorio

LoginTestCase

Identificador Models\LoginTestCase#testGetUserForCredentialsCorrectPassword

Descripción Comprueba que la obtención de una instancia de usuario a partir de unas credenciales de acceso válidos conocidos funciona correctamente.

R. Esperado Un objeto usuario asociado a las credenciales dados.

Resultado Satisfactorio

Identificador Models\LoginTestCase#testGetUserForCredentialsWrongPassword

Descripción Comprueba que la obtención de una instancia de usuario a partir de un usuario existente y una contraseña incorrecta funciona de la forma esperada.

R. Esperado La llamada al método produce una excepción.

Resultado Satisfactorio

Identificador Models\LoginTestCase#testGetUserForCredentialsWrongLogin

Descripción Comprueba que la obtención de una instancia de usuario a partir de un usuario inexistente funciona de la forma esperada.

R. Esperado La llamada al método produce una excepción.

Resultado Satisfactorio

Identificador Models\LoginTestCase#testEmptyCredentials

Descripción Comprueba que el método que valida los datos de inicio de sesión proporcionados por el usuario funciona correctamente cuando se le proporciona un array vacío como credenciales.

R. Esperado La llamada al modelo retorna falso sin lanzar excepciones.

Resultado Satisfactorio

Page 466: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Pruebas

466 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Identificador Models\LoginTestCase#testCredentialsNoArray

Descripción Comprueba que el método que valida los datos de inicio de sesión proporcionados por el usuario funciona correctamente cuando se le proporcionan un valor nulo como credenciales.

R. Esperado La llamada al modelo retorna falso sin lanzar excepciones.

Resultado Satisfactorio

Identificador Models\LoginTestCase#testCredentialsOK

Descripción Comprueba que el método que valida los datos de inicio de sesión proporcionados por el usuario funciona correctamente cuando se le proporciona un array con credenciales válidos.

R. Esperado La llamada al método retorna cierto.

Resultado Satisfactorio

Identificador Models\LoginTestCase#testLogout

Descripción Comprueba que el método de finalización de sesión funciona correctamente cuando es llamado sobre los datos de una sesión de un usuario identificado.

R. Esperado Los datos de la sesión son modificados de forma que el identificador del usuario actual es borrado, el campo que indica el identificador de usuario anterior es actualizado, el campo que indica si la sesión corresponde a un administrador es puesto a falso y el campo que indica si la sesión correspondía previamente a un administrador toma el valor esperado.

Resultado Satisfactorio

Identificador Models\LoginTestCase#testSetSessionUser

Descripción Comprueba que el método que asocia una sesión a un usuario funciona correctamente al aplicarse sobre una sesión de invitado.

R. Esperado El usuario asociado a la sesión es actualizado y coincide con el utilizado en la llamada previa.

Resultado Satisfactorio

PapersTestCase

Identificador Models\PapersTestCase#testGetPaperList

Descripción Comprueba que el método que lista los papers enviados funciona correctamente.

R. Esperado La llamada al método retorna un array de instancias de \CMMSE\Doctrine\Paper.

Resultado Satisfactorio

Identificador Models\PapersTestCase#testGetDecoratorList

Descripción Comprueba que el método que retorna la lista de decoradores para todos los papers enviados funciona correctamente.

R. Esperado La llamada al método retorna un array de instancias de \CMMSE\Decorators\Paper con tantos elementos como papers hay en la base de datos. Además, para los papers de tipo poster los objetos devueltos contienen la información adicional asociada a éstos.

Resultado Satisfactorio

Page 467: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Pruebas | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 467

Identificador Models\PapersTestCase#testGetDecoratorListWrongUser

Descripción Comprueba que el método que retorna la lista de decoradores para todos los papers enviados tiene el funcionamiento esperado cuando existen papers asignados a usuarios inexistentes.

R. Esperado La llamada al método produce una excepción.

Resultado Satisfactorio

Identificador Models\PapersTestCase#testGetPaper

Descripción Comprueba que el método que obtiene la información asociada a un paper concreto funciona correctamente.

R. Esperado La llamada al método retorna una instancia que representa al paper esperado.

Resultado Satisfactorio

Identificador Models\PapersTestCase#testSetPaperFilename

Descripción Comprueba que el método que modifica el nombre de archivo asociado al primer envío de un paper funciona correctamente.

R. Esperado La llamada al método no produce excepciones, y la lectura posterior de los datos asociados al paper refleja el cambio realizado.

Resultado Satisfactorio

Identificador Models\PapersTestCase#testSetPaperNewFilename

Descripción Comprueba que el método que modifica el nombre de archivo asociado al último envío de un paper funciona correctamente.

R. Esperado La llamada al método no produce excepciones, y la lectura posterior de los datos asociados al paper refleja el cambio realizado.

Resultado Satisfactorio

Identificador Models\PapersTestCase#testResetPaperNewFilename

Descripción Comprueba que el borrado del nombre de archivo asociado al último envío de un paper funciona correctamente.

R. Esperado La llamada al método no produce excepciones, y la lectura posterior de los datos asociados al paper refleja el cambio realizado.

Resultado Satisfactorio

Identificador Models\PapersTestCase#testSetDecisionFlag

Descripción Comprueba que la modificación del flag de decisión asociado a un paper funciona correctamente.

R. Esperado La llamada al método no produce excepciones, y la lectura posterior de los datos asociados al paper refleja el cambio realizado.

Resultado Satisfactorio

Identificador Models\PapersTestCase#testSetAcceptedFlag

Descripción Comprueba que la modificación del flag que indica que un paper ha sido aceptado funciona correctamente.

R. Esperado La llamada al método no produce excepciones, y la lectura posterior de los datos asociados al paper refleja el cambio realizado.

Resultado Satisfactorio

Page 468: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Pruebas

468 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Identificador Models\PapersTestCase#testSetPaperTitle

Descripción Comprueba que el cambio del título de un paper funciona correctamente.

R. Esperado La llamada al método no produce excepciones, y la lectura posterior de los datos asociados al paper refleja el cambio realizado.

Resultado Satisfactorio

Identificador Models\PapersTestCase#testGetPapersByTitle

Descripción Comprueba que el listado de papers cuyo título es igual a uno conocido funciona correctamente.

R. Esperado La llamada al método devuelve una lista con un único paper cuyo título coincide con el esperado.

Resultado Satisfactorio

Identificador Models\PapersTestCase#test

Descripción Comprueba que el listado de papers de un ponente cuyo título es igual a uno conocido funciona correctamente.

R. Esperado La llamada al método devuelve una lista que contiene un paper conocido cuyo título coincide con el esperado y cuyo usuario asociado es igual al esperado.

Resultado Satisfactorio

Identificador Models\PapersTestCase#testGetPosterInfoNoPoster

Descripción Comprueba que la solicitud de información asociada a un poster, al realizarse sobre un paper que no es de tipo poster, retorna el resultado esperado.

R. Esperado La llamada al método retorna falso sin producir excepciones.

Resultado Satisfactorio

Identificador Models\PapersTestCase#testDeletePaper

Descripción Comprueba que el borrado de un paper conocido funciona correctamente.

R. Esperado La llamada al método retorna cierto sin producir excepciones.

Resultado Satisfactorio

Identificador Models\PapersTestCase#testGetPapersLocalPath

Descripción Comprueba que el método que retorna el directorio local donde se almacenan los archivos de los papers funciona correctamente.

R. Esperado La llamada al método retorna un string que representa la ruta de un directorio sobre el cual el servidor posee permisos de escritura.

Resultado Satisfactorio

Identificador Models\PapersTestCase#testGetPostersListAll

Descripción Comprueba que el método que lista los papers de tipo poster funciona correctamente.

R. Esperado La llamada al método retorna un array de decoradores de tipo Poster, y el paper asociado a los mismos es de tipo poster.

Resultado Satisfactorio

Page 469: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Pruebas | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 469

Identificador Models\PapersTestCase#testGetPosterListAccepted

Descripción Comprueba que el método que lista los papers de tipo poster, cuando se solicita que solo se listen aquellos que han sido aceptados, funciona correctamente.

R. Esperado La llamada al método retorna un array de decoradores de tipo poster cuyo paper asociado es de tipo poster y está en estado aceptado, y contiene como máximo tantos elementos como papers han sido enviados.

Resultado Satisfactorio

Identificador Models\PapersTestCase#testGetPosterListNotAccepted

Descripción Comprueba que el método que lista los papers de tipo poster, cuando se solicita que solo se listen aquellos que no han sido aceptados, funciona correctamente.

R. Esperado La llamada al método retorna un array de decoradores de tipo poster cuyo paper asociado es de tipo poster y no está en estado aceptado, y contiene como máximo tantos elementos como papers han sido enviados.

Resultado Satisfactorio

Identificador Models\PapersTestCase#testGetPosterListTypesDontIntersect

Descripción Comprueba que los conjuntos de posters aceptados y no aceptados no intersectan, es decir, los posters retornados en la lista de aceptados no aparecen en la lista de no aceptados y viceversa.

R. Esperado La intersección de los conjuntos de IDs de posters retornados en ambas listas es vacía.

Resultado Satisfactorio

Identificador Models\PapersTestCase#testGetDecoratorListCount

Descripción Comprueba que el método que lista todos los papers incluyendo información adicional funciona correctamente.

R. Esperado La llamada al método retorna un array con tantos decoradores como papers han sido enviados, y el tipo de dato de sus elementos es el correcto.

Resultado Satisfactorio

Identificador Models\PapersTestCase#testGetUserPaper

Descripción Comprueba que el método para obtener información de un paper a partir de su identificador y del usuario que lo envió funciona correctamente.

R. Esperado La llamada al método retorna un paper cuyo identificador, título y usuario asociado coinciden con los esperados.

Resultado Satisfactorio

Identificador Models\PapersTestCase#testGetUserPaperVarAuthors

Descripción Comprueba que el método para obtener información de un paper a partir de su identificador y del usuario que lo envió retorna un paper cuya información de autores es correcta.

R. Esperado La llamada al método retorna un paper para el cual, siendo n el número de autores asignados, los primeros n autores son no nulos y los siguientes (9-n) autores son nulos.

Resultado Satisfactorio

Page 470: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Pruebas

470 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Identificador Models\PapersTestCase#testGetPaperListForUser

Descripción Comprueba que el método que lista todos los papers para un usuario funciona correctamente.

R. Esperado La lista de papers retornada contiene un número de elementos igual al número de papers (obtenido de forma independiente) asignados al usuario indicado, y contiene un paper aleatorio asignado al usuario obtenido previamente.

Resultado Satisfactorio

Identificador Models\PapersTestCase#testGetPaperTitlesForUser

Descripción Comprueba que el listado de títulos de papers para un usuario funcoina correctamente.

R. Esperado La lista de títulos contiene tantos elementos como papers hay asignados al usuario, y no contiene títulos que no correspondan a papers del usuario.

Resultado Satisfactorio

PapersDeleteTestCase

Identificador Models\PapersDeleteTestCase#testDeleteUserPapers

Descripción Comprueba que la eliminación de todos los papers asociados a un usuario funciona correctamente.

R. Esperado El número de papers asociados a un usuario se es igual a cero tras el borrado de éstos, y el número total de papers en el sistema se decrementa en una cantidad igual al número de papers asociados al usuario.

Resultado Satisfactorio

PapersInsertTestCase

Identificador Models\PapersInsertTestCase#testInsertPaper

Descripción Comprueba que la creación de nuevos papers en la base de datos funciona correctamente.

R. Esperado La llamada al método de creación de nuevo paper retorna el identificador del paper creado, su lectura posterior retorna una instancia de Paper con los valores esperados, y el número de papers totales en el sistema y asociados al usuario se incrementan en una unidad.

Resultado Satisfactorio

PaymentsTestCase

Identificador Models\PaymentsTestCase#testLocks

Descripción Comprueba que la llamada a los métodos de obtención y liberación de bloqueos sobre la tabla de configuración de pagos funciona correctamente.

R. Esperado Las llamadas al modelo para obtener y liberar el bloqueo sobre la tabla de configuración de pagos no producen excepciones.

Resultado Satisfactorio

Page 471: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Pruebas | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 471

Identificador Models\PaymentsTestCase#testGetPaymentSettings

Descripción Comprueba que la lectura de la configuración de pagos funciona correctamente.

R. Esperado La llamada al modelo para obtener los datos de configuración de pagos retorna una instancia de la clase PaymentSettings.

Resultado Satisfactorio

Identificador Models\PaymentsTestCase#testSetPaymentSettings

Descripción Comprueba que la modificación de la configuración de pagos a través del método proporcionado por el modelo funciona correctamente.

R. Esperado La llamada al método no produce excepciones.

Resultado Satisfactorio

Identificador Models\PaymentsTestCase#testGetPaymentSettingsExceptions

Descripción Comprueba que el intento de lectura de la configuración de pagos, cuando ésta no está disponible, produce una excepción. Para ello se modifica el identificador de configuración esperado por el modelo en la base de datos.

R. Esperado La llamada al método produce una excepción.

Resultado Satisfactorio

PosterTestCase

Identificador Models\PosterTestCase#testInsertPoster

Descripción Comprueba que la creación de un nuevo paper de tipo poster a través del modelo funciona correctamente.

R. Esperado La llamada al método no produce excepciones y retorna una instancia de tipo Paper con los valores esperados. El número total de papers enviados y asociados al usuario se incrementan en una unidad.

Resultado Satisfactorio

Identificador Models\PosterTestCase#testSetDates

Descripción Comprueba que la modificación de las fechas asociadas a un poster a través del modelo funciona correctamente.

R. Esperado La llamada al método de modificación de fechas retorna cierto, y la lectura posterior de los datos adicionales de poster asociados al paper retorna un objeto con las fechas esperadas.

Resultado Satisfactorio

Identificador Models\PosterTestCase#testSetDatesWrongID

Descripción Comprueba que la modificación de fechas para papers inexistentes funciona correctamente.

R. Esperado La llamada al método de modificación de fechas retorna falso sin producir excepciones.

Resultado Satisfactorio

Identificador Models\PosterTestCase#testSetRoom

Descripción Comprueba que la modificación de la sala asociada a un paper a través del modelo funciona correctamente.

R. Esperado La llamada al método que obtiene la información adicional del poster retorna una instancia con la nueva sala asociada.

Resultado Satisfactorio

Page 472: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Pruebas

472 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Identificador Models\PosterTestCase#testUnsetRoom

Descripción Comprueba que la eliminación de la asociación de una sala a un paper funciona correctamente.

R. Esperado La llamada al método que obtiene información adicional del poster tras la eliminación de su asociación con una sala retorna una instancia con la sala establecida a null.

Resultado Satisfactorio

Identificador Models\PosterTestCase#testSetRoomWrongID

Descripción Comprueba que la modificación de la sala asociada a un paper inexistente funciona de la manera esperada.

R. Esperado La llamada al método de modificación retorna falso sin producir excepciones.

Resultado Satisfactorio

Identificador Models\PosterTestCase#testDeletePoster

Descripción Comprueba que la eliminación de papers de tipo poster funciona correctamente.

R. Esperado La llamada al método de borrado sobre un poster creado previamente funciona correctamente, y el intento de lectura posterior retorna null.

Resultado Satisfactorio

RoomsTestCase

Identificador Models\RoomsTestCase#testCreateAndDeleteRoom

Descripción Comprueba que la creación y posterior eliminación de una sala a través del modelo funciona correctamente.

R. Esperado La llamada al método de creación de la nueva sala retorna el identificador de la sala creada y su borrado posterior no produce excepciones.

Resultado Satisfactorio

Identificador Models\RoomsTestCase#testGetRoom

Descripción Comprueba que la obtención de los datos de una sala a partir de su identificador a través del modelo funciona correctamente.

R. Esperado La llamada al método del modelo retorna una instancia de la sala solicitada.

Resultado Satisfactorio

Identificador Models\RoomsTestCase#testGetNonExistingRoom

Descripción Comprueba que la obtención de los datos de una sala a partir de un identificador de sala inexistente funciona de la manera esperada.

R. Esperado La llamada al método del modelo produce una excepción.

Resultado Satisfactorio

Identificador Models\RoomsTestCase#testSetRoomName

Descripción Comprueba que la modificación del nombre de una sala a través del modelo funciona correctamente.

R. Esperado La llamada al método del modelo para modificar el nombre de la sala no produce excepciones, y la lectura posterior de sus datos retorna un objeto con el nuevo nombre.

Resultado Satisfactorio

Page 473: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Pruebas | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 473

Identificador Models\RoomsTestCase#testGetExtendedRoomInfo

Descripción Comprueba que la solicitud de los datos adicionales de una sala existente funciona correctamente.

R. Esperado La llamada al modelo retorna una instancia de \CMMSE\Decorators\Room cuyo identificador coincide con el solicitado.

Resultado Satisfactorio

Identificador Models\RoomsTestCase#testGetRoomList

Descripción Comprueba que el listado de las salas funciona correctamente.

R. Esperado La llamada al método retorna una lista de salas con tantos elementos como salas existen en la base de datos ordenados alfabéticamente por el nombre de sala en sentido decreciente.

Resultado Satisfactorio

Identificador Models\RoomsTestCase#testDeleteNonExistingRoom

Descripción Comprueba que la solicitud de borrado de una sala a partir de un identificador de sala inexistente funciona de la manera esperada.

R. Esperado La llamada al método del modelo produce una excepción.

Resultado Satisfactorio

SessionTestCase

Identificador Models\SessionTestCase#testOpenCloseSession

Descripción Comprueba que la apertura y cierre de una sesión a través del modelo funciona correctamente.

R. Esperado La apertura y cierre de la sesión se realiza correctamente. Esta prueba no se ha realizado al ser imposible el envío de cookies de sesión desde PHPUnit.

Resultado No satisfactorio

Identificador Models\SessionTestCase#testReadWrite

Descripción Comprueba que la escritura de los datos de sesión y posterior lectura de los mismos funciona correctamente y los resultados obtenidos son coherentes entre sí.

R. Esperado La escritura de los datos de una nueva sesión retorna cierto, y la posterior lectura de los mismos retorna los datos proporcionados previamente.

Resultado Satisfactorio

Identificador Models\SessionTestCase#testReadNonExisting

Descripción Comprueba que la lectura de los datos de sesión para sesiones inexistentes retorna el resultado esperado por el gestor interno de sesiones de PHP.

R. Esperado La solicitud de lectura a partir de un identificador de sesión inexistente retorna una cadena vacía.

Resultado Satisfactorio

Identificador Models\SessionTestCase#testDestroy

Descripción Comprueba que el borrado de los datos de sesión para sesiones creadas previamente funciona de la forma esperada por el gestor interno de sesiones de PHP.

R. Esperado La llamada al método de destrucción de sesión retorna cierto, y una posterior solicitud de lectura de la sesión retorna una cadena vacía.

Resultado Satisfactorio

Page 474: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Pruebas

474 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Identificador Models\SessionTestCase#testGC

Descripción Comprueba que la llamada al recolector de basura para sesiones inactivas funciona de la forma esperada por PHP.

R. Esperado La llamada al método retorna cierto.

Resultado Satisfactorio

Identificador Models\SessionTestCase#testOpen

Descripción Comprueba que la llamada al método de apertura de sesiones funciona de la forma esperada por PHP.

R. Esperado La llamada al método retorna cierto.

Resultado Satisfactorio

Identificador Models\SessionTestCase#testClose

Descripción Comprueba que la llamada al método de cierre de sesión funciona de la forma esperada por PHP.

R. Esperado La llamada al método retorna cierto.

Resultado Satisfactorio

SettingsTestCase

Identificador Models\SettingsTestCase#testGetSettings

Descripción Comprueba que la lectura de la configuración del sitio a través del modelo funciona correctamente.

R. Esperado La llamada al método retorna una instancia de \CMMSE\Doctrine\Settings.

Resultado Satisfactorio

Identificador Models\SettingsTestCase#testGetSettingsNotFound

Descripción Comprueba que la lectura de la configuración del sitio a través del modelo utilizando un identificador de fila de la base de datos incorrecto funciona correctamente.

R. Esperado La llamada al método cuando éste utiliza un identificador de fila incorrecto retorna una instancia de \CMMSE\Doctrine\Settings por defecto.

Resultado Satisfactorio

Identificador Models\SettingsTestCase#testSetSettings

Descripción Comprueba que la llamada al método de modificación de la configuración del sitio a través del modelo a partir de una instancia de configuración válida funciona correctamente.

R. Esperado La llamada al método de modificación no produce excepciones.

Resultado Satisfactorio

Identificador Models\SettingsTestCase#testGetMailSettings

Descripción Comprueba que la lectura de la configuración de envío de correos a través del modelo funciona correctamente.

R. Esperado La llamada al método retorna una instancia de \CMMSE\Doctrine\MailerSettings.

Resultado Satisfactorio

Page 475: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Pruebas | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 475

Identificador Models\SettingsTestCase#testGetMailSettingsNotFound

Descripción Comprueba que la lectura de la configuración de envío de correos a través del modelo utilizando un identificador de fila de la base de datos incorrecto funciona correctamente.

R. Esperado La llamada al método cuando éste utiliza un identificador de fila incorrecto retorna una instancia de \CMMSE\Doctrine\MailerSettings por defecto.

Resultado Satisfactorio

Identificador Models\SettingsTestCase#testSetMailerSettings

Descripción Comprueba que la llamada al método de modificación de la configuración de envío de correos a través del modelo a partir de una instancia de configuración de envío de correos válida funciona correctamente.

R. Esperado La llamada al método de modificación no produce excepciones.

Resultado Satisfactorio

Identificador Models\SettingsTestCase#testGetTipoEtiqueta

Descripción Comprueba que la lectura del tipo de etiqueta configurado a través del modelo funciona correctamente.

R. Esperado La llamada al método de obtención del tipo de etiqueta configurado retorna un entero.

Resultado Satisfactorio

Identificador Models\SettingsTestCase#testSetPlazo

Descripción Comprueba que el cambio del estado de plazo de envío (abierto o cerrado) se produce correctamente.

R. Esperado La llamada al método de cambio del estado de plazo de envío para establecer un valor opuesto al estado actual funciona correctamente, y la lectura posterior de la configuración retorna una instancia de configuración con el nuevo valor.

Resultado Satisfactorio

Identificador Models\SettingsTestCase#testSetDBOpen

Descripción Comprueba que el cambio del estado de apertura de la base de datos se produce correctamente.

R. Esperado La llamada al método de cambio del estado apertura de la base de datos para establecer un valor opuesto al estado actual funciona correctamente, y la lectura posterior de la configuración retorna una instancia de configuración con el nuevo valor.

Resultado Satisfactorio

Identificador Models\SettingsTestCase#testSetRedSettings

Descripción Comprueba que la modificación de la configuración de los parámetros de la red a través del modelo funciona correctamente.

R. Esperado La llamada al método de modificación de la configuración de la red no produce excepciones, y la lectura posterior de la configuración retorna una instancia de configuración con los nuevos valores.

Resultado Satisfactorio

Page 476: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Pruebas

476 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Identificador Models\SettingsTestCase#testSetNullMail

Descripción Comprueba que el cambio de las direcciones de correo a las que enviar notificaciones se produce correctamente cuando se desea borrar las asignadas.

R. Esperado La llamada al método de cambio de las direcciones de correo a las que enviar notificaciones sin parámetros elimina las direcciones configuradas, y la lectura posterior de las mismas retorna un valor nulo.

Resultado Satisfactorio

StatsTestCase

Identificador Models\StatsTestCase#testGetValues

Descripción Comprueba que los valores estadísticos se calculan correctamente.

R. Esperado Los totales obtenidos a través del modelo coinciden con valores calculados previamente de forma independiente, y los valores totales referidos al total de entidades de cada tipo y referidos a subconjuntos de éstas coinciden entre sí.

Resultado Satisfactorio

Identificador Models\StatsTestCase#testGetCountryRatios

Descripción Comprueba que los valores de número de ponentes por país son consistentes con el número de ponentes registrados.

R. Esperado La suma del número de ponentes obtenidos para de cada país coincide con el número total de ponentes registrados.

Resultado Satisfactorio

TripsTestCase

Identificador Models\TripsTestCase#testCreateAndDeleteTrip

Descripción Comprueba que la creación y posterior eliminación de una excursión a través del modelo funciona correctamente.

R. Esperado La llamada al método de creación de la nueva excursión retorna el identificador de la excursión creada y su borrado posterior no produce excepciones.

Resultado Satisfactorio

Identificador Models\TripsTestCase#testGetTrip

Descripción Comprueba que la obtención de los datos de una excursión a partir de su identificador a través del modelo funciona correctamente.

R. Esperado La llamada al método del modelo retorna una instancia de la excursión solicitada.

Resultado Satisfactorio

Identificador Models\TripsTestCase#testGetNonExistingTrip

Descripción Comprueba que la obtención de los datos de una excursión a partir de un identificador de excursión inexistente funciona de la manera esperada.

R. Esperado La llamada al método del modelo produce una excepción.

Resultado Satisfactorio

Page 477: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Pruebas | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 477

Identificador Models\TripsTestCase#testSetTripName

Descripción Comprueba que la modificación del nombre de una excursión a través del modelo funciona correctamente.

R. Esperado La llamada al método del modelo para modificar el nombre de la excursión no produce excepciones, y la lectura posterior de sus datos retorna un objeto con el nuevo nombre.

Resultado Satisfactorio

Identificador Models\TripsTestCase#testGetTripList

Descripción Comprueba que el listado de las excursiones funciona correctamente.

R. Esperado La llamada al método retorna una lista de excursiones con tantos elementos como excursiones existen en la base de datos ordenados alfabéticamente en sentido decreciente por el nombre de sala.

Resultado Satisfactorio

Identificador Models\TripsTestCase#testDeleteNonExistingTrip

Descripción Comprueba que la solicitud de borrado de una excursión a partir de un identificador de excursión inexistente funciona de la manera esperada.

R. Esperado La llamada al método del modelo produce una excepción.

Resultado Satisfactorio

UserTestCase

Identificador Models\UserTestCase#testGetTitles

Descripción Comprueba que el listado de títulos honoríficos guardados en la base de datos funciona correctamente.

R. Esperado La llamada al método del modelo retorna un array con los mismos títulos obtenidos a través de una lectura independiente de la base de datos.

Resultado Satisfactorio

Identificador Models\UserTestCase#testGetRandomPassword

Descripción Comprueba que la generación de una contraseña aleatoria funciona correctamente.

R. Esperado La llamada al método del modelo produce un string con una contraseña no nula de longitud mayor o igual a 10.

Resultado Satisfactorio

Identificador Models\UserTestCase#testGetUserObj

Descripción Comprueba que la obtención de los datos de un usuario conocido funciona correctamente.

R. Esperado La llamada al método retorna una instancia de usuario cuyo identificador coincide con el de un usuario creado previamente.

Resultado Satisfactorio

Identificador Models\UserTestCase#testGetUserObjWrongID

Descripción Comprueba que la obtención de los datos de un usuario a partir de un identificador de usuario inexistente funciona de la manera esperada.

R. Esperado La llamada al método del modelo produce una excepción de tipo \CMMSE\Exceptions\UnknownUserException.

Resultado Satisfactorio

Page 478: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Pruebas

478 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Identificador Models\UserTestCase#testGetUsers

Descripción Comprueba que la obtención de los datos de un conjunto de usuarios conocido a partir de sus identificadores funciona correctamente.

R. Esperado La llamada al método proporcionando retorna un array que contiene únicamente el identificador de un usuario conocido (creado previamente) retorna un array de instancias de \CMMSE\Doctrine\User que contiene como único elemento al usuario creado.

Resultado Satisfactorio

Identificador Models\UserTestCase#testGetUsersEmptyIDs

Descripción Comprueba que la obtención de los datos de un conjunto de usuarios vacío funciona correctamente.

R. Esperado La llamada al método retorna un array vacío sin producir excepciones.

Resultado Satisfactorio

Identificador Models\UserTestCase#testGetUsersWrongIDs

Descripción Comprueba que la obtención de los datos de un conjunto de usuarios inexistente funciona de la manera esperada.

R. Esperado La llamada al método proporcionando un array que contiene únicamente el identificador de un usuario inexistente produce una excepción de tipo \CMMSE\Exceptions\UnknownUserException.

Resultado Satisfactorio

Identificador Models\UserTestCase#testTestUserPassword

Descripción Comprueba que el método de comprobación de contraseña para un usuario con contraseña conocida funciona de la manera esperada cuando se proporciona la contraseña correcta

R. Esperado La llamada al método retorna cierto.

Resultado Satisfactorio

Identificador Models\UserTestCase#testSetUserPassword

Descripción Comprueba que el método del modelo de modificación de contraseñas de usuario funciona correctamente.

R. Esperado La creación de un nuevo usuario utilizando una contraseña conocida retorna un usuario cuyo hash de contraseña coincide con el de la contraseña utilizada, y la posterior modificación de la misma modifica el hash de contraseña al valor esperado.

Resultado Satisfactorio

Identificador Models\UserTestCase#testDeleteUser

Descripción Comprueba que la eliminación de usuarios a través del modelo funciona correctamente.

R. Esperado La llamada al método de borrado no produce excepciones, y el intento de lectura directa posterior del mismo retorna null.

Resultado Satisfactorio

Page 479: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Pruebas | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 479

Identificador Models\UserTestCase#testInsertUser

Descripción Comprueba que la creación de nuevos usuarios a través del modelo funciona correctamente.

R. Esperado La llamada al método de creación de nuevo usuario no produce excepciones, retorna un identificador de usuario positivo, y la lectura posterior del mismo retorna una instancia con los datos esperados.

Resultado Satisfactorio

Identificador Models\UserTestCase#testUpdateUser

Descripción Comprueba que la modificación de los datos de usuarios existentes funciona correctamente.

R. Esperado La llamada al método de modificación retorna cierto, y la lectura posterior de los datos asociados al mismo retorna una instancia con los datos actualizados.

Resultado Satisfactorio

Identificador Models\UserTestCase#testUpdateUserWrongUser

Descripción Comprueba que la modificación de los datos de usuarios inexistentes funciona correctamente.

R. Esperado La llamada al método de modificación utilizando un identificador de usuario inexistente retorna falso y no produce excepciones.

Resultado Satisfactorio

7.2.6 Tests\Models\Factories

ModelFactoryTestCase

Identificador Models\Factories\ModelFactoryTestCase#testGetModel

Descripción Comprueba que la instanciación de modelos a partir de interfaces conocidas funciona correctamente.

R. Esperado Para cada interfaz, se retorna un objeto que implementa la interfaz de modelo solicitada.

Resultado Satisfactorio

Identificador Models\Factories\ModelFactoryTestCase#testGetNonExistingModel

Descripción Comprueba que la instanciación de modelos a partir de interfaces desconocidas funciona de la manera esperada.

R. Esperado La llamada al método de obtención de modelo utilizando una interfaz inexistente produce una excepción.

Resultado Satisfactorio

Page 480: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Pruebas

480 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

7.2.7 Tests\Controllers\Admin\PDF

CertificadosTestCase

Identificador Controllers\Admin\PDF\CertificadosTestCase#testGetAll

Descripción Comprueba que el archivo PDF que contiene todos los certificados de asistencia se genera correctamente.

R. Esperado La acción para obtener todos los certificados del controlador retorna una instancia de la clase PDFResponse cuyo nombre de archivo es certificates_all.pdf que contiene tantas páginas como ponentes hay registrados, y éstas son de tipo plantilla.

Resultado Satisfactorio

Identificador Controllers\Admin\PDF\CertificadosTestCase#testGetAllPaid

Descripción Comprueba que el archivo PDF que contiene todos los certificados de asistencia para los ponentes que han pagado se genera correctamente.

R. Esperado La acción para obtener todos los certificados del controlador retorna una instancia de la clase PDFResponse cuyo nombre de archivo es certificates_all_paid.pdf que contiene tantas páginas como ponentes han pagado, y éstas son de tipo plantilla.

Resultado Satisfactorio

Identificador Controllers\Admin\PDF\CertificadosTestCase#testGetOne

Descripción Comprueba que el archivo PDF que contiene el certificado de asistencia de un único ponente se genera correctamente.

R. Esperado La acción para obtener el certificado de un ponente del controlador retorna una instancia de la clase PDFResponse cuyo nombre de archivo es certificate.pdf que contiene una única página, y ésta es de tipo plantilla.

Resultado Satisfactorio

Identificador Controllers\Admin\PDF\CertificadosTestCase#testGetOneEmptyID

Descripción Comprueba que el archivo PDF que contiene el certificado de asistencia de un único ponente genera la respuesta esperada cuando no se proporciona un ID de usuario.

R. Esperado La acción para obtener el certificado de un ponente del controlador retorna una instancia de la clase PDFResponse cuyo nombre de archivo es nulo, sin páginas, y con valor 4040 para el campo que representa el código de error.

Resultado Satisfactorio

Identificador Controllers\Admin\PDF\CertificadosTestCase#testGetOneNegativeID

Descripción Comprueba que el archivo PDF que contiene el certificado de asistencia de un único ponente genera la respuesta esperada cuando se proporciona un ID de usuario negativo.

R. Esperado La acción para obtener el certificado de un ponente del controlador retorna una instancia de la clase PDFResponse cuyo nombre de archivo es nulo, sin páginas, y con valor 4040 para el campo que representa el código de error.

Resultado Satisfactorio

Page 481: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Pruebas | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 481

Identificador Controllers\Admin\PDF\CertificadosTestCase#testGetSelected

Descripción Comprueba que el archivo PDF que contiene el certificado de asistencia de un conjunto de ponentes se genera correctamente.

R. Esperado La acción para obtener el certificado de un conjunto de ponentes retorna una instancia de la clase PDFResponse cuyo nombre de archivo es certificates_selected.pdf, que contiene tantas páginas como usuarios en el conjunto de ponentes solicitado, y éstas son de tipo plantilla.

Resultado Satisfactorio

Identificador Controllers\Admin\PDF\CertificadosTestCase#testGetSelectedNoSelection

Descripción Comprueba que el archivo PDF que contiene el certificado de asistencia de un conjunto de ponentes se genera correctamente cuando no se seleccionan ponentes.

R. Esperado La acción para obtener el certificado de un conjunto de ponentes cuando éste es vacío retorna una instancia de la clase PDFResponse cuyo nombre de archivo es certificates_selected.pdf, que contiene una única página que contiene un mensaje de error de tipo string.

Resultado Satisfactorio

Etiquetas15TestCase

Identificador Controllers\Admin\PDF\Etiquetas15TestCase#testGetTodos_Horizontal15

Descripción Comprueba que el archivo PDF que contiene las etiquetas horizontales de tamaño 15x7.5cm para los ponentes registrados se genera correctamente.

R. Esperado La llamada al controlador retorna una instancia de la clase PDFResponse cuyo nombre de archivo es etiquetas_todos_horizontal15x75.pdf, que contiene una instancia de una vista PDF que genera un documento con el número de páginas esperado en función del número de ponentes registrados.

Resultado Satisfactorio

Identificador Controllers\Admin\PDF\Etiquetas15TestCase#testGetTodos_Vertical

Descripción Comprueba que el archivo PDF que contiene las etiquetas verticales para los ponentes registrados se genera correctamente.

R. Esperado La llamada al controlador retorna una instancia de la clase PDFResponse cuyo nombre de archivo es etiquetas_todos_vertical.pdf, que contiene una instancia de una vista PDF que genera un documento con el número de páginas esperado en función del número de ponentes registrados.

Resultado Satisfactorio

Identificador Controllers\Admin\PDF\Etiquetas15TestCase#testGetBlanco_Horizontal15

Descripción Comprueba que el archivo PDF que contiene las etiquetas en blanco horizontales de tamaño 15x7.5cm se genera correctamente.

R. Esperado La llamada al controlador retorna una instancia de la clase PDFResponse cuyo nombre de archivo es etiquetas_blanco_horizontal15x75.pdf, que contiene una instancia de una vista PDF que genera un documento con una única página.

Resultado Satisfactorio

Page 482: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Pruebas

482 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Identificador Controllers\Admin\PDF\Etiquetas15TestCase#testGetBlanco_Vertical

Descripción Comprueba que el archivo PDF que contiene las etiquetas en blanco verticales de tamaño 15x7.5cm se genera correctamente.

R. Esperado La llamada al controlador retorna una instancia de la clase PDFResponse cuyo nombre de archivo es etiquetas_blanco_horizontal15x75.pdf, que contiene una instancia de una vista PDF que genera un documento con una única página.

Resultado Satisfactorio

Identificador Controllers\Admin\PDF\Etiquetas15TestCase#testGetDinnerGala_Horizontal15

Descripción Comprueba que el archivo PDF que contiene las etiquetas para la cena de gala horizontales de tamaño 15x7.5cm se genera correctamente.

R. Esperado La llamada al controlador retorna una instancia de la clase PDFResponse cuyo nombre de archivo es etiquetas_dinnergala_horizontal15x75.pdf, que contiene una instancia de una vista PDF que genera un documento con una única página.

Resultado Satisfactorio

Identificador Controllers\Admin\PDF\Etiquetas15TestCase#testGetExcursion_Horizontal15

Descripción Comprueba que el archivo PDF que contiene las etiquetas horizontales para la asistencia a excursiones de tamaño 15x7.5cm se genera correctamente.

R. Esperado La llamada al controlador retorna una instancia de la clase PDFResponse cuyo nombre de archivo es etiquetas_excursion_horizontal15x75.pdf, que contiene una instancia de una vista PDF que genera un documento con tantas páginas como excursiones hay programadas.

Resultado Satisfactorio

Identificador Controllers\Admin\PDF\Etiquetas15TestCase#testGetOrgan_Horizontal15

Descripción Comprueba que el archivo PDF que contiene las etiquetas distintivas para los miembros de la organización de tamaño 15x7.5cm se genera correctamente.

R. Esperado La llamada al controlador retorna una instancia de la clase PDFResponse cuyo nombre de archivo es etiquetas_organ_horizontal15x75.pdf, que contiene una instancia de una vista PDF que genera un documento con una única página.

Resultado Satisfactorio

Identificador Controllers\Admin\PDF\Etiquetas15TestCase#testGetRestaurant_Horizontal15

Descripción Comprueba que el archivo PDF que contiene las etiquetas de restaurante de tamaño 15x7.5cm se genera correctamente.

R. Esperado La llamada al controlador retorna una instancia de la clase PDFResponse cuyo nombre de archivo es etiquetas_restaurant_horizontal15x75.pdf, que contiene una instancia de una vista PDF que genera un documento con una única página.

Resultado Satisfactorio

Page 483: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Pruebas | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 483

Etiquetas9TestCase

Identificador Controllers\Admin\PDF\Etiquetas9TestCase#testGetTodos_Horizontal9

Descripción Comprueba que el archivo PDF que contiene las etiquetas horizontales de tamaño 9.2x6.25cm para los ponentes registrados se genera correctamente.

R. Esperado La llamada al controlador retorna una instancia de la clase PDFResponse cuyo nombre de archivo es etiquetas_todos_horizontal9.2x6.25.pdf, que contiene una instancia de una vista PDF que genera un documento con el número de páginas esperado en función del número de ponentes registrados.

Resultado Satisfactorio

Identificador Controllers\Admin\PDF\Etiquetas9TestCase#testGetBlanco_Horizontal9

Descripción Comprueba que el archivo PDF que contiene las etiquetas en blanco horizontales de tamaño 9.2x6.25cm se genera correctamente.

R. Esperado La llamada al controlador retorna una instancia de la clase PDFResponse cuyo nombre de archivo es etiquetas_blanco_horizontal9.2x6.25.pdf, que contiene una instancia de una vista PDF que genera un documento con una única página.

Resultado Satisfactorio

Identificador Controllers\Admin\PDF\Etiquetas9TestCase#testGetDinnerGala_Horizontal9

Descripción Comprueba que el archivo PDF que contiene las etiquetas para la cena de gala horizontales de tamaño 9.2x6.25cm se genera correctamente.

R. Esperado La llamada al controlador retorna una instancia de la clase PDFResponse cuyo nombre de archivo es etiquetas_dinnergala_horizontal9.2x6.25.pdf, que contiene una instancia de una vista PDF que genera un documento con una única página.

Resultado Satisfactorio

Identificador Controllers\Admin\PDF\Etiquetas9TestCase#testGetExcursion_Horizontal9

Descripción Comprueba que el archivo PDF que contiene las etiquetas horizontales para la asistencia a excursiones de tamaño 9.2x6.25cm se genera correctamente.

R. Esperado La llamada al controlador retorna una instancia de la clase PDFResponse cuyo nombre de archivo es etiquetas_excursion_horizontal9.2x6.25.pdf, que contiene una instancia de una vista PDF que genera un documento con tantas páginas como excursiones hay programadas.

Resultado Satisfactorio

Identificador Controllers\Admin\PDF\Etiquetas9TestCase#testGetOrgan_Horizontal9

Descripción Comprueba que el archivo PDF que contiene las etiquetas distintivas para los miembros de la organización de tamaño 9.2x6.25cm se genera correctamente.

R. Esperado La llamada al controlador retorna una instancia de la clase PDFResponse cuyo nombre de archivo es etiquetas_organ_horizontal9.2x6.25.pdf, que contiene una instancia de una vista PDF que genera un documento con una única página.

Resultado Satisfactorio

Page 484: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Pruebas

484 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Identificador Controllers\Admin\PDF\Etiquetas9TestCase#testGetRestaurant_Horizontal9

Descripción Comprueba que el archivo PDF que contiene las etiquetas de restaurante de tamaño 9.2x6.25cm se genera correctamente.

R. Esperado La llamada al controlador retorna una instancia de la clase PDFResponse cuyo nombre de archivo es etiquetas_restaurant_horizontal9.2x6.25.pdf, que contiene una instancia de una vista PDF que genera un documento con una única página.

Resultado Satisfactorio

FacturasTestCase

Identificador Controllers\Admin\PDF\FacturasTestCase#testGetOne

Descripción Comprueba que el archivo PDF que contiene la factura de un único usuario se genera correctamente.

R. Esperado La acción para obtener la factura de un usuario del controlador retorna una instancia de la clase PDFResponse cuyo nombre de archivo es invoice.pdf que contiene una única página, y ésta es de tipo plantilla.

Resultado Satisfactorio

Identificador Controllers\Admin\PDF\FacturasTestCase#testGetOneNoPapers

Descripción Comprueba que el archivo PDF que contiene la factura de un único usuario sin papers enviados se genera correctamente.

R. Esperado La acción para obtener la factura de un usuario sin papers enviados del controlador retorna una instancia de la clase PDFResponse cuyo nombre de archivo es invoice.pdf que contiene una única página, y ésta es de tipo plantilla.

Resultado Satisfactorio

Identificador Controllers\Admin\PDF\FacturasTestCase#testGetOneEmptyID

Descripción Comprueba que el archivo PDF que contiene la factura de un único usuario cuando no se especifica un ID de usuario funciona de la manera esperada.

R. Esperado La acción para obtener la factura de un usuario del controlador retorna una instancia de la clase PDFResponse sin nombre de archivo asociado ni contenido, y con valor 4040 para el campo que representa el código de error.

Resultado Satisfactorio

Identificador Controllers\Admin\PDF\FacturasTestCase#testGetOneNegativeID

Descripción Comprueba que el archivo PDF que contiene la factura de un único usuario cuando se especifica un ID de usuario negativo funciona de la manera esperada.

R. Esperado La acción para obtener la factura de un usuario del controlador retorna una instancia de la clase PDFResponse sin nombre de archivo asociado ni contenido, y con valor 4040 para el campo que representa el código de error.

Resultado Satisfactorio

Identificador Controllers\Admin\PDF\FacturasTestCase#testGetOnePayForAll

Descripción Comprueba que el archivo PDF que contiene la factura de un único usuario, cuando se indica que debe pagar por todos los papers aceptados, funciona de la manera esperada.

R. Esperado La acción para obtener la factura de un usuario del controlador, pagando por todos los papers enviados, retorna una instancia de la clase PDFResponse cuyo nombre de archivo es invoice.pdf que contiene una única página, y ésta es de tipo plantilla.

Resultado Satisfactorio

Page 485: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Pruebas | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 485

Identificador Controllers\Admin\PDF\FacturasTestCase#testGetOnePayForAllNoPapers

Descripción Comprueba que el archivo PDF que contiene la factura de un único usuario, cuando se indica que debe pagar por todos los papers aceptados, funciona de la manera esperada cuando el usuario no ha enviado ningún paper.

R. Esperado La acción para obtener la factura de un usuario del controlador pagando por todos los papers enviados, cuando el usuario no ha enviado papers, retorna una instancia de la clase PDFResponse cuyo nombre de archivo es invoice.pdf que contiene una única página, y ésta es de tipo plantilla.

Resultado Satisfactorio

Identificador Controllers\Admin\PDF\FacturasTestCase#testGetOnePayForAllEmptyID

Descripción Comprueba que el archivo PDF que contiene la factura de un único usuario, cuando se indica que debe pagar por todos los papers enviados, funciona de la manera esperada cuando no se especifica un ID de usuario.

R. Esperado La acción para obtener la factura de un usuario del controlador retorna una instancia de la clase PDFResponse sin nombre de archivo asociado ni contenido, y con valor 4040 para el campo que representa el código de error.

Resultado Satisfactorio

Identificador Controllers\Admin\PDF\FacturasTestCase#testGetOnePayForAllNegativeID

Descripción Comprueba que el archivo PDF que contiene la factura de un único usuario, cuando se indica que debe pagar por todos los papers enviados, funciona de la manera esperada cuando se especifica un ID de usuario no válido (negativo).

R. Esperado La acción para obtener la factura de un usuario del controlador retorna una instancia de la clase PDFResponse sin nombre de archivo asociado ni contenido, y con valor 4040 para el campo que representa el código de error

Resultado Satisfactorio

Identificador Controllers\Admin\PDF\FacturasTestCase#testGetAll

Descripción Comprueba que el archivo PDF que contiene la factura de todos los usuarios funciona de la manera esperada.

R. Esperado La acción del controlador para obtener la factura de todos los usuarios registrados retorna una instancia de la clase PDFResponse cuyo nombre de archivo es invoices_all.pdf que contiene tantas páginas como usuarios han solicitado factura, y éstas son de tipo plantilla.

Resultado Satisfactorio

Identificador Controllers\Admin\PDF\FacturasTestCase#testGetAllPayForAll

Descripción Comprueba que el archivo PDF que contiene las facturas de todos los usuarios funciona de la manera esperada cuando se indica que deben pagar por todos los papers enviados.

R. Esperado La acción del controlador para obtener la factura de todos los usuarios registrados (pagando por todos los papers enviados) retorna una instancia de la clase PDFResponse cuyo nombre de archivo es invoices_all_payforall.pdf que contiene tantas páginas como usuarios han solicitado factura, y éstas son de tipo plantilla.

Resultado Satisfactorio

Page 486: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Pruebas

486 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Identificador Controllers\Admin\PDF\FacturasTestCase#testGetAllTypesCountMatch

Descripción Comprueba que los archivos PDF que contienen las facturas de todos los usuarios pagando únicamente la cuota de inscripción y pagando por todos los papers enviados son consistentes entre sí.

R. Esperado Las acciones del controlador para obtener las facturas de todos los usuarios pagando únicamente la cuota de inscripción y pagando por todos los papers enviados retornan archivos con el mismo número de páginas.

Resultado Satisfactorio

Identificador Controllers\Admin\PDF\FacturasTestCase#testGetAllReady

Descripción Comprueba que el archivo PDF que contiene todas las facturas listas para imprimir funciona correctamente.

R. Esperado La acción del controlador retorna una instancia de la clase PDFResponse cuyo nombre de archivo es invoices_all_ready.pdf que contiene tantas páginas como usuarios han solicitado factura, tienen número de factura asignado y sus facturas han sido marcadas como listas para imprimir.

Resultado Satisfactorio

Identificador Controllers\Admin\PDF\FacturasTestCase#testGetAllReadyPayForAll

Descripción Comprueba que el archivo PDF que contiene todas las facturas listas para imprimir, pagando por todos los papers enviados, funciona correctamente.

R. Esperado La acción del controlador retorna una instancia de la clase PDFResponse cuyo nombre de archivo es invoices_all_ready_payforall.pdf que contiene tantas páginas como usuarios han solicitado factura, tienen número de factura asignado y sus facturas han sido marcadas como listas para imprimir.

Resultado Satisfactorio

Identificador Controllers\Admin\PDF\FacturasTestCase#testGetAllReadyTypesCountMatch

Descripción Comprueba que los archivos PDF que contienen las facturas de todos los usuarios marcadas como listas para imprimir pagando únicamente la cuota de inscripción y pagando por todos los papers enviados son consistentes entre sí.

R. Esperado Las acciones del controlador para obtener las facturas de todos los usuarios listas para imprimir pagando únicamente la cuota de inscripción y pagando por todos los papers enviados retornan archivos con el mismo número de páginas.

Resultado Satisfactorio

Identificador Controllers\Admin\PDF\FacturasTestCase#testGetSelected

Descripción Comprueba que los archivos PDF que contienen las facturas, pagando únicamente la cuota de inscripción, de usuarios seleccionados aleatoriamente de entre aquellos que tienen asignado número de factura funciona correctamente.

R. Esperado La acción del controlador retorna una instancia de la clase PDFResponse cuyo nombre de archivo es invoices_selected.pdf que contiene tantas páginas como IDs de usuarios distintos se han proporcionado.

Resultado Satisfactorio

Page 487: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Pruebas | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 487

Identificador Controllers\Admin\PDF\FacturasTestCase#testGetSelectedPayForAll

Descripción Comprueba que los archivos PDF que contienen las facturas, pagando por todos los papers enviados, de usuarios seleccionados aleatoriamente de entre aquellos que tienen asignado número de factura funciona correctamente.

R. Esperado La acción del controlador retorna una instancia de la clase PDFResponse cuyo nombre de archivo es invoices_selected_payforall.pdf que contiene tantas páginas como IDs de usuarios distintos se han proporcionado.

Resultado Satisfactorio

Identificador Controllers\Admin\PDF\FacturasTestCase#testGetSelectedTypesCountMatch

Descripción Comprueba que los archivos PDF que contienen las facturas de un subconjunto de usuarios seleccionados cuando se indica que paguen únicamente la cuota de inscripción y cuando se indica que paguen por todos los papers enviados son consistentes entre sí.

R. Esperado Las acciones del controlador para obtener las facturas de un subconjunto de usuarios seleccionados pagando únicamente la cuota de inscripción y pagando por todos los papers enviados retornan archivos con el mismo número de páginas.

Resultado Satisfactorio

JustificantesTestCase

Identificador Controllers\Admin\PDF\JustificantesTestCase#testGetAll

Descripción Comprueba que el archivo PDF que contiene los justificantes de pago de todos los usuarios funciona de la manera esperada.

R. Esperado La acción del controlador para obtener los justificantes de todos los usuarios registrados retorna una instancia de la clase PDFResponse cuyo nombre de archivo es proofofpayment_all.pdf que contiene tantas páginas como usuarios no han solicitado factura, y éstas son de tipo plantilla.

Resultado Satisfactorio

Identificador Controllers\Admin\PDF\JustificantesTestCase#testGetAllPayForAll

Descripción Comprueba que el archivo PDF que contiene los justificantes de pago de todos los usuarios funciona de la manera esperada cuando se indica que deben pagar por todos los papers enviados.

R. Esperado La acción del controlador para obtener los justificantes de todos los usuarios registrados (pagando por todos los papers enviados) retorna una instancia de la clase PDFResponse cuyo nombre de archivo es proofofpayment_all_paid_payforall.pdf que contiene tantas páginas como usuarios no han solicitado factura, y éstas son de tipo plantilla.

Resultado Satisfactorio

Identificador Controllers\Admin\PDF\JustificantesTestCase#testGetAllTypesCountMatch

Descripción Comprueba que los archivos PDF que contienen los justificantes de pago de todos los usuarios pagando únicamente la cuota de inscripción y pagando por todos los papers enviados son consistentes entre sí.

R. Esperado Las acciones del controlador para obtener los justificantes de todos los usuarios pagando únicamente la cuota de inscripción y pagando por todos los papers enviados retornan archivos con el mismo número de páginas.

Resultado Satisfactorio

Page 488: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Pruebas

488 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Identificador Controllers\Admin\PDF\JustificantesTestCase#testGetAllPaid

Descripción Comprueba que el archivo PDF que contiene todos los justificantes de los usuarios cuyo pago ha sido confirmado funciona correctamente.

R. Esperado La acción del controlador retorna una instancia de la clase PDFResponse cuyo nombre de archivo es proofofpayment_all_paid.pdf que contiene tantas páginas como usuarios no han solicitado factura y su pago ha sido confirmado.

Resultado Satisfactorio

Identificador Controllers\Admin\PDF\JustificantesTestCase#testGetAllPaidPayForAll

Descripción Comprueba que los archivos PDF que contienen los justificantes de pago, pagando por todos los papers enviados, de todos los usuarios que no han solicitado factura funciona correctamente.

R. Esperado La acción del controlador retorna una instancia de la clase PDFResponse cuyo nombre de archivo es proofofpayment_all_paid.pdf que contiene tantas páginas como usuarios con pago confirmado no han solicitado factura.

Resultado Satisfactorio

Identificador Controllers\Admin\PDF\JustificantesTestCase#testGetAllPaidTypesCountMatch

Descripción Comprueba que los archivos PDF que contienen los justificantes de pago de todos los usuarios cuyo pago ha sido confirmado pagando únicamente la cuota de inscripción y pagando por todos los papers enviados son consistentes entre sí.

R. Esperado Las acciones del controlador para obtener los justificantes de todos los usuarios pagando únicamente la cuota de inscripción y pagando por todos los papers enviados retornan archivos con el mismo número de páginas.

Resultado Satisfactorio

Identificador Controllers\Admin\PDF\JustificantesTestCase#testGetSelected

Descripción Comprueba que los archivos PDF que contienen los justificantes de pago, pagando únicamente la cuota de inscripción, de usuarios seleccionados aleatoriamente de entre aquellos cuyo pago ha sido confirmado funciona correctamente.

R. Esperado La acción del controlador retorna una instancia de la clase PDFResponse cuyo nombre de archivo es profofpayment_selected.pdf que contiene tantas páginas como IDs de usuarios distintos se han proporcionado.

Resultado Satisfactorio

Identificador Controllers\Admin\PDF\JustificantesTestCase#testGetSelectedPayForAll

Descripción Comprueba que los archivos PDF que contienen los justificantes de pago, pagando por todos los papers enviados, de usuarios seleccionados aleatoriamente de entre aquellos que no tienen asignado número de factura funciona correctamente.

R. Esperado La acción del controlador retorna una instancia de la clase PDFResponse cuyo nombre de archivo es invoices_selected_payforall.pdf que contiene tantas páginas como IDs de usuarios distintos se han proporcionado.

Resultado Satisfactorio

Page 489: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Pruebas | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 489

PonenciasTestCase

Identificador Controllers\Admin\PDF\PonenciasTestCase#testGetOne

Descripción Comprueba que el archivo PDF que contiene el documento que certifica la presentación de una ponencia se genera correctamente.

R. Esperado La acción del controlador retorna una instancia de la clase PDFResponse cuyo nombre de archivo es seminar_certificate.pdf que contiene una única página, y ésta es de tipo plantilla.

Resultado Satisfactorio

Identificador Controllers\Admin\PDF\PonenciasTestCase#testGetOneEmptyID

Descripción Comprueba que la solicitud del archivo PDF que contiene el documento que certifica la presentación de una ponencia genera la respuesta esperada cuando no se proporciona un ID de paper.

R. Esperado La acción del controlador retorna una instancia de la clase PDFResponse cuyo nombre de archivo es nulo, sin páginas, y con valor 4040 para el campo que representa el código de error.

Resultado Satisfactorio

Identificador Controllers\Admin\PDF\PonenciasTestCase#testGetOneNegativeID

Descripción Comprueba que la solicitud del archivo PDF que contiene el documento que certifica la presentación de una ponencia genera la respuesta esperada cuando se proporciona un ID de paper negativo.

R. Esperado La acción del controlador retorna una instancia de la clase PDFResponse cuyo nombre de archivo es nulo, sin páginas, y con valor 4040 para el campo que representa el código de error.

Resultado Satisfactorio

Identificador Controllers\Admin\PDF\PonenciasTestCase#testGetAll

Descripción Comprueba que el archivo PDF que contiene todos los certificados de presentación de ponencias se generan correctamente.

R. Esperado La acción del controlador retorna una instancia de la clase PDFResponse cuyo nombre de archivo es seminar_certificate_all.pdf que contiene tantas páginas como papers aceptados hay en el sistema, y éstas son de tipo plantilla.

Resultado Satisfactorio

Identificador Controllers\Admin\PDF\PonenciasTestCase#testGetAllPaid

Descripción Comprueba que el archivo PDF que contiene todos los certificados de presentación de ponencias para los usuarios que han pagado se generan correctamente.

R. Esperado La acción del controlador retorna una instancia de la clase PDFResponse cuyo nombre de archivo es seminar_certificate_all_paid.pdf que contiene tantas páginas como papers aceptados de ponentes que han pagado la cuota de inscripción hay en el sistema, y éstas son de tipo plantilla.

Resultado Satisfactorio

Page 490: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Pruebas

490 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Identificador Controllers\Admin\PDF\PonenciasTestCase#testGetSelected

Descripción Comprueba que el archivo PDF que contiene los certificados presentación de ponencias para un subconjunto de papers seleccionado aleatoriamente se genera correctamente.

R. Esperado La acción del controlador retorna una instancia de la clase PDFResponse cuyo nombre de archivo es seminar_certificate_selected.pdf que contiene tantas páginas como papers hay en el conjunto seleccionado, y éstas son de tipo plantilla.

Resultado Satisfactorio

Page 491: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Conclusiones | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 491

8 CONCLUSIONES

Al iniciar el estudio de este proyecto rápidamente me di cuenta de la cantidad de aspectos que debía

resolver, y cómo la aplicación de patrones de diseño teóricos existentes podían ser de utilidad en esta

labor. Personalmente he descubierto que el uso de librerías y herramientas existentes junto a los

mencionados patrones arquitectónicos descritos en la memoria son una herramienta capital en la

construcción de sistemas complejos. En concreto, considero especialmente positivos los

conocimientos adquiridos relativos a la gestión automática de dependencias de software, la

construcción modular de aplicaciones por capas utilizando MVC, o conceptos hasta ahora

desconocidos para mí como la testabilidad de un proyecto.

Pese a que hay aspectos mejorables y algunas ideas que finalmente no han podido llevarse a cabo,

estoy satisfecho con el resultado obtenido, y considero que personalmente este proyecto ha sido una

importante fuente de aprendizaje.

Page 492: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Bibliografía

492 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

9 BIBLIOGRAFÍA

En esta sección se listan libros y páginas web utilizadas como referencia durante el desarrollo de la

aplicación y la redacción del presente documento. Se trata, principalmente, de APIs de los lenguajes

de programación y librerías utilizadas, documentos que definen los estándares y protocolos sobre los

que está construida, y otras fuentes que describen la base teórica que justifica las soluciones

adoptadas en el proyecto.

9.1 Libros y artículos

[GoF94] Gamma, Erich; Helm, Richard; Johnson, Ralph; Vlissides, John. ”Design Patterns: Elements of

Reusable Object-Oriented Software”. Addison-Wesley. 1995. ISBN 978-0-201-63361-0.

[STAL04] Stallings, William. “Comunicaciones y redes de computadores, Séptima edición”. Pearson

Educación/Prentice Hall. 2004. ISBN 978-84-205-4110-5.

[ROB06] Robbins, Jennifer. “Web Design in a Nutshell, 3rd Edition”. O’Reilly Media Inc. 2006. ISBN

978-0-596-00987-8.

[W3C03] World Wide Web Consortium. “Guías breves de tecnologías W3C”. Oficina del W3C en

España/Fundación CTIC. 2005.

9.2 Referencias en Internet

Conceptos de Ingeniería de Software

[WIK01] Wikipedia Contributors. “Model View Controller”. http://en.wikipedia.org/wiki/Model–

view–controller. 2013.

[CAI00] Cai, Jason; Kapila, Ranjit; Pal, Gaurav. “HMVC: The layered pattern for developing strong

client tiers”. http://www.javaworld.com/article/2076128/. 2000.

Lenguajes y estándares web

[PHP14] The PHP Group. “PHP Documentation”. http://www.php.net/docs.php. 2014.

[PHP01] The PHP Group. “PUT method support”. http://php.net/manual/ro/features.file-upload.put-

method.php. 2014.

[PHP02] The PHP Group. “PHP Language Reference: Overloading”.

https://www.php.net/manual/en/language.oop5.overloading.php. 2014.

[PHP03] The PHP Group. “PHP Installation FAQ”.

http://php.net/manual/en/faq.installation.php#faq.installation.apache2. 2014.

[PHP04] The PHP Group. “PHP: Preface”. http://www.php.net/manual/en/preface.php. 2014.

[WIKI05] Wikipedia Contributors. “PHP”. http://en.wikipedia.org/wiki/PHP. 2013.

[WIKI06] Wikipedia Contributors. “Java Platform, Enterprise Edition”.

http://en.wikipedia.org/wiki/Java_Platform,_Enterprise_Edition. 2014.

Page 493: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Bibliografía | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 493

[MOZ01] Mozilla Developer Network & Collaborators. “Guia HTML para desarrolladores: HTML5”.

https://developer.mozilla.org/es/docs/HTML/HTML5. 2014.

[W3C01] World Wide Web Consortium. “HTML5: A vocabulary and associated APIs for HTML and

XHTML. Chapter 5: Loading Web pages”. http://www.w3.org/TR/html5/browsers.html. 2014.

[W3C02] World Wide Web Consortium. “Markup Validation Service”. http://validator.w3.org/. 2014.

[W3C04] World Wide Web Consortium. “CSS3 basic box model”. http://www.w3.org/TR/css3-box/.

2014.

[W3C05] World Wide Web Consortium. “CSS Backgrounds and Borders Module Level 3”.

http://www.w3.org/TR/css3-background/. 2014.

[W3C06] World Wide Web Consortium. “CSS fonts Module Level 3”. ttp://www.w3.org/TR/css-fonts-

3/. 2014.

[W3C07] World Wide Web Consortium. “Media Queries”. http://www.w3.org/TR/css3-

mediaqueries/. 2014.

[W3C08] World Wide Web Consortium. “HTML5: A vocabulary and associated APIs for HTML and

XHTML. W3C Recommendation 28 October 2014”. http://www.w3.org/TR/2014/REC-html5-

20141028/. 2014.

[MOZ02] Mozilla Developer Network & Collaborators . “JavaScript reference: Arguments object”.

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/arguments. 2014.

Aspectos legales y herramientas de gestión de

congresos

[AEPD14] Agencia Española de Protección de Datos. “Guía sobre el uso de las cookies”.

http://www.agpd.es/portalwebAGPD/canaldocumentacion/publicaciones/common/Guias/Guia_Coo

kies.pdf. 2014.

[WIKI04] Wikipedia Contributors. “Código de identificación fiscal”.

http://es.wikipedia.org/wiki/Código_de_identificación_fiscal. 2014.

[CONFT01] ConfTool GmbH. “ConfTool: Conference and Event Management Software”.

http://www.conftool.net/. 2014.

[AJXL14] Shatalov , Alexander. “Ajaxel CMS demo”. http://demo.ajaxel.com. 2014.

[DBADM01] Bintintan, Andrei. “Webdbadmin”. http://www.webdbadmin.com. 2014.

Herramientas de gestión de software

[KERN01] Git Contributors. “git-shortlog Manual Page”.

https://www.kernel.org/pub/software/scm/git/docs/git-shortlog.html. 2014.

[VBOX01] Moore, Ian & phpVirtualBox Contributors. “phpVirtualBox: A web-based front-end to

VirtualBox written in PHP”. http://sourceforge.net/projects/phpvirtualbox/. 2014.

Page 494: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Bibliografía

494 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Protocolo HTTP y servidores web

[HTTP01] The Internet Engineering Task Force. “Request for Comments 2616: Hypertext Transfer

Protocol 1.1”. http://tools.ietf.org/html/rfc2616. 2014.

[HTTP02] The Internet Engineering Task Force. “Request for Comments 2818: HTTP Over TLS”.

http://tools.ietf.org/html/rfc2818. 2014.

[HTTP03] The Internet Engineering Task Force. “Request for Comments 2660: Secure Hypertext

Transfer Protocol”. http://tools.ietf.org/html/rfc2660. 2014.

[SYMF01] SensioLabs & Symfony Contributors. “Symfony 2 and HTTP Fundamentals”.

http://symfony.com/doc/current/book/http_fundamentals.html. 2014.

[APCH01] Wikipedia Contributors. “Apache HTTP Server”.

http://en.wikipedia.org/wiki/Apache_HTTP_Server. 2014.

[FACEB01] Zhao, Haiping. “HipHop for PHP: Move Fast”.

https://developers.facebook.com/blog/post/2010/02/02/hiphop-for-php--move-fast/. 2014.

Librerías

[DOC01] Doctrine Team. “Doctrine 2 ORM’s documentation”. http://docs.doctrine-

project.org/en/2.0.x/. 2014.

[DOC03] Eberlei, Benjamin; Blanco, Guilherme; Wage, Jonathan; Borschel, Roman. “Doctrine Entity

Manager API Documentation”. http://www.doctrine-project.org/api/orm/2.2/class-

Doctrine.ORM.EntityManager.html. 2014.

[TWIG01] SensioLabs & Twig Contributors. “Twig Documentation”.

http://twig.sensiolabs.org/documentation. 2014.

[CAL01] Mitchell, Brady. “Creating iCalendar (ics) files with PHP”. http://bradym.net/php/creating-

icalendar-ics-files-with-php.html. 2014.

[CAL02] Visinoni, Luke. “qcal: An object-oriented iCalendar library written for PHP5”.

https://code.google.com/p/qcal/. 2014.

[EZ01] ez Systems AS. “ezPublish Documentation”. http://pubsvn.ez.no/doxygen/4.0/html/. 2014.

[JQRY01] The jQuery Team. “jQuery API Documentation”. https://api.jquery.com/. 2014.

[JQRY08] StackOverflow Contributors. “Sort date field with tablesorter”.

http://stackoverflow.com/questions/9568473/sort-date-field-with-tablesorter. 2014.

[SYMF02] SensioLabs & Symfony Contributors. “ClassLoader (The Symfony Components)”.

http://symfony.com/doc/2.6/components/class_loader/index.html. 2015.

[SYMF03] SensioLabs & Symfony Contributors. “Cache a ClassLoader (The Symfony Components)”.

http://symfony.com/doc/current/components/class_loader/cache_class_loader.html. 2015.

[SMRT01] Potencier, Fabien. “Templating Engines in PHP”.

http://fabien.potencier.org/article/34/templating-engines-in-php. 2015.

Page 495: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Bibliografía | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 495

Casos de prueba y automatización

[WIKI03] Wikipedia Contributors. “Caso de prueba”. http://es.wikipedia.org/wiki/Caso_de_prueba.

2014.

[PHPU01] Bergmann, Sebastian & PHPUnit Documentation Contributors. “PHPUnit Manual:

Assertions”. http://phpunit.de/manual/3.7/en/appendixes.assertions.html. 2014.

[PHPU02] Bergmann, Sebastian & PHPUnit Documentation Contributors. “PHPUnit Manual:

Incomplete and Skipped Tests”. http://phpunit.de/manual/3.7/en/incomplete-and-skipped-

tests.html. 2014.

[PHPU03] Bergmann, Sebastian & PHPUnit Documentation Contributors. “PHPUnit Manual: Writing

Tests for PHPUnit”. http://phpunit.de/manual/3.7/en/writing-tests-for-phpunit.html. 2014.

[MAIL01] Chaiyochlarb, Chan. “Email Addresses Test Cases”.

http://blogs.msdn.com/b/testing123/archive/2009/02/05/email-address-test-cases.aspx. 2014.

[MAIL02] Skeggs , Eli. “node-isemail Test Cases and Error Codes”.

https://github.com/globesherpa/node-isemail/blob/master/test/isemail.js. 2014.

[ANT01] Apache Software Foundation & Ant Project Contributors. “Apache Ant Manual”.

http://ant.apache.org/manual/. 2014.

Estadísticas

[GOG01] Google, Inc. “Google Loader Developer’s Guide”. https://developers.google.com/loader/.

2014.

[JPGR01] Asial Corporation. “JpGraph Documentation”. http://jpgraph.net/. 2015.

[HTTP04] Netcraft Ltd. “June 2014 Netcraft Web Server Survey”.

http://news.netcraft.com/archives/2014/06/06/june-2014-web-server-survey.html. 2014.

[ALEX01] Alexa Internet, Inc. “Alexa Top 500 Global Sites”. http://www.alexa.com/topsites. 2014.

Otros

[PAYP01] PayPal, Inc. “PayPal Developer: Website Payments Pro”.

https://developer.paypal.com/docs/classic/paypal-payments-pro/integration-

guide/WPWebsitePaymentsPro/. 2015.

[IACR01] Wang, Xiaoyun; Feng, Dengguo; Lai, Xuejia; Yu, Hongbo. “Collisions for Hash Functions

MD4, MD5, HAVAL-128 and RIPEMD”. http://eprint.iacr.org/2004/199. 2004.

[PHP05] The PHP Group. “Hash de contraseñas”. http://php.net/manual/es/faq.passwords.php.

2015.

Page 496: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Apéndices

496 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

10 APÉNDICES

APENDICE I: Estadísticas de la edición de 2014

Estadísticas demográficas

Las siguientes estadísticas se han generado a partir de una muestra obtenida durante la edición de

2014 (hasta el 4 de julio).

Usuarios 203 Ponentes 201 (99,01 %) Autores 159 (78,33 %)

Papers N/D 51 Aceptados N/D

Simposios 32 Excursiones 2

Medias de papers

Por autor N/D

Por simposio (totales) N/D

Por simposio (aceptados) N/D

Ponentes

Que han solicitado factura 79 (38,92 %)

Que no han solicitado factura 124 (61,08 %)

51 Los valores estadísticos asociados a los números de papers presentados han sido ocultados a petición de la organización del congreso.

Page 497: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Apéndices | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 497

Figura 10.1: Número de usuarios registrados por semana

Figura 10.2: Número de usuarios totales en el sistema por semana

Page 498: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Apéndices

498 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Figura 10.3: Número de usuarios por país de procedencia

Page 499: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Apéndices | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 499

Figura 10.4: Número de nuevos papers enviados por semana

Figura 10.5: Número de papers totales en el sistema por semana

Page 500: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Apéndices

500 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Figura 10.6: Número de papers aceptados por simposio

Page 501: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Apéndices | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 501

Figura 10.7: Número de solicitudes por navegador (todas las páginas)

Figura 10.8: Número de solicitudes por navegador (páginas públicas)

Page 502: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Apéndices

502 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Navegadores usados por número de solicitudes

Navegador Total % del total Páginas públicas

% de las p. públicas

Chrome 10+ 31 255 46,44 % 27 998 44,78 %

Firefox 23 781 35,34 % 22 406 35,84 % Firefox 4+ 23 156 34,41 % 21 781 34,84 % Firefox (otras) 625 0,93 % 625 1,00 %

IE 7 444 11,06 % 7 359 11,77 % IE 11 3 330 4,95 % 3 245 5,19 % IE 10 282 0,42 % 282 0,45 % IE 9 2 175 3,23 % 2 175 3,48 % IE 8 676 1,00 % 676 1,08 % IE (otras) 981 1,46 % 981 1,57 %

Safari 3 865 5,75 % 3 801 6,08 % Safari 5+ 3 848 5,72 % 3 784 6,05 % Safari (otras) 17 0,03 % 17 0,03 %

Opera 154 0,23 % 154 0,24 % Opera 12+ 26 0,04 % 26 0,04 % Opera (otras) 128 0,19 % 128 0,20 %

Bots 224 0,33 % 224 0,36 %

Otros 580 0,86 % 579 0,93 %

TOTAL 67 303 100 % 62 521 100 %

Figura 10.9: Valores muestrales (agregados) de número de solicitudes por navegador

La tabla anterior muestra el número de solicitudes por navegador, desglosando el número total por

versión de navegador y según si la solicitud se realiza desde una sesión de administrador o no.

Esta separación se realiza a partir de la primera versión de cada navegador con soporte relativamente

completo para HTML5 que, en general, se corresponde a las versiones publicadas en marzo de 2011

(coincidiendo aproximadamente con el Last Call del grupo de trabajo de la W3C para HTML5). En el

caso de Internet Explorer, se realiza una separación más explícita por versiones, al ser el navegador

por defecto de facto en el sistema operativo más extendido (Windows) y el que más diferencias

presenta en el soporte para HTML5 entre sus distintas versiones52.

El número de solicitudes considerado en este apartado solo tiene en cuenta páginas generadas

dinámicamente (utilizando PHP). Por tanto, no incluye solicitudes de elementos estáticos, como

imágenes o archivos PDF enviados por los ponentes (justificantes de pago y papers). Sin embargo, sí

incluye archivos descargables, imágenes y hojas de estilo generadas por scripts, como certificados de

asistencia, gráficas estadísticas o archivos CSS.

52 Internet Explorer 8 es la primera versión del navegador de Microsoft en soportar HTML5 (al menos, de manera parcial). Internet Explorer 9 dispone de un soporte más completo, y es la primera versión que pasa el test ACID3.

Page 503: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Apéndices | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 503

Figura 10.10: Número de solicitudes por S.O. del cliente (todas las páginas)

Figura 10.11: Número de solicitudes por S.O. del cliente (páginas públicas)

Page 504: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Apéndices

504 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Sistemas Operativos usados por número de solicitudes

Sistema Operativo Total % del total Páginas públicas

% de las p. públicas

Windows 41 112 61,08 % 38 615 61,77 % Windows 7 29 847 44,35 % 27 482 43,96 % Windows XP 6 227 9,25 % 6 095 9,75 % Windows 8 1 287 1,91 % 1 287 2,06 % Windows 8.1 1 442 2,14 % 1 442 2,31 % Windows Vista 2 309 3,43 % 2 309 3,69 %

GNU/Linux 18 121 26,92 % 15 899 25,43 % Ubuntu 14 257 21,18 % 12 068 19,3 % Android 342 0,51 % 319 0,51 % Otros 3 521 5,23 % 3 512 5,62 %

OS X 7 570 11,24 % 7 506 12,00 % iOS 609 0,9 % 545 0,87 % Mac OS X 6 961 10,34 % 6 961 11,13 %

Bots 224 0,33 % 224 0,36 %

Desconocido 277 0,41 % 277 0,44 %

TOTAL 67 304 100 % 62 521 100 %

Figura 10.12: Valores muestrales (agregados) de número de solicitudes por sistema operativo

La tabla anterior muestra el número de solicitudes por sistema operativo y versión, según los datos

reportados por el navegador y/o inferidos en función del tipo navegador, desglosando el número total

por versión y según si la solicitud se realiza desde una sesión de administrador o no.

El número de solicitudes considerado en este apartado solo tiene en cuenta páginas generadas

dinámicamente (utilizando PHP). Por tanto, no incluye solicitudes de elementos estáticos, como

imágenes o archivos PDF enviados por los ponentes (justificantes de pago y papers). Sin embargo, sí

incluye archivos descargables, imágenes y hojas de estilo generadas por scripts, como certificados de

asistencia, gráficas estadísticas o archivos CSS.

Page 505: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Apéndices | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 505

Estadísticas de rendimiento

Las estadísticas de este apartado se han generado a partir de una muestra obtenida durante la edición

de 2014 (hasta el 4 de julio). Durante este periodo, la aplicación y su base de datos han estado

hospedadas en un servidor web utilizado, además, para la web de los grupos de investigación de

Recuperación de Información y Computación Paralela de la Universidad de Oviedo. El servidor está

hospedado físicamente en la Escuela Politécnica de Ingeniería de Gijón y, por tanto, hace uso de su red

para acceder a Internet. La conexión ofrece una velocidad aproximada de acceso a Internet de 20Mbps.

El servidor utilizado dispone de un procesador Intel Core i3-2100 de doble núcleo (con 4 procesadores

lógicos) a 3.10 GHz y 3MB de memoria caché compartida, 8 GB de memoria RAM DDR3, un disco (no

SSD) de 500 Gb y una tarjeta de red gigabit full duplex. El sistema utiliza una distribución CentOS 6.5

de 64 bits con un kernel Linux 2.6.32 con soporte SMP. Se utiliza Apache 2.2.15 de 64 bits como servidor

web con un modelo de procesamiento multiproceso (prefork) sin hilos. El sistema utiliza PHP 5.5.9 para

generar las páginas dinámicas y MySQL 5.5.73 para hospedar la base de datos de la aplicación. La

conexión entre el servidor MySQL y los scripts PHP se realiza utilizando el driver nativo (mysqlnd) de

este último utilizando sockets UNIX.

Las estadísticas de uso de CPU mostradas en este apartado reflejan la carga media global del sistema,

la cual incluye tanto el uso de CPU del servidor web como de la base de datos (además de otros

procesos que pudiese haber en el sistema), medida en el momento que se finaliza la generación de la

página correspondiente. Las estadísticas de uso de memoria reflejan únicamente el uso máximo de

memoria realizado por el script PHP que lo recopila, excluyendo, por tanto, el uso de memoria de otros

servicios (como MySQL) y de otras solicitudes que pudiesen estar siendo atendidas simultáneamente.

Page 506: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Apéndices

506 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Figura 10.13: Número de solicitudes HTTP por semana

Figura 10.14: Número de sesiones HTTP por semana

Page 507: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Apéndices | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 507

Las gráficas anteriores contienen las medidas recogidas del 21 de marzo al 27 de julio de 2014, y

muestran, agregadas por semanas, el número de solicitudes HTTP recibidas que corresponden con

scripts PHP (excluyendo, por tanto, los archivos estáticos) y el número de sesiones creadas tras

proporcionar un nombre de usuario y contraseña.

La siguiente gráfica muestra de forma conjunta el uso de memoria (escala de a derecha, en megabytes)

y la carga media del sistema53 (escala de la izquierda, en número de procesos) a partir de los datos de

las 68.807 muestras disponibles en este periodo. Estos datos se corresponden con muestras tomadas

al finalizar cada solicitud, es decir, no se corresponden con muestras tomadas de forma contínua a

intervalos de tiempo fijos. Para mantener la claridad de la gráfica, las etiquetas del eje x solo se

muestran cada 10 días, si bien la gráfica sí muestra la media de cada día de forma agregada. La cantidad

medida incluye la memoria usada por el core de PHP (su máquina virtual, Zend Engine) además de la

asignada a los datos del propio script.

En la gráfica se puede apreciar cómo la cantidad de memoria máxima necesaria para atender cada

solicitud individual permanece relativamente constante (alrededor de 3MB). Se aprecian picos

considerables al final del periodo medido, correspondientes a las fechas más próximas al inicio del

congreso (en las cuales el sistema es usado de forma activa por los administradores para revisiones de

última hora y generación de documentación54).

Figura 10.15: Uso medio de CPU y memoria por día

53 Definida como el valor de carga tradicional UNIX correspondiente a la longitud media de la cola de procesos listos en el minuto previo al instante en el que se realiza la medición. Para interpretar este valor hay que tener en cuenta, además, que el servidor utilizado disponde de 4 procesadores lógicos. 54 La generación de documentación (y especialmente aquella necesaria para todos los ponentes registrados, como etiquetas y certificados) consume una cantidad de memoria y CPU notablemente superior al resto de la aplicación.

Page 508: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Apéndices

508 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Las siguientes tablas muestran de forma más detallada los valores de carga media UNIX medidos desde

el 21 de marzo al 3 de julio (inclusive) al finalizar cada solicitud para todas muestras tomadas como

parte de la ejecución de las páginas dinámicas; y la cantidad de tiempo (en segundos), memoria (en

bytes) y número de consultas SQL necesarias en promedio para generar las páginas dinámicas. Los

valores de tiempo mostrados están redondeados a dos decimales; no se muestra la parte decimal del

valor medio para las variables enteras de tipo discreto (que en este caso representan cantidades de

memoria o número de consultas).

Máximo Mínimo Medio Desv. Típica

1 minuto 2.84 0.01 0.17 0.1512

5 minutos 1.31 0.01 0.11 0.0629

15 minutos 0.53 0.01 0.06 0.0417

Memoria 30 146 560 4 456 448 6 402 426 2 556 625.4381

Nº Consultas 559 0 6 24.730

Figura 10.16: Parámetros estadísticos generales de uso de CPU, memoria y BBDD

El valor máximo mostrado en la tabla anterior pone de manifiesto que han existido picos de carga,

pero no han tenido una duración considerable (dichos picos se dan en la carga media sostenida durante

1 y 5 minutos, pero no durante 15). La cantidad de memoria y el número de consultas medio por página

se encuentran dentro de los límites razonables, si bien los valores máximos (correspondientes a la

generación de documentación en el caso de la memoria y al listado de papers en el caso de las

consultas) tienden a dispararse.

Tiempo 55 Memoria Nº Consultas

PDFs 0.5627000000 s 25 422 449 bytes 7.6174 c.

Certificados 0.7080772727 s 26 119 074 bytes 5.8205 c.

Resto 0.3546369851 s 6 388 911 bytes 6.0728 c.

Figura 10.17: Media de tiempo y memoria empleados para generar las páginas

La tabla anterior indica que los PDFs necesitan de media 4 veces la memoria necesaria para el resto de

páginas, pero generalmente no existen diferencias perceptibles por el usuario en el tiempo de

respuesta. Se muestra de forma detallada los valores para los PDFs de certificados de asistencia para

reflejar que requieren en promedio un 25% más de tiempo y una cantidad de memoria ligeramente

superior que el resto. El número de consultas necesario para generar los PDFs no presenta diferencias

significativas respecto al resto de páginas.

55 Nótese que estos tiempos medios cumplen sobradamente los requisitos iniciales NF.4.x relativos al tiempo máximo admisible bajo condiciones normales necesario para generar las páginas.

Page 509: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Apéndices | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 509

Examinando los datos disponibles de forma detallada, se ha determinado que las páginas de usuario

(públicas) que más memoria requieren (de media) son las de envió de papers (hasta 13 MB); las que

menos, la descrga de un paper y el index (entre 6 y 7 MB), las hojas de estilo CSS y los archivos con

código Javascript (estos dos últimos casos generados únicamente a partir de una plantilla y los datos

de configuración estáticos).

Para comprobar que los valores máximos de carga media del sistema de los últimos 1, 5 y 15 minutos

corresponden a aumentos puntuales, y que las mediciones tienen sentido estadístico, se ha calculado

la covarianza existente entre ellos (por ejemplo, cuánto varía la carga media de los últimos 5 minutos

cuando aumenta la carga del último minuto). También se ha calculado la relación estadística existente

entre la carga de CPU (medida en el último minuto) y la memoria usada. Por último, para completar el

estudio, también se han calculado sus coeficientes de correlación.

Covarianza 1 minuto 5 minutos 15 minutos Memoria

1 minuto 0.022882 0.0074883 0.0026004 -3689.5779

5 minutos 0.0074883 0.0039582 0.0019058 N/D

15 minutos 0.0026004 0.0019058 0.0017394 N/D

Memoria -3689.5779 N/D N/D 6 536 333 630 753.721

Figura 10.18: Grado absoluto de relación lineal existente entre el uso de CPU y de memoria

Tal como se esperaba, los valores obtenidos reflejan una dependencia directa (positiva) entre las

mediciones de carga de CPU56. A partir de los valores mostrados puede deducirse que los aumentos

en la carga del sistema son generalmente puntuales. En el caso de la memoria, indica las grandes

diferencias existentes en los requisitos de memoria de los diferentes scripts (en particular, entre las

páginas que forman la interfaz y los scripts usados para generar la documentación).

Correlación 1 minuto 5 minutos 15 minutos Memoria

1 minuto 1.0000000 0.7868403 0.4121735 -0.0095403

5 minutos 0.7868403 1.0000000 0.7262973 N/D

15 minutos 0.4121735 0.7262973 1.0000000 N/D

Memoria -0.0095403 N/D N/D 1.0000000

Figura 10.19: Grado relativo de relación lineal existente entre el uso de CPU y de memoria

El coeficiente de correlación de Pearson calculado indica, como se esperaba, que hay una buena

correlación positiva entre los valores de carga calculados, y que esta correlación es mayor cuanto

mayor sea la proximidad entre los intervalos de tiempo que reflejan. En el caso de la memoria, indica

que, en general, las páginas tienden o bien a usar grandes cantidades de memoria o bien a usar grandes

cantidades de CPU, sin que las variaciones sean tan pronunciadas como en los otros casos.

56 Los valores de la diagonal principal equivalen, por definición, a la varianza de cada medida.

Page 510: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Apéndices

510 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

APENDICE II: Ampliaciones propuestas

El propósito de este apartado es proporcionar una pequeña lista de posibles ampliaciones y mejoras

en la aplicación desarrollada, basada en deficiencias o aspectos mejorables detectados en la misma

durante su desarrollo. En general, esta lista se centra en mejorar la estructura de la aplicación y facilitar

su mantenimiento posterior implementando prácticas de uso común en de ingenierá de software y

web, y en proporcionar ideas que sirvan de punto de partida para el desarrollo de nuevas

funcionalidades.

Uso del autocargador de clases de Symfony

Actualmente la aplicación hace uso de un autocargador de clases programado ad hoc para la misma.

Este autocargador es funcional y rápido, al tener un mapa estático de los archivos de código fuente

correspondientes a cada tipo de objeto de la aplicación (clase, trait e intefaz del sistema). Sin embargo,

el uso de esta solución lleva implícita la necesidad de actualizar el mapa de tipos del sistema cada vez

que una clase es renombrada o eliminada, o cada vez que una nueva clase es añadida. Como posible

ampliación se recomienda remplazar el autocargador usado por una implementación genérica open

source y, en concreto, se recomienda usar el autocargador de Symfony [SYMF02].

Entre las ventajas del mismo se encuentra la potencial mejora de la estructura de los nombres de

archivos y directorios de código fuente (al tener que seguir un esquema de nombrado estándar) y la

eliminación del mapa de tipos de la aplicación (y, con ella, la necesidad de actualizarlo cada vez que se

añaden o eliminan tipos al sistema). Estas ventajas compensarían los potenciales inconvenientes de

este enfoque, entre los cuales se encontraría un pequeño incremento de los tiempos de carga (que

podría subsanarse con los sistemas de caché que Symfony dispone para este propósito [SYMF03]) o la

introducción de una dependencia adicional en la aplicación (que podría ser gestionada por Composer

al igual que ocurre con el resto de librerías).

Alternativas al sistema MVC usado

La implementación actual del sistema MVC de la aplicación está basada en controladores jerárquicos

(HMVC) [CAI00], en la cual cada controlador gestiona una pequeña parte de la creación de la página a

enviar y delega el resto en otro controlador secundario. Éste, a su vez, puede generar su parte de forma

íntegra o llamando a más controladores antes de retornar una respuesta al controlador que lo invocó.

Pese a las ventajas obvias de este enfoque, durante el desarrollo ha resultado evidente que la

implementación HMVC en esta esta aplicación concreta introduce cientas complicaciones a la hora de

depurar errores o implementar nuevas funcionalidades, como son:

Dificultad para comprender el flujo seguido al procesar una solicitud, debido al gran número

de controladores involucrados en el proceso.

Introducción de dependencias entre controladores, ya que los controladores padre tienen

que encargarse de construir el código HTML de las vistas parciales a partir del código generado

por los hijos, y éstos deben de tener en cuenta la estructura del código generado en los niveles

Page 511: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Apéndices | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 511

superiores, lo cual rompe el principio de separación entre Vistas y Controladores (debido a que

éstos últimos necesitan conocer detalles sobre la jerarquía existente entre las primeras).

Además, en ciertos casos, los controladores hijos necesitan acceder a campos del padre para

actualizar atributos usados en las capas superiores para modificar partes de las vistas.

Dependencia completa de la estructura de las URLs de las páginas de la aplicación en función

de la estructura de los controladores, al construirse éstas a partir de los de nombres de los

métodos invocados.

Dificultad para retornar respuestas no HTML en los controladores inferiores como respuesta

a condiciones detectadas en éstos, como encabezados HTTP de redirección. En estos casos,

además, se requiere la finalización abrupta de la solicitud, enviado los datos directamente al

cliente y cancelando el procesamiento posterior del código de finalización de todos los

controladores superiores (usado, por ejemplo, la sentencia exit del lenguaje), lo cual resulta

una flagrante violación de los principios de Ingeniería del Software relativos a la

estructuración por capas y responsabilidad única.

Como alternativa, se recomienda que revisiones posteriores de la aplicación implementen un sistema

MVC puro [GoF94] en el que un único método de un controlador gestione toda la lógica de negocio

asociada a cada solicitud, basándose para ello en la URL completa en lugar de procesarla por partes en

distintos niveles. De esta forma, toda la lógica principal asociada a cada página o documento generado

estaría contenida en un único punto y se eliminarían las complicaciones de HMVC mencionadas

previamente. Para ello, se aconseja partir de una implementación MVC tradicional existente (como el

HttpKernel de Symfony y las clases base que este framework proporciona para controladores) a partir

de la siguiente lista de consideraciones a la hora de resolver los nuevos problemas que este nuevo

enfoque podría suponer:

Utilización de plantillas jerárquicas en lugar de incluir unas en otras a mano, a través del

mecanismo de herencia a nivel de plantillas que proporciona la librería utilizada actualmente

(Twig). De esta forma, la mayor parte de los aspectos relativos a la capa de presentación

quedarían contenidos en un único nivel, liberando a los controladores de las funciones

relativas a la construcción de HTML por partes y de la necesidad de concocer la jerarquía

existente entre las plantillas que constituyen las vistas.

Uso de mecanismos de herencia tradicionales o componentes comunes desde los

controladores (por ejemplo, utilizando sistemas de inyección de dependencias). De esta forma,

las partes que el sistema actual implementa en los controladores padre (como la

comprobación de permisos) pasarían a estar compartidas de forma sencilla, y toda URL estaría

unívocamente asociada a un único controlador mediante un sistema de mapeo de rutas. Esto

separaría la lógica de control de la estructura de URLs utilizada y permitiría que las URLs (que

pasarían a ser configurables) puedan ser referenciadas por los controladores para generar las

direcciones necesarias en los archivos HTML en lugar de estar éstas directamente incluídas en

las plantillas.

Almacenamiento del estado global de la solicitud, en caso de que fuese necesario, en un

contenedor externo a los propios controladores. El (único) controlador invocado dispondría

Page 512: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Apéndices

512 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

de una referencia a un objeto usado para acceder directamente a la información de dicho

estado global de forma uniforme.

A partir de las anteriores consideraciones se permitiría, además de solucionar los mencionados

problemas, reducir en cierta medida la cantidad de código de la aplicación (incluyendo la eliminación

del sistema MVC ad hoc utilizado actualmente) y, con ello, la complejidad de la misma.

Mejoras funcionales generales y de planificación

En este grupo podrían citarse:

Ampliaciones en las funcionalidades relacionadas con los horarios, como la posibilidad de

gestionar de forma completa los horarios de presentación de ponencias desde la propia

aplicación (incluyendo su visualización en las páginas de administración), la generación de

archivos PDF para imprimir los horarios y la exportación de los mismos a formato iCal al igual

que se hace ahora con la hora de inicio de los simposios y los horarios de exposición de los

posters. De forma complementaria, la asignación de salas a cualquier tipo de paper permitiría

gestionar de forma completa los horarios de uso de las salas durante todo el congreso.

La posibilidad de gestionar envíos a revistas científicas, permitiendo que los ponentes soliciten

la publicación de sus papers a partir de una lista de revistas gestionada desde la interfaz de

administración. Esta funcionalidad fue solicitada por los organizadores tras poner los

primeros prototipos en funcionamiento, pero se descartó por falta de tiempo. Para su

implementación podría usarse como punto de partida el código de gestión de alguna de las

entidades sencillas, como el relativo a salas o excursiones.

El envío de correos electrónicos a los ponentes de forma individual o masiva. Esta

funcionalidad, solicitada por los organizadores tras las últimas etapas del desarrollo,

simplificaría el envío de información de última hora a los asistentes (utilizando las direcciones

de correo proporcionadas durante el registro) e información relativa a la organización de la

conferencia a los administradores (utilizando las direcciones de la lista de notificaciones).

Mejoras en la gestión de documentación

En este punto se sugiere la implementación de un sistema de gestión centralizado de todos los archivos

enviados. En concreto, se incluiría una nueva entidad genérica, Envío, encargada de representar de

forma abstracta un archivo enviado, y se permitiría referirse a ella utilizando un identificador propio.

De esta forma se simplificaría la gestión de envíos, al asociarlos a una única entidad, y se permitiría

que éstos tengan varios archivos asociados a modo de versiones. Cada archivo asociado a un Envío

podría tener, además, anotaciones adicionales (como “poster” o “versión revisada”), y cada una de las

entidades actuales (papers y justificantes de pago) pasaría a tener una única referencia a un envio

genérico. El sistema de gestión conjunta sugerido se encargaría de la lógica necesaria para

proporcionar las URLs de descarga o la asignación de nombres de archivo.

Page 513: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Apéndices | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 513

Entre las ventajas potenciales de este enfoque se podrían citar:

La integración del código de envío de diferentes verisones de los papers en el gestor general

de envíos. Esto simplificaría el código y reduciría la posibilidad de introducir errores al

modificar los diferentes módulos de la aplicación. En caso de que éstos se produzcan, se

simplificaría su depuración.

La posibilidad de mantener en el sistema todas las versiones de los justificantes de pago y

papers, de forma que puedan ser recuperados si fuese necesario en caso de errores por parte

de los usuarios.

La posibilidad de auditar desde qué sesiones e IPs se han realizado los envíos y la hora de éstos

de una forma sencilla. Para ello bastaría con incluir en el Envío una referencia a la muestra de

la tabla de instrumentación asociada a la solicitud HTTP desde la que se originó.

El uso de borrados virtuales (soft deletes), de forma que los archivos antiguos se marcan como

borrados pero no llegan a ser eliminados de forma física del sistema.

Mejoras técnicas generales

La principal mejora técnica recomendada consiste en la migración de todas las consultas SQL

realizadas por la aplicación directamente sobre la base de datos para que sean realizadas a través del

ORM (Doctrine). Esto está considerado como uno de los cambios técnicos más prioritarios, pues

eliminaría el actual sistema dual de acceso a la base de datos (reduciendo la complejidad de los

modelos) y permitiría la implementación de un sistema de caché de datos de forma trivial utilizando

los mecanismos que Doctrine proporciona para ello. Este sistema podría almacenar los datos utilizando

una caché por proceso (como APC) o una caché distribuída (como Memcached).

Por otra parte, se recomienda considerar el uso de solicitures AJAX para un mayor número de casos

de uso, realizando las solicitudes y el análisis sintáctico de las respuestas utilizando las funciones que

jQuery proporciona para ello, y generando el código JSON a enviar a través de las funciones

proporcionadas de forma nativa por PHP. Entre las funcionalidades administrativas que podrían utilizar

este tipo de solicitudes se incluye la apertura y cierre del plazo de envío de papers y el acceso público,

la creación y borrado de entidades (salas, excursiones,..) o la asignación automática de números de

factura.

Además, se recomienda considerar la adaptación del código de la aplicación para que haga uso de las

nuevas funcionalidades de PHP 7 una vez que la nueva versión del lenguaje sea publicada de forma

estable. Entre estas características a considerar se incluye el type hinting de los tipos de dato de los

parámetros escalares de las funciones (por ejemplo, para indicar el tipo de dato admitido (string,

entero…) en cada parámetro de las URLs) y los tipos de retorno (lo cual ayudaría en la depuracíon de

la aplicación y minimizaría los posibles errores). Además, se espera que la nueva versión incluya

mejoras de rendimiento en los casos en los que se indique los tipos de los parámetros y variables, al

permitir que el lenguaje realice optimizaciones de forma automática y transparente para el

programador. En caso de seguir estas recomendaciones para los parámetros de los controladores,

también permitiría marcar los parámetros como obligatorios u opcionales en la propia firma de los

Page 514: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Apéndices

514 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

métodos de los controladores. En cualquier caso, y en caso hacer uso de una implementación MVC

alternativa a la actual, habría que tener en cuenta si ésta soporta las nuevas características

mencionadas.

Por último, sería recomendable realizar una normalización de la estructura de la base de datos

utilizada por la aplicación. La estructura actual está fuertemente influenciada por la utilizada en

versiones previas (con las que comparte la mayor parte de puntos débiles) y no cumple los estándares

de normalización más elementales (en concreto, los dictados por la Primera Forma Normal definida

por Edgar Codd en 1971 y aceptada universalmente).

Para esta tarea se recomienda utilizar el estudio de normalización incluído al final del apartado “Diseño

físico de datos” como punto de partida. No obstante, en caso de llevar a cabo la normalización, se

deberá tener en cuenta las complicaciones adicionales en la mantenibilidad provocadas por la

previsible necesidad de doblar el número actual de tablas de la base de datos y entidades débiles

asociadas a éstas. Una opción intermedia consistiría en realizar una normalización selectiva de las

partes más problemáticas (como las que afectan a datos duplicados) en lugar de realizar una

normalización completa.

Mejoras en estadísticas, instrumentación y

administración de la aplicación

En este grupo se recomienda añadir un nuevo módulo en las páginas de administración para mostrar

los datos de instrumentación recogidos en tiempo real y la utilización de estos, junto a los datos

disponibles de ediciones anteriores, para mostrar estadísticas y gráficas de evolución de la edición

actual, como el número de papers enviados y ponentes registrados actualmente y en función de los

días transcurridos desde el inicio del plazo de envío. Igualmente, estos datos podrían mostarse de

forma comparativa respecto a los datos disponibles de otras ediciones.

Las gráficas mostradas podrían ser similares a las disponibles en el Apéndice I de este documento, e

incluso podrían implementarse a partir del código PHP utilizado para generarlas (este código está

disponible en el CD-ROM incluído en la memoria).

También se ha considerado la inclusión de opciones de diagnóstico en la interfaz de administración,

como la comprobación de que los archivos de papers y justificantes son consistentes con los datos

guardados en la BBDD (ayudando en la depuración en caso de que se produzcan errores en el sistema

de archivos del servidor y en la detección de errores en la aplicación).

Por último, para simplificar la recuperación de datos en caso de que se produzcan errores graves,

también se ha considerado la posibilidad de realizar backups desde la propia interfaz de

administración. Dado el volumen relativamente bajo de datos a gestionar, sería admisible generar los

archivos de copia de seguridad directamente desde las páginas de administración. En otro caso, las

copias de seguridad podrían gestionarse mediante un shell script independiente, que permitiría

realizar las copias de seguridad de manera periódica (utilizando cron) y enviarlas automáticamente a

un servidor remoto.

Page 515: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Apéndices | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 515

Cambios considerados en el sistema de pagos

Inicialmente se consideró permitir realizar el pago de la cuota de inscripción a través de un sistema de

pagos online. En concreto se consideró el uso de PayPal como proveedor de pagos por ser la opción

más extendida. Las potenciales ventajas de su uso incluyen:

La posibilidad de integrar el pago de la cuota de inscripción a través de Internet, al igual que

el resto del proceso de inscripción, agilizando el proceso.

La verificiacón automática y en el momento de los pagos realizados, utilizando la API que

PayPal dispone para ello [PAYP01], pudiendo así evitar tener que realizar la comprobación

manualmente (al menos en algunos casos). En cualquier caso, probablemente esto no sea de

utilidad para aquellos usuarios que soliciten factura (puesto que estos requieren la asignación

de números de factura; además, normalmente estos pagos deben realizarse por instituciones

externas, como Universidades, y empresas privadas, y ser registrados en sus sistemas de

contabilidad tradicionales). Si así fuera, podría aplicarse, al menos, para agilizar los pagos de

los usuarios que solo requieran un justificante simple (que representan el 61% de los usuarios

registrados en la edición de 2014).

La existencia de opciones de pago utilizando tarjetas de crédito y débito, para poder

beneficierse de las ventajas anteriormente citadas en los casos en los que el usuario no

disponga de cuenta de PayPal.

Finalmente se decidió mantener el sistema de pagos tradicional y su verificación manual para la edición

de 2014. En cualquier caso, se incluyen estas notas aquí a modo de propuesta en caso de que la

organización considere cambiar el sistema de pagos en un futuro.

Por otra parte, la aplicación dispone de una implementación parcial de un sistema de patrocinadores

(deonimado “RED”), de forma que la cuota de inscripción puede ser pagada total o parcialmente por

una empresa para parte de los ponentes. Las ediciones recientes no han hecho uso de este sistema y,

por tanto, su implementación ha sido portada desde la aplicación original únicamente de manera

básica. En concreto, la estructura de la base de datos dispone de campos para la información de los

patrocinadores, los modelos de configuración y facturación disponen de métodos para establecer los

datos del patrocinador y asignar usuarios al mismo, y las facturas se generan descontando la parte de

la cuota cubierta por el patrocinador (cero en 2014). Sin embargo, para utilizar este sistema en

ediciones posteriores será necesario definir e implementar los cambios necesarios en la interfaz de

usuario para permitir la configuración del sistema de patrocinadores y la asignación de usuarios al

patroinador.

Page 516: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Apéndices

516 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Mejoras de seguridad

Actualmente la aplicación utiliza el algoritmo de reducción criptográfica MD5 como alternativa al

almacenamiento de las contraseñas en texto claro. Sin embargo, se sabe que este algoritmo presenta

problemas de seguridad desde que se encontraron casos de colisión de hash en el mismo [IACR01]

[PHP05].

Como alternativa, se aconseja el uso de un sistema estándar de encriptación de contraseñas más

robusto, como las funciones de generación de contraseñas password_hash() y password_verify()

introducidas en PHP5.6 y que incluyen funcionalidades para rehashear las contraseñas almacenadas,

adaptando los valores almacenados cuando se detectan vulnerabilidades en las implementaciones

utilizadas para generar los valores almacenados previamente en la base de datos.

Otros cambios a considerar

La interfaz de administración contiene partes en español y partes en inglés, herencia de las versiones

iniciales de la misma. Se recomienda comprobar en qué casos ocurre esto y modificarlos

convenientemente en uno u otro sentido para que sean consistentes entre si.

Por otra parte, la aplicación contempla un rol de editor, pensado para permitir a miembros de

publicaciones científicas (como revistas) la descarga de los papers enviados con el propósito de que

publiquen aquellos que consideren interesantes. Sin embargo, esta funcionalidad podría ampliarse

para que puedan seleccionar los papers que les interesen desde la propia interfaz web, utilizando la

aplicación del CMMSE como mediadora en el proceso de adquisición de los papers a pubicar (que

podría incluir, si se desea, el pago por parte del autor del paper al editor para su publicación o

viceversa). Como alternativa, la aplicación podría servir simplemente para facilitar la puesta en

contacto entre ambas partes, proporcionando la dirección de correo 57 del ponente al editor e

informando al ponente de que un editor está interesado en su paper.

Además, la aplicación debería permitir añadir editores desde la propia interfaz web en lugar de

requerir la realización de consultas de forma manual sobre la base de datos.

57 Se debe tener en cuenta que permitir el acceso a datos de usuario y papers enviados a un tercero (el editor) probablemente requiera actualizar o añadir propósitos y/o partes involucradas en la nota relativa a la LOPD mostrada en el formulario de registro.

Page 517: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Apéndices | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 517

APENDICE III: Contenido del CD-ROM

En este apartado se detalla el contenido del CD-ROM que acompaña a la documentación impresa,

describiendo cada uno de los directorios presentes en el directorio raíz del mismo.

cmmse-plots-2014

Código fuente de los scripts utilizados para generar las gráficas del apartado de estadísticas.

cobertura-tests

Informes generados por PHPUnit sobre las partes del código fuente de la aplicación cubiertas

por los tests unitarios en formato HTML. El índice de los mismos es accesible a través del archivo

index.html.

documentacion

Archivos digitales con una copia de este documento y archivos asociados (imágenes, esquemas

UML…).

También se incluye una versión más extensa del apartado de introducción a Tecnologías y

protocolos extraída de los primeros borradores de la memoria, una hoja de cálculo en formato

OpenDocument con la correspondencia entre los escenartios de los casos de uso y los apartados

de los manuales, y una copia de la Guía de uso de cookies de la Agencia Española de Protección

de Datos.

instalador

Shell script de instalación de la aplicación junto a los archivos asociados al mismo.

phpdoc

Documentación autogenerada a partir del código fuente de la aplicación y los comentarios

incluídos en el mismo.

webcmmse-src

Código fuente de la aplicación obtenido a partir del repositorio utilizado durante el desarrollo.

Page 518: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Apéndices

518 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

APENDICE IV: Definiciones y abreviaturas

A continuación se incluye una lista de definiciones a modo de referencia rápida para facilitar la lectura

del resto del documento.

AJAX (Asynchronous Javascript And XML)

Se denomina Javascript asíncrono y XML al conjunto de tecnologías que permiten el desarrollo

de aplicaciones web en las que una parte de las mismas se ejecuta en el navegador del cliente,

frente al modelo tradicional en el que las acciones del usuario implican la solicitud de una nueva

página al servidor y la recarga completa de la interfaz de usuario.

Android

Sistema operativo open source basado en Linux y diseñado, principalmente, para dispositivos

móviles y tabletas.

CGI (Common Gateway Interface)

En el contexto asociado a las aplicaciones web, el protocoloo de Interfaz de Entrada Común es

utilizado para la comunicación entre un servidor web y un proceso independiente encargado de

generar las páginas web enviadas al usuario, permitiendo la implementación de aplicaciones

web en cualquier lenguaje de programación.

Cliente (redes)

En informática, se denomina cliente a aquel elemento (hardware o software) o persona física

que accede a los servicios proporcionados por un sistema servidor. En el contexto de esta

aplicación, se denomina cliente tanto al equipo hardware y al navegador utilizado como al

propio usuario final que utiliza la aplicación.

Controlador

Objeto software encargado de atender las solicitudes del cliente, convirtiéndolas en solicitudes

a los modelos y/o a otros controladores, generando la respuesta a mostrar al usuario por medio

de una o varias vistas.

Cookie

En informática, se denomina cookie a una pequeña información enviada desde el servidor web

al cliente como parte de las respuestas a las solicitudes efectuadas, y que éste reenvía en las

siguientes, permitiendo al servidor conocer la actividad previa del usuario. Entre sus funciones

se encuentran el control de usuarios identificados en aplicaciones web o la obtención de los

hábitos de navegación de éstos con fines publicitarios.

Decorador

En ingeniería de software, se denomina decorador, envoltorio, o wrapper a aquel objeto que

posibilita modificar la interfaz externa de otros objetos, añadiendo a éstos funcionalidades o

representaciones adicionales de sus datos sin influir en su comportamiento y sin modificar su

implementación.

Page 519: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Apéndices | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 519

DNS (Domain Naming System)

El Sistema de Nombres de Dominio es un sistema global, jerárquico y distribuido utilizado para

traducir nombres de host (por ejemplo, www.uniovi.es) a direcciones IP.

DOM (Document Object Model)

El Modelo de Objetos de Documento es una interfaz estándar de programación que posibilita la

representación de documentos HTML y XML, así como su modificación dinámica utilizando

Javascript.

Drag & drop

En informática, se denomina drag & drop (arrastrar y soltar) a la acción de mover con el ratón

objetos entre ventanas o partes de éstas. Habitualmente los objetos arrastrados son archivos

(por ejemplo, para copiarlos, moverlos o abrirlos con un programa), pero también pueden ser

otro tipo de elementos en función de la aplicación utilizada.

Entidad

En ingeniería de software, una entidad es una abstracción de alto nivel que permite separar el

significado conceptual de un objeto de dominio de la aplicación de la representación física y el

acceso real a los datos almacenados.

GPL (General Public License)

La Licencia Pública General es una licencia (aplicada comúnmente a elementos software) que

garantiza a los usuarios finales la libertad de usar, estudiar, compartir y modificar los elementos

sujetos a ella.

HTTP (HyperText Transfer Protocol)

El Protocolo de Transferencia de Hipertexto es un protocolo de aplicación utilizado para el

intercambio de datos (como páginas web o imágenes) a través de redes informáticas. Este

protocolo es utilizado como la base sobre la que se construye la World Wide Web.

IDE (Integrated Development Environment)

Un Entorno de Desarrollo Integrado es un programa informático compuesto por un conjunto de

herramientas que facilitan el desarrollo de software.

Interfaz (programación)

En ingeniería de software, una interfaz es un conjunto de características que debe cumplir una

clase para ser apta para una necesidad concreta. En particular, las interfaces permiten separar

la forma de utilizar un componente software de su implementación particular.

IP (Internet Protocol address)

Una dirección IP es una etiqueta numérica que identifica de manera lógica, jerárquica y unívoca

a un dispositivo (habitualmente una computadora) dentro de una red informática. Además, “IP”

es comúnmente utilizado para referirse al protocolo de red basado en direcciones de este tipo.

Linux

Sistema operativo open source de amplio uso en redes informáticas y dispositivos móviles.

Page 520: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Apéndices

520 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Logger

Objeto encargado de recolectar mensajes generados por otros objetos para el posterior análisis

y depuración de una aplicación y la detección de posibles problemas y sus causas a posteriori.

Main-in-the-Middle

En criptografía, los ataques de intermediario son aquellos en los que el atacante adquiere la

capacidad de leer y modificar los mensajes intercambiados entre dos partes legítimas sin que

éstas conozcan el hecho de que la comunicación ha sido comprometida.

Modelo

En ingeniería de software, un modelo representa y gestiona la información sobre la cual opera

un sistema, proporcionando mecanismos de alto nivel para su uso y modificación.

MVC (Model-View-Controller)

Patrón de arquitectura de software que separa la lógica de negocio, los datos y la representación

de éstos mediante abstracciones bien definidas, facilitando el desarrollo de aplicaciones y su

posterior mantenimiento.

MySQLi (MySQL Improved)

Extensión de PHP para la comunicación con servidores MySQL que proporciona una interfaz de

programación orientada a objetos y el acceso a funcionalidades modernas como el soporte para

consultas preparadas, transacciones, múltiples juegos de caracteres o procedimientos

almacenados. Se trata de la opción recomendada para nuevos proyectos.

Open Source

Expresión utilizada para referirse a programas y librerías informáticas cuyo código fuente es

desarrollado y distribuido libremente.

ORM (Object Relational Mapper)

El mapeo objeto-relacional es una técnica de programación para la conversión y uso

transparente de datos de un sistema de almacenamiento tradicional (archivos, bases de datos,

etc) como entidades, creando, en la práctica, una base de datos virtual orientada a objetos sobre

una base de datos relacional.

Proceso

En informática, se denomina proceso a una instancia de un programa durante su ejecución,

incluyendo la información y recursos necesarios para ello (como las instrucciones del mismo, el

estado del procesador o la memoria necesaria para almacenar sus datos).

Plantilla (template)

Los archivos de plantilla definen cómo presentar los datos de una aplicación a partir de

documentos de texto genéricos, posibilitando el desarrollo y la modificación de la interfaz de

usuario de manera independiente del resto de la aplicación.

Page 521: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Apéndices | Plataforma web para la gestión de conferencias científico-técnicas

Escuela Politécnica de Ingeniería - Universidad de Oviedo | Héctor Arroyo Santiago 521

Proxy (programación)

En ingeniería de software, un proxy es una clase utilizada para proporcionar una interfaz

alternativa de otro objeto. En la aplicación desarrollada, los proxys son objetos generados de

manera automática a partir de las entidades y posibilitan posponer el acceso a la base de datos

para mejorar el rendimiento.

Proxy (redes)

En una red informática, un servidor proxy es un sistema físico o aplicación que actúa como

intermediario entre el cliente y el servidor final, encaminando las solicitudes y las respuestas

entre éstos. Es usado para el control y auditoría de los contenidos solicitados por los usuarios

de una red, el ahorro ancho de banda al proporcionar el acceso a redes externas (como Internet)

o el acceso a redes de forma anónima.

Servidor

Sistema físico y/o software que responde a solicitudes realizadas a través de una red

informática, proporcionando servicios como el acceso a bases de datos, páginas web o correo

electrónico.

Test Unitario

Programa breve utilizado para comprobar el correcto funcionamiento de elementos aislados de

una aplicación, permitiendo la automatización de las pruebas realizadas y la rápida detección de

errores surgidos durante el desarrollo.

Trait

Los traits (o rasgos) proporcionan un mecanismo de reutilización de código horizontal en

lenguajes de programación orientados a objetos de herencia simple, permitiendo heredar la

implemetación de métodos adicionales sin modificar la jerarquía tradicional respecto a otras

clases.

Túnel TCP/IP

En informática, se denomina túnel a la utilización de un protocolo de red para encapsular otro,

por ejemplo, para acceder a los servicios de una máquina a través una conexión segura con una

tercera (evitando que el sistema de destino conozca la IP de origen real), para conectar a redes

IPv6 desde redes IPv4 o para acceder a servicios no permitidos desde la red del usuario utilizando

otros que sí lo están (como FTP sobre HTTP).

URL (Uniform Resource Locator)

Un Localizador de Recurso Uniforme, conocido informalmente como dirección web, es un tipo

de URI que contiene una referencia completa a un recurso, incluyendo el protocolo, el nombre

del host o IP donde está alojado y (opcionalmente) el usuario y la contraseña necesarios para

acceder a él.

URI (Uniform Resource Identifier)

Un Identificador de Recurso Uniforme es un tipo de identificador asociado a los recursos de una

red de forma unívoca. Se trata de una extensión de las URLs añadiendo a éstas la posibilidad de

incluir elementos adicionales como parámetros de formularios o referencias a secciones

concretas del documento apuntado (fragmentos).

Page 522: Plataforma Web para la Gesión Integral de Conferencias Científico-Técnicas

Plataforma web para la gestión de conferencias científico-técnicas | Apéndices

522 Héctor Arroyo Santiago | Escuela Politécnica de Ingeniería - Universidad de Oviedo

Vista

En ingeniería de software, las vistas proporcionan al usuario la representación de los datos

proporcionados por los modelos de la aplicación en un formato adecuado, como una página

web, un archivo PDF o una hoja de cálculo.

WebSocket

Protocolo de comunicación bidireccional entre un cliente y un servidor HTTP, permitiendo a este

último el envío de información en cualquier momento (en lugar de poder hacerlo únicamente

como respuesta a una solicitud). Las comunicaciones WebSocket se realizan a través de los

puertos estándar de HTTP y HTTPS, utilizando una conexión creada por el cliente que el servidor

no cierra, y permiten notificaciones y actualizaciones de estado en tiempo real a solicitud del

servidor.

WWW (World Wide Web)

Sistema de documentos vinculados a través de enlaces de hipertexto construido sobre HTTP y

HTML que permite el acceso a páginas web que contienen texto, imágenes, video y otros datos

multimedia, y la navegación entre ellas.