UNIVERSIDAD DE ALCALÁ - uah.es · Moodle es un paquete de software para la creación de cursos y...

172
UNIVERSIDAD DE ALCALÁ Escuela Técnica Superior de Ingeniería Informática INGENIERÍA INFORMÁTICA Proyecto Fin de Carrera Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de laboratorios docentes María Jesús García Alba Diciembre 2010 UNIVERSIDAD DE ALCALÁ

Transcript of UNIVERSIDAD DE ALCALÁ - uah.es · Moodle es un paquete de software para la creación de cursos y...

UNIVERSIDAD DE ALCALÁ

Escuela Técnica Superior de Ingeniería Informática

INGENIERÍA INFORMÁTICA

Proyecto Fin de Carrera

Análisis del desarrollo de extensiones para

Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

María Jesús García Alba

Diciembre 2010

UNIVERSIDAD DE ALCALÁ

Escuela Técnica Superior de Ingeniería Informática

INGENIERÍA INFORMÁTICA

Análisis del desarrollo de extensiones para Moodle:

Desarrollo de un módulo para la gestión de laboratorios docentes

Autor: María Jesús García Alba

Director: D. Marcos Marvá Ruiz

TRIBUNAL:

Presidente: D. David Orden Martín

Vocal 1º: Dª Ana Marco García

Vocal 2º: D. Marcos Marvá Ruiz

CALIFICACIÓN:………………… FECHA: ……………………………

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

5

Contenido

1 Resumen .................................................................................................................. 9

2 Introducción .......................................................................................................... 11

2.1 Objetivos ........................................................................................................ 13

3 Las Tecnologías de la Información en la educación ........................................ 15

3.1 La Web y la educación a distancia ............................................................. 15

3.2 E-learning (Electronic Learning) ................................................................ 19

3.3 B-learning (Blended Learning) ................................................................... 21

3.4 La educación superior y las TICS ............................................................... 23

3.5 Sistemas de Gestión de Aprendizaje ......................................................... 25

3.5.1 Sistemas de Administración de Aprendizaje (LMS)........................... 26

3.5.2 Sistemas de Administración de Contenidos de Aprendizaje (LCMS)

28

3.6 Moodle ........................................................................................................... 29

4 Arquitectura de Moodle ...................................................................................... 33

4.1 Entorno de Moodle....................................................................................... 33

4.2 Base de datos ................................................................................................. 34

4.3 Sistema operativo ......................................................................................... 35

4.4 Servidor Web................................................................................................. 35

4.5 Estructura de directorios ............................................................................. 37

4.5.1 Código de Moodle ................................................................................... 37

4.5.2 Base de datos de Moodle ........................................................................ 40

4.5.3 Datos de Moodle ...................................................................................... 40

4.6 Estructura básica de Moodle ....................................................................... 41

4.6.1 Actividades ............................................................................................... 42

4.6.2 Recursos .................................................................................................... 44

4.6.3 Bloques ...................................................................................................... 45

4.7 Control de acceso, inicio de sesión y roles de usuario ............................ 47

4.7.1 Permisos .................................................................................................... 48

4.7.2 Capacidades ............................................................................................. 49

4.7.3 Roles .......................................................................................................... 49

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

6

5 Desarrollo de un módulo de actividad.............................................................. 51

5.1 Instalación de Moodle .................................................................................. 51

5.1.1 Requisitos.................................................................................................. 51

5.1.2 Instalación de requisitos ......................................................................... 53

5.1.3 Instalación de Moodle ............................................................................. 54

5.2 Guías de estilo para desarrolladores ......................................................... 62

5.2.1 Estilo del código ....................................................................................... 62

5.2.2 Reglas generales ....................................................................................... 62

5.2.3 Estilo de la interfaz .................................................................................. 69

5.3 Estructura de un módulo de actividad ...................................................... 71

5.3.1 Ficheros principales ................................................................................. 72

5.4 Librerías para el desarrollo de módulos ................................................... 83

5.4.1 accesslib.php ............................................................................................ 84

5.4.2 datalib.php ................................................................................................ 85

5.4.3 ddllib.php ................................................................................................. 86

5.4.4 dmllib.php ................................................................................................ 86

5.4.5 weblib.php ................................................................................................ 90

5.4.6 moodlelib.php .......................................................................................... 90

5.4.7 Otras librerías importantes .................................................................... 91

5.5 Creación de un módulo sencillo ................................................................. 91

5.5.1 Formulario de configuración de la instancia ....................................... 92

5.5.2 Tablas del módulo en la base de datos ................................................. 94

5.5.3 Edición de la librería de funciones del módulo .................................. 95

5.5.4 El paquete de idioma .............................................................................. 96

5.5.5 Permisos del módulo .............................................................................. 97

5.5.6 Otros ficheros importantes ..................................................................... 98

5.5.7 Actualización del módulo ...................................................................... 98

5.5.8 Crear soporte para copias de seguridad y restauración .................... 99

6 Módulo de gestión de grupos de laboratorio: Gruposlab ............................ 103

6.1 Definición del sistema ................................................................................ 103

6.1.1 Descripción y planteamiento del problema ....................................... 103

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

7

6.1.2 Descripción general del entorno tecnológico .................................... 104

6.1.3 Identificación de usuarios .................................................................... 106

6.2 Catálogo de requisitos ............................................................................... 106

6.2.1 Requisitos funcionales .......................................................................... 106

6.2.2 Requisitos de datos ................................................................................ 113

6.2.3 Requisitos de Interfaz ........................................................................... 114

6.2.4 Requisitos de Seguridad ....................................................................... 115

6.2.5 Requisitos de codificación .................................................................... 116

6.3 Análisis de la aplicación ............................................................................ 116

6.3.1 Modelo de datos .................................................................................... 116

6.3.2 Modelo de casos de uso ........................................................................ 120

6.3.3 Diagramas de flujo ................................................................................ 126

6.3.4 Definición de interfaces de usuario..................................................... 130

6.3.5 Diagrama de componentes ................................................................... 135

6.3.6 Especificación del plan de pruebas ..................................................... 136

7 Manuales de usuario .......................................................................................... 141

7.1 Manual del usuario profesor .................................................................... 141

7.1.1 Añadir el módulo GruposLab a un curso .......................................... 141

7.1.2 Configuración general de la aplicación .............................................. 141

7.1.3 Configuración particular de cada grupo ............................................ 142

7.1.4 Administrar los grupos de laboratorio ............................................... 145

7.2 Manual del usuario alumno ...................................................................... 148

7.2.1 Matricularse en un grupo de laboratorio ........................................... 148

7.2.2 Comprobar su grupo de laboratorio ................................................... 150

7.3 Manual de administrador ......................................................................... 151

7.3.1 Instalar módulo GruposLab ................................................................. 151

7.3.2 Desinstalar módulo GruposLab .......................................................... 153

8 Presupuesto ......................................................................................................... 155

8.1 Presupuesto de ejecución material ........................................................... 155

8.1.1 Costes de sistemas ................................................................................. 155

8.1.2 Costes por tiempo de trabajo ............................................................... 156

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

8

8.1.3 Coste total de ejecución material ......................................................... 156

8.2 Gastos generales y beneficio industrial ................................................... 157

8.3 Presupuesto de ejecución por contrata .................................................... 157

8.4 Honorarios facultativos ............................................................................. 157

8.5 Importe total del presupuesto .................................................................. 158

9 Conclusiones y trabajos futuros ....................................................................... 159

10 Bibliografía ...................................................................................................... 163

11 Índice de ilustraciones ................................................................................... 167

12 Índice de tablas ............................................................................................... 169

13 Índice de código .............................................................................................. 171

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

9

1 Resumen En este proyecto de fin de carrera se da una solución al problema del reparto de

alumnos en los grupos de prácticas de algunas asignaturas universitarias. Para ello se

ha realizado un módulo para la plataforma de enseñanza virtual Moodle, encargado de

facilitar esta labor tanto a los alumnos como a los profesores.

Al hilo de esta aplicación, se ha recopilado y sistematizado el material de ayuda

para desarrolladores disponible en la red. Asimismo, se ha redactado una guía que

ayudará a los principiantes en la tarea de modificar módulos existentes o añadir

nuevas funcionalidades a Moodle.

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

11

2 Introducción La incorporación de las tecnologías de la información en el aula ha supuesto un

cambio en la enseñanza tradicional a nivel metodológico y actitudinal tanto para los

profesionales de la enseñanza como para los propios alumnos (Romero, 2006). Como

consecuencia de esta irrupción tecnológica, se hace necesario un entorno software

adecuado para albergar los contenidos de aprendizaje.

Se puede considerar los Sistemas de Gestión de Aprendizaje (SGA) o Learning

Management System (LMS) como el software que automatiza la administración de

acciones de formación. Estos sistemas registran usuarios, organizan diferentes cursos

en un catálogo, almacenan datos sobre usuarios y proveen de informes para la gestión.

Ofrecen los mecanismos necesarios para que el formador pueda crear y distribuir

contenidos, monitorizar la participación de los alumnos inscritos, así como evaluar su

desempeño. (Arribas, 2008).

En la actualidad existe una amplia oferta de Sistemas de Gestión de

Aprendizaje, entre la que cabe destacar las plataformas de uso libre o código abierto.

Estas ofrecen múltiples ventajas a la institución que decida adoptarlas, como la

ausencia de pagos por licencias comerciales. O la posibilidad de modificar o ampliar el

software según las necesidades de la institución, ya que se cuenta con acceso directo al

código fuente. En este último punto se centrará el desarrollo del proyecto de fin de

carrera, como se detallará más adelante.

Dentro de los Sistemas de Gestión de Aprendizaje de código abierto cabe

destacar al ya mencionado Moodle (Module Object-Oriented Dynamic Learning

Environment) (Moodle, 2009), que cuenta en la actualidad con 44,921 sitios y más de 30

millones de usuarios en 208 países del mundo (http://moodle.org/stats/), y se ha

puesto, en los últimos años, a la cabeza del mercado de aprendizaje a distancia

(Jerónimo, 2008).

Moodle es un paquete de software para la creación de cursos y sitios Web

basados en internet. Es un proyecto en desarrollo diseñado para dar soporte a un

marco de educación social constructivista (Gómez, 2005 citado por Jerónimo, 2008).

Uno de los principales aspectos que caracteriza a Moodle es su estructura

modular. Gracias a ella, es posible modificar, eliminar o crear nuevos módulos o

aplicaciones para adaptar la plataforma a las necesidades formativas de cada

institución.

Los grupos de innovación docente del Departamento de Matemáticas de la

Universidad de Alcalá (InnovamatUAH y LibreTICS) vienen realizando un esfuerzo

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

12

para generalizar el uso de las TIC a nivel docente. Estas actuaciones se han centrado en

la utilización de Moodle como herramienta para la gestión de la docencia y, de forma

simultánea, en la adaptación de las asignaturas del departamento hacia el Espacio

Europeo de Educación Superior (EEES). No obstante, teniendo en cuenta que los

estudios son presenciales, no se considera Moodle como un medio básico de

comunicación con los estudiantes, pero sí una buena herramienta para el auto

aprendizaje y la autoevaluación. Aun así, de cara a la implantación del espacio EEES, la

utilización de Moodle permitirá organizar y programar el trabajo docente de una forma

muy ágil, clara y estructurada.

Durante la puesta en marcha de la plataforma Moodle en el Departamento de

Matemáticas, en el que disfruto de una beca de formación, echamos en falta en la

herramienta (Moodle) una serie de funcionalidades que serían de utilidad. Una de ellas

era el citado módulo para gestionar laboratorios docentes. Hasta la fecha, esta tarea era

soportada por otra aplicación, llamada Fourier y que en su momento constituyó un

trabajo de fin de carrera. Además, cuando se planteó el desarrollar este módulo, un

rápido vistazo a la documentación para desarrolladores Moodle puso de manifiesto

que la información fundamental se encuentra dispersa.

El párrafo anterior recoge las necesidades a las que responde este proyecto. Por

un lado, se estudiará con detenimiento la arquitectura de Moodle, así como la

documentación y las librerías de código que provee al desarrollador. Se realizará una

guía o manual para el desarrollador que ayude en la tarea de modificar o desarrollar

nuevas extensiones para añadir funcionalidades a la plataforma. Por otro lado, se

desarrollará un módulo para gestionar los laboratorios docentes de las asignaturas del

departamento de Matemáticas de la Universidad de Alcalá, que permitirá a los

profesores configurar los grupos de prácticas disponibles y a los alumnos seleccionar

varios laboratorios en orden de preferencia. Será el propio módulo el que se encargará

de repartir los alumnos entre los grupos, de acuerdo a un algoritmo equitativo, e

informará a cada alumno de cuál es el grupo en el que se encuentra. El código fuente

de este módulo, así como toda la documentación en formato digital se adjuntará

mediante un CD a la memoria final.

Actualmente la plataforma virtual Moodle del Departamento de Matemáticas

cuenta con una media de 12.000 visitas diarias, generadas por los más de 2.500 usuarios

registrados en la plataforma y matriculados en cerca de un centenar de cursos

correspondientes a asignaturas de diferentes titulaciones, seminarios y másteres

universitarios. Estos elevadas cifras nos permiten imaginar la importancia que tendrá

el módulo desarrollado y los beneficios que reportará a todos los usuarios del Sistema

de Gestión de aprendizaje Moodle.

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

13

2.1 Objetivos

En este apartado se detallan los objetivos generales expuestos en la sección

anterior: Organizar y sistematizar la documentación para desarrolladores de Moodle

relacionada con el desarrollo extensiones y realizar un módulo para la gestión de los

laboratorios docentes del departamento de Matemáticas de la Universidad de Alcalá

integrado en la plataforma Moodle. Con estas ideas en mente, los objetivos específicos

planteados son los siguientes:

1. Revisar la documentación para desarrolladores que proporciona Moodle, así

como las distintas librerías de código fuente que incluye.

2. Analizar los distintos tipos de extensiones que se pueden desarrollar para

Moodle (Módulos de actividades, bloques, temas, etc), estudiando las

peculiaridades de cada una y las funcionalidades que pueden ofrecer.

3. Repasar los módulos estándar de Moodle, y determinar cuáles podrían ser

algunas de las funcionalidades docentes requeridas por el Departamento de

Matemáticas que no están cubiertas correctamente por estos módulos.

4. Desarrollar un módulo para la gestión de laboratorios docentes adaptado a las

peculiaridades del departamento de Matemáticas de la Universidad de Alcalá.

5. Probar y depurar el módulo obtenido en un entorno educativo real, donde

alumnos y profesores puedan contribuir localizando errores y aportando

sugerencias.

6. Redactar un detallado manual de usuario, tanto para el administrador de

módulo, como para el profesor y el alumno.

7. Realizar una breve guía que englobe y ordene los recursos ofrecidos por Moodle

para ayudar en el proceso de desarrollo de un módulo de actividad.

8. Enviar el módulo de gestión de laboratorios a Moodle.org para que, tras ser

aprobado por sus revisores oficiales, sea incluido en la lista de extensiones no

oficiales y pueda ser descargado y utilizado por cualquier institución que lo

necesite.

9. Redactar un informe o memoria final que contenga toda la documentación

citada en los objetivos anteriores, así como la guía de ayuda para el

desarrollador de módulos y las conclusiones obtenidas de la realización del

trabajo.

En cuanto a la estructura de este proyecto de fin de carrera y la metodología

empleada, en primer lugar se ha llevado a cabo una breve revisión bibliográfica sobre

los temas de enseñanza electrónica y sistemas de gestión de aprendizaje.

Posteriormente se hace un breve estudio sobre los recursos para el desarrollador que

proporciona Moodle en su portal Web. Más tarde se han estudiado los distintos tipos

de extensiones con las que el desarrollador puede colaborar en la modificación o

ampliación de las capacidades de la plataforma virtual, y se han analizado los módulos

oficiales que contiene el paquete de descarga de Moodle, para identificar algunas

necesidades particulares del departamento que no están cubiertas con estos módulos

estándar.

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

14

A continuación se ha ejecutado el desarrollo de un módulo para la gestión de

laboratorios docentes, y al hilo de este desarrollo se ha ido confeccionando una guía o

tutorial que servirá como ayuda y referencia al futuro desarrollador de módulos.

Por último, se ha completado esta memoria final donde se recogen los

resultados del proyecto, así como las conclusiones a las que se ha llegado tras la

realización del trabajo.

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

15

3 Las Tecnologías de la Información en la educación En este apartado analizaremos una serie de conceptos teóricos relacionados con

la influencia de las tecnologías de la información en el ámbito de la educación, que nos

servirán para definir el contexto en el que se situará la temática del presente proyecto

de fin de carrera. En primer lugar se analizará la necesidad de la Web en la educación a

distancia, para después pasar a definir conceptos básicos como e-learning o b-learning.

A continuación se examinará la repercusión de las TICS en la educación superior y

posteriormente se explicarán los distintos tipos de plataformas de enseñanza virtual

con los que cuentan las universidades. Y por último, al hilo de este apartado, se

describirán brevemente las características de la plataforma de código libre Moodle, que

es actualmente se utiliza en el departamento de Matemáticas de la

Universidad de Alcalá.

3.1 La Web y la educación a distancia

La Web o WWW (World Wide Web) (Berners-Lee, 1999) se puede calificar sin

duda alguna como el componente fundamental que ha revolucionado y popularizado

el uso de Internet, gracias a ser un medio de difusión y comunicación abierto, flexible y

de tecnología muy simple. Esto ha dado origen a un amplio espectro de aplicaciones

como el comercio electrónico, la banca electrónica o los sistemas de entretenimiento en

línea, por mencionar algunos.

El sector educativo ha encontrado en esta tecnología un excelente medio para

romper con las limitaciones geográficas y temporales que los esquemas tradicionales

de enseñanza-aprendizaje conllevan, revolucionando, y cambiando a la vez, el

concepto de educación a distancia. Su adopción y uso han sido amplios, lo que ha

permitido un desarrollo rápido y consistente en el que la Web ha ido tomando distintas

formas dentro de los procesos educativos.

Medios como la radio, la televisión, las grabaciones sonoras, el vídeo, el teléfono

y, más recientemente, los diferentes servicios de Internet han hecho de la educación a

distancia una alternativa para quiénes por limitaciones geográficas, ocupacionales o

físicas no pueden asistir a los cursos en escuelas presenciales tradicionales.

La Web se convierte en la infraestructura básica para desarrollar los procesos de

enseñanza-aprendizaje no presenciales. Así, ha dado lugar a un modelo conocido como

e-formación o e-learning, cada vez más valorado, no como sustituto de la formación

presencial tradicional, sino más como un complemento que se ha de adaptar según las

necesidades y nivel de madurez del público receptor de esta formación (García y

García, 2001), que puede ir desde ser una actividad complementaria muy concreta y

residual en los estudios de primaria y secundaria, a ser un modelo únicamente no

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

16

presencial en la formación a distancia o formación continua empresarial. No obstante,

las aproximaciones mixtas, que combinan actividades formativas presenciales y no

presenciales (o soluciones blended), toman cada vez más fuerza y se posicionan como

una importante alternativa ante los grandes retos que se avecinan con la integración

del sistema universitario al nuevo Espacio Europeo de Educación Superior y el

creciente peso de la formación a lo largo de toda la vida.

La educación a distancia ha tenido un proceso de evolución a la par con las

tecnologías que rápidamente han ido surgiendo en las últimas décadas, en este sentido

Mena (2004) afirma que ‚en realidad la educación a distancia ha tenido siempre una

íntima relación con la tecnología sobre todo con la que la sociedad consideraba

hegemónica en cada momento‛.

La Web se ha introducido rápidamente como un recurso de apoyo, de extensión

o de sustitución a los esquemas tradicionales de enseñanza presencial o a distancia. La

aplicación de las tecnologías Web ha dado origen incluso a aplicaciones dinámicas que

permiten la generación de cursos apegados a las necesidades particulares de cada

estudiante y a las posibilidades tecnológicas y de contenidos de la Web (Vassileva,

1997). Aggarwal & Bento (2003) sugieren tres formas en las que la Web participa en

un proceso de enseñanza-aprendizaje:

1. Web para el almacenamiento, diseminación y recuperación de información. La

Web es un importante apoyo para el acceso a contenidos de los sistemas de

enseñanza tradicional. Los alumnos pueden consultar información o tener

acceso a los contenidos de clase en la Web aunque toda la instrucción se lleva a

cabo de manera presencial.

2. Web para enseñanza en dos medios (mixta). Muchas instituciones educativas

están optando por impartir una parte de la instrucción presencial y otra parte a

través de la Web. Es lo que se conoce como aprendizaje mixto (blended

learning).

3. Aprendizaje Basado en Web. Consiste en llevar a cabo todo el proceso

educativo a través de la Web, prescindiendo por completo de cualquier

componente de la enseñanza presencial tradicional.

Con mayor o menor penetración en cada uno de los modelos, la tecnología Web

se impone como la tendencia en el desarrollo de sistemas educativos apoyados por las

TIC. Una importante aportación de estas tecnologías a la educación a distancia clásica

es la incorporación de los conceptos de formación síncrona y asíncrona (Marcelo,

Puente, Ballesteros & Palazón, 2002). En la formación síncrona se establece una

relación temporal como la que comúnmente se tienen en un curso en un aula

tradicional , en el que los participantes deben coincidir en un mismo instante de

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

17

tiempo, como es el caso de las aulas de videoconferencia de una sola vía en la que la

comunicación se establece sólo del ponente al receptor, lo cual facilita y abarata el

servicio; o videoconferencias de dos canales en las que el ponente o profesor y los

alumnos interactúan en tiempo real, pero con el inconveniente de altos costos y poca

masificación (Romero & Rubio, 2004). En la formación asíncrona los asistentes no

necesariamente tienen concurrencia temporal, pueden acceder al sistema cuando les

sea conveniente, para consultar los materiales y para participar en las diversas

actividades programadas. En ambos casos, el lugar desde el que los asistentes

participen es irrelevante.

A pesar de que el aporte de las TIC ha sido la interacción a distancia en tiempo

real, en la práctica el modelo más socorrido es el asíncrono y lo más común es

encontrar sistemas con herramientas que permiten ambos tipos de comunicación. Por

ejemplo se puede mencionar a los campus virtuales que dan la posibilidad de acceder a

materiales y conexión con los profesores por e-mail, en los sistemas más básicos, o por

emulaciones de campus presenciales con funciones más sofisticadas como foros,

debates, bibliotecas digitales, matrícula y consultas, entre otras (Romero & Rubio,

2004).

Sin lugar a dudas, la Web ha permitido que las posibilidades de educación, a

ciertos niveles y con aplicaciones muy específicas, se masifiquen y se globalicen

haciendo posible que aplicaciones relativamente sencillas puedan ser utilizadas por

individuos dispersos geográficamente y abriendo un nuevo espacio cultural, educativo

e incluso comercial, conocido como e-learning.

De acuerdo a un estudio realizado por la Organización para la Cooperación y

el Desarrollo Económico OCDE en 2002 estas son las principales ventajas educativas

que ofrecen las nuevas tecnologías.

Independencia en tiempo y en espacio: aprender en cualquier sitio y momento.

Acceso de todos a la educación.

Acceso a través de Internet a recursos y servicios educativos en permanente

crecimiento.

Potencial para un aprendizaje basado en tareas utilizando software rápido de

búsquedas y recuperación, o para el trabajo de investigación.

Formación bajo demanda.

Enseñanza / aprendizaje a distancia mediante las TIC.

Sin embargo, si se utilizan las TIC correctamente, pueden generar grandes

beneficios también a la educación presencial. Vivimos en la sociedad de la información,

en un mundo globalizado donde los avances tecnológicos han originado profundas

transformaciones tanto en la banca, como en los sistemas financiero, comercial y

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

18

productivo de todo el mundo. ¿Por qué creemos que la educación puede sobrevivir sin

hacer ninguna de esas transformaciones y sin utilizar ninguna de las herramientas

tecnológicas, que la gente usa para desarrollar transformaciones en todos los demás

sistemas? (Escorcia, 2001).

Además de superar las barreras de espacio y las limitaciones de horarios rígidos

y establecidos de la educación tradicional. La incorporación de las TIC en el aula ayuda

a mejorar los siguientes aspectos educativos, según el mismo estudio de la OCDE antes

citado:

Elección del estilo de enseñanza.

Servicios y materiales de enseñanza personalizados.

Seguimiento y registro individual de los procesos educativos.

Autoevaluación y monitorización del rendimiento del alumno.

Comunicación interactiva entre los agentes que participan o influyen en los

procesos educativos.

Acceso interactivo a recursos didáctico.

El entrenamiento basado Web (Web Based Training o WBT), es una de las

tecnologías más utilizadas por su facilidad de implementación. En los últimos años ha

evolucionado de manera acelerada, con el surgimiento de plataformas gestoras del

aprendizaje LMS (Learning Management System) y sus variantes como las plataformas

gestoras de contenidos de aprendizaje LCMS (Learning Content Management System)

y los sistemas manejadores de cursos CMS (Course Management System). Estas

permiten crear un entorno virtual de aprendizaje con mucha facilidad, sin necesidad de

ser expertos programadores. Podemos definir una LMS como un sistema que organiza

las actividades de formación dentro de una institución (Join, 2005). La plataforma

comercial más popular es Blackboard.

Una alternativa factible es utilizar plataformas LMS basadas software libre. El

software libre es el software que, una vez obtenido, puede ser usado, copiado,

estudiado, modificado y redistribuido libremente. Suele estar disponible

gratuitamente en Internet.

El software libre es propiedad de todos: cada persona en el mundo tiene

derecho a usar el software, modificarlo y copiarlo de la misma manera que los autores

de este mismo. Es un legado de la humanidad que no tiene propietario, de la misma

manera que las leyes básicas de la física o las matemáticas. No existe un monopolio y

no es necesario pagar peaje por su uso (Hernández, 2005).

Existe una variedad bastante grande de licencias de software libre que podemos

dividir en dos grandes familias. Una de ellas está compuesta por las licencias que no

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

19

imponen condiciones especiales en la segunda redistribución esto es, que sólo

especifican que el software se puede redistribuir o modificar, pero no imponen

condiciones especiales para éstos casos, lo que conlleva por ejemplo, que alguien que

reciba el programa pueda después redistribuirlo como software propietario. Estas

licencias son las que llamaremos licencias permisivas. La otra familia, que

denominaremos licencias robustas o licencias copyleft, que al estilo de la GNU GPL,

imponen condiciones en caso de que se quiera redistribuir el software, condiciones que

van en la línea de forzar a que se sigan cumpliendo las condiciones de la licencia

después de la primera redistribución. Mientras que el primer grupo hace énfasis en la

libertad de quien recibe un programa, ya que le permite hacer casi lo que quiera con él,

solo en términos de las redistribuciones siguientes, el segundo obliga a que las

sucesivas modificaciones y redistribuciones respeten los términos de la licencia

original.

Moodle es una de las plataformas LMS de software Libre más populares, que se

distribuye bajo licencia GNU y que está actualmente viviendo una fase explosiva de

expansión. Su comunidad de usuarios y desarrolladores es muy numerosa y se

caracteriza por su entusiasmo respecto al sistema. Moodle es un proyecto inspirado en

la pedagogía del constructivismo social. (Join, 2005). Es un sistema muy flexible que

funciona prácticamente en cualquier plataforma y muy fácil de administrar y operar.

Por eso resulta conveniente utilizar Moodle como entorno virtual de aprendizaje para

apoyar y enriquecer la enseñanza tradicional.

3.2 E-learning (Electronic Learning)

Actualmente, la modalidad más innovadora en la educación a distancia basada

en Web son los sistemas o entornos e-learning, que hacen uso de los servicios y

facilidades de Internet para hacer posible el proceso de enseñanza-aprendizaje.

Diferentes autores definen el concepto de e-learning de muy diversas formas,

según la idiosincrasia y el ámbito de aplicación en el que se está utilizando.

Si se toma como referencia la raíz de la palabra, e-learning se traduce como

‚aprendizaje electrónico‛, y como tal, en su concepto m{s amplio puede comprender

cualquier actividad educativa que utilice medios electrónicos para realizar todo o parte

del proceso formativo.

En el glosario de términos de la American Society of Training and Development

(Kaplan-Leiserson, 2010) se encuentra la siguiente definición: ‚e-learning (electronic

learning): Término que cubre un amplio grupo de aplicaciones y procesos, tales como

aprendizaje basado en Web, aprendizaje basado en computadora, aulas virtuales y

colaboración digital. Incluye entrega de contenidos vía Internet, intranet/extranet,

audio y videograbaciones, transmisiones vía satélite, TV interactiva, CD-ROM y m{s‛.

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

20

Ésta es una definición que abre el rango del e-learning prácticamente a

cualquier proceso relacionado con educación y tecnologías. Sin embargo, otros autores

acotan más el alcance del e-learning reduciéndolo exclusivamente al ámbito de

Internet, como Rosenberg (2001) que lo define como: ‚… el uso de tecnologías de

Internet para la entrega de un amplio rango de soluciones que mejoran el conocimiento

y el rendimiento. Está basado en tres criterios fundamentales:

1. El e-learning trabaja en red, lo que lo hace capaz de ser instantáneamente

actualizado, almacenado, recuperado, distribuido y permite compartir

instrucción o información.

2. Es entregado al usuario final a través del uso de ordenadores utilizando

tecnología estándar de Internet.

3. Se enfoca en la visión más amplia del aprendizaje que va más allá de los

paradigmas tradicionales de capacitación‛.

Es común encontrar referencias del uso de e-learning enfocado sólo a la

empresa, esto es debido a que la capacitación basada en computadoras o CBT

(Computer Based Training) tuvo su origen en la industria, sin embargo, como la

definición dada lo ha propuesto anteriormente, el e-learning se aplica más allá de los

paradigmas tradicionales de capacitación y cubre las aplicaciones más amplias de los

modelos de enseñanza-aprendizaje.

Los entornos e-learning son complejos ‚ecosistemas‛ en los que intervienen

usuarios con distintas habilidades y objetivos, sistemas de diversas aplicaciones con

tecnologías heterogéneas y contenidos digitales de formas y formatos diversos. Llegar

a una operación e integración en la que todos los componentes involucrados (personas

y sistemas) realicen sus tareas, interactúen y obtengan los resultados deseados es una

labor compleja que requiere de esfuerzos importantes para lograr la comunicación y la

transmisión de información, de forma parcial o global, entre aplicaciones y

organizaciones.

En la práctica, para llevar a cabo un programa de formación basado en e-

learning, se hace uso de plataformas o sistemas de software que permiten la

comunicación e interacción entre profesores, alumnos y contenidos. Se tienen

principalmente dos tipos de plataformas: las que se utilizan para impartir y dar

seguimiento administrativo a los cursos en línea y, por otro lado, las que se utilizan

para la gestión de los contenidos digitales. Ambas plataformas las estudiaremos con

más detalle en apartados posteriores.

La impartición de un curso también puede llevarse a cabo de forma combinada,

con una parte basada en e-learning y otra en los métodos tradicionales, dándose lo que

se conoce como blended learning (Thorne, 2003). De esta flexible combinación en la

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

21

que los cursos se imparten de forma mixta, muchas organizaciones están extrayendo

beneficios para los alumnos y para las organizaciones. Desde este punto de vista el e-

learning no viene a desplazar a los modelos tradicionales, sino que es un medio

alternativo o complementario para poder impartir educación a los sectores que antes

no eran accesibles.

3.3 B-learning (Blended Learning)

La incorporación de las TICs en el aula ha supuesto un cambio en la enseñanza

tradicional a nivel metodológico y actitudinal tanto para los profesionales de la

enseñanza, como para los propios alumnos. (Romero, 2006).

Cuando la instrucción tradicional en el aula es combinada con tecnología Web,

se le conoce como ‚inserción de tecnología‛ o Mejoramiento en Web. Actualmente, es

uno de los segmentos más populares y de más extenso crecimiento en la educación

superior. (Belanger y Jordan, 2000).

Los beneficios que la Web provee pueden ser utilizados para preparar

estudiantes antes de la clase, para retención en el aprendizaje y para proveer un útil

depósito de los materiales del curso.

Recientemente esta innovación ha dado lugar a un nuevo modelo denominado

b-learning (Blended Learning), donde no se trata solo de agregar tecnología a la clase,

sino de reemplazar algunas actividades de aprendizaje con otra apoyadas con

tecnología. (Rosas, 2005). Es decir, se trata de un modelo compuesto por instrucción

presencial y características del aprendizaje electrónico o e-learning, con la finalidad de

potenciar las fortalezas y disminuir las limitaciones de ambas modalidades.

Para Bartolomé (2004) la idea clave es la selección de los medios adecuados para

cada necesidad educativa. Es decir, se trata de un modelo ecléctico compuesto por

instrucción presencial y funcionalidades del aprendizaje electrónico o e-learning, con la

finalidad de potenciar las fortalezas y disminuir las limitaciones de ambas

modalidades. Este modelo permite permanecer menos tiempo en el aula, propicia un

potencial ahorro de espacios físicos e incrementa la participación de los estudiantes

como responsables de su propio aprendizaje entre otros beneficios.

El término ‚blended learning‛, se puede traducir al castellano como

Aprendizaje Mixto, sigue una tendencia con una marcada raíz procedente del campo

de la psicología escolar en la que destaca el término ‚aprendizaje‛ como contrapuesto

al de ‚enseñanza‛ (Bartolomé, 2004).

Blended learning no es un concepto nuevo. Durante años hemos estado

combinando las clases magistrales con los ejercicios, los estudios de caso, juegos de rol

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

22

y las grabaciones de vídeo y audio, por no citar el asesoramiento y la tutoría‛ (Brodsky,

2003). Quizá el termino sea lo más novedoso, se han dado otras denominaciones a

modalidades del mismo tipo en diferentes contextos. Por ejemplo en la Universitat de

Illes Balears, se describe como Educación Flexible el sistema en donde se aprovechan

sistemas virtuales como la videoconferencia o la web, con sesiones presenciales.

También se utilizan términos como enseñanza semipresencial, formación mixta y en la

literatura anglosajona se utiliza el término Modelo Híbrido.

De acuerdo a estudios realizados por Bartolomé (2004), Blended learning no

surge del e-learning sino de la enseñanza tradicional ante el problema de los elevados

costos. Sin embargo también se puede justificar la implantación de este modelo por

razones de pertinencia y de calidad en la educación.

En b-learning el formador asume de nuevo su rol tradicional, pero usa en

beneficio propio el material didáctico que la informática e Internet le proporcionan,

para ejercer su labor en dos frentes: como tutor on-line y como educador tradicional. La

forma en que combine ambas estrategias depende de las necesidades específicas de ese

curso, dotando así a la formación online de una gran flexibilidad.

Utilizando un buen sistema de gestión de aprendizaje y con un programa de

formación continua bien fundamentado para el personal docente tanto en los aspectos

metodológicos como en los técnicos, es posible incorporar gradualmente esta

modalidad de enseñanza en la Educación Superior.

Tanto el aprendizaje electrónico (e-learning) como el aprendizaje combinado (b-

learning) tiene sus fundamentos en las teorías del aprendizaje y su aplicación al uso de

medios tecnológicos. En este sentido, podríamos identificar las siguientes teorías:

Conductismo: atención a ejercicios de tipo mecánico con retroalimentación

inmediata (por ejemplo, tutoriales).

Constructivismo: atención a la construcción de los conocimientos basado en el

esfuerzo individual (por ejemplo, exploración en bibliotecas virtuales, estudio

de casos)

Cognitivismo: atención a las estrategias de aprender a aprender y capacidad

indagativa de los estudiantes (por ejemplo, exploración).

Humanismo: atención a diferencias individuales y al trabajo colaborativo (por

ejemplo, estilos y ritmos de aprendizaje).

Por lo tanto, y aunque se enfatiza la centralidad del estudiante, esta modalidad

de aprendizaje combinado no descansa en un único modelo, sino que más bien supone

un enfoque ecléctico orientado a la reflexión crítica como componente esencial. Más

aún, Dodge (2001) planteó que el blended learning involucra poner a los estudiantes

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

23

en diversas situaciones en las cuales han de interactuar. Así, según diversos autores, la

interacción en un ambiente de aprendizaje combinado es un importante componente

del proceso cognitivo, pues incrementa la motivación, una actitud positiva hacia el

aprendizaje, y el aprendizaje significativo (Sutton, 1999).

3.4 La educación superior y las TICS

A todo esto, las universidades ‚convencionales‛, tal como las califican Tait y

Mills (1999) ya han comenzado a reaccionar. Si bien es cierto que no existen indicios

suficientemente científicos para apoyar esta idea, el salto cualitativo realizado por

algunas universidades a distancia, ha permitido que algunas instituciones de

educación superior hayan salido de su letargo y estén dispuestas también a aprovechar

al máximo no sólo lo que les ofrecen las TIC, sino también el aprendizaje que pueda

venir de la mano de experiencias de educación a distancia.

En este sentido, la reacción de las universidades convencionales tiene

formalizaciones bien distintas. Por un lado, nos estamos encontrando universidades

que simplemente ‚permiten‛ el uso de las TIC a su profesorado en su labor docente

cotidiana. Son instituciones que todavía no creen de manera decidida en la aportación

de estas nuevas prácticas al conjunto de la educación universitaria. Prefieren establecer

un periodo de prueba en el cual sea su profesorado quien explore, experimente y

valore qué se podría hacer, a dónde se podría llegar y cómo debería hacerse.

Por otro lado, hay otras instituciones universitarias que, conscientes de la

importancia que el uso de las TIC puede tener para no quedar rezagados respecto otras

universidades, ‚impulsan‛ su uso entre su profesorado. Es lo que Bates (2000) ha

denominado el ‚imperativo tecnológico‛. A través de programas de promoción i/o

innovación, ponen a su disposición recursos para su experimentación y posterior

evaluación.

Sin embargo estos dos modelos expresados anteriormente, si se quedan ahí, si

no avanzan de manera cualitativamente significativa, es difícil que puedan obtener

resultados relevantes. El mayor riesgo que existe es el de desarrollar el modelo del

‚Llanero Solitario‛ en el cual el profesorado va a sentirse a menudo, y siguiendo el

símil cinematogr{fico, ‚solo ante el peligro‛.

Hay otros dos modelos que pueden resultar más interesantes. Uno es el de

aquellas universidades que han elaborado un plan estratégico para la incorporación de

las TIC en su institución, en los distintos ámbitos de la docencia, la investigación y la

gestión. Estos tienen muchas posibilidades de desarrollar sistemas coherentes que les

permitan alcanzar objetivos mucho más ambiciosos. Uno de los buenos ejemplos en

este sentido puede ser la Penn State University norteamericana, que ya en 1997 elaboró

un plan de estas características. Hoy en día, Penn State continúa siendo una buena

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

24

universidad presencial, una buena universidad a distancia y su WorldCampus virtual

está consiguiendo ya un cierto prestigio académico.

Finalmente, existen aquellas universidades que han optado por crear sus

propias versiones virtuales, mediante el establecimiento de fundaciones o empresas

que van a gestionar esos contenidos virtuales de forma independiente de la institución

matriz.

Los modelos aquí planteados, sin ser exhaustivos, identifican estrategias

distintas respecto a su relación con la educación a distancia y/o con la virtualidad. A

saber, algunas intentan simplemente asimilar la capacidad de evolución o revolución,

según se mire, de la aplicación de las TIC y, en concreto, de los sistemas de educación a

través de entornos virtuales, partiendo de la base que la buena formación solo puede

ser de carácter presencial.

En otros casos, se trata simplemente de competir con la virtualidad, como si en

realidad el dilema fuera presencial/no presencial, o de cubrir o no cubrir con oferta la

demanda social ahora existente (i.e. e-learning/no e-learning, esa es la cuestión).

Finalmente, algunas universidades observan esta situación como una gran

oportunidad para situar el uso de las TIC y el uso de la virtualidad como un elemento

diferencial de valor añadido, factor clave para la innovación y la mejora de la calidad

educativa en sus instituciones (b-learning).

Por tanto, las TICs representan uno de los principales factores de cambio de las

instituciones de educación superior. Según el Informe Bricall (2000), éstas auguran en

el campo educativo la progresiva desaparición de las restricciones de espacio y de

tiempo en la enseñanza y la adopción de un modelo de aprendizaje más centrado en el

estudiante. Al mismo tiempo, favorecen la comercialización, entendiendo como

comercialización la oferta de cursos online en distintas universidades, y la

globalización de la educación superior, así como un nuevo modelo de gestión de su

organización.

El blended learning o aprendizaje combinado es una estrategia consolidada a

día de hoy en nuestro país. Sin embargo, el proceso de adaptación a este tipo de

educación se ha llevado a cabo de forma lenta y constante durante los últimos diez

años. Pues, como lo indica el Informe Bricall 2000, en relación al uso de TICs, ‚en la

educación superior los cambios se producen, por el momento, más lentamente, aunque

no por ello son menos importantes. En este contexto, algunas experiencias, a nivel

nacional, que merecen nuestra atención están relacionadas con programas de

postgrado y de educación continua.

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

25

En este contexto, podemos afirmar que la introducción de TICS en la educación

superior genera oportunidades de desarrollo en los siguientes ámbitos:

Modelo pedagógico: Se pasa de un paradigma centrado en la enseñanza a un

paradigma centrado en el aprendizaje, con énfasis en los estilos y ritmos del

proceso cognitivo y en la construcción colaborativa de los conocimientos.

Oferta educativa que traspasa fronteras: Se posibilita la entrega del servicio

educativo fuera del territorio nacional de las instituciones.

Gestión institucional: Se agiliza la toma de decisiones y su comunicación y/o

socialización con la comunidad educativa.

Estrategias de investigación: Se favorecen las relaciones en tiempo real entre

investigadores y/o grupos de investigadores, sin restricciones de distancia.

Sin embargo, aunque se observa un esfuerzo en las instituciones de educación

superior por incorporar TICs en los ámbitos mencionados, se evidencia cierta

resistencia en el estamento académico por asumir este importante cambio. Es más, esta

resistencia puede entenderse como una cualidad propia de las personas y de las

instituciones, que paradójicamente actúa como garantía de control para un buen

gobierno institucional (Duart & Lupiáñez, 2005). Esto supone incorporar las TICs como

parte del plan estratégico de las instituciones, con lo cual se posibilita su debida

socialización y capacitación de los docentes y administrativos, tanto en los aspectos

técnicos como éticos de la estrategia tecnológica.

3.5 Sistemas de Gestión de Aprendizaje

Tanto los LMS (Learning Management System) como los LCMS (Learning

Content Management System), que veremos en los apartados siguientes, se pueden

generalizar como sistemas de gestión de aprendizaje, ya que el primero gestiona la

parte administrativa de los cursos así como el seguimiento de actividades y avance del

alumno. El segundo gestiona el desarrollo de contenidos, su acceso y almacenamiento.

En el entorno educativo, los más comunes son los LMS ya que la complejidad de los

LCMS los ha llevado a un desarrollo más lento. Debemos tener en cuenta que una

determinada herramienta (LMS o LCMS) no está directamente ligada a un paradigma

educativo concreto (e-learning, b-learning), sino que cualquier sistema de gestión de

aprendizaje puede adaptarse a las necesidades educativas concretas de cada

institución.

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

26

3.5.1 Sistemas de Administración de Aprendizaje (LMS)

Entre las herramientas más utilizadas para los ambientes o sistemas e-learning

están los Sistemas de Administración de Aprendizaje o LMS, también ampliamente

conocidos como plataformas de aprendizaje. Un LMS es un software basado en un

servidor Web que provee módulos para los procesos administrativos y de seguimiento

que se requieren para un sistema de enseñanza-aprendizaje, simplificando el control de

estas tareas, como se puede ver en la imagen que se presenta a continuación. Avgeriou,

Papasalourus & Retalis (2001) distinguen como grupos funcionales de los sistemas de

aprendizaje: gestión de cursos, gestión de clases, herramientas de comunicación,

herramientas para los estudiantes, gestión del contenido, herramientas de evaluación y

gestión de la institución educativa.

En los LMS los módulos con funciones administrativas permiten, por ejemplo,

configurar cursos, matricular alumnos, registrar profesores, asignar cursos a un

alumno, llevar informes de progreso y calificaciones. Los LMS también facilitan el

aprendizaje distribuido y colaborativo a partir de actividades y contenidos

preelaborados, de forma síncrona o asíncrona, utilizando los servicios de comunicación

de Internet como el correo, los foros, las videoconferencias y el chat.

El alumno interactúa con la plataforma a través de una interfaz web que le

permite seguir las lecciones del curso, realizar las actividades programadas,

comunicarse con el profesor y con otros alumnos, así como dar seguimiento a su

propio progreso con datos estadísticos y calificaciones.

Ilustración 1: Sistemas de Administración de Aprendizaje (LMS)

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

27

La complejidad y las capacidades de las plataformas varían de un sistema a

otro, pero en general todas cuentan con funciones básicas como las que se han

mencionado. Es importante resaltar que un LMS no se involucra con la creación,

reutilización, administración o mantenimiento de los contenidos (Rengarajan, 2001).

Entre las plataformas comerciales más comunes se encuentran Blackboard, WebCT2 y

EduStance. De software libre las más reconocidas son Moodle y Claroline. Comezaña y

García (2005) presentan una comparativa en la que analizan las características de las

últimas cuatro plataformas nombradas. En dicha comparativa consideraron las

herramientas disponibles de cada plataforma, las funcionalidades para evaluación y los

aspectos generales de seguridad y concluyen que, para la construcción de los LMS, los

aspectos técnicos son los que más se han cuidado.

Podemos realizar nuestra propia comparativa con la herramienta EduTools

(http://www.edutools.info/item_list.jsp?pj=4), que nos permite seleccionar hasta 10

plataformas de un total de 40 para después mostrarnos detalladamente las

características de cada una de ellas. Primero, analiza herramientas para el aprendizaje:

comunicación, productividad y participación del alumno; segundo, herramientas de

soporte: administración, manejo de los cursos y diseño curricular; y tercero,

especificaciones técnicas: hardware/software y precio/licencia. Este análisis

comparativo refleja el desarrollo actual de las plataformas y el gran número de

opciones que se encuentran en este competitivo mercado.

Ilustración 2: Plataformas de enseñanza virtual más comunes

Algunos LMS se han desarrollado con base a ciertos estándares y están

preparados para comunicarse unos con otros y para compartir contenidos. En la

imagen anterior se presenta un listado de los productos que Edutools ha evaluado y

han cumplido con la característica ‚Instructional Standards Compliance‛ que se refiere

a que han incluido alguna de las especificaciones para la importación y/o exportación

de contenidos. Como contenidos se consideran aquéllos de formato digital, como son

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

28

los diferentes tipos de documentos electrónicos, textos, imágenes, multimedia,

animaciones, vídeos, simulaciones, etcétera.

3.5.2 Sistemas de Administración de Contenidos de Aprendizaje (LCMS)

Los Sistemas de Administración de Contenidos de Aprendizaje o LCMS

(Learning Content Management Systems) tienen su origen en los CMS (Content

Management System) cuyo objetivo es simplificar la creación y la administración de los

contenidos en línea, y han sido utilizados principalmente en publicaciones periódicas

(artículos, informes, fotografías, etcétera). En la mayoría de los casos lo que hacen los

CMS es separar los contenidos de su presentación o estilo en pantalla y también

facilitar un mecanismo de trabajo para la gestión de una publicación web. Los LCMS

siguen el concepto básico de los CMS, que es la administración de contenidos, pero

enfocados al ámbito educativo, administrando y concentrando únicamente recursos

educativos y no todo tipo de información.

Ilustración 3: Sistemas de Administración de Contenidos de Aprendizaje (LCMS)

En esencia, se define LCMS como un sistema basado en Web que es utilizado

para crear, aprobar, publicar, administrar y almacenar recursos educativos (como los

objetos de aprendizaje) y cursos en línea (Rengarajan, 2001). Los principales usuarios

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

29

son los diseñadores de cursos que utilizan los contenidos para construir dichos cursos,

los profesores que utilizan los contenidos para complementar su material de clase e

incluso los alumnos en algún momento pueden acceder a la herramienta para

desarrollar sus tareas o completar sus conocimientos.

Los contenidos usualmente se almacenan como objetos descritos e identificables

de forma única. En un LCMS se tienen contenedores o repositorios para almacenar los

recursos, como se puede ver en la imagen anterior, que pueden ser utilizados de

manera independiente o directamente asociados a la creación de cursos dentro del

mismo sistema. Es decir, el repositorio puede estar disponible para que los profesores

armen los cursos, pero también pueden estar abiertos para que cualquier usuario

recupere recursos no vinculados a ningún curso en particular, que les pueden ser de

utilidad para reforzar lo aprendido sobre algún tema. El proceso de trabajo dentro de

un LCMS requiere de control en cada fase del contenido, esto conlleva un proceso

editorial para controlar la calidad de los contenidos creados y para permitir y organizar

su publicación.

El mercado de los LCMS es mucho más reducido que el de los LMS, entre los

productos más comunes se encuentra ATutor, distribuido como software libre y

compatible con estándares e-learning y b-learning para la exportación e importación

de contenidos con otras plataformas y con Repositorios de Objetos de Aprendizaje.

3.6 Moodle

Moodle es un paquete de software libre para la creación de cursos y sitios Web

basados en Internet. Consiste en un proyecto diseñado con la filosofía de la educación

social constructivista.

De acuerdo con Stallman (2004), con software libre nos referimos a la libertad

de los usuarios para ejecutar, copiar, distribuir, estudiar, cambiar y mejorar el software.

Nos referimos especialmente a cuatro clases de libertad para los usuarios de software:

Libertad 0: la libertad para ejecutar el programa sea cual sea nuestro propósito.

Libertad 1: la libertad para estudiar el funcionamiento del programa y

adaptarlo a tus necesidades –el acceso al código fuente es condición

indispensable para esto.

Libertad 2: la libertad para redistribuir copias y ayudar así a tu vecino.

Libertad 3: la libertad para mejorar el programa y luego publicarlo para el bien

de toda la comunidad –el acceso al código fuente es condición indispensable

para esto.

Software libre es cualquier programa cuyos usuarios gocen de estas libertades.

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

30

El software libre aplicado a contextos educativos, ofrece posibilidades que

pueden favorecer el proceso de enseñanza-aprendizaje en función de los destinatarios,

de sus necesidades, su nivel de formación ya que puede ser modificado y adaptado en

función de nuestros intereses y de los objetivos que persigamos. (Romero, 2006).

Moodle se encuadra dentro de la categoría de los LMS, y puede ser utilizado

tanto para desarrollar cursos completamente on-line siguiendo la metodología del e-

learning, como para complementar la educación presencial haciendo uso tan solo de las

herramientas que el profesor considere oportunas para facilitar sus clases (metodología

b-learning).

La palabra Moodle es el acrónimo de Modular Object-Oriented Dynamic

Learning Environment (Ambiente de Aprendizaje Modular Orientado a Objetos

Dinámicos). Se distribuye gratuitamente bajo licencia GPL de GNU.

Entre las características más importantes de la plataforma Moodle a nivel

técnico destacan las siguientes:

1. Su diseño es modular, permitiendo gran flexibilidad para agregar y suprimir

funcionalidades en muchos niveles.

2. Se ejecuta sin necesidad de cambios en el sistema operativo bajo Unix, Linux,

Windows, Mac OS X, Netware y todos aquellos sistemas operativos que

permitan PHP.

3. Soporta las principales marcas de manejadores de bases de datos.

4. Su actualización desde una versión anterior a la siguiente es un proceso muy

sencillo. Dispone de un sistema interno capaz de reparar y actualizar sus bases

de datos cada cierto tiempo.

A nivel pedagógico Moodle ofrece funcionalidades bastante atractivas para los

docentes, como las siguientes:

1. Promueve una pedagogía constructivista social. Dado el carácter colaborativo

de las herramientas utilizadas en él y la filosofía de trabajo en la que se

sustenta.

2. Es adecuado para la enseñanza únicamente a través de la Red como para

complementar la enseñanza presencial.

3. Cuenta con un interfaz atractivo, de tecnología sencilla, ligera eficiente y

compatible.

4. Permite el acceso de invitados a los cursos.

5. Los cursos son clasificados en categorías, lo que facilita su búsqueda.

6. Es fácil de instalar, por lo que no precisa un nivel avanzado de conocimientos

informáticos para proceder a su implementación.

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

31

7. Un sitio Moodle puede albergar miles de cursos y estos pueden ser clasificados

en distintas categorías.

Moodle se rige por una filosofía basada en la teoría constructivista, sustentada

en la idea de interacción con los demás y a través de la conexión de conocimientos

nuevos con aprendizaje previamente adquirido. Conectando la estrategia didáctica del

profesorado con las ideas previas del alumnado, ‚construyendo‛ de manera sólida los

conceptos, interconectando los unos con los otros en forma de red de conocimiento.

(Ballester, 2002).

Moodle posee una interfaz intuitiva que facilita a los diseñadores de cursos la

construcción de foros, chats, lista de correo, glosarios, bibliotecas, autoevaluaciones y

demás funcionalidades. Los recursos disponibles en Moodle se pueden clasificar en

tres categorías: Recursos Transmisivos, Recursos Interactivos y Recursos

Colaborativos. A estas tres categorías también podemos añadir las herramientas de

comunicación.

Recursos transmitivos: Se refiere a todos los módulos, recursos, actividades en

Moodle que tienen como función principal la de transmitir información. El

profesor se establece prácticamente en emisor único. Los alumnos, en

receptores. Lo más usual es que estos contenidos estén constituidos por algún

tipo de texto más o menos estructurado con apoyo de imágenes, esquemas.

Vienen a ser lo que en la enseñanza tradicional llamamos libros de texto,

apuntes, manuales didácticos, presentaciones multimedia, etc. En Moodle este

tipo de contenidos se generan fundamentalmente a partir de lo que el propio

programa llama recursos. El elemento recurso no es más que un enlace a

cualesquiera de los recursos materiales que puedan representarse por un

archivo electrónico. Documentos de texto, presentaciones con diapositivas,

archivos de imagen, programas de ordenador ejecutables, archivos de CAD,

archivos de audio y vídeo, etc. pueden constituir un recurso. Los recursos

transmisivos disponibles en Moodle son: Página de texto, Página Web, Enlace a

archivo o Web, Directorio, Etiqueta y Libro.

Recursos interactivos: Estos recursos se centran más en el alumno, quien tiene

determinado control de navegación sobre los contenidos. Cuanto menos

lineales sean los contenidos y la propia navegación, mayor interactividad habrá.

Se pone el peso, por lo tanto, en definir el sistema por el cual el que aprende

accede a la información que se le quiere transmitir. En Moodle los Recursos

interactivos disponibles son: Lecciones, Cuestionarios, SCORM, Glosarios y

Tareas.

Recursos colaborativos: Estas herramientas pueden introducir en nuestras

escuelas la posibilidad de disponer de recursos altamente orientados a la

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

32

interacción y el intercambio de ideas y materiales tanto entre el profesor y los

alumnos como de los alumnos entre sí (Gómez, 2006) Moodle incluye las

siguientes herramientas colaborativas: Foros, Talleres y Wikis.

Herramientas de comunicación: Uno de los propósitos principales de la

plataforma Moodle consiste en facilitar y enriquecer la interacción entre todos

los miembros de la comunidad (estudiantes entre sí, profesores entre sí y entre

alumnos y profesores). Por ello las herramientas de comunicación son básicas.

Para Gómez (2006) no resulta conveniente integrarlas dentro de los recursos

transmitivos, colaborativos o interactivos, más bien considera las herramientas

de comunicación un requisito para que las otras tres funcionen adecuadamente.

Las herramientas de comunicación disponibles en Moodle son: Correo

electrónico, Chats, Mensajes, Consultas y Encuestas.

Utilizando Moodle como Entorno Virtual de Aprendizaje obtendremos un

sistema flexible donde, además de aprender los alumnos pueden compartir

experiencias de aprendizaje y conocimientos con otras comunidades virtuales,

compuestas por otros usuarios de la plataforma en todo el mundo.

Una de las características principales de Moodle es su modularidad. Cada uno

de los recursos que componen la plataforma se define como una pieza de software

independiente que puede ser modificada o eliminada según las necesidades de la

institución de enseñanza que la adopte. De la misma forma también es posible instalar

nuevos módulos que añadan funcionalidad al sistema, bien descargándolos desde la

página oficial de módulos no estándar de Moodle o bien desarrollándolos a medida. El

proceso de desarrollo de un módulo no es complejo, pero requiere conocer un poco

más a fondo la arquitectura y el funcionamiento interno del sistema. Por ello, antes de

lanzarnos al desarrollo de un nuevo módulo, en el siguiente capítulo estudiaremos con

detenimiento dicha estructura interna de Moodle.

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

33

4 Arquitectura de Moodle Moodle significa Modular Object-Oriented Dynamic Learning Environment

(Entorno de enseñanza dinámico orientado a objetos modular). Desde la perspectiva

del programador, la ‚M‛ de Moodle contiene un concepto muy importante, ya que

Moodle, en su totalidad, está diseñado de forma modular. Esto permite al

desarrollador realizar importantes modificaciones a la plataforma sin necesidad de

cambiar el código fuente. La modularidad se convierte en una importante característica

que permite reducir la cantidad de tiempo empleada en realizar modificaciones cuando

se lanzan nuevas versiones de Moodle.

En este apartado se introducirán algunos de los conceptos más importantes

relacionados con la arquitectura de Moodle; cómo está estructurado y cómo funciona.

Para ello, en primer lugar repasaremos las características del entorno técnico en el que

se asienta Moodle, deteniéndonos especialmente en los requisitos de sistema operativo,

base de datos y servidor Web, para posteriormente centrarnos en la estructura de

directorios del sistema. A continuación repasaremos los principales tres tipos de

módulos que se pueden desarrollar para Moodle: actividades, recursos y bloques; y

terminaremos el apartado introduciendo los roles de usuario y el control de acceso, que

se deben tener muy en cuenta a la hora de programar una extensión.

4.1 Entorno de Moodle

Moodle es un ejemplo de aplicación LAMP (Linux, Apache, MySQL y PHP). Se

trata fundamentalmente de aplicaciones web escritas con un lenguaje de script, que

utilizan una base de datos SQL para almacenar información. Con el incremento de la

popularidad de ejecutar aplicaciones web de código abierto en Windows y en Mac OS

X, han surgido dos nuevos términos: WAMP y MAMP. En la siguiente figura se

muestran los componentes del sistema en Moodle.

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

34

Ilustración 4: Entorno LAMP

Moodle está escrito en PHP, y la versión actual (versión 1.9) requiere la versión

de PHP 4.3.0 o superior para funcionar. La versión 2.0 de Moodle, actualmente en

desarrollo, necesitará la versión de PHP 5.2.8 o superior.

4.2 Base de datos

La capa de base de datos en Moodle ha sido escrita utilizando la librería de PHP

ADOdb, que fue creada para proporcionar un método estándar de acceso a varios

sistemas de bases de datos, utilizando una interfaz de programación consistente. Las

librerías de bases de datos nativas en PHP son específicas de una base de datos, por lo

que es difícil usarlas para escribir un programa que soporte múltiples servidores de

bases de datos. Gracias al uso de ADOdb, Moodle proporciona soporte para varias

bases de datos, entre las que se incluyen: MySQL, PostgreSQL, Microsoft SQL y Oracle.

Moodle soporta una lista mucho más larga de bases de datos para la integración de

sistemas externos, utilizando la arquitectura de extensiones de la plataforma. Aunque

Moodle proporciona soporte para muchas bases de datos, en la práctica la mayoría de

los sistemas están desplegados utilizando MySQL, por lo que se presta más atención a

las instalaciones de MySQL, que por este motivo tienen menos fallos y cuentan con el

conjunto más amplio de extensiones de terceros. PostgreSQL es la segunda base de

datos más popular y tiene un fuerte seguimiento entre los entusiastas del rendimiento

y los grandes sistemas (decenas de miles de usuarios). Las instalaciones de MySQL y

Oracle se usan principalmente en organizaciones con una inversión previa en uno de

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

35

estos sistemas, y debido a su menor uso no están tan probados como los anteriores.

También es más difícil encontrar un buen soporte para utilizar estos tipos de bases de

datos con Moodle. Algunos módulos añadidos de terceros no funcionan bajo estos

sistemas sin un parche.

Los requisitos de la versión de la base de datos para Moodle 1.9 y para Moodle

2.0 son:

MySQL 4.1.16

PostgreSQL 8.0

Microsoft SQL 9.0

Oracle 9.0

4.3 Sistema operativo

Moodle es capaz de funcionar en cualquier sistema operativo que soporte la

versión requerida de PHP y la base de datos. Generalmente se instala en alguno de los

tres principales sistemas operativos: Windows, Mac OS X o Linux (o sistemas

operativos basados en Unix). Si los comparamos con Linux, Mac OS X y Windows

tienen un menor rendimiento en desarrollos a gran escala. En Windows se debe a una

menor optimización de la pila PHP, que ha sido mejorada en Windows Server 2008, y

en Mac OS x a un pobre rendimiento en la bifurcación de procesos, de la que dependen

Apache y MySQL para poder tener una alta concurrencia. En un entorno de desarrollo,

cualquiera de estos tres sistemas operativos se puede usar como una excelente

plataforma, pero en un entorno de producción cada uno de ellos tendrá distintas

características de rendimiento.

4.4 Servidor Web

Moodle normalmente trabajará con cualquier servidor web que soporte la

versión apropiada de PHP. En la práctica, el servidor web más usado es Apache, que

está disponible para la mayoría de sistemas operativos. Internet Information Services

(IIS) es otro servidor web muy popular para alojar Moodle. También hay un creciente

número de defensores de Lighthttpd como servidor web, como se puede ver reflejado

en los foros de Moodle (http://moodle.org/forums/), debido a su bajo consumo de

memoria. Es extremadamente popular su uso en entornos virtuales (VMware, Xen

HyperV), donde el uso de memoria es más que una preocupación.

Moodle, como aplicación web, tiene sus propias limitaciones de soporte y

desarrollo, debido al modo en que se usa. Un usuario que interactúa con Moodle

realizará una cantidad de clicks más alta de lo normal, y Moodle genera varias

sentencias SQL para construir cada una de esas páginas. Moodle es muy eficiente

realizando este trabajo, sin embargo, es bastante complicado. Esto significa que, como

desarrolladores, tenemos que conocer el tipo de arquitecturas con las que serán usadas

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

36

nuestras modificaciones. También significa que tenemos que ser conscientes de las

implicaciones de rendimiento del código que se añada. La siguiente figura ilustra

varias configuraciones comunes utilizadas para Moodle en un entorno de producción.

Moodle se puede desplegar de múltiples formas -desde un simple profesor que lo

ejecuta en su ordenador de sobremesa, hasta clústers de servidores de alto

rendimiento:

Ilustración 5: Arquitecturas típicas de Moodle

Moodle, al seguir el modelo de aplicación PHP estándar, es escalable en

determinados puntos. El primer punto de escalabilidad es la base de datos, que puede

moverse fácilmente a un servidor separado físicamente. También se pueden utilizar

múltiples servidores web usando un balanceador de carga. Si usamos múltiples

servidores web necesitaremos también almacenamiento compartido para nuestros

datos de Moodle. La información de sesión puede almacenarse en estos datos de

Moodle, o en la base de datos. El servidor de bases de datos es el punto donde la

escalabilidad de Moodle es más limitada. Para escalar la base de datos es necesario

montar un servidor de bases de datos más rápido, reemplazando al servidor antiguo.

En la actualidad no hay un método estándar para escalar una única instalación de

Moodle a través de múltiples servidores de bases de datos, como hacemos con los

servidores de aplicaciones web. También es una práctica común usar Moodle con un

acelerador PHP como eAccelerator o APC. Es importante probar nuestro código en

estos entornos para estar seguros de que funciona correctamente.

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

37

4.5 Estructura de directorios

Como se muestra en la siguiente figura, cada sistema Moodle en

funcionamiento se puede dividir en tres áreas separadas: código, datos y base de datos.

Ilustración 6: Las tres áreas de Moodle

4.5.1 Código de Moodle

Como PHP es un lenguaje interpretado, el código de Moodle se almacena como

ficheros de código fuente en el servidor web. Cuando un fichero en particular es

solicitado por el servidor, el intérprete PHP parsea el código al instante y la salida

resultante se envía a través del servidor web. Como se ha mencionado antes, la ‚M‛ de

Moodle significa ‚Modular‛, y su estructura de directorios refleja esta modularidad, ya

que cada carpeta del nivel superior representa un componente de Moodle. Algunos de

los principales componentes soportan módulos de expansión o plugins. Cada módulo

de expansión tiene su propia carpeta dentro del directorio del componente. En algunos

casos, los módulos de actividad también pueden tener soporte para expansiones

adicionales. Desde el punto de vista del usuario final, los módulos se instalan copiando

su carpeta dentro del directorio apropiado en el servidor. Moodle detecta el nuevo

módulo la siguiente vez que un administrador accede al sistema, localiza el código SQL

del módulo, lo ejecuta y finalmente muestra por pantalla los resultados.

Los procesos de actualización se realizan de la misma manera, haciendo un

seguimiento de la versión de la base de datos y actualizando automáticamente si es

necesario.

La siguiente captura de pantalla es un listado de los directorios de una

instalación reciente de Moodle 1.9.9.

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

38

Ilustración 7: Directorios de Moodle

A continuación, exploraremos algunos de los directorios más importantes

utilizados por los desarrolladores que desean realizar cambios a Moodle. Moodle

utiliza una nomenclatura simple para sus módulos, cuyos archivos se almacenan en su

propia carpeta, y el nombre de esta carpeta es el nombre que Moodle muestra en su

interfaz cuando se referencia al módulo.

admin: Esta carpeta almacena los ficheros PHP que controlan la interfaz de los

usuarios administradores. También contiene el fichero cron.php, que se ejecuta

como un proceso batch para realizar tareas de mantenimiento del sistema como

el envío de correos y la realización de las copias de seguridad de los cursos. A

menudo se utiliza el proceso cron para realizar este tipo de operaciones

programadas.

auth: La carpeta auth contiene todos los módulos de autenticación de Moodle.

Cada módulo tendrá su propio directorio dentro de esta carpeta. Los módulos

de autenticación controlan la creación de usuarios y el acceso de estos al

sistema.

backup: Esta carpeta contiene las utilidades de copia de seguridad del núcleo

del sistema. Se trata de funciones para guardar, restaurar e importar cursos.

Cada módulo individual es responsable de realizar la copia de seguridad de su

código y puede hacer uso de estas funciones si lo necesita. Como cada módulo

es auto-contenido, se permite a los desarrolladores añadir módulos

limpiamente a Moodle sin tener que modificar el código del núcleo.

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

39

blocks: Los bloques se usan para mostrar bloques de información en la columna

de la izquierda o de la derecha de la página de Moodle. Son uno de los tipos

más simples de módulos que se pueden realizar, y suelen funcionar a través de

las versiones de Moodle sin apenas alguna modificación.

course: Este componente de Moodle tiene una importancia obvia, dado que la

plataforma se organiza en cursos. Como desarrolladores, podemos desear

añadir o modificar formatos de cursos e informes. Los formatos de curso

personalizados se pueden usar para cambiar la disposición de los elementos en

los cursos.

enrol: La carpeta enrol contiene todos los módulos de matriculación de Moodle.

Estos módulos controlan la creación y administración de las matriculaciones a

nivel de curso.

files: El componente files permite a Moodle incorporar archivos al sistema. Esto

incluye subida de archivos, control de acceso, y visualización de ficheros. Este

componente será reescrito en Moodle 2.0 para permitir el almacenamiento y el

uso de ficheros en repositorios externos, como Alfresco, Box.net y Google Docs.

filter: El sistema de filtros de Moodle es una facilidad de búsqueda y reemplazo

basada en expresiones de texto y expresiones regulares. Este sistema es

alimentado durante la creación de la página por el contenido introducido por el

usuario que se encuentra en la base de datos. Los filtros encuentran

coincidencias y modifican la página antes de ser mostrada. Por ejemplo, existe

un filtro que soporta auto-conversión del lenguaje de marcado TEX a gráficos

de ecuaciones. El filtro de plugins multimedia encuentra referencias a tipos

comunes de archivos multimedia y los envuelve en sus apropiadas etiquetas,

para embeber automáticamente el contenido multimedia en la página. Aunque

esta es una capacidad muy potente, debe ser desarrollada con cuidado,

teniendo en mente las implicaciones de rendimiento.

lang: La carpeta lang almacena las cadenas de idioma del núcleo del sistema.

Esta es la base del soporte de localización e idioma de Moodle. Todas las

cadenas mostradas al usuario final se asignan a través de esta utilidad. Las

cadenas de idioma se almacenan en la carpeta lang de los datos de Moodle. Esta

estructura permite una personalización local muy sencilla de los ficheros de

idioma.

lib: La carpeta lib almacena las librerías de funciones del núcleo del sistema.

Cuando se desarrollen módulos o se personalice el sistema, se usarán clases y

funciones definidas en esta carpeta.

mod: La carpeta mod almacena los módulos de actividad como Tarea, Wiki,

Lección o Foro. Las actividades educativas son el núcleo de cada curso

desarrollado en Moodle. Lo módulos de actividad son más difíciles de crear que

los bloques y deben diseñarse de manera que instruyan al estudiante.

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

40

my: my es un portal ligero en Moodle. Proporciona la lista de cursos en las que

un usuario participa, incluyendo un resumen de las actividades próximas. El

usuario puede también añadir y borrar bloques en su portal. Este componente

proporciona una buena localización para mostrar información personalizada

con mínimos cambios en el núcleo de Moodle.

theme: La carpeta theme almacena todos los temas prediseñados de Moodle y

cualquier tema personalizado instalado en el sistema. Los temas son una

combinación de CSS, HTML y PHP. Cada tema tiene su propia carpeta. El

sistema de temas es útil para definir el aspecto visual, la cabecera y el pie de la

página de Moodle. Sin embargo está limitado en la cantidad de elementos de la

página que puede modificar. Por ejemplo, ciertos componentes de la página de

Moodle están escritos para que se muestren en una determinada forma.

4.5.2 Base de datos de Moodle

La base de datos de Moodle está organizada en aproximadamente doscientas

tablas relacionadas. La instalación por defecto añade el prefijo mdl_ al nombre de cada

una de las tablas. Cada componente principal del sistema normalmente tiene una o

más tablas, cada una comenzando con el nombre del componente. Por ejemplo, hay

dos tablas relacionadas con el componente config: mdl_config y mdl_config_plugins.

Como programadores, tendremos que modificar la base de datos de forma regular. Por

tanto es importante para nosotros ser capaces de tratar la base de datos completa como

una entidad, copiando y moviendo instancias de una base de datos completa de

Moodle para la creación de áreas de pruebas en las que desarrollar nuestro código.

Normalmente haremos esto con herramientas de línea de comandos como mysqldump y

MySQL.

4.5.3 Datos de Moodle

Los ficheros subidos por los usuarios al sistema se almacenan en la localización

moodledata. En esta carpeta también se almacenan los datos de sesión de los usuarios

que se han logueado en el sistema si las sesiones basadas en fichero están configuradas.

En los datos de Moodle también se almacenan paquetes de idioma opcionales que

pueden ser descargados desde la interfaz de administración. Moodle estructura los

datos de esta carpeta bien por usuarios o bien por cursos. Cada curso tiene una carpeta,

nombrada con un número entero que representa el identificador único asignado a

dicho curso en la base de datos. Podemos determinar fácilmente estos valores

navegando en un curso a través de la página de Moodle e inspeccionando los

parámetros en la URL. Por ejemplo, examinando esta URL de un curso:

http://localhost/workspace/moodle19/course/view.php?id=3

Podemos ver que id=3, al final de la cadena, será el identificador de nuestro

curso. Si hemos subido ficheros a este curso, existirá una carpeta moodledata/3. En esta

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

41

carpeta, Moodle almacena datos de sus módulos en la subcarpeta moddata. Cuando un

módulo necesita almacenar ficheros, los almacena dentro de esta carpeta en un

directorio con el mismo nombre que el módulo. Por ejemplo, el módulo Wiki tendrá

aquí una carpeta llamada wiki. Además, Moodle creará una carpeta llamada backupdata

si se han realizado copias de seguridad de algún curso. Los ficheros que han sido

subidos directamente por un usuario usando la interfaz de ficheros del curso se

encontrarán en la raíz de esta carpeta. Los usuarios pueden crear también sus propias

carpetas y subcarpetas dentro del directorio raíz.

Moodle 2.0 utilizará un modelo completamente nuevo para organizar los

ficheros subidos por el usuario basado en un algoritmo hash. El principal objetivo de

este nuevo método es conseguir un uso eficiente del espacio de almacenamiento en

disco y una mayor flexibilidad a la hora de compartir ficheros entre múltiples cursos.

4.6 Estructura básica de Moodle

Desde el punto de vista del usuario, un sitio Moodle está compuesto por:

categorías, cursos, temas (o semanas) y actividades.

Ilustración 8: Estructura general de Moodle

Los principales elementos que componen un sitio Moodle son los siguientes:

Categorías: Las categorías son los contenedores de información de más alto

nivel, están formadas por cursos y sirven para organizarlos de manera que sean

más fácilmente localizables por el alumno en la pantalla inicial de la aplicación.

Cursos: Los cursos son la parte más importante de la estructura de Moodle. Son

creados por los administradores del sitio y dirigidos por los usuarios que se

establezcan como profesores del curso. Para que un alumno, dado de alta en el

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

42

sistema, pueda acceder a un curso deberá estar matriculado en él. Cuando un

administrador crea un curso debe proceder a su configuración mediante un

formulario proporcionado por Moodle en el que se establecen valores para los

distintos campos, como por ejemplo el nombre del curso o el formato (semanal,

por temas...).

Semanas y temas: La organización de un curso podrá llevarse a cabo por

semanas o bien por temas, según la preferencia del profesorado. Tras la

creación del curso, su configuración, y la matriculación de usuarios, estos

podrán acceder al mismo y observar una serie de bloques diferenciados que

representan las semanas del curso o temas, según el formato que se haya

establecido. Cada uno de estos bloques contendrá, a partir del momento en el

que el profesor las añada, distintos tipos de actividades que los alumnos

deberán realizar para su evaluación.

Actividades: Moodle ofrece la posibilidad de añadir a cada semana o a cada

tema distintos tipos de actividades. Existen siete actividades instaladas por

defecto, a las que se pueden añadir todas las que el usuario desee.

Recursos: Para complementar el contenido de las semanas o temas de cada

curso, Moodle, además de actividades, ofrece la posibilidad de agregar otro

tipo de recursos a las mismas.

Bloques: Las funcionalidades extra fuera de las actividades y recursos son

implementadas por los bloques, contenedores que se sitúan a los lados del sitio

Web y que tienen una función concreta de carácter general (relacionada o no

con los módulos de actividades.

A continuación haremos un repaso por todas las actividades, recursos y bloques

que componen el paquete estándar de instalación de Moodle.

4.6.1 Actividades

Las actividades con las que cuenta Moodle por defecto son las que se muestran

en la tabla siguiente. Desde la página de Moodle se pueden descargar otras muchas

con distintas funcionalidades, e incluso nosotros mismos podemos desarrollar nuestra

actividad personalizada. En capítulos posteriores se profundizará en el proceso de

desarrollo de un módulo de actividad para Moodle.

Base de datos: El módulo Base de datos permite al profesorado y/o a los

estudiantes construir un banco de registros sobre cualquier tema o asunto, así

como realizar búsquedas y mostrar resultados. El formato, cuyo formulario

puede ser creado por el profesor, y la estructura de estas entradas pueden ser

prácticamente ilimitados, incluyendo imágenes, archivos, direcciones URL,

números y texto, entre otras cosas.

Chat: El chat de Moodle permite mantener conversaciones entre usuarios en

tiempo real, generando así una interacción fluida mediante texto síncrono.

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

43

Incluye las fotos de los perfiles en la ventana de chat y soporta direcciones URL,

emoticonos, integración de HTML, imágenes, etc.

Consulta: Es similar a una encuesta, donde el profesor formula una única

pregunta y ofrece a los usuarios distintas elecciones. Se puede considerar una

votación, y puede usarse para opinar sobre algún tema o para recibir una

respuesta de cada estudiante (por ejemplo, para pedir su consentimiento para

algo).

Cuestionario: Permite la realización de exámenes de diferente tipo, donde los

profesores pueden definir una base de datos de preguntas que podrán ser

reutilizadas en diferentes cuestionarios.

Encuesta: Es similar a la actividad Consulta, pero con varias preguntas de

distinto tipo.

Foro: Se trata de una actividad para el debate entre usuarios de un curso. Hay

diferentes tipos de foros disponibles: exclusivos para los profesores, de noticias

de un curso y abiertos a todos.

Glosario: El glosario presenta un catálogo no exhaustivo de palabras relativas a

una misma disciplina, campo de estudio, actividad, tema o área del saber, con

su definición y/o comentarios, a veces bastante simples. Además puede o no

estar clasificado en categorías y subcategorías.

Hot Potatoes: Este módulo permite al profesorado elaborar y/o administrar los

ejercicios elaborados con el programa Hot Potatoes a través de Moodle. Los

ejercicios se crean con Hot Potatoes, y luego se incorporan al curso de Moodle.

Lección: Una lección proporciona contenidos interactivos de forma interesante

y flexible. Estos contenidos consisten en una serie de páginas (normalmente

escritas con el editor HTML integrado en Moodle), y textos que el alumno ha de

recorrer; al final de cada página se puede plantear opcionalmente una pregunta

con varias posibles respuestas para comprobar de alguna manera que el

alumno lo ha leído y/o comprendido. La navegación a lo largo de la lección

depende de la interacción del estudiante con las preguntas planteadas.

Recurso: Admite la presentación de cualquier contenido digital: Word,

PowerPoint, Flash, vídeo, sonidos, etc. Los archivos pueden ser subidos y

manejados en el servidor, o pueden ser creados sobre la marcha usando

formularios web (de texto o HTML). También se pueden enlazar contenidos

externos en Web o incluirlos perfectamente en la interfaz del curso, o realizar

enlaces con aplicaciones Web, transfiriéndoles datos.

SCORM: Un paquete SCORM (Sharable Content Object Reference Model) es un

bloque de material web empaquetado de una manera que sigue el estándar

SCORM de objetos de aprendizaje. Estos paquetes pueden incluir páginas web,

gráficos, programas Javascript, presentaciones Flash y cualquier otra cosa que

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

44

funcione en un navegador web. El módulo SCORM permite cargar fácilmente

cualquier paquete SCORM estándar y convertirlo en parte de un curso.

Tarea: permite al profesor calificar trabajos enviados por los alumnos. Puede

especificarse la fecha final de entrega de una tarea y la calificación máxima que

se le podrá asignar. Los estudiantes pueden subir sus tareas (en cualquier

formato de archivo) al servidor, y se registra la fecha en la que se han subido.

Wiki: Un Wiki posibilita la creación colectiva de documentos en un lenguaje

simple de marcas, utilizando un navegador web.

4.6.2 Recursos

Para complementar el contenido de las semanas o temas de cada curso, Moodle,

además de actividades, ofrece la posibilidad de agregar otro tipo de recursos a las

mismas.

Editar una página de texto. Una página de texto es un texto normal

mecanografiado sin formato (texto plano), es decir, sin ningún tipo de estilos

(negrita, cursiva…) y sin estructuras (listas, tablas…). Es recomendable su uso

en aquellos contenidos de carácter obligatorio y relativamente estable durante

en curso, como por ejemplo normas de seguridad.

Editar una página Web. La página de texto y, especialmente, la página web son

dos recursos muy adecuados para publicar todo tipo de contenidos. En

concreto, la creación de página web nos permite añadir materiales curriculares

propios o personalizados utilizando el editor integrado de Moodle.

Enlazar un archivo o una página Web. El enlace a una web es útil para añadir

contenidos externos al sitio Moodle de forma rápida o para facilitar el acceso y

conocimiento de sitios de interés general (buscadores, diccionarios,

instituciones, etc.), mientras que el enlace a un archivo nos permite agregar

contenidos con múltiples formatos, comprimidos o no, con la ventaja adicional

de que no es obligatorio que estén en el sitio Moodle (aunque requiere la

configuración por parte del administrador).

Directorio. Este tipo de recurso es, como su nombre indica, simplemente un

acceso a un directorio o carpeta particular del sitio web del curso o de la unidad

didáctica. Permite mostrar un directorio completo (junto con sus

subdirectorios), previamente creado por el profesor o administrador, desde el

área de archivos de su curso. De esta manera, podemos facilitar que con un

único enlace los alumnos tengan acceso a toda una lista de ficheros que se

pueden descargar a sus ordenadores.

Desplegar paquetes de contenido IMS. IMS es un esqueleto de especificaciones

que ayuda a definir variados estándares técnicos, incluyendo materiales de e-

learning. La especificación IMS (Content Packaging Specification) hace posible

almacenar los contenidos en un formato estándar que puede ser reutilizado en

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

45

diferentes sistemas sin necesidad de convertir dichos contenidos a otros

formatos. El recurso de tipo IMS CP en Moodle permite utilizar ese tipo de

paquetes de contenidos, cargándolos e incluyéndolos en los cursos de forma

sencilla.

Añadir una etiqueta. Las etiquetas nos permiten añadir pequeños fragmentos

de texto HTML, gráficos o elementos multimedia entre los bloques de

contenido (en la columna central si se trata de un curso en formato semanal o

por temas, o en las columnas laterales si se trata de un curso en formato social).

4.6.3 Bloques

El aspecto del entorno que envuelve un curso en Moodle puede variar en

función de las necesidades de alumnos y profesores. Esta personalización se consigue

mediante el uso, por parte del profesor del curso, de los denominados bloques de

Moodle, que aparecen a la izquierda o la derecha de la pantalla. Existen varios tipos de

bloques con funcionalidades muy diversas: informar, controlar, gestionar, etc. Algunos

trabajan de forma independiente y otros colaboran entre sí. A continuación se

describen los bloques establecidos por defecto en Moodle. A ellos podemos agregar

cuanto deseemos, de acuerdo con la funcionalidad que queramos instalar en la

plataforma Moodle.

Administración: Mediante este bloque el usuario podrá acceder a diferentes

herramientas administrativas en función de su perfil. Desde estas opciones el

alumno podrá examinar sus calificaciones, cambiar su contraseña o darse de

baja de un curso (el profesor se encargará de decidir qué opciones estarán

disponibles para sus alumnos). Por otra parte, el profesor puede configurar el

aspecto de un curso (incorporando bloques por ejemplo), añadir nuevas

actividades, dar de alta a nuevos usuarios o hacer copias de seguridad. Cuanto

mayor sea nuestro nivel de privilegios, de más opciones podremos disponer.

Actividad reciente: El bloque Actividad reciente muestra, de una forma

abreviada, los acontecimientos producidos en el curso desde la última visita. Lo

podemos utilizar para tener una visión rápida del desarrollo del trabajo

realizado, tanto por nosotros mismos, como por el resto de usuarios del curso.

Actividades: El bloque de Actividades lista todas las categorías de actividades

disponibles en el curso (foros, consultas, tareas, etc.).

Buscar en los foros: El bloque Buscar en los foros permite buscar entre los

mensajes publicados en los foros de un curso la información tecleada en el

cuadro de texto del bloque.

Calendario: Este bloque puede usarse como una agenda personal, sirve para

mantener una visión organizada de las fechas y plazos importantes para el

seguimiento de la asignatura o de un curso: fechas de exámenes, de entrega de

trabajos, reuniones de tutoría, etc. Existen cuatro categorías de eventos

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

46

temporales que podemos controlar con el calendario y cada uno de ellos está

identificado con un color de fondo en el bloque: eventos globales, eventos de

curso, eventos de grupo y eventos de usuario.

Canales RSS remotos: El bloque Canales RSS remotos permite mostrar

contenidos de canales RSS de sitios Web externos. El administrador debe

configurar el bloque para permitir al profesorado agregar y gestionar los

canales. En caso contrario, sólo el administrador puede añadir o gestionar los

canales del sitio Moodle.

Cursos: El bloque Cursos muestra un listado de todos los cursos en los que

estamos matriculados o somos profesores/as, y puede utilizarse para moverse

rápidamente entre esos cursos. Debajo de esta lista, aparece el vínculo Todos los

cursos…, que lleva a una página donde se muestran todos los cursos del sitio

agrupados por categorías (esto no quiere decir que se pueda entrar en ellos).

Descripción del curso/sitio: El bloque Descripción de curso/sitio muestra el texto

introducido en el resumen (informe) del curso presente en el formulario de

Configuración del curso o en la descripción del sitio que se realiza en la página de

Ajustes de portada. La cabecera del bloque sólo se muestra en el modo de

edición. Se pueden incluir imágenes y enlaces.

Enlaces de sección: El bloque Enlaces de Sección facilita la navegación rápida por

las diferentes secciones o semanas del curso, dependiendo del formato del

curso usado, Temas o Semanal. Los números que aparecen en el bloque son

enlaces a las secciones numeradas del curso. Este bloque es especialmente útil

en los cursos con un gran número de secciones y cuando tenemos una sola

sección visible.

Entrada aleatoria del glosario: Es un bloque que permite mostrar, por ejemplo

cada vez que se accede a la página principal de un curso, una nueva entrada del

glosario elegido, o una frase célebre, una cita, o un refrán, de forma sencilla y

colaborativa.

Eventos próximos: El bloque Eventos próximos muestra una lista de los

acontecimientos próximos (ya sea un evento global, de curso o de usuario) en el

calendario, con enlaces al contenido del acontecimiento señalado. Los eventos

se pueden programar en el calendario y todas las actividades de Moodle con

fecha límite generan un evento automáticamente.

HTML: El bloque HTML se utiliza para presentar en la página principal del sitio

o de un curso información textual, gráfica, etc. Facilita un bloque flexible que

puede incorporar variedad de funciones y usos, proporcionando un editor

HTML para formatear el texto, añadiendo imágenes o creando enlaces.

También es posible trabajar directamente con el código fuente, lo que permite

introducir marcadores del lenguaje HTML. Eso hace posible incluir video,

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

47

sonido, flash, y otros ficheros que añadirán elementos únicos a la página del

curso.

Memtees: El bloque Mentees, sólo disponible a partir de Moodle 1.8, es

básicamente un bloque para que los padres de los alumnos puedan acceder a

Moodle y puedan ver las actividades o calificaciones de sus hijos. Para añadir

este bloque debemos tener instalada la versión 1.8, o superior, de Moodle, pues

sólo funciona con esta versión.

Mensajes: El bloque Mensajes constituye un sistema de mensajería interna del

sistema que permite la comunicación directa entre todos los usuarios del sitio

sin necesidad de usar el correo electrónico.

Novedades: El bloque Novedades presenta las cabeceras de las últimas noticias o

mensajes publicados por el profesor o profesora en el Foro de Noticias. Siguiendo

el hipervínculo más… se accede al foro donde está publicada la noticia y se

puede ver el mensaje completo. En principio, todos los estudiantes de un curso

están suscritos a este foro, de forma que también recibirán estos mensajes en su

correo particular.

Personas: El bloque Personas contiene el enlace a Participantes, que es un listado

de la totalidad de participantes del curso. Por defecto, aparece primero el

profesorado y después los alumnos, ordenados por el último acceso al curso. Al

hacer clic sobre el nombre de algún participante nos muestra su perfil personal.

Resultados del cuestionario: El bloque Resultados del cuestionario muestra

información sobre los resultados alcanzados por los usuarios en un

determinado cuestionario en tiempo real.

Usuarios en línea: El bloque de los Usuarios en línea muestra a los usuarios

matriculados (no muestra los invitados) del curso actual y presentes en un

período de tiempo fijado por el administrador del sitio (por defecto son los

últimos 5 minutos).

4.7 Control de acceso, inicio de sesión y roles de usuario

Al ser una plataforma tan abierta, Moodle debe ser riguroso con su seguridad.

Por ello hace grandes esfuerzos para asegurar que ninguna persona acceda al sistema

si no debe hacerlo, y que los usuarios que acceden lo hagan de la manera correcta.

Moodle cuenta con un potente sistema de permisos y control de acceso, cuyo

núcleo son las cuentas de usuario. Aunque es posible permitir el acceso a un curso a

cualquier visitante sin necesidad de autenticación, a estos usuarios invitados no les está

permitido hacer algunas cosas importantes en el sistema. Lo usual es que queramos

saber quiénes son nuestros usuarios, y que cada uno tenga su propia cuenta.

Una cuenta de usuario proporciona acceso individual al sistema mediante un

nombre de usuario y una contraseña. Estas cuentas se crean utilizando los plugins de

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

48

autenticación. La manera más simple de crear una cuenta de usuario es hacerlo de

forma manual, creando un usuario mediante la interfaz de administración. Sin

embargo, el sistema más común de autenticación es el basado en e-mails, que permite a

los usuarios crear sus propias cuentas mediante la verificación de e-mail. En cualquier

caso, se requiere un nombre de usuario y una dirección de correo electrónico, además

de una contraseña. Las contraseñas en Moodle se codifican con una función hash MD5

para hacerlas ilegibles y difíciles de averiguar.

Para acceder al sistema, un usuario introduce su usuario y contraseña. Si son

correctos se le permite el acceso al sitio. El sistema de sesiones de Moodle utiliza

funciones de cookies de PHP para introducir cookies en la sesión actual y ayudar a

identificar al usuario durante toda su visita al sistema.

4.7.1 Permisos

Los permisos en Moodle pueden ser asignados dentro de seis contextos:

sitio/global, categoría de curso, curso, bloques y actividades, usuario y portada. Existen

siete roles integrados: administrador, profesor, profesor no editor, estudiante, creador

de cursos, usuario autenticado e invitado, y todos ellos pueden ser asignados en uno o

más de los contextos mencionados. Como desarrolladores, podemos crear capacidades

para controlar el acceso a las nuevas funcionalidades que despleguemos en el sistema,

y también se puede crear cualquier número de roles personalizados a partir de la lista

de unas doscientas capacidades del sistema. A cada capacidad se le puede asignar uno

de estos cuatro niveles de acceso: No configurada, permitida, prohibida y prevenida.

Cada usuario puede tener múltiples roles que heredan permisos de todos los niveles de

contexto aplicables a una petición de acceso realizada por el usuario. La combinación

de todo lo anterior proporciona una solución poderosa y flexible para los

administradores.

Los roles estándar del sistema son:

Administrador: El administrador del sistema tiene todos los permisos.

Creador de cursos: Puede crear cursos en el sistema y puede estar limitado a

una categoría de cursos.

Profesor: Puede administrar un curso, y además puede desarrollar y actualizar

su contenido.

Profesor no editor: Puede administrar un curso, pero no puede modificar su

estructura.

Estudiante: Puede estar matriculado en un curso.

Usuario autenticado: Todo usuario que haya iniciado sesión en el sistema tiene

este rol.

Invitado: Los usuarios no autenticados que tiene permiso de acceso al sistema.

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

49

Se pueden crear multitud de roles personalizados utilizando la interfaz de

Moodle. Para comprobar y forzar un inicio de sesión dentro de nuestro código, se debe

realizar una llamada a require_login. Esta función permite comprobar si un usuario ha

iniciado sesión, y forzar a que lo haga si lo requiere el elemento al que está tratando de

acceder. Por ejemplo, podemos crear una actividad específica en un módulo que

requiera que el usuario haya iniciado sesión en el sistema. Si no lo ha hecho, será

redireccionado a la función de login adecuada.

4.7.2 Capacidades

Las capacidades están asociadas con niveles de contexto y son reglas específicas

de acceso que pueden ser concedidas a los roles. Ejemplos de capacidades son los

siguientes:

moodle/site:manageblocks. Puede administrar bloques en el nivel de contexto

sitio.

moodle/user:viewdetails. Puede ver los detalles de un usuario en el nivel de

contexto usuario.

moodle/course:view. Puede ver un curso en el nivel de contexto curso.

Cuando se desarrollen nuevas capacidades para el código personalizado, se

debe considerar cuidadosamente en qué contexto estarán mejor localizadas. Las

capacidades normalmente se colocan en el nivel de contexto más bajo en el que puedan

funcionar.

4.7.3 Roles

Los roles son identificadores específicos asociados con todos los contextos.

Principalmente se usan para agrupar capacidades de un contexto, de forma que este

grupo de capacidades puede ser asignado a los usuarios. Las capacidades se asignan a

roles en contextos específicos bien por defecto o mediante una asignación específica.

4.7.3.1 Asignación de roles

Por último, a los usuarios se les puede asignar roles en contextos específicos.

Esta asignación les proporciona el acceso definido por las capacidades en ese rol para

ese contexto.

Para resumir:

Los contextos son elementos específicos en Moodle.

Los roles están asociados con todos los contextos.

Las capacidades se asignan a roles en un contexto dado.

A los usuarios se les asignan roles en un contexto dado.

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

50

Son la asignación de roles a nivel de contexto y las capacidades que un rol tiene

en ese contexto lo que determina si un usuario puede realizar la acción requerida.

Como desarrolladores de código para Moodle, necesitaremos tener esta

funcionalidad en mente, para que de esta manera podamos diseñar y construir el

control de acceso que deseamos para nuestras funciones.

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

51

5 Desarrollo de un módulo de actividad Quizá lo más complicado en el desarrollo de módulos de actividad para Moodle

sean los primeros pasos, debido a la escasa documentación existente, especialmente en

español.

Este capítulo constituye un manual mediante el cual se pretende simplificar al

desarrollador la tarea de programar un nuevo módulo que añada funcionalidades a la

plataforma, o de modificar uno ya existente para adaptarlo a unas necesidades

concretas. En él se ha recopilado, organizado y sistematizado la información disponible

en Internet, especialmente en la página para desarrolladores de la Web oficial de

Moodle (http://docs.moodle.org/en/Development:Developer_documentation).

Para ello se repasarán las principales librerías de código con las que cuenta el

programador para realizar su proyecto. A continuación se analizará la estructura y el

contenido de los ficheros que componen un módulo, para terminar realizando paso por

paso el desarrollo de un módulo sencillo, que será el germen de lo que posteriormente

podría ser un trabajo mayor.

Para facilitar la labor del desarrollador de Moodle inexperto, también se

detallará la manera de llevar a cabo la instalación de la plataforma, preparando para

ello el sistema con todos los requisitos necesarios.

Tanto el código fuente contenido en este manual, como las explicaciones

teóricas relacionadas con el sistema de módulos de Moodle, se refieren a la última

versión estable de la plataforma disponible en el momento de redactar este texto

(versión 1.9.9).

5.1 Instalación de Moodle

Los pasos que aquí se detallan servirán para configurar un entorno válido y así,

posteriormente, obtener una instalación satisfactoria de Moodle en el equipo. Estos

pasos están pensados para todos aquellos usuarios que utilicen la plataforma para

desarrollar módulos.

Se explicará en detalle el proceso de instalación tanto de Moodle como de sus

requisitos previos en un servidor Linux, en concreto en Ubuntu 10.04.

5.1.1 Requisitos

Moodle está desarrollado principalmente en GNU/Linux usando Apache,

MySQL y PHP (también conocida como plataforma LAMP), aunque es probado

regularmente con PostgreSQL y en los sistemas operativos Windows XP, MacOS X y

Netware 6.

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

52

Los requerimientos de instalación de Moodle son los siguientes:

Un servidor web. La mayoría de los usuarios utilizan Apache, pero Moodle

debe funcionar bien en cualquier servidor web que soporte PHP, como el IIS

(Internet Information Server) de las plataformas Windows.

Una instalación de PHP en funcionamiento (versión 4.3.0 o posterior). PHP 5

está soportado a partir de Moodle 1.4.

Una base de datos: MySQL o PostgreSQL, que están completamente soportadas

y recomendadas para su uso con Moodle. MySQL es la elección preferida para

mucha gente. Hay algunos argumentos a favor de PostgreSQL, especialmente si

está planificando instalaciones de grandes dimensiones. MySQL 4.1.16 es la

versión mínima para trabajar con Moodle 1.9 (muchas distribuciones de Linux

incorporan versiones más antiguas, así que se debe comprobar este extremo).

La mayoría de los servicios de alojamiento web (hosting) soportan todo esto por

defecto. Si se ha contratado alguno de los pocos servicios de alojamiento web que no

soportan estas características, se debe considerar la posibilidad de trasladar el sistema a

otro sitio.

El apartado siguiente es una guía de cómo instalar Apache2, MySQL y PHP5.

Proporcionará instrucciones, paso a paso para instalar estos programas en una de las

plataformas más utilizadas: Ubuntu 10.04.

Requerimientos adicionales:

Librería GD y librería FreeType 2 para poder construir los gráficos de los

registros de Moodle.

mbstring es requerido para manipular cadenas de caracteres multi-byte (iconv

también es recomendable).

La extensión mysql si va a utilizar la base de datos MySQL. En algunas

distribuciones de Linux (principalmente RedHat) se trata de un paquete

opcional.

La extensión pgsql si va a utilizar una base de datos PostgreSQL.

La extensión zlib es necesaria si va a utilizar las funcionalidades zip/unzip.

Otras extensiones PHP podrían ser necesarias dependiendo de las

funcionalidades opcionales de Moodle que vayan a ser utilizadas,

especialmente las relacionadas con autenticación y matriculación (p. ej. la

extensión LDAP).

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

53

5.1.2 Instalación de requisitos

5.1.2.1 Instalación de Apache2

Lo primero es instalar un servidor HTTP, en nuestro caso, vamos a instalar

Apache2 y el módulo de PHP5 para Apache. Desde el terminal escribimos:

sudo apt-get install apache2 libapache2-mod-php5

Código 1: Instalación de Apache2

Una vez que se ha completado la instalación, si todo ha ido bien, al escribir

‚http://localhost/‛ en la barra de direcciones de nuestro navegador, nos debe aparecer

un mensaje como el siguiente:

Ilustración 9: Apache instalado correctamente

Este mensaje nos indica que el servidor web se ha instalado y está funcionando

correctamente.

5.1.2.2 Instalación de MySQL

A continuación tenemos que instalar MySQL. También instalaremos el enlace

entre apache y mysql, y el de php5 y mysql. Lo hacemos con el siguiente comando:

sudo apt-get install mysql-server libapache2-mod-auth-mysql php5-mysql

Código 2: Instalación de MySQL

Durante la instalación se nos preguntará por la contraseña de MySQL, tal y

como se muestra en la imagen inferior:

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

54

Ilustración 10: Instalación de MySql

5.1.2.3 Instalación de PHP

Por último, instalaremos todos los paquetes que necesitemos de PHP5,

mediante el siguiente comando:

sudo apt-get install php5 php5-gd

Código 3: Instalación de PHP

5.1.3 Instalación de Moodle

Después de la instalación en nuestro servidor de todos los requisitos previos,

podemos proceder a instalar nuestra plataforma Moodle. Para ello debemos descargar

la última versión estable (en nuestro caso Moodle v1.9.9) de la página oficial de

descargas de Moodle:

wget http://download.moodle.org/download.php/stable19/moodle-1.9.9.tgz

Código 4: Descarga de Moodle

A continuación descomprimimos el fichero y movemos la carpeta moodle a

/var/www/ que es donde, por defecto, se alojan las páginas web en Apache2:

tar xzvf moodle-1.9.9.tgz

sudo mv moodle /var/www/

Código 5: Descomprimir Moodle y colocarlo el directorio www

Además, Moodle necesita un directorio para almacenar archivos. Por seguridad

no debe ser accesible desde la web por lo que lo crearemos en /var y le cambiaremos los

permisos y el propietario para que Moodle pueda acceder a él:

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

55

sudo mkdir -p /var/moodledata

sudo chown -R nobody:www-data /var/moodledata

sudo chmod -R 0770 /var/moodledata

Código 6: Crear el directorio moodledata y darle permisos adecuados

Una vez ejecutado el comando anterior ya dejamos de lado el Terminal y los

siguientes pasos los realizaremos desde un navegador web, donde pondremos la IP del

servidor en la barra de direcciones:

Ilustración 11: Instalación de Moodle-Paso 1

Después de seleccionar el idioma, hacemos clic en Siguiente para continuar la

instalación.

A continuación el sistema comprueba si tenemos todo lo necesario para que

Moodle se ejecute correctamente.

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

56

Ilustración 12: Instalación de Moodle-Paso 2

En el paso siguiente comprobamos las direcciones donde se instalará Moodle:

Ilustración 13: Instalación de Moodle-Paso 3

Sobre todo, debemos comprobar que el directorio de datos es el que hemos

creado en los pasos anteriores.

Después tenemos que completar la información correspondiente a MySQL con

el nombre de usuario y la contraseña que escribimos durante la instalación de MySQL.

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

57

Ilustración 14: Instalación de Moodle-Paso 4

A continuación se verifica que se cumplen todos los requisitos necesarios en la

configuración del servidor. Si no es así, podemos abrir un terminal e instalar los

paquetes requeridos o recomendados antes de continuar con la instalación de Moodle.

Ilustración 15: Instalación de Moodle-Paso 5

En el paso siguiente descargamos el paquete de idioma de ‚Español – España

(es_es)‛.

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

58

Ilustración 16: Instalación de Moodle-Paso 6

En este punto finaliza la configuración y Moodle intenta crear un fichero de

configuración en /var/www/moodle. En nuestro caso no lo ha conseguido, pero nos

ofrece la posibilidad de descargar el archivo config.php para después colocarlo nosotros

manualmente en el servidor.

Ilustración 17: Instalación de Moodle-Paso 7

Continuamos en el navegador web y aceptamos las condiciones de la licencia.

Durante todo el proceso siguiente aparecerán pantallas que nos informarán de la

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

59

inserción de nuevas tablas en la base de datos. Debemos comprobar que no existan

mensajes de error y aceptar para pasar a la siguiente pantalla.

Ilustración 18: Instalación de Moodle-Paso 8

Ilustración 19: Instalación de Moodle-Paso 9

La siguiente pantalla nos informa de la versión instalada.

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

60

Ilustración 20: Instalación de Moodle-Paso 10

En la siguiente pantalla tendremos que suministrar los datos del administrador

de Moodle:

Ilustración 21: Instalación de Moodle-Paso 11

Por último configuramos la página inicial de nuestra plataforma:

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

61

Ilustración 22: Instalación de Moodle-Paso 12

Y, si todo ha ido bien, ya hemos terminado nuestra instalación de Moodle.

Ilustración 23: Instalación de Moodle-Paso 13

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

62

5.2 Guías de estilo para desarrolladores

5.2.1 Estilo del código

Este manual de estilo ha sido creado para conseguir que todo el código de

Moodle cumpla estas características, de forma que sea más fácil de entender para los

futuros desarrolladores. Es cierto que la parte más antigua del código de Moodle no

cumple estas normas en algunos casos, pero la comunidad de desarrolladores está

trabajando para solucionarlo gradualmente. Todo el código nuevo definitivamente

deberá adherirse a estos estándares de la forma más exacta posible.

5.2.2 Reglas generales

Este apartado se basa en las ‚Reglas Generales‛ que propone Moodle para sus

desarrolladores

(http://docs.moodle.org/es/Manual_de_Estilo_de_Código#Reglas_Generales).

Todos los archivos de código deben utilizar la extensión .php.

Todas las plantillas deben utilizar la extensión .html.

Todos los archivos de texto deben utilizar el formato de texto Unix (la mayoría

de los editores de texto tienen esto como una opción).

Todas las etiquetas PHP deben ser 'completas', como <?Php ?>, no 'reducidas',

como <? ?>.

Todos los avisos de copyright deben ser mantenidos. Podemos incluir los

nuestros si resulta necesario.

Todos los archivos deben incluir el archivo principal config.php.

Cualquier otro include/require debe utilizar una ruta absoluta que comience

por $CFG->dirroot o $CFG->libdir, nunca relativos, ya que estos en algunas

ocasiones funcionan de forma extraña en PHP.

Cada archivo debe comprobar que el usuario está autenticado correctamente,

utilizando las funciones require_login(), require_capability() y has_capability().

Todos los accesos a la base de datos deben utilizar las funciones definidas en

lib/datalib.php cuando sea posible, ya que esto permite la compatibilidad con un

gran número de bases de datos y prácticamente todo es posible utilizando estas

funciones. La inclusión de código SQL queda restringida a funciones específicas

de nuestro código (normalmente en el archivo lib.php. Además debemos

comprobar que funciona en cualquier plataforma y debe estar claramente

comentado.

No se deben crear o utilizar variables globales distintas de las estándar $CFG,

$SESSION, $THEME, $SITE, $COURSE y $USER.

Todas las variables deben ser inicializadas o, al menos, comprobada su

existencia utilizando isset() o empty() antes de ser utilizadas.

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

63

Todas las cadenas deben ser traducibles. Para ello crearemos nuevos textos en

los archivos lang/es_utf8 con palabras reducidas en inglés y su traducción

completa al español y las recuperaremos en nuestro código utilizando las

funciones get_string() o print_string().

Todos los errores deben ser visualizados utilizando la función print_error() para

maximizar la traducción y ayudar a los usuarios (Automáticamente se enlaza

con Moodle Docs).

Todos los ficheros de ayuda deben ser traducibles. Para ello crearemos nuevos

textos en el directorio lang/es_utf8/help y los llamaremos utilizando la función

helpbutton(). Si necesitamos actualizar un fichero de ayuda:

o Para un pequeño cambio, donde la traducción antigua del fichero

podría tener todavía sentido, está permitido que se haga el cambio, pero

debería ser notificado a [email protected]

o Para un cambio importante tendremos que crear un nuevo fichero

añadiéndole en el nombre un número incrementado (Ej. filename2.html)

para que los traductores puedan ver fácilmente que se trata de una

nueva versión del archivo. Obviamente el nuevo código y los índices de

las páginas de ayuda deben ser modificados para apuntar a las

versiones más recientes.

La información que llega desde el navegador (enviada con los métodos GET o

POST) automáticamente tiene las "magic_quotes" aplicadas (sin importar la

configuración de PHP) por lo que podemos insertarla con total seguridad en la

base de datos. El resto de la información (obtenida desde los archivos, o desde

la base de datos) debe ser escapada con la función addslashes() antes de

insertarla en la base de datos.

MUY IMPORTANTE: Todos los textos dentro de Moodle, especialmente

aquellos que han sido introducidos por los usuarios, deben ser mostrados

utilizando la función format_text(). Esto asegura que el texto es filtrado y

limpiado correctamente.

Las acciones de los usuarios deben ser grabadas utilizando la función

add_to_log(). Estos registros son utilizados para la generación de los "Informes

de Actividad" y los registros.

Al generar enlaces HTML, deben hacerse siempre relativos a la raíz del sitio

Moodle, por ejemplo, enlace a $CFG->wwwroot/mod/blonk/view.php?id=99 en

lugar de únicamente view.php?id=99. Gracias a esto el código funcionará aunque

sea llamado por un script que se encuentre en otra carpeta diferente.

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

64

5.2.2.1 Estilo del código fuente

Es necesario cumplir las siguientes normas para poder comprender el código

fuente de Moodle correctamente.

El sangrado del texto debe ser siempre de 4 espacios. No debemos utilizar los

tabuladores NUNCA.

Los nombres de las variables tienen que ser siempre fáciles de leer, procurando

que sean palabras en minúsculas con significado en inglés. Si realmente

necesitamos más de una palabra, debemos ponerlas juntas.

Debemos utilizar nombres en plural para las matrices de objetos.

BIEN: $quiz

BIEN: $errorstring

BIEN: $assignments (para un array de objetos)

BIEN: $i (solo en bucles pequeños)

MAL: $Quiz

MAL: $aReallyLongVariableNameWithoutAGoodReason

MAL: $error_string

Código 7: Ejemplos de nombres de variables correctos e incorrectos

Las constantes tienen que definirse siempre en mayúsculas, y empezar siempre

por el nombre del módulo al que pertenecen. Deberían tener las palabras

separadas por guiones bajos.

define("FORUM_MODE_FLATOLDEST", 1);

Código 8: Ejemplo de definición de una constante

Los nombres de las funciones tienen que ser palabras sencillas en minúsculas y

en inglés, y empezar con el nombre del módulo al que pertenecen para evitar

conflictos entre módulos. Las palabras deberían separarse por guiones bajos.

Los parámetros, si es posible, tendrán valores por defecto. Debemos comprobar

que no haya espacio entre el nombre de la función y los paréntesis.

function forum_set_display_mode($mode=0) {

global $USER, $CFG;

if ($mode) {

$USER->mode = $mode;

} else if (empty($USER->mode)) {

$USER->mode = $CFG->forum_displaymode;

}

}

Código 9: Ejemplo de función bien definida

Los bloques de código siempre deben estar encerrados por llaves (incluso si

solo constan de una línea). Moodle utiliza el siguiente estilo:

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

65

if ($quiz->attempts) {

if ($numattempts > $quiz->attempts) {

error($strtoomanyattempts, "view.php?id=$cm->id");

}

}

Código 10: Ejemplo de bloque de código correcto siguiendo el estilo de Moodle

Las cadenas tienen que ser definidas utilizando comillas simples siempre que

sea posible. Esto sirve para obtener un mejor rendimiento.

$var = 'texto sin variables';

$var = "con caracteres especiales como nueva línea \n";

$var = 'una cadena muy muy larga con una '.$sola.' variable';

$var = "algo de $texto con $varias variables $dentro";

Código 11: Ejemplos de definición de cadenas

Los comentarios deben añadirse de forma que resulten prácticos, para explicar

el flujo del código y el propósito de las funciones y variables.

Cada función (y cada clase) debería utilizar el popular formato phpDoc. Esto

permite que la documentación sea generada automáticamente.

Los comentarios en línea deberían utilizar los caracteres //, alineados con

cuidado por encima de las líneas de código que comenta. Los comentarios de

p{rrafo utilizan los caracteres /**….**/

/**

The description should be first, with asterisks laid out exactly

like this example. If you want to refer to a another function,

do it like this: {@link clean_param()}. Then, add descriptions

for each parameter as follows.

*

@param int $postid The PHP type is followed by the variable name

@param array $scale The PHP type is followed by the variable name

@param array $ratings The PHP type is followed by the variable name

@return mixed

**/

function forum_get_ratings_mean($postid, $scale, $ratings=NULL) {

if (!$ratings) {

$ratings = array(); // Initialize the empty array

if ($rates = get_records("forum_ratings", "post",

$postid)) {

// Process each rating in turn

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

66

foreach ($rates as $rate) {

....etc

Código 12: Ejemplos de comentarios de línea y párrafo

El espacio en blanco se puede utilizar con bastante libertad. No pasa

nada por separar las cosas un poco para ganar en claridad. Generalmente,

debería haber un espacio entre llaves y líneas normales y ninguno entre llaves y

variables o funciones:

foreach ($objects as $key => $thing) {

process($thing);

}

if ($x == $y) {

$a = $b;

} else if ($x == $z) {

$a = $c;

} else {

$a = $d;

}

Código 13: Ejemplo del uso de espacios para hacer más claro el código

Cuando estemos realizando una COPIA de un objeto, utilizaremos siempre la

función clone(), originalmente sólo disponible en php5 (en caso contrario

simplemente tendremos una referencia al primer objeto). Moodle nos garantiza

que este método funcionará también bajo PHP4.

MAL: $b = $a;

BIEN: $b = clone($a);

Código 14: Ejemplo de copia correcta de un objeto

Si lo que se quiere copiar no es un objeto, pero puede contener objetos (p. ej. un

array de objetos) utilizaremos la función fullclone() en su lugar.

5.2.2.2 Estructura de la base de datos

En cuanto a las tablas que nuestro módulo creará e insertará en la base de datos

de Moodle, se debe tener en cuenta las siguientes consideraciones:

Cada tabla debe tener un campo autonumérico id (INT10) como clave primaria.

La tabla principal que contiene instancias de cada módulo debe tener el mismo

nombre que el módulo y contener, por lo menos, los siguientes campos:

o id - clave primaria

o course - el identificador del curso al que la instancia pertenece

o name - el nombre completo de la instancia

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

67

El resto de las tablas asociadas con un módulo que contiene información sobre

cualquier otra cosa (p.ej. ‚respuestas‛), deberían ser llamadas modulo_respuestas

(en plural).

Los nombres de las tablas y de los campos tienen que evitar el uso de palabras

reservadas por las bases de datos. Esto se debe comprobar antes de crearlas.

Los nombres de los campos (columnas) deberían ser sencillos y cortos,

siguiendo las mismas reglas que los nombres de las variables.

Cuando sea posible, las columnas que contengan una referencia al campo id de

otra tabla (por ejemplo, modulo) debería ser llamado moduloid. (esta norma es

nueva y no es seguida por algunas tablas antiguas).

Los campos booleanos serán implementados como enteros cortos (por ejemplo,

INT4) con los valores 0 o 1, para permitir la futura expansión de los valores si

fuera necesario.

La mayoría de las tablas tienen que tener un campo timemodified (INT10) que

será actualizado con la fecha actual (timestamp de UNIX) obtenida con la

función time() de PHP.

Debemos definir siempre un valor por defecto para cada campo (y hacer que

tenga sentido).

Cada tabla debe comenzar con el prefijo de la base de datos ($CFG->prefix). En

muchos casos esto es gestionado automáticamente. Además, bajo PostgreSQL,

el nombre de cada índice debe empezar también con el prefijo.

Para garantizar la compatibilidad entre bases de datos, se deben seguir las

reglas siguientes sobre el uso del comando AS (solo si necesitamos alias en

tablas/campos, por supuesto):

o No debemos utilizar el comando AS para alias de tablas.

o Utilizaremos el comando AS para alias de campos (columnas).

Nunca debemos crear UNIQUE KEYs (restricciones) para nada. En su lugar

utilizaremos UNIQUE INDEXes. En el futuro, si se decide añadir integridad

referencial a Moodle y si se necesitan UNIQUE KEYs, serán utilizadas, pero no

por ahora. El editor XMLDB permite especificar tanto restricciones UNIQUE

como FOREIGN (y eso es bueno, teniendo el XML bien definido), pero solo los

índices subyacentes serán realmente generados en la base de datos.

El uso de UNIQUE KEYs creadas en el Editor XMLDB (punto anterior) solo

debe ser definido si el campo/campos van a ser el objetivo para alguna

FOREIGN KEY (a nivel de editor). En caso contrario, las crearemos como

UNIQUE INDEXes.

Las tablas asociadas con un bloque deben seguir las siguientes convenciones en

sus nombres: $CFG->prefix + block_ + nombre del bloque + añadidos. Por ejemplo,

asumiendo que $CFG->prefix es 'mdl_', todas las tablas para el bloque

"rss_client" deberán empezar por 'mdl_block_rss_client' (siendo posible añadir

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

68

más palabras al final, Ej. mdl_block_rss_client_anothertable...). Esta regla será

completamente forzada con Moodle 2.0, dando algo de tiempo a los

desarrolladores hasta entonces.

Nunca debemos realizar cambios a la base de datos en ramas estables. Si lo

hacemos, los sitios actualizados de una versión estable a la siguiente pueden

encontrarse con cambios por duplicado, lo cual puede producir errores serios.

Cuando hagamos referencia a una variable entera en consultas SQL, no

debemos entrecomillar el valor. Por ejemplo, get_records_select('question',

"category=$catid") es correcto. get_records_select('question', "category='$catid'") es

incorrecto. Ese uso oculta posibles errores cuando $catid está sin definir.

5.2.2.3 Normas de seguridad (y de control de la información de formularios y URLs)

A la hora de desarrollar nuestro propio módulo, también hay que tener en

cuenta una serie de normas de seguridad, especialmente en lo que se refiere a la

información obtenida del usuario por medio de formularios y de parámetros en la

URL. Es muy importante mantener la seguridad en estos procedimientos para poder

garantizar la integridad de los datos manejados por nuestro módulo. Algunas de las

normas a seguir en este sentido son las siguientes:

No debemos basar nuestro código en register_globals. Cada variable debe ser

correctamente inicializada en cada fichero de código. Debe ser obvia la

procedencia de cada variable.

Debemos inicializar todos los arrays y objetos aunque estén vacíos. $a = array() o

$obj = new stdClass().

No debemos utilizar la función optional_variable(). En su lugar, utilizaremos la

función optional_param().

Seleccionaremos la opción PARAM_XXXX apropiada al tipo de parámetro que

esperamos. Para comprobar y definir un valor opcional para una variable,

utilizaremos la función set_default().

No utilizaremos la función require_variable(). En su lugar, utilizaremos la

función required_param().

Seleccionaremos la opción PARAM_XXXX apropiada al tipo de parámetro que

esperamos.

Utilizaremos data_submitted(), con cuidado. La información todavía debe ser

limpiada antes de utilizarla.

No debemos utilizar $_GET, $_POST o $_REQUEST. En su lugar, utilizaremos

las funciones required_param() u optional_param() apropiadas.

No debemos comprobar las acciones con código como: if (isset($_GET['algo'])).

Utilizaremos, por ejemplo, $algo = optional_param( algo, -1, PARAM_INT ) y

entonces compruebaremos que está dentro de los valores esperados, por

ejemplo, if ($something>=0) {....

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

69

Cuando sea posible agruparemos todas las llamadas a required_param(),

optional_param() y el resto de inicialización de variables en el principio de cada

fichero (o función) para que sea fácilmente localizable.

Utilizaremos el mecanismo sesskey para proteger el envío de formularios de

ataques. Un ejemplo de uso: cuando el formulario es generado, incluiremos

<input type="hidden" name="sesskey" value="<?php echo sesskey(); ?>" />. Cuando

el formulario es procesado, comprobaremos if (!confirm_sesskey()) {error('Bad

Session Key');}.

Todos los nombres de ficheros deben ser limpiados de caracteres extraños

utilizando la función clean_filename(), si esto no ha sido realizado con el uso de

las funciones required_param() y optional_param() con anterioridad.

Cualquier información leída desde la base de datos debe tener la función

addslashes() aplicada antes de volver a enviar la información a la base de datos.

Un objeto completo puede ser procesado con la función addslashes_object().

No debemos utilizar información obtenida de $_SERVER si podemos evitarlo.

Presenta algunos problemas de portabilidad.

Si no ha sido realizado en ningún otro lugar, debemos asegurarnos de que la

información enviada a la base de datos ha sido filtrada mediante la función

clean_param() utilizando la opción PARAM_XXXX apropiada.

Si escribimos código SQL, nos aseguraremos completamente de que es correcto.

En particular, compruebaremos la falta de comillas en las variables utilizadas.

Es un punto de entrada para ataques de tipo SQL injection.

Comprobaremos toda la información (especialmente la que es enviada a la base

de datos) en cada archivo que es utilizada. Nunca debemos confiar en que otro

código estará haciendo ese trabajo.

Los bloques de código que se incluyan deben presentar una estructura PHP

correcta (por ejemplo, con una declaración de una clase, de funciones, etc.) Los

bloques de código lineales suelen tender a utilizar variables sin inicializar (y

son menos legibles).

Si necesitamos usar shell_exec() (o cualquier otra función que invoque un shell),

nos aseguraremos de que se han limpiado los parámetros anteriormente con

escapeshellcmd()/escapeshellarg() (de lo contrario abrimos la puerta a ataques de

inyección de shell).

5.2.3 Estilo de la interfaz

En este apartado se ofrece una colección de ideas para adaptar la interfaz de

nuestro módulo al estilo global de Moodle, de la mejor manera posible:

Simplicidad: Debemos usar el mínimo de interfaz necesario para obtener la

funcionalidad que necesitamos.

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

70

Páginas estándar: Tanto en módulos de actividad como en bloques, existen una

serie de ficheros que se deben crear obligatoriamente. En el caso de los módulos

de actividad, estos ficheros se detallan en el apartado Estructura de un módulo de

actividad.

Debe haber un script por función o página principal.

Plantilla de página:

o Imprimiremos las cabeceras con print_heading(), usaremos el CSS para

IDs y Clases.

o Imprimiremos las cajas alrededor del texto usando print_simple_box().

Plantilla de formulario:

o Mostraremos las opciones más importantes en la parte superior.

o Cada entrada debe tener una etiqueta y, si es necesario, un archivo de

ayuda.

o Si hay más de 10 opciones, las desglosaremos en los parámetros

necesarios y opcionales, extra o avanzados.

Manejo de tablas:

o Usaremos la función print_table() cuando sea posible.

Herramientas de navegación estándar:

o Todas las páginas deberían llamar a print_header(), y suministrar una

ruta de navegación estándar que apareciera allí. Donde sea posible,

debería verse como: COURSE >> INDEX >>INSTANCE >> SUBPAGES...

o Las páginas incluidas en módulos de actividad deberían llamar a

navmenu() para generar el menú de navegación apropiado.

Direcciones URL:

o Las direcciones URL deben ser lo más cortas posible.

o No debemos usar subrayado en nombres de parámetros o nombres de

archivos.

o Nunca debemos usar dos palabras cuando una sea suficiente.

Botones o enlaces: El Web Accelerator de Google proporciona algunas

sugerencias:

o Las acciones que puedan modificar el estado de Moodle (archivos de

datos, base de datos, información de sesión) deben ser llevadas a cabo

por medio de botones.

o Como mínimo, tales acciones, que son implementadas como enlaces,

deben remitir a una página de confirmación que sí utilice botones.

Enlaces a archivos de ayuda:

o Los botones de ayuda deben estar a la derecha del objeto

(excepcionalmente pueden estar a la izquierda, si el objeto está alineado

a la derecha)

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

71

5.3 Estructura de un módulo de actividad

Un módulo de actividades viene definido por un conjunto de ficheros PHP y

HTML que se incluyen dentro de una carpeta con el nombre del módulo, que a su vez

se incluye en la carpeta /mod del directorio base de Moodle. No resulta difícil encontrar

estos ficheros, en forma de plantilla, en la red, aunque con escasa documentación y

siempre en inglés.

Estos documentos presentan una estructura flexible, con unos campos básicos,

que deben ampliarse para dar funcionalidad al módulo.

Para que Moodle reconozca nuestro módulo de actividad este debe seguir dicha

estructura de archivos (algunos necesarios y otros opcionales). Para ello, a partir de

este momento vamos a considerar que nuestro módulo de prueba va a llamarse

‚nombremodulo‚. Por tanto, y teniendo en cuenta que los archivos en negrita son los

archivos obligatorios que deberemos tener en nuestro módulo, la estructura sería la

siguiente:

/ – raíz de Moodle.

/mod – carpeta de módulos.

o /nombremodulo – carpeta raíz de nuestro módulo. Aquí dentro irán

todos nuestros archivos y carpetas.

/db – carpeta con datos a introducir en la base de datos durante

la instalación/actualización del módulo.

access.php – contiene las capacidades/permisos del

módulo.

install.xml – esquema de la base de datos en xmldb para

la instalación del módulo.

upgrade.php – procedimientos de actualización del

módulo.

icon.gif – icono de la actividad que se muestra en el curso (entre

otros sitios).

index.php – muestra la lista de instancias de actividades de

nuestro módulo que hay en el curso.

lib.php – funciones requeridas por Moodle para comunicarse

con nuestro módulo.

locallib.php – funciones propias que necesitemos para nuestro

módulo.

mod_form.php – formulario de configuración de la actividad al

ser creada o editada.

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

72

version.php – información sobre versiones relacionadas con el

módulo.

view.php – página de inicio de la actividad (p.ej. cuando entra

en la actividad un alumno).

styles.php – definición de estilos css para nuestro módulo.

backuplib.php – funciones para realizar la copia de seguridad

del módulo.

restorelib.php – funciones para realizar el restablecimiento de

una copia de seguridad del módulo.

/lang – directorio de idiomas

/es_es_utf8 – directorio de idioma correspondiente al

español de España versión UTF8.

nombremodulo.php – archivo con las cadenas

usadas en el módulo en el idioma de arriba.

/help – carpeta con los archivos de ayuda.

/nombremodulo – ayuda de este módulo.

index.html – índice con enlaces a

los demás archivos de ayuda de

este módulo.

mods.html – información general

de nuestro módulo.

miayuda5.html – archivo de ayuda

propio con ayuda sobre algo de

nuestro módulo.

miarchivo.php – también podemos crear tantos archivos

(páginas) como necesitemos.

Como se comentó en la guía de estilo, todos los archivos PHP deben incluir el

archivo config.php, ubicado en el directorio base de Moodle.

5.3.1 Ficheros principales

En este apartado se describirá el contenido de los principales ficheros

mostrados en el apartado anterior.

5.3.1.1 access.php

El fichero access.php define las capacidades de los usuarios en función a los roles

para este módulo, su formato es el siguiente:

<?php

$mod_nombremodulo_capabilities = array('mod/

nombremodulo:nombre_capacidad_primera' => array(

///Tipo de capacidad

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

73

'captype' => 'write',

///Contexto de la actividad

'contextlevel' => CONTEXT_MODULE,

///Permisos

'legacy' => array(

'editingteacher' => CAP_PROHIBIT,

'coursecreator' => CAP_PROHIBIT,

'teacher' => CAP_PROHIBIT,

'admin' => CAP_PROHIBIT,

'student' => CAP_ALLOW

)

),

///Aquí se pueden añadir tantas capacidades como se desee

'mod/nombremodulo:nombre_capaciad_enesima' => array(

'captype' => 'write',

'contextlevel' => CONTEXT_MODULE,

'legacy' => array(

'editingteacher' => CAP_ALLOW,

'coursecreator' => CAP_ALLOW,

'teacher' => CAP_ALLOW,

'admin' => CAP_ALLOW,

'student' => CAP_PROHIBIT

)

)

);

?>

Código 15: Ejemplo de fichero access.php

En cuanto a los permisos, existen roles generales, aplicables a todo el sitio, que

se pueden consultar y modificar con una cuenta de administrador en Usuario->

Permisos y por otro lado cada curso tiene sus roles locales que ha de ser configurados

cuando se crea un curso desde una cuenta de administrador del curso (vale la de

administrador del sitio) en el apartado Asignar Roles. Este modelo permite que el

mismo usuario sea alumno, profesor, administrador, etc dependiendo del curso en el

que se encuentre.

Las capacidades o permisos son cargados en la tabla de la base de datos cuando

el módulo es instalado o actualizado. Cuando se actualizan o modifican las

capacidades o permisos, es necesario actualizar el número de versión del módulo a

través del fichero version.php. El sistema tiene cuatro posibles valores para las

capacidades o permisos: CAP_ALLOW, CAP_PREVENT, CAP_PROHIBIT, y heredado

(no está establecido). Es importante que el nombre de las capacidades o permisos sea

único.

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

74

5.3.1.2 install.xml

Este fichero XML define las tablas de la base de datos que tendrá nuestro

módulo, establece una gramática para la creación de tablas y hacer así Moodle más

portable, frente las anteriores versiones, que definían un archivo para cada tipo de base

de datos. install.xml define el tipo de datos, longitud, nombre y, en general, todos los

campos que pueden definirse con sentencias SQL. La creación de las tablas se lleva a

cabo con la instalación del módulo.

Existe un editor en Moodle llamado XMLDB, donde se puede crear el esquema

de forma más sencilla, y generar el código XML.

A continuación se adjunta y comenta un fichero de ejemplo:

<!-- Definición del tipo de documento, no se modifica -->

<?xml version="1.0" encoding="UTF-8" ?>

<XMLDBPATH="mod/nombremodulo/db" VERSION="20070401" COMMENT="Archivo XMLDB

para mod/nombremodulo"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:noNamespaceSchemaLocation="../../../lib/xmldb/xmldb.xsd"

>

<!-- Definición de las tablas -->

<TABLES>

<!-- Definición de la tabla del módulo, debe existir obligatoriamente.

En el caso de que haya más de una tabla, deben enlazarse mediante los

campos PREVIOUS y NEXT, que apuntan a la tabla anterior y siguiente,

respectivamente.

-->

<TABLE NAME="nombremodulo" COMMENT="Comentario sobre la tabla

nombremodulo ">

<!-- Campos que tendrá la tabla -->

<!--

NAME: Nombre del campo

TYPE: Tipo del dato

LENGTH: Longitud del dato

NOTNULL: El campo puede ser o no nulo

UNSIGNED: El campo tiene signo o no

SEQUENCE y ENUM: El campo es autoincremental o no

COMMENT: Comentario sobre el campo

NEXT: Siguiente campo de la tabla

PREVIOUS: Campo previo de la tabla

-->

<FIELDS>

<FIELDNAME="id" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true"

SEQUENCE="true" ENUM="false" COMMENT="id de la instancia" NEXT="course"/>

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

75

<FIELD NAME="course" TYPE="int" LENGTH="10" NOTNULL="true"

UNSIGNED="true" DEFAULT="0" SEQUENCE="false" ENUM="false" COMMENT="Curso al

que pertenece la instancia" PREVIOUS="id" NEXT="name"/>

<FIELD NAME="name" TYPE="char" LENGTH="255" NOTNULL="true"

SEQUENCE="false" ENUM="false" COMMENT="Nombre de la instancia"

PREVIOUS="course">

<!-- El resto de campos de la tabla deben ir aquí -->

</FIELDS>

<!-- Claves de la tabla

NAME: Nombre de la clave

TYPE: Primary, unique o foreign

FIELDS: Campos que componen la clave

COMMENT: Comentario sobre la clave

OPCIONALES:

NEXT y PREVIOUS: Apuntando a la clave siguiente y anterior, de

existir.

REFFIELDS Y REFTABLE: En el caso de las claves externas, campo y

tabla al que referencian

-->

<KEYS>

<KEY NAME="primary" TYPE="primary" FIELDS="id" COMMENT="Clave

primaria para nombremodulo "/>

</KEYS>

<!-- Índices de la tabla, campos análogos a los de las claves-->

<INDEXES>

<INDEX NAME="course" UNIQUE="false" FIELDS="course"/>

</INDEXES>

</TABLE>

</TABLES>

<!-- Sentencias SQL que se ejecutarán al instalar el módulo -->

<STATEMENTS>

<!-- Sentencia

Se define el nombre, el tipo de sentencia, la tabla sobre la que se

ejecuta y un comentario descriptivo -->

<STATEMENT NAME="insert log_display" TYPE="insert" TABLE="log_display"

COMMENT="Inserta registros en la tabla de log" />

<SENTENCES>

<!-- Contenido de las sentencias propiamente dicho, no usan campos

PREVIOUS ni NEXT -->

<SENTENCE TEXT="(module, action, mtable, field) VALUES (nombremodulo,

'add', 'nombremodulo', 'name')" />

<SENTENCE TEXT="(module, action, mtable, field) VALUES (nombremodulo,

'update', 'nombremodulo', 'name')" />

</SENTENCES>

</STATEMENT>

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

76

</STATEMENTS>

</XMLDB>

Código 16: Ejemplo de fichero install.xml

Analizando el fichero se puede observar que tenemos tablas y sentencias, y que

éstas están formando listas doblemente enlazadas mediante los campos NEXT y

PREVIOUS.

Es por ello, y por las restricciones en los tipos de los campos a definir y sus

valores permitidos por los que se recomienda el uso del editor de XMLDB que tiene la

plataforma.

La primera tabla tiene el mismo nombre del módulo y es obligatoria, así como

los campos id, course y name.

Al igual que las tablas y los campos, los índices y las claves, si se añaden y si

hay más de una, hay que enlazarlos.

5.3.1.3 upgrade.php

Este fichero mantiene un registro de los cambios que es necesario realizar entre

distintas versiones del módulo.

En ocasiones la actualización de una antigua versión a una nueva puede

implicar cambios mayores (como por ejemplo, en la base de datos) que pueden hacer

que el módulo deje de funcionar correctamente.

Los comandos que se usen en este fichero deben ser neutrales en cuanto a la

base de datos, usando las funciones definidas en lib/ddlib.php.

La función ‚upgrade‛ deber{ devolver verdadero si todos los cambios se han

llevado a cabo de manera satisfactoria.

A continuación se muestra un ejemplo de lo que podría ser el contenido del

archivo upgrade.php:

<?php

function xmldb_nombremodulo_upgrade($oldversion=0) {

global $CFG, $THEME, $db;

$result = true;

/// Actualización necesaria si la versión actual es

/// anterior a la del 01 de Abril de 2008

if ($result && $oldversion < 2008040100) {

///Introducir actualizaciones a realizar

}

/// Actualización necesaria si la versión actual es

/// anterior a la del 12 de Abril de 2008

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

77

if ($result && $oldversion < 2008041200) {

///Introducir actualizaciones a realizar

}

return $result;

}

?>

Código 17: Ejemplo de fichero upgrade.php

Las actualizaciones a realizar en la base de datos se pueden generar copiando el

resultado que genera en código PHP el editor XMLDB.

5.3.1.4 icon.gif

Este archivo es el icono que representa a un módulo. Debe ser un archivo GIF

de tamaño 16x16 píxeles. Por ejemplo, se ha utilizado este icono para el módulo

Gruposlab:

5.3.1.5 index.php

El fichero index.php lista todas las instancias de una actividad que están

presentes en un determinado curso. Normalmente se muestran en formato tabular con

una fila por cada instancia de la actividad y con columnas para los campos name, intro

y otros campos propios de cada módulo.

5.3.1.6 lib.php

lib.php es la biblioteca de funciones del módulo a desarrollar, en ella se

implementará toda (o casi toda) la funcionalidad del módulo. Existen un conjunto de

normas que se deben seguir a la hora de desarrollar esta biblioteca, de las que

destacamos las siguientes:

Las funciones deben nombrarse de la siguiente manera:

nombremodulo_nombrefuncion().

Las variables globales deberán nombrarse de la siguiente manera:

$NOMBREMODULO_NOMBREVARIABLE.

lib.php deberá implementar ciertas funciones preestablecidas que usará Moodle

con distintos propósitos:

nombremodulo_add_instance($nombremodulo): Esta función es ejecutada

cuando un profesor crea una instancia del módulo.

nombremodulo_update_instance($nombremodulo): Esta función es ejecutada

cuando un profesor, editando, actualiza la instancia del módulo.

nombremodulo_delete_instance($id): Esta función es ejecutada cuando un

profesor elimina una instancia del módulo.

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

78

nombremodulo_user_outline($course, $user, $mod, $nombremodulo): Devuelve

un resumen con la información de lo que ha hecho un usuario con una instancia

en particular del módulo. Es útil para los informes de actividad del usuario.

nombremodulo_user_complete($course, $user, $mod, $nombremodulo):

Imprime una representación de lo que un usuario ha hecho con una instancia

en particular del módulo. Es útil para los informes de actividad del usuario.

nombremodulo_print_recent_activity($course, $isteacher, $timestart): Dado un

curso y un tiempo, debe encontrar la actividad reciente del módulo, y la

imprime.

nombremodulo_cron(): Función que se ejecutará periódicamente según el cron

de Moodle. Hay que tener cuidado con esta función. A diferencia al resto de

funciones, a esta función no se le pasa el registro $nombremodulo. Esto significa

que esta función, llamada por el cron del núcleo de Moodle, tiene que buscar el

id de cada instancia del módulo antes de operar. Esta función se ejecutará una

única vez, incluso si existen varias instancias del módulo.

nombremodulo_get_participants($nombremoduloid): Debe devolver un vector

de los registros de usuarios (todos los datos) que son participantes de una

instancia dada del módulo. Debe incluir cada usuario involucrado en la

instancia, independientemente de su rol (estudiante, profesor, admin, ...).

nombremodulo_scale_used($nombremoduloid, $scaleid): Esta función devuelve

si una escala está siendo usada por una instancia del módulo, si tiene soporte

para escalas.

nombremodulo_scale_used_anywhere($scaleid): Comprueba si la escala está

siendo usada por cualquier instancia del módulo.

nombremodulo_install(): Ejecuta acciones personalizadas para el módulo

después de la instalación.

nombremodulo_uninstall(): Ejecuta acciones personalizadas para el módulo

después de la desinstalación.

nombremodulo_reset_course_form_definition(&$mform): Esta función es

llamada directamente por /course/reset.php. Necesita sacar algunos controles de

formulario para controlar las distintas opciones para resetear el módulo. Debe

usar el formulario de la API (Application Programming Interface) para crearlo.

La forma es consultar las configuraciones relacionando el módulo.

nombremodulo_reset_course_form_defaults($course): Usado para establecer

valores por defecto a los elementos del formulario mostrados por

nombremodulo_reset_course_form_definition.

nombremodulo_reset_userdata($data): Es llamada indirectamente por

/course/reset.php, que llama a reset_course_userdata() en /lib/moodlelib.php, que

llama a todas las funciones de cada módulo. El parámetro es lo que devolvió el

formulario impreso por forum_reset_course.

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

79

nombremodulo_get_view_actions(): Distingue entre acciones de lectura "read"

del log. Es utilizada por el núcleo de Moodle durante la organización del log.

Las acciones que se listan dentro deben coincidir las que se listaron en la tabla

"log_display" en el archivo install.xml.

nombremodulo_post_actions(): Distingue entre acciones de lectura "post" del

log. Es utilizada por el núcleo de Moodle durante la organización del log. Las acciones

que se listan dentro deben coincidir las que se listaron en la tabla "log_display" en el

archivo install.xml.

5.3.1.7 mod_form.php

Como mostraba el esquema de ficheros de un módulo, este es uno de los

ficheros obligatorios, mediante el cual se configurará cada instancia del módulo que se

añada a un curso.

Moodle proporciona un mecanismo estándar para crear este formulario, y para

ello está definida la clase moodleform_mod. Nuestra clase ha de llamarse obligatoriamente

mod_nombremódulo_mod_form.

Esta clase debe extender de moodleform_mod y crear el método definition(),

mediante el cual definiremos el formulario que presentará las distintas opciones a

configurar de la instancia.

Para añadir campos al formulario tenemos varias funciones básicas:

addElement: Añade un elemento al formulario. El primer parámetro es el tipo

de elemento y el segundo el nombre. El resto de parámetros ya dependen del

tipo de elemento.

setType: Establece el tipo de contenido del elemento.

setDefault: Establece el valor por defecto de un elemento.

addRule: Establece las restricciones de un elemento, como por ejemplo que sea

un campo obligatorio, o que sólo pueda tener números.

La estructura básica de este fichero sería la siguiente:

<?php

require_once ('moodleform_mod.php');

class mod_nombremodulo_mod_form extends moodleform_mod {

function definition() {

global $COURSE;

$mform =& $this->_form;

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

80

//----------------------------------------------------------------

/// Añadimos el conjunto de campos general, donde se muestran todas las

///opciones comunes

$mform->addElement('header', 'general', get_string('general', 'form'));

/// Añadimos el campo estándar ‘nombre’

$mform->addElement('text', 'name', get_string('nombremoduloname',

'nombremodulo'), array('size'=>'64'));

$mform->setType('name', PARAM_TEXT);

$mform->addRule('name', null, 'required', null, 'client');

/// Añadimos los campos opcionales ‘intro’ e ‘introformat’

$mform->addElement('htmleditor', 'intro',

get_string('nombremodulointro', 'nombremodulo'));

$mform->setType('intro', PARAM_RAW);

$mform->addRule('intro', get_string('required'), 'required',

null, 'client');

$mform->setHelpButton('intro', array('writing', 'richtext'), false,

'editorhelpbutton');

$mform->addElement('format', 'introformat', get_string('format'));

//----------------------------------------------------------------

/// Añadimos el resto de opciones del modulo en este conjunto de

/// campos o en otro si resultara más lógico

$mform->addElement('static', 'label1', 'nombremodulosetting1', 'Aquí

van los campos de tu módulo, Reemplazame!');

$mform->addElement('header','nombremodulofieldset',

get_string('nombremodulofieldset', 'nombremodulo'));

$mform->addElement('static', 'label2', 'nombremodulosetting2', 'Aquí

van los campos de tu módulo, Reemplazame!');

//---------------------------------------------------------------

// Añadimos elementos estándar, comunes a todos los módulos

$this->standard_coursemodule_elements();

//----------------------------------------------------------------

// Añadimos los botones estándar, comunes a todos los módulos

$this->add_action_buttons();

}

}

?>

Código 18: Ejemplo de fichero mod_form.php

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

81

Cabe destacar que los elementos declarados en mod_form.php serán

guardados en los campos de la tabla con ese nombre al procesar el formulario sin

que lo indiquemos explícitamente.

Una vez se pulsa guardar instancia, y se ha aceptado el formulario

introducido, el módulo ejecuta la función nombremodulo_add_instance o

nombremodulo_update_instance, ambas ubicadas en lib.php.

5.3.1.8 version.php

Este archivo es importante porque a la hora de modificar las tablas de la base de

datos, a través de db/upgrade.php, o añadir/eliminar/modificar el archivo db/access.php,

durante el desarrollo del módulo (que ya ha sido instalado en Moodle), fuerza a

Moodle para que edite las tablas y realice los cambios necesarios. Lo hace comparando

la versión actual con la versión anterior. Si la versión actual es posterior a la previa,

Moodle hace los cambios y actualiza a la nueva versión.

Su formato es el siguiente:

<?php

$module->version = 2007040200; // Versión actual del módulo (Formato

YYYYMMDDX)

$module->cron = 0; // Intervalo de tiempo, en segundos, en el que cron

//deberácomprobar la versión de este módulo

?>

Código 19: Ejemplo de fichero version.php

5.3.1.9 view.php

El fichero view.php es, seguramente, junto con el fichero lib.php, uno de los más

importantes a la hora de desarrollar un módulo de actividades para Moodle. En él se

define el contenido que se mostrará a cada usuario de la actividad mediante el uso de

capacidades o permisos.

A continuación se detalla el código mínimo que debe contener este fichero:

<?php

/// Remplazar ‚nombremodulo‛ por el nombre del módulo a desarrollar

///Include que todos los ficheros php deben tener

require_once("../../config.php");

require_once("lib.php");

///Estas líneas se establecen por defecto para obtener el id de la

instancia actual

$id = optional_param('id', 0, PARAM_INT);

$a = optional_param('a', 0, PARAM_INT);

///Haciendo comprobaciones sobre los parámetros pasados

if ($id) {

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

82

if (! $cm = get_record("course_modules", "id", $id)) {

error("Course Module ID was incorrect");

}

if (! $course = get_record("course", "id", $cm->course)) {

error("Course is misconfigured");

}

if (! $nombremodulo = get_record("nombremodulo", "id", $cm->instance)) {

error("Course module is incorrect");

}

} else {

if (! $nombremodulo = get_record("nombremodulo", "id", $a)) {

error("Course module is incorrect");

}

if (! $course = get_record("course", "id", $ nombremodulo ->course)) {

error("Course is misconfigured");

}

if (! $cm = get_coursemodule_from_instance("nombremodulo ", $

nombremodulo ->id, $course->id)) {

error("Course Module ID was incorrect");

}

}

///Para ver esta página, el usuario debe estar autenticado

require_login($course->id);

///Añade al log la visita de la actividad

add_to_log($course->id, " nombremodulo ", "view", "view.php?id=$cm->id",

"$nombremodulo ->id");

/// Para imprimir el encabezado de la página

if ($course->category) {

$navigation = "<a href=\"../../course/view.php?id=$course->id\">$course-

>shortname</a> ->";

} else {

$navigation = '';

}

///Ver documentación de la función get_string()

$strnombremodulos = get_string("modulenameplural", " nombremodulo ");

$strnombremodulo = get_string("modulename", " nombremodulo ");

///Impresión del encabezado propiamente dicho

print_header("$course->shortname: $ nombremodulo ->name", "$course-

>fullname", "$navigation <a href=index.php?id=$course-

>id>$strnombremodulos</a> ->$ nombremodulo ->name","", "", true,

update_module_button($cm->id, $course->id,$strnombremodulo),

navmenu($course, $cm));

/// Parte principal de la página

///Aquí debe ir el código del desarrollador

/// Imprime el pie de página

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

83

print_footer($course);

?>

Código 20: Ejemplo de fichero view.php

5.4 Librerías para el desarrollo de módulos

Moodle no solo facilita un entorno para la integración de nuevos módulos

desarrollados en PHP, sino que incorpora una serie de librerías enfocadas a facilitar la

labor de los desarrolladores. Sin embargo, resulta difícil iniciarse en ellas y conocer el

cometido de cada una, a pesar de encontrarse documentación en el propio código

fuente.

En este apartado se enumerarán algunas de las librerías más importantes, así

como las funciones básicas que todo desarrollador debería conocer antes de comenzar

a construir un módulo.

La API de Moodle es un conjunto de clases y librerías de funciones construidas

sobre funciones definidas en las librerías de PHP4, ya que originalmente Moodle

estaba basado en esta versión de PHP. Sin embargo, algunas de las nuevas

construcciones de Moodle utilizan estructuras orientadas a objetos y proporcionan

clases extensibles.

La mayoría de las principales librerías de Moodle se encuentran en el directorio

/lib/. La nomenclatura de todos estos ficheros generalmente sigue la convención

[función]lib.php. Algunos ejemplos son textlib.php y weblib.php. Estas librerías contienen

la API de Moodle.

Casi todas las librerías del núcleo se incluyen en el flujo de ejecución cuando se

carga el archivo config.php mediante la inclusión de /lib/setup.php. El fichero setup.php

realiza un include de las principales librerías de Moodle.

Esto no significa que se definan todas las funciones disponbles en Moodle. Y, de

hecho, cada una de estas librerías puede incluir otras. Sin embargo, el núcleo de las

funciones que se pueden necesitar está contenido en estas librerías. Algunas de las más

importantes se describirán en los apartados siguientes.

Algunas de estas librerías fueron desarrolladas por el propio equipo de Moodle,

otras por terceros y, hoy en día, se distribuyen con Moodle gracias a sus licencias de

código abierto.

No existe un único documento que abarque toda la API de Moodle, pero un

recurso que puede resultar de gran ayuda es la referencia del código generada a partir

de los comentarios del propio código fuente por medio de PHPXref, que se puede

encontrar en http://xref.moodle.org/nav.html?index.html.

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

84

5.4.1 accesslib.php

Esta librería describe funciones para el soporte de capacidades. Las tres

funciones que aparecen a continuación servirán para ilustrar el tipo general de las

funciones de la librería. No obstante, se recomienda consultar su extensa

documentación para obtener información sobre otras funciones que dan soporte al

sistema de capacidades.

5.4.1.1 require_capability

Esta función comprueba que el usuario tiene cierta capacidad. Si no la tiene, la

página deja de ejecutarse mostrando un mensaje de error estándar.

require_capability($capability, $context=NULL, $userid=NULL,

$doanything=true, $errormessage='nopermissions', $stringfile='')

Código 21: Función require_capability

Los parámetros que utiliza son los siguientes:

$capability: Capacidad que deseamos comprobar.

$context: Contexto en el que se debe tener esta capacidad.

$userid: ID del usuario cuya capacidad queremos comprobar.

$doanything: Establecer a false si no queremos que ocurra nada.

$errormessage: Cadena con el mensaje de error.

$stringfile: Archivo en el que buscar $errormessage.

5.4.1.2 has_capability

Esta función devolverá true si un usuario $userid, por defecto el usuario que esté

accediendo al módulo, tiene la capacidad $capability en el contexto $context.

has_capability($capability, $context=NULL, $userid=NULL, $doanything=true)

Código 22: Función has_capability

Parámetros:

$capability: Capacidad que deseamos comprobar.

$context: Contexto de la capacidad.

$userid: ID del usuario cuya capacidad deseamos comprobar.

$doanything: Si se establece a falso, la función no opera.

5.4.1.3 get_context_instance

Devuelve el contexto de una instancia como un objeto.

get_context_instance($contextlevel=NULL, $instance=SITEID)

Código 23: Función get_context_instance

Parámetros:

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

85

$contextlevel: Nivel del contexto, acepta los siguientes valores:

o CONTEXT_SYSTEM

o CONTEX_PERSONAL

o CONTEXT_USER

o CONTEXT_COURSECAT

o CONTEXT_COURSE

o CONTEXT_GROUP

o CONTEXT_MODULE

o CONTEXT_BLOCK

$instance: Identificación de la instancia del contexto.

5.4.2 datalib.php

En esta librería se encuentran las funciones para el manejo de la información de

la base de datos. Con un funcionamiento similar a la función get_users(), que se detalla

a continuación, datalib.php implementa funciones para obtener los cursos del sitio o de

un determinado usuario, los módulos de un determinado curso, los usuarios que han

sido confirmados en el sistema, los distintos grupos establecidos, los usuarios que

conforman cada grupo y más información similar, todas ellas documentadas en el

archivo datalib.php.

5.4.2.1 get_users

Esta función obtiene un subconjunto de los usuarios del sitio.

get_users($get=true, $search='', $confirmed=false, $exceptions='',

$sort='firstname ASC', $firstinitial='', $lastinitial='', $page='',

$recordsperpage='', $fields='*')

Código 24: Función get_users

Parámetros:

$get: Si se establece a false, solo retornará una cuenta del número de registros

coincidentes.

$search: Una determinada cadena a buscar.

$confirmed: Si se establece a true, solo devolverá los usuarios que hayan sido

confirmados en el curso.

$exceptions: Una lista en forma de array conteniendo ciertos identificadores de

usuario a ignorar.

$sort: Fragmento SQL para la ordenación de los registros a devolver.

$firstinitial: Inicial del primer nombre de los usuarios a buscar.

$lastinicial: Inicial del apellido de los usuarios a buscar.

$recordsperpage: Número de registros a obtener en cada llamada, para evitar

saturación.

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

86

$fields: Campos de los registros a obtener (igual que el contenido de una

sentencia SELECT).

5.4.3 ddllib.php

En esta librería se pueden encontrar las funciones para el manejo de la

estructura de la base de datos. Proporciona funcionalidades avanzadas para hacer la

manipulación de la estructura de la base de datos lo más portable posible. Dichas

estructuras deben modificarse usando funciones de esta biblioteca y nunca con

sentencias propias de determinada base de datos.

Se proporcionan funciones como las siguientes, cuyo nombre, en ocasiones,

recuerda a las sentencias SQL habituales:

create_table() para crear una tabla.

drop_table() para borrar el contenido de una tabla.

rename_table() para cambiar el nombre a una tabla.

add_field() para añadir un campo a una tabla.

change_field_tipe() para cambiar el tipo de un campo.

add_key() para añadir una clave.

add_index() para añadir un índice.

5.4.4 dmllib.php

En esta librería se encuentran las funciones necesarias para obtener, borrar,

actualizar, contar e insertar registros en la base de datos. Las funciones que se

describirán a continuación serán las que el desarrollador use en un 99% de los casos.

Para obtener documentación de funciones menos usuales, como de costumbre, se debe

consutlar la documentación del archivo.

5.4.4.1 Funciones generales

5.4.4.1.1 execute_sql

Ejecuta una sentencia SQL e imprime el resultado si se especifica.

execute_sql($command, $feedback=true)

Código 25: Función execute_sql

Parámetros:

$command: Sentencia SQL completa a ejecutar.

$feedback: Si se establece a true, el sistema imprimirá el resultado de la

ejecución.

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

87

Para acceder a las tablas de la base de datos debemos precederlas del prefijo de

todas las tablas de Moodle, esto se consigue introduciendo el texto ‚{$CFG-

>prefix}nombre_tabla‛ (sin comillas).

5.4.4.2 Funciones para comprobar la existencia de registros

5.4.4.2.1 record_exists

Devolverá true si existe en la tabla $table al menos un registro cuyos valores en

los campos $fieldx se correspondan con $valuex.

record_exists($table, $field1='', $value1='', $field2='', $value2='',

$field3='', $value3='')

Código 26: Función record_exists

Parámetros:

$table: Tabla en la que buscar los registros.

$field1: Primer campo sobre el que comparar.

$value1: Primer valor que comparar.

$field2: Segundo campo sobre el que comparar.

$value2: Segundo valor que comparar.

$field3: Tercer campo sobre el que comparar.

$value3: Tercer valor que comparar.

5.4.4.2.2 record_exists_select

Devolverá true si existen registros en la tabla $table cuyos valores se

correspondan con el fragmento WHERE pasado como parámetro.

record_exists_select($table, $select='')

Código 27: Función record_exists_select

Parámetros:

$table: Tabla en la que buscar los registros.

$select: Fragmento completo WHERE.

5.4.4.2.3 record_exists_sql

Devolverá true si la sentencia SQL pasada como parámetro retorna algún

resultado.

record_exists_sql($sql)

Código 28: función record_exists_sql

Parámetros:

$SQL: Sentencia SQL a ejecutar.

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

88

5.4.4.3 Funciones para el conteo de registros

5.4.4.3.1 count_records

Devolverá el número de registros que haya en la tabla $table cuyos valores en

los campos $fieldx se correspondan con $valuex.

count_records($table, $field1='', $value1='', $field2='', $value2='',

$field3='', $value3='')

Código 29: Función count_records

Parámetros:

Análogos a los parámetros de la función record_exists().

5.4.4.3.2 count_records_select

Devolverá el número de registros que existen en la tabla $table cuyos valores se

correspondan con el fragmento WHERE pasado como parámetro.

count_records_select($table, $select='', $countitem='COUNT(*)')

Código 30: Función count_records_select

Parámetros:

$table: Tabla en la que buscar los registros.

$select: Fragmento completo WHERE.

$countitem: Elemento sobre el que realizar la cuenta.

5.4.4.3.3 count_records_sql

Devolverá el resultado de la ejecución de la sentencia SQL.

count_records_sql($sql)

Código 31: Función count_records_sql

Parámetros:

$SQL: Sentencia SQL a ejecutar, del tipo ‘SELECT COUNT(…) …‛.

5.4.4.4 Funciones para la obtención de registros

Con un comportamiento similar a las funciones anteriores, en dmllib.php

podemos encontrar, entre otras y junto con su documentación, las siguientes funciones

para la obtención de registros:

get_record() para obtener un único registro en forma de objeto.

get_record_select() idem, pero introduciendo una cláusula where.

get_record_sql() idem, pero introduciendo una sentencia SQL completa.

get_records() para obtener un array de registros en forma de objetos.

get_records_select() idem, pero introduciendo una cláusula where.

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

89

get_records_sql() idem, pero introduciendo una sentencia SQL completa.

5.4.4.5 Funciones para el borrado de registros

Para el borrado de registros de la base de datos, únicamente se implementan

dos funciones importantes:

delete_records(), con parámetros análogos a record_exists(), borra todos los

registros que tengan valores coincidentes en los campos pasados como

parámetros.

delete_records_sql() borra todos los registros de la tabla $table pasada como

parámetro que coinciden con la cláusula WHERE también pasada como

parámetro.

5.4.4.6 Funciones para la inserción y actualización de registros

5.4.4.6.1 insert_record

Inserta un registro pasado como objeto, cuyos nombres de atributos se

corresponderán con los campos del registro, en la tabla pasada como parámetro.

insert_record($table, $dataobject, $returnid=true, $primarykey='id')

Código 32: Función insert_record

Parámetros:

$table: Tabla en la que insertar el registro.

$dataobject: Objeto conteniendo el registro a insertar.

$returnid: Si es true, la función devolverá el identificador del nuevo registro

insertado.

$primarykey: La clave primaria del registro a insertar, en la mayoría de los

casos es ‘id’.

5.4.4.6.2 update_record

Actualiza un registro en la tabla cuyo nombre es pasado como parámetro.

update_record($table, $dataobject)

Código 33: Función update_record

Parámetros:

$table: Tabla en la que actualizar el registro.

$dataobject: Objeto conteniendo el registro a insertar, cada nombre de atributo

debe corresponderse con un campo de la tabla, y debe tener un campo ‘id’ que

sirva para identificarlo en la tabla especificada.

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

90

5.4.5 weblib.php

En esta librería se encuentran las funciones para la creación de elementos

HTML y salida web en general.

A continuación se referencian algunas de las funciones que el desarrollador

debería conocer antes de comenzar su trabajo y que, como siempre, se encuentran

documentadas en el propio código fuente:

print_heading(), como sustituto del conocido <h1>.

print_heading_with_help(), idem, pero proporcionando un botón de ayuda.

helpbutton() imprime un botón de ayuda.

print_simple_box() imprime una caja en la que se puede colocar cualquier tipo

de contenido.

choose_from_menu() imprime un menú de selección.

choose_from_radio() imprime botones de radio.

print_textbox() imprime una caja de texto.

print_textfield() imprime un campo de texto.

El contenido de esta librería es muy extenso y resultará de gran ayuda al nuevo

desarrollador. Se aconseja leerla detenidamente, prestando especial atención a la forma

en la que Moodle facilita la creación de controles de formularios así como a las

funciones que se encargan de recoger las variables de los mismos (required_param() y

data_submitted() especialmente).

Así como se especifica el uso obligatorio de la función required_param() (aunque

el acceso a las variables $_GET y $_POST funciona perfectamente), en ningún

documento de Moodle se obliga al uso de funciones para crear elementos del

formulario, aunque facilita mucho la tarea al programador.

5.4.6 moodlelib.php

En este fichero pueden encontrarse todo tipo de funciones de propósito general

para Moodle. Cconviene que el desarrollador novel las ojee antes de comenzar su

trabajo sin llegar a prestarles una atención mayor de lo conveniente para no

complicarse demasiado.

Según vaya avanzando en el desarrollo, es posible que le surja la duda de si

cierta funcionalidad, ligada fuertemente con el núcleo de Moodle, estará desarrollada.

Seguramente lo esté aquí.

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

91

5.4.7 Otras librerías importantes

Moodle se basa en numerosas librerías, tanto internas como externas. Hasta

ahora, hemos comentado las librerías internas. Algunas de las librerías externas que

podemos utilizar se enumeran a continuación:

PEAR: Las siglas PEAR provienen de PHP Extension and Application Repository

(Repositorio de aplicaciones y extensiones PHP). Por tanto, no es una única librería,

sino un conjunto de herramientas para generar y actualizar librerías PHP y

módulos.

ADOdb: ADOdb es una librería de bases de datos que proporciona una interfaz

unificada de programación para una gran variedad de bases de datos. A pesar

de que Moodle soporta un conjunto básico de bases de datos para su respaldo

directo, ADOdb realmente resulta muy útil en las bases de datos soportadas

para la autenticación externa contra una base de datos y los plugins de

matriculación.

YUI: La librería de la interfaz de usuario de Yahoo! (Yahoo! user interface) está

escrita en JavaScript y se usa para crear ricas interfaces web de usuario

utilizando AJAX, DOM y DHTML. La interfaz de edición de cursos de Moodle

utiliza esta librería para poder colocar elementos en el curso simplemente

arrastrándolos y soltándolos.

XMLDB: XMLDB se añadió a Moodle como parte de la iniciativa para agregar

soporte para Microsoft SQL y Oracle. XMLDB convirtió todos los ficheros de

configuración de la base de datos en esquemas XML, de manera que los mismos

ficheros pudieran ser usados por los cuatro tipos de bases de datos soportadas

hasta el momento. De esta manera se extendieron las capacidades ofrecidas por

ADOdb, proporcionando un único código base para acceder a todas las bases

de datos soportadas, mientras se seguía manteniendo el rendimiento.

5.5 Creación de un módulo sencillo

La mayoría de nuevos módulos se crean utilizando la plantilla NEWMODULE,

que es un módulo que no forma parte del núcleo de la distribución de Moodle, pero ha

sido donado bajo las mismas condiciones de licencia GPL. Este módulo puede ser

descargado desde http://moodle.org/mod/data/view.php?d=13&rid=715&filter=1.

NEWMODULE es un buen punto de inicio para comenzar a crear nuestra actividad,

aunque le faltan varios requisitos funcionales importantes. El más notable de ellos es la

falta de funcionalidad para realizar copias de seguridad y restauración.

Los pasos básicos para realizar un módulo son:

Desarrollo del formulario para configurar cada nueva instancia del módulo

(fichero mod_form.php).

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

92

Creación de las tablas del módulo (fichero install.xml).

Edición de la librería de funciones del módulo (fichero lib.php).

Edición del resto de archivos obligatorios para adecuarlos al nuevo módulo:

index.php, version.php y ficheros de idiomas.

Edición del fichero view.php que muestra cada instancia.

En primer lugar, tendremos que descargar la última versión de NEWMODULE

y renombrar la carpeta con el nombre de nuestro nuevo módulo, por ejemplo prueba.

Después, en nuestro editor de textos realizaremos una búsqueda global en todos los

archivos, reemplazando la palabra newmodule por la palabra prueba. A continuación,

renombraremos también el fichero de idioma. Para ello buscaremos en la carpeta

lang/es_utf8 un fichero llamado newmodule.php y lo renombraremos como prueba.php.

Ahora ya podemos mover la carpeta entera al directorio /mod de nuestro servidor de

desarrollo y comenzar a trabajar.

5.5.1 Formulario de configuración de la instancia

El fichero mod_form.php es llamado cada vez que se añade una instancia de una

actividad y con él la configuraremos. En la plantilla ya tenemos los campos

obligatorios como name y otros típicos como intro.

Aquí nos serviremos de la modularidad que nos ofrece la plataforma para no

preocuparnos de cómo guardar los datos en la base de datos ni de cómo se define un

formulario en HTML, simplemente con extender la clase moodlemod_form como en la

plantilla y añadir los campos de configuración de la instancia que definamos en la base

de datos es suficiente.

A continuación se muestra un ejemplo de un formulario generado con la clase

moodleform_mod. Pertenece al módulo Newmodule, al que nosotros hemos renombrado

como prueba.

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

93

Ilustración 24: Formulario generado con la clase moodleform_mod

Ahora podremos añadir más elementos al formulario si lo deseamos. Por

ejemplo, si queremos añadir un control selector de fecha llamado start_date, tendremos

que escribir el siguiente código:

$options=array('startyear'=>date('Y'),'optional'=>false);

$mform->addElement('date_time_selector', 'start_date',

get_string('startdate', 'prueba'), $options);

Código 34: Ejemplo añadir lista desplegable

Donde $options será un array en el que le indicaremos al control que debe

comenzar a mostrar fechas a partir del año actual, y que además el control no se puede

deshabilitar mediante un checkbox.

Ese código es todo lo que necesitamos para añadir el campo start_date (el

control de selección de fecha) en la configuración de la instancia. En caso de que no

existan, habría que crear el campo start_date en la tabla prueba de la base de datos y la

cadena startdate en el fichero de idioma del módulo

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

94

Ilustración 25: Añadir un campo selector de fecha a un formulario

5.5.2 Tablas del módulo en la base de datos

Todo módulo necesita al menos una tabla, que debe tener el mismo nombre que

el módulo, para guardar las propiedades de cada instancia, aunque se pueden declarar

más.

La plantilla NEWMODULE ya proporciona un fichero válido (install.xml) en el

que sólo hay que modificar el nombre de la tabla y algunos comentarios. Una vez

instalado el módulo ya podremos editar las tablas desde Moodle. Para ello es

recomendable utilizar el editor XMLDB, que podemos encontrar en la sección de

administración del sitio, en el submenú Miscelánea. Usando este editor se evitarán

errores ya que no permite guardar la tabla con errores y solamente nos permite dar

valores válidos a las propiedades. Hay que tener en cuenta que al usar el editor se

modifica el fichero install.xml de la instalación, y es importante tenerlo en cuenta si se

desarrolla el módulo desde otra carpeta distinta a la de instalación.

En la siguiente imagen, el editor XMLDB nos muestra los campos de la tabla

prueba de nuestro módulo prueba, donde hemos añadido el campo start_date, necesario

para guardar el valor del selector de fecha que hemos añadido en el apartado anterior.

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

95

Ilustración 26: Editor XMLDB

5.5.3 Edición de la librería de funciones del módulo

Como se comentó en capítulos anteriores, el fichero lib.php almacena todas las

funciones básicas utilizadas por otros archivos del módulo. Todas las funciones

obligatorias están incluidas en la plantilla NEWMODULE y funcionarán perfectamente

en nuestra actividad de ejemplo sin realizar ningún cambio. Pero este es también el

lugar indicado para colocar nuestras propias funciones adicionales, que servirán para

reutilizar y para añadir claridad al código. Con respecto a esto, debemos tener en

cuenta que podemos optimizar el rendimiento de nuestro código si colocamos estas

funciones adicionales en locallib.php en lugar de situarlas en lib.php. Esto mejora el

rendimiento porque las funciones del núcleo de Moodle necesitarán incluir el archivo

lib.php del módulo, pero no necesitan las funciones locales, por lo que si las situamos en

otro archivo aparte, reduciremos el tamaño de lib.php. Las guías de programación de

Moodle señalan que solo es necesario crear un fichero separado si se añaden gandes

cantidades de código.

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

96

5.5.4 El paquete de idioma

Moodle es una plataforma internacional. Cada paquete de idioma que se quiera

definir ha de crearse como un fichero de idioma, de manera que cada cadena de texto

que se muestre por pantalla se extraiga de un conjunto de archivos de idioma.

Los paquetes de idioma se encuentran en la carpeta moodledata/lang con

nombres que indican que son paquetes de idioma utf-8. El idioma por defecto es el

inglés en_utf8, que se encuentra en una carpeta diferente (moodle/lang).

Para desarrollar un fichero de idioma para nuestro módulo que sea español

internacional (es_utf8), tendremos que crear un fichero con el mismo nombre que el

módulo y extensión .php en la carpeta lang/es_es_utf8. Por ejemplo, si el módulo se

denomina prueba, el fichero se llamará prueba.php y estará en la carpeta

moodle/mod/prueba/lang/es_es_utf8, compuesto de líneas de texto cortas denominadas

cadenas (string), como se muestra a continuación:

//moodle

$string[‘modulename’] = ‘Prueba’;

$string[‘modulenameplural’] = ‘Pruebas’;

//Del propio módulo

$string[‘name’] = ‘Nombre para la actividad prueba’;

$string[‘description’] = ‘Descripción de la actividad’;

$string[‘grade’] = ‘Calificación de la actividad prueba’;

$string[‘startdate’] = ‘Seleccione la fecha de inicio’;

Código 35: Ejemplo de cadenas en el fichero de idioma

Las primeras entradas hacen referencia a variables que utiliza Moodle

(modulename, modulenameplural). Las variables name, description y grade son propias del

módulo prueba y podrían utilizar en el formulario de configuración del módulo. Por

último, la cadena startdate irá asociada al selector de fecha que hemos diseñado en

apartados anteriores. Estas cadenas se utilizan de la siguiente manera:

print_string(‘startdate’, ‘prueba’);

get_string(‘startdate’, ’prueba’);

Código 36: Recuperación de cadenas del fichero de idioma

Si una cadena no existe en un idioma en particular, se mostrará por defecto su

equivalente en inglés. Esto puede producir en determinadas ocasiones la mezcla de

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

97

diferentes lenguajes (normalmente el inglés más el lenguaje definido por el usuario).

Este problema se corrige con la inserción de la cadena que produce el fallo en el fichero

de idioma correspondiente.

5.5.5 Permisos del módulo

Como ya se comentó en el apartado anterior, los permisos sirven para establecer

el nivel de acceso a determinadas funcionalidades que tendrán los distintos tipos de

usuario (o roles) para un módulo.

Asignando permisos a la actividad se puede restringir el acceso a cierta

información, configurar distintos tipos de vistas para los diferentes roles, establecer

capacidades para los administradores, etc.

Para establecer permisos en nuestra actividad, editaremos el fichero access.php

que encontramos en la carpeta db de nuestro módulo. Si el módulo se denomina prueba

y queremos establecer qué usuario tendrá acceso a la vista del mismo y qué usuario

puede calificar el módulo, el fichero quedaría de la siguiente manera:

<?php

$mod_inicio_capabilities = array(

'mod/prueba:view' => array(

'captype' => 'read',

'contextlevel' => CONTEXT_MODULE,

'legacy' => array(

'guest' => CAP_ALLOW,

'student' => CAP_ALLOW,

'teacher' => CAP_ALLOW,

'editingteacher' => CAP_ALLOW,

'admin' => CAP_ALLOW

)

),

'mod/prueba:grade' => array(

'captype' => 'write',

'contextlevel' => CONTEXT_MODULE,

'legacy' => array(

'teacher' => CAP_ALLOW,

'editingteacher' => CAP_ALLOW,

'admin' => CAP_ALLOW

)

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

98

)

);

?>

Código 37: Ejemplo de definición de capacidades

5.5.6 Otros ficheros importantes

index.php: Solamente con cambiar newmodule por el nombre de nuestro módulo

ya listará todas las instancias del mismo.

version.php: Tendremos que modificar este fichero con la fecha que identifica a

la versión. El valor que utilicemos lo tendremos en cuenta en el fichero

db/update.php.

view.php: Este fichero es quizás el más importante de un módulo ya que

muestra la instancia, es decir, muestra la nueva actividad. En la plantilla, como

en los anteriores, sustituyendo newmodule por el nombre de nuestro módulo

tendremos la base para crear nuestra actividad, ya que en una variable

tendremos todos los valores de la instancia. A partir de ahí ya es cosa del

desarrollador darle la funcionalidad deseada a la actividad.

5.5.7 Actualización del módulo

Ya sabemos crear nuestras propias tablas con el editor XMLDB, pero puede que

en algún momento tengamos que actualizar esas tablas y no podemos desinstalar el

módulo porque se perdería la información de las tablas que ya tenemos creadas. La

solución es crear un script que nos actualice las tablas necesarias cuando nuestra

versión del módulo sea mayor. Este fichero se llama upgrade.php, y como todos los

demás archivos, ya se encuentra creado en la plantilla NEWMODULE. Tan solo

tendremos que modificarlo añadiendo al código las modificaciones que deseamos

hacer a en la base de datos. Estos cambios se pueden implementar con el editor

XMLDB, y después añadir al archivo upgrade.php el código PHP que se genera.

La versión del módulo que se encuentra en la base de datos de configuración de

Moodle se compara con el valor que se encuentra en el archivo version.php del módulo,

y cuando Moodle detecte una nueva versión del módulo, llamará al archivo

upgrade.php. A continuación se muestra una sección de código de ejemplo generado por

el edito XMLDB, que representa las líneas necesarias para añadir un nuevo campo a la

tabla prueba llamado scale.

if ($result && $oldversion < 2009060103) {

/// Definimos el campo scale que se añadirá a la tabla prueba

$table = new XMLDBTable('prueba');

$field = new XMLDBField('scale');

$field->setAttributes(XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED,

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

99

XMLDB_NOTNULL, null, null, null, '0',

'timemodified');

/// Añadimos el campo

$result = $result && add_field($table, $field);

Código 38: Ejemplo de cambios en la base de datos

5.5.8 Crear soporte para copias de seguridad y restauración

El sistema de copias de seguridad de cursos de Moodle utiliza un formato

simple de fichero XML para almacenar datos de las actividades. El núcleo de Moodle

llama a las funciones que se encuentran en el fichero backuplib.php de todos los

módulos de un curso. Si no se encuentra el fichero backuplib.php, la copia de seguridad

se ejecutará sin errores. Sin embargo, ninguno de los datos referentes a nuestro módulo

se habrá guardado, lo que nos podría hacer perder información de los usuarios. El

usuario no se dará cuenta de que la información se ha perdido hasta que se haga una

restauración del curso. Las funciones de restauración de una actividad se almacenan en

restorelib.php. Tenemos que tener en cuenta que el sistema de copias de seguridad y

restauración está siendo completamente reescrito en Moodle 2.0, aunque la intención es

que siga siendo compatible con versiones anteriores. Aunque la plantilla

NEWMODULE carece de soporte para copias de seguridad y restauración, podemos

utilizar una copia de algún módulo que sí lo utilice, como por ejemplo el módulo

Choice, y modificarlo para que se adapte a las necesidades de nuestro módulo.

A continuación se muestra un ejemplo e código XML para una instancia de una

actividad:

<MOD>

<ID>80</ID>

<TYPE>prueba</TYPE>

<INSTANCE>1</INSTANCE>

<ADDED>1250743636</ADDED>

<SCORE>0</SCORE>

<INDENT>0</INDENT>

<VISIBLE>1</VISIBLE>

<GROUPMODE>1</GROUPMODE>

<GROUPINGID>0</GROUPINGID>

<GROUPMEMBERSONLY>0</GROUPMEMBERSONLY>

<IDNUMBER>$@NULL@$</IDNUMBER>

<ROLES_OVERRIDES>

</ROLES_OVERRIDES>

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

100

<ROLES_ASSIGNMENTS>

</ROLES_ASSIGNMENTS>

</MOD>

Código 39: Ejemplo de código XML de backup

5.5.8.1 Funciones en backuplib.php

En esta sección encontraremos un listado de las funciones que deben crearse en

el fichero backuplib.php de nuestro módulo. Podemos organizar dichas funciones en dos

categorías: las comunes a todos los módulos de actividad y las que son internas de un

módulo en particular.

5.5.8.1.1 Funciones comunes de copia de seguridad

Las funciones comunes de copia de seguridad se deben implementar para cada

módulo de actividad, con el objetivo de soportar correctamente la función de copia de

seguridad. Estas funciones son las siguientes:

nombremodulo_backup_mods(): Es el punto de entrada principal para el

proceso de backup. Hace copia de seguridad de una o más actividades. Llama a

la función nombremodulo_backup_one_mod() para cada instancia de la actividad

en el curso.

nombremodulo_backup_one_mod(): Crea la copia de seguridad de una única

instancia de la actividad. Es responsable de llamar a las funciones de copia de

seguridad internas específicas del módulo. Por ejemplo, si nuestro módulo

tiene una tabla llamada nombremodulo_respuesta, esta función llamará a

backup_nombremodulo_respuesta().

nombremodulo_check_backup_mods(): Esta función es llamada desde las

librerías de copia de seguridad del núcleo que se encuentran en /backup. Se

utiliza para generar información para las pantallas de opciones de copia de

seguridad.

nombremodulo_check_backup_mods_instances(): Llamada por

nombremodulo_check_backup_mods() para generar información de cada instancia

de la actividad en un curso. Llama a la función interna

nombremodulo_respuesta_ids_by_instance().

nombremodulo_encode_content_links(): Necesaria para soportar enlaces

interactivos. Asegura que la interactividad de los enlaces permanece intacta

entre los procesos de copia de seguridad y restauración.

nombremodulo_ids(): Devuelve un array de todos los identificadores de nuestro

módulo en un curso y es usada por nombremodulo_check_backup_mods().

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

101

5.5.8.1.2 Funciones internas de copia de seguridad

Las funciones internas de copia de seguridad también deben ser implementadas

para cada módulo de actividad. Sin embargo, estas pueden variar dependiendo de la

estructura interna de nuestro módulo. Generalmente, necesitaremos las siguientes tres

funciones para cada tabla extra que implemente nuestra actividad. Por ejemplo, si

nuestro módulo, aparte de la tabla principal, tiene una tabla llamada

nombremodulo_respuesta, implementaría las siguientes tres funciones.

backup_nombremodulo_respuesta(): Crea la salida XML para hacer la copia de

seguridad de la tabla nombremodulo_respuesta. Se ejecuta desde

nombremodulo_backup_mods().

nombremodulo_respuesta_ids_by_course(): Utiliza una sentencia SQL para

devolver un array de identificadores de la tabla nombremodulo_respuesta. Es

llamada por nombremodulo_check_backup_mods().

nombremodulo_respuesta_ids_by_instance(): Devuelve un array de

identificadores de la tabla nombremodulo_respuestas para una instancia particular

del módulo. Es llamada por la función

nombremodulo_check_backup_mods_instances().

5.5.8.2 Funciones en restorelib.php

En esta sección encontraremos un listado de las funciones que deben crearse en

el fichero restorelib.php de nuestro módulo. Al igual que en el caso de las funciones de

backuplib.php, podemos organizar dichas funciones en dos categorías: las comunes a

todos los módulos de actividad y las que son internas de un módulo en particular.

5.5.8.2.1 Funciones comunes de restauración

Las funciones comunes deben ser implementadas para cada módulo de

actividad para que se pueda soportar la función de restauración. Estas funciones son

las siguientes:

nombremodulo_restore_mods(): Este es el punto de entrada principal al código

de restauración del módulo, y es llamado desde el núcleo de Moodle para

realizar las restauraciones. A su vez, llama a la función

nombremodulo_respuestas_restore_mods() para realizar funciones de restauración

interna.

nombremodulo_decode_content_links_caller(): Invierte la codificación de

enlaces del proceso de copia de seguridad para restaurar la interactividad de

los enlaces. Itera a través de todo el contenido del módulo y llama a la función

nombre_modulo_decode_content_links() donde es necesario realizar la

decodificación. Se la llama desde la función restore_decode_content_links().

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

102

Nombremodulo_decode_content_links(): Realiza la decodificación actual de

contenido en el archivo de restauración. Esta función se requiere para soportar

el enlazado interactivo.

nombremodulo_restore_logs(): Devuelve un registro de log. Llamada por la

función restore_log_module().

nombremodulo_restore_wiki2markdown(): Convierte instrucciones del formato

FORMAT_WIKI al formato FORMAT_MARKDOWN.

5.5.8.2.2 Funciones internas de restauración

Las funciones internas de restauración también deben ser implementadas para

cada módulo de actividad. Sin embargo, pueden variar dependiendo de la estructura

interna del módulo. Generalmente, necesitaremos una función para cada tabla

adicional que hayamos implementado en nuestra actividad, como se muestra a

continuación:

nombremodulo_respuesta_restore_mods(): Esta función restaura las entradas de

la tabla nombremodulo_respuesta y es llamada por la función

nombremodulo_restore_mods().

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

103

6 Módulo de gestión de grupos de laboratorio: Gruposlab

6.1 Definición del sistema

En este capítulo se reúne toda la documentación técnica generada a lo largo del

proceso de desarrollo del módulo. Se parte desde la definición del sistema y el catálogo

inicial de requisitos, hasta los manuales de usuario, pasando por un análisis detallado

de la aplicación, que cuenta con todos los diagramas y las explicaciones necesarias para

entender su funcionamiento.

6.1.1 Descripción y planteamiento del problema

Como ya se ha comentado en apartados anteriores, el Departamento de

Matemáticas de la Universidad de Alcalá utiliza activamente la plataforma de

enseñanza virtual Moodle como complemento on-line a su actividad docente

presencial, dentro de lo que se ha definido como modalidad de enseñanza b-learning.

Dentro de esta plataforma se hace un uso intensivo de los recursos estándar de

Moodle, así como de otros módulos no estándar, descargados desde la página oficial

de Moodle para su posterior instalación en el sistema. Pero se ha observado una

carencia en relación al sistema de reparto de grupos de laboratorio, que a día de hoy no

está cubierta por ningún módulo existente.

El problema del reparto de los grupos de laboratorio viene existiendo desde

hace muchos años. Normalmente las asignaturas teóricas disponen también de una o

varias sesiones prácticas, impartidas generalmente en laboratorios con un número

limitado de equipos informáticos. Por este motivo, los alumnos de la asignatura se

deben dividir en grupos más pequeños que se adecuen a las plazas disponibles en cada

laboratorio. Este reparto no es fácil de hacer, puesto que cada alumno tiene sus propias

preferencias, basadas en las circunstancias personales de cada uno (horarios de trabajo,

horario de asignaturas de otros cursos, etc). Estas circunstancias personales deben

adaptarse a los horarios establecidos por los profesores, y por ello se les debe dar a los

alumnos la posibilidad de elegir.

En cursos anteriores se resolvía el problema poniendo una lista en la puerta del

laboratorio, por ejemplo, a la que los alumnos debían ir corriendo a apuntarse para

asegurarse un sitio en su grupo preferido, o posteriormente mediante la utilización de

una aplicación web específica que seguía contando con el mismo problema, ya que

tenía en cuenta el orden de inscripción de los alumnos a la hora de repartir los grupos.

Para resolver este problema, se pretende desarrollar un módulo para Moodle que se

encargue de gestionar este reparto de grupos de laboratorio sin tener en cuenta el

orden de inscripción de los alumnos, siempre que se apunten dentro del periodo

establecido por el profesor. El módulo, al que llamaremos Gruposlab, permitirá que

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

104

tanto los profesores como los estudiantes interactúen con él para lograr el propósito de

repartir los grupos, teniendo en cuenta tanto las preferencias de los profesores como de

cada uno de los alumnos.

El profesor de una asignatura podrá agregar el módulo Gruposlab a su curso de

Moodle y después configurarlo añadiendo la información relativa a todos los grupos

de prácticas que se abrirán de dicha asignatura, entre la que se incluye el lugar donde

se impartirá, el nombre del profesor responsable y el número máximo de alumnos

permitido en cada grupo. El profesor también establecerá un periodo de matriculación

durante el cual los alumnos podrán acceder a la plataforma y seleccionar sus opciones

en orden de preferencia. Una vez que se ha cerrado el periodo de matriculación, se

realizará automáticamente el reparto de alumnos en los grupos, utilizando un

algoritmo que se basa principalmente en ir eligiendo aleatoriamente a todos los

alumnos uno por uno, para intentar colocarlos en su opción preferida. Cuando el

proceso de reparto haya finalizado, el profesor podrá comprobar los resultados y

descargar las listas de alumnos de todos sus grupos de laboratorio. Además podrá

realizar manualmente los cambios de alumnos que considere necesarios entre los

distintos grupos.

El alumno, a su vez, podrá acceder a la plataforma y visualizar la información

disponible de todos los grupos de laboratorio, para después seleccionar varias

opciones en orden de preferencia. El algoritmo de reparto tendrá en cuenta todas las

opciones si no fuera posible situar a un alumno en su primera opción. Una vez que

haya terminado el periodo de matriculación y se haya llevado a cabo el reparto de

grupos, cuando acceda al módulo Gruposlab, el alumno podrá consultar el grupo al que

ha sido finalmente asignado.

Adicionalmente, cuando se lleve a cabo el reparto de grupos de laboratorio, el

sistema avisará a todos los profesores de la asignatura enviándoles un correo

electrónico. También enviará un mensaje de correo a todos los alumnos que se hayan

matriculado, indicándoles el grupo al que han sido asignados.

Además, el módulo Gruposlab deberá cumplir con todos los requisitos de

programación que el proyecto Moodle requiere para todas las extensiones de la

plataforma programadas por terceros, de manera que pueda ser aceptado e incluido en

sus repositorios para que otras personas e instituciones que lo consideren de interés

puedan hacer uso libre de él.

6.1.2 Descripción general del entorno tecnológico

El módulo Gruposlab se integrará en la plataforma virtual Moodle. Por lo tanto

será la propia plataforma la que marque el entorno tecnológico del sistema. Podemos

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

105

considerar a Moodle como una arquitectura de tres capas, según se muestra en el

esquema siguiente:

Ilustración 27: Entorno tecnológico

La ventaja principal de esta implementación física es que el desarrollo se puede

llevar a cabo en varios niveles y, en caso de que sobrevenga algún cambio, sólo se ataca

al nivel requerido sin tener que revisar entre código mezclado.

Además, permite distribuir el trabajo de creación de una aplicación por niveles;

de este modo, cada grupo de trabajo está totalmente abstraído del resto de niveles, de

forma que basta con conocer la API que existe entre niveles.

En el diseño de sistemas informáticos actual se suele usar las arquitecturas

multinivel o programación por capas. En dichas arquitecturas, a cada nivel se le confía

una misión simple, lo que permite el diseño de arquitecturas escalables (que pueden

ampliarse con facilidad en caso de que las necesidades aumenten).

En nuestro caso, la primera capa serán los ordenadores de los usuarios, donde

estos podrán interactuar con la interfaz Web de Moodle.

La segunda capa será el nivel de aplicaciones, que envuelve el software de

aplicación usado en la programación de la plataforma y todos sus módulos.

La tercera capa será el servidor de ficheros y bases de datos donde se

almacenará la información relativa a los cursos y usuarios de Moodle.

Todas estas capas podrán residir en diferentes equipos, existiendo multitud de

ordenadores donde resida la capa de presentación (son los clientes de la arquitectura

cliente/servidor); un servidor para la capa de negocio y otro para la capa de datos.

También es posible, como es nuestro caso, que la capa de negocio y la capa de datos se

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

106

encuentren alojadas en el mismo servidor, o incluso que las tres capas se encuentren en

el mismo equipo si se trata de un entorno de desarrollo.

6.1.3 Identificación de usuarios

Podemos distinguir tres tipos de usuarios que interactuarán con el Módulo

Gruposlab: administradores, profesores y estudiantes.

Estudiante: el estudiante podrá ver la descripción de cada grupo de laboratorio,

y tendrá la opción de seleccionar sus grupos preferidos para inscribirse.

Además, una vez que se han repartido los grupos, podrá entrar al sistema para

comprobar en qué grupo ha sido finalmente matriculado.

Profesor: el profesor de un curso podrá añadir el módulo Gruposlab a dicho

curso y configurarlo a su medida añadiendo el número deseado de grupos de

laboratorio. Una vez que se ha haya cerrado el periodo de matriculación, el

profesor podrá ver la lista de alumnos matriculados en cada grupo, y realizar

los intercambios de alumnos entre grupos que considere necesarios.

Administrador: El administrador podrá instalar y desinstalar el módulo dentro

de la plataforma virtual Moodle. Además contará con acceso a todas las

funcionalidades de los usuarios Estudiante y Profesor.

6.2 Catálogo de requisitos

En el catálogo de requisitos realizamos la especificación de los requisitos de la

aplicación a partir de la definición del sistema.

6.2.1 Requisitos funcionales

Para los requisitos funcionales usamos el enfoque de necesidades de los

usuarios, así podemos ver qué requisitos ha de tener la aplicación para cumplir las

necesidades de cada usuario.

6.2.1.1 Estudiante

6.2.1.1.1 RQF-01_Visualización de información

IDENTIFICADOR RQF-01

VERSIÓN 1.0 (12/7/2010)

AUTOR Mª Jesús García

TIPO Funcional

DESCRIPCIÓN Visualización de información: La aplicación permitirá al

estudiante visualizar la información correspondiente a cada

grupo de laboratorio configurado por el profesor.

PRIORIDAD Alta

COMENTARIOS También se mostrarán los grupos situados sobre un horario

semanal.

Tabla 1: RQF-01_Visualización de información

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

107

6.2.1.1.2 RQF-02_Inscripción

IDENTIFICADOR RQF-02

VERSIÓN 1.0 (12/7/2010)

AUTOR Mª Jesús García

TIPO Funcional

DESCRIPCIÓN Inscripción: El módulo permitirá al alumno matricularse en un

grupo de laboratorio.

PRIORIDAD Muy Alta

COMENTARIOS Se le permitirá seleccionar varias opciones en orden de

preferencia.

Tabla 2: RQF-02_Inscripción

6.2.1.1.3 RQF-03_Modificación de la inscripción

IDENTIFICADOR RQF-03

VERSIÓN 1.0 (12/7/2010)

AUTOR Mª Jesús García

TIPO Funcional

DESCRIPCIÓN Modificación de la inscripción: Una vez que el estudiante se ha

inscrito, podrá acceder a la plataforma todas las veces que

desee para modificar su elección.

PRIORIDAD Media

COMENTARIOS Las modificaciones estarán admitidas mientras no se haya

cerrado el periodo de matriculación.

Tabla 3: RQF-03_Modificación de la inscripción

6.2.1.1.4 RQF-04_Aviso de reparto

IDENTIFICADOR RQF-04

VERSIÓN 1.0 (12/7/2010)

AUTOR Mª Jesús García

TIPO Funcional

DESCRIPCIÓN Aviso de reparto: Cuando se produzca el reparto de grupos de

laboratorio, el sistema deberá avisar al alumno mediante correo

electrónico.

PRIORIDAD Media

COMENTARIOS También se le informará en el mismo correo del grupo en el

que ha sido inscrito.

Tabla 4: RQF-04_Aviso de reparto

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

108

6.2.1.1.5 RQF-05_Información de grupo asignado

IDENTIFICADOR RQF-05

VERSIÓN 1.0 (12/7/2010)

AUTOR Mª Jesús García

TIPO Funcional

DESCRIPCIÓN Información de grupo asignado: El alumno podrá acceder al

sistema para comprobar en qué grupo ha sido inscrito después

de realizarse el reparto.

PRIORIDAD Alta

COMENTARIOS Se le sugerirá que contacte con el profesor en caso de que desee

realizar algún cambio.

Tabla 5: RQF-05_Información de grupo asignado

6.2.1.2 Profesor

6.2.1.2.1 RQF-06_Inserción en un curso

IDENTIFICADOR RQF-06

VERSIÓN 1.0 (12/7/2010)

AUTOR Mª Jesús García

TIPO Funcional

DESCRIPCIÓN Inserción en un curso: El profesor podrá seleccionar el módulo

Gruposlab para añadirlo a un curso.

PRIORIDAD Muy Alta

COMENTARIOS Funcionalidad proporcionada por el propio núcleo de Moodle.

Tabla 6: RQF-06_Inserción en un curso

6.2.1.2.2 RQF-07_ Eliminación de un curso

IDENTIFICADOR RQF-07

VERSIÓN 1.0 (12/7/2010)

AUTOR Mª Jesús García

TIPO Funcional

DESCRIPCIÓN Eliminación de un curso: el profesor podrá eliminar la instancia

del módulo Gruposlab de su curso cuando lo desee.

PRIORIDAD Muy Alta

COMENTARIOS Funcionalidad proporcionada por el propio núcleo de Moodle.

Tabla 7: RQF-07:_Eliminación de un curso

6.2.1.2.3 RQF-08_Configuración de la instancia

IDENTIFICADOR RQF-08

VERSIÓN 1.0 (12/7/2010)

AUTOR Mª Jesús García

TIPO Funcional

DESCRIPCIÓN Configuración de la instancia: el profesor podrá configurar los

parámetros generales de la instancia mediante un formulario.

PRIORIDAD Muy Alta

COMENTARIOS Aquí seleccionará el número de grupos que habrá disponibles.

Tabla 8: RQF-08_Configuración de la instancia

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

109

6.2.1.2.4 RQF-09_Modificación de la instancia

IDENTIFICADOR RQF-09

VERSIÓN 1.0 (12/7/2010)

AUTOR Mª Jesús García

TIPO Funcional

DESCRIPCIÓN Modificación de la instancia: El profesor podrá acceder a la

configuración de la instancia y modificarla.

PRIORIDAD Muy Alta

COMENTARIOS Dependiendo del punto en que nos encontremos con respecto

al periodo de matriculación, se podrán modificar unos datos u

otros.

Tabla 9: RQF-9_Modificación de la instancia

6.2.1.2.5 RQF-010_Configuración particular de cada grupo

IDENTIFICADOR RQF-010

VERSIÓN 1.0 (12/7/2010)

AUTOR Mª Jesús García

TIPO Funcional

DESCRIPCIÓN Configuración particular de cada grupo: El profesor podrá

configurar individualmente cada uno de los grupos que ha

seleccionado en la configuración general.

PRIORIDAD Alta

COMENTARIOS

Tabla 10: RQF-10_Configuración particular de cada grupo

6.2.1.2.6 RQF-11_Modificación de configuración de grupos

IDENTIFICADOR RQF-11

VERSIÓN 1.0 (12/7/2010)

AUTOR Mª Jesús García

TIPO Funcional

DESCRIPCIÓN Modificación de configuración de grupos: El profesor podrá

modificar la configuración de cada uno de los grupos de

laboratorio.

PRIORIDAD Alta

COMENTARIOS

Tabla 11: RQF-11_Modificación particular de grupo

6.2.1.2.7 RQF-12_Visualización de grupos

IDENTIFICADOR RQF-12

VERSIÓN 1.0 (12/7/2010)

AUTOR Mª Jesús García

TIPO Funcional

DESCRIPCIÓN Visualización de grupos: el profesor podrá ver, situados en un

calendario semanal, los grupos que ha configurado.

PRIORIDAD Media

COMENTARIOS El nombre de cada grupo será un enlace que mostrará más

información del grupo si se pincha sobre él.

Tabla 12: RQF-12_Visualización de grupos

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

110

6.2.1.2.8 RQF-13_Visualización de listas de estudiantes

IDENTIFICADOR RQF-13

VERSIÓN 1.0 (12/7/2010)

AUTOR Mª Jesús García

TIPO Funcional

DESCRIPCIÓN Visualización de listas de alumnos: una vez que se ha

producido el reparto de grupos, el profesor podrá visualizar

por pantalla el listado de alumnos inscritos en cada grupo.

PRIORIDAD Alta

COMENTARIOS

Tabla 13: RQF-13_Visualización de listas de estudiantes

6.2.1.2.9 RQF-14_Descarga de listas de estudiantes

IDENTIFICADOR RQF-14

VERSIÓN 1.0 (12/7/2010)

AUTOR Mª Jesús García

TIPO Funcional

DESCRIPCIÓN Descarga de listas de estudiantes: El profesor podrá descargar

el listado de estudiantes de cada grupo en formato de hoja de

cálculo.

PRIORIDAD Media

COMENTARIOS

Tabla 14: RQF-14_Descarga de listas de estudiantes

6.2.1.2.10 RQF-15_Redistribución de estudiantes

IDENTIFICADOR RQF-15

VERSIÓN 1.0 (12/7/2010)

AUTOR Mª Jesús García

TIPO Funcional

DESCRIPCIÓN Redistribución de estudiantes: Una vez que se ha producido el

reparto de grupos, el profesor podrá agregar o eliminar los

alumnos que desee de cualquiera de los grupos.

PRIORIDAD Alta

COMENTARIOS El profesor podrá asignar al grupo que desee a los alumnos

que no se han inscrito en ningún grupo.

Tabla 15: RQF-15_Redistribución de estudiantes

6.2.1.2.11 RQF-16_Aviso de reparto

IDENTIFICADOR RQF-16

VERSIÓN 1.0 (12/7/2010)

AUTOR Mª Jesús García

TIPO Funcional

DESCRIPCIÓN Aviso de reparto: Cuando se produzca el reparto de grupos de

laboratorio, el sistema deberá avisar al profesor mediante

correo electrónico.

PRIORIDAD Media

COMENTARIOS

Tabla 16: RQF-16_Aviso de reparto

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

111

6.2.1.3 Administrador

6.2.1.3.1 RQF-17_Instalación del módulo

IDENTIFICADOR RQF-17

VERSIÓN 1.0 (12/7/2010)

AUTOR Mª Jesús García

TIPO Funcional

DESCRIPCIÓN Instalación del módulo: El administrador será el encargado de

instalar el módulo Gruposlab en la plataforma de enseñanza

virtual Moodle.

PRIORIDAD Muy Alta

COMENTARIOS

Tabla 17: RQF-17_Instalación del módulo

6.2.1.3.2 RQF-18_Actualización del módulo

IDENTIFICADOR RQF-18

VERSIÓN 1.0 (12/7/2010)

AUTOR Mª Jesús García

TIPO Funcional

DESCRIPCIÓN Actualización del módulo: El administrador se encargará de

realizar las modificaciones necesarias en el módulo y de llevar

a cabo la actualización en Moodle.

PRIORIDAD Alta

COMENTARIOS

Tabla 18: RQF-18_Actualización del módulo

6.2.1.3.3 RQF-19_Desinstalación del módulo

IDENTIFICADOR RQF-19

VERSIÓN 1.0 (12/7/2010)

AUTOR Mª Jesús García

TIPO Funcional

DESCRIPCIÓN Desinstalación del módulo: El administrador de Moodle llevará

a cabo la tarea de desinstalar el módulo Gruposlab del sistema.

PRIORIDAD Muy Alta

COMENTARIOS

Tabla 19: RQF-19_Desinstalación del módulo

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

112

6.2.1.4 Sistema

6.2.1.4.1 RQF-20_Reparto de grupos

IDENTIFICADOR RQF-20

VERSIÓN 1.0 (12/7/2010)

AUTOR Mª Jesús García

TIPO Funcional

DESCRIPCIÓN Reparto de grupos: el sistema deberá proceder de forma

automática al reparto de grupos cuando se alcance la fecha

final del periodo de matriculación.

PRIORIDAD Muy Alta

COMENTARIOS

Tabla 20: RQF-20_Reparto de grupos

6.2.1.4.2 RQF-21_Eliminación de archivos temporales

IDENTIFICADOR RQF-21

VERSIÓN 1.0 (12/7/2010)

AUTOR Mª Jesús García

TIPO Funcional

DESCRIPCIÓN Eliminación de ficheros temporales: el sistema deberá eliminar

de forma periódica los ficheros temporales creados cuando un

profesor solicita la descarga del listado de alumnos en formato

hoja de cálculo.

PRIORIDAD Alta

COMENTARIOS

Tabla 21: RQF-21_Eliminación de archivos temporales

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

113

6.2.2 Requisitos de datos

Para los requisitos de datos usamos el enfoque de que puedan usarse como

modelo de la base de datos.

6.2.2.1 RQD-01_Datos de la instancia

IDENTIFICADOR RQD-01

VERSIÓN 1.0 (17/7/2010)

AUTORES Mª Jesús García

TIPO Datos

DESCRIPCIÓN Se almacenarán los datos necesarios para la configuración de la

instancia:

id

course

name

start_date

end_date

groups_number

intro

introformat

timecreated

timemodified

configured

distributed

full_groups

PRIORIDAD Muy Alta

COMENTARIOS

Tabla 22: RQD-01_Datos de la instancia

6.2.2.2 RQD-02_Datos de los grupos

IDENTIFICADOR RQD-02

VERSIÓN 1.0 (17/7/2010)

AUTORES Mª Jesús García

TIPO Datos

DESCRIPCIÓN Se almacenarán los datos relativos a todos los grupos

configurados por los profesores:

id

id_instance

group_name

id_teacher

weekday

repetition

parity

start_time

end_time

place

max_students

PRIORIDAD Muy Alta

COMENTARIOS

Tabla 23: RQD-02_Datos de los grupos

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

114

6.2.2.3 RQD-03_Datos de los estudiantes

IDENTIFICADOR RQD-01

VERSIÓN 1.0 (17/7/2010)

AUTORES Mª Jesús García

TIPO Datos

DESCRIPCIÓN Se almacenarán los datos relativos a las opciones seleccionadas

por cada estudiante.

id

id_student

id_instance

id_choice

option1

option2

option3

PRIORIDAD Muy Alta

COMENTARIOS

Tabla 24: RQD-03_Datos de los estudiantes

6.2.3 Requisitos de Interfaz

6.2.3.1 RQI-01_Interfaces separadas

IDENTIFICADOR RQI-01

VERSIÓN 1.0 (17/7/2010)

AUTORES Mª Jesús García

TIPO Interfaz

DESCRIPCIÓN Se crearan interfaces separadas para cada una de las siguientes

funcionalidades del sistema:

Configuración/modificación de la instancia

Configuración/modificación de grupos de laboratorio.

Visualización de grupos de laboratorio

Elección/modificación de opciones de inscripción.

Visualización de listados de estudiantes.

Reordenación de estudiantes

PRIORIDAD Alta

COMENTARIOS

Tabla 25: RQI-01_Interfaces separadas

6.2.3.2 RQI-02_Calendario de grupos

IDENTIFICADOR RQI-02

VERSIÓN 1.0 (17/7/2010)

AUTORES Mª Jesús García

TIPO Interfaz

DESCRIPCIÓN Se mostrará un calendario semanal donde aparezcan los

grupos disponibles.

PRIORIDAD Alta

COMENTARIOS El nombre de los grupos será un enlace que lleve a una página

con más información de cada grupo.

Tabla 26: RQI-02_Calendario de grupos

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

115

6.2.4 Requisitos de Seguridad

6.2.4.1 RQS-01_Control de acceso de usuarios

IDENTIFICADOR RQS-01

VERSIÓN 1.0 (17/7/2010)

AUTORES Mª Jesús García

TIPO Seguridad

DESCRIPCIÓN Control de acceso de usuarios. Se Controlará que cada tipo de

usuario pueda acceder solo con los permisos que le

correspondan de acuerdo a su rol.

PRIORIDAD Alta

COMENTARIOS

Tabla 27: RQS-01_Control de acceso de usuarios

6.2.4.2 RQS-02_Configurar grupos

IDENTIFICADOR RQS-02

VERSIÓN 1.0 (17/7/2010)

AUTORES Mª Jesús García

TIPO Seguridad

DESCRIPCIÓN Configurar grupos. Se creará una capacidad que permita

configurar los grupos de laboratorio.

PRIORIDAD Alta

COMENTARIOS Esta capacidad estará permitida para los siguientes roles:

'editingteacher'

'coursecreator'

'teacher'

'admin'

Tabla 28: RQS-02_Configurar grupos

6.2.4.3 RQS-03_Inscribirse

IDENTIFICADOR RQS-03

VERSIÓN 1.0 (17/7/2010)

AUTORES Mª Jesús García

TIPO Seguridad

DESCRIPCIÓN Inscribirse. Se creará una capacidad que permita inscribirse a

los grupos de laboratorio.

PRIORIDAD Alta

COMENTARIOS Esta capacidad estará permitida para los siguientes roles:

'student'

Tabla 29: RQS-03_Inscribirse

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

116

6.2.5 Requisitos de codificación

6.2.5.1 RQC-01_Estilo de código

IDENTIFICADOR RQC-01

VERSIÓN 1.0 (12/7/2010)

AUTOR Mª Jesús García

TIPO Codificación

DESCRIPCIÓN El código fuente de la aplicación deberá respetar los estándares

de Moodle.

PRIORIDAD Alta

COMENTARIOS Se comentan las principales reglas de estilo que se deben

cumplir. La referencia completa se puede consultar en el

apartado Guías de estilo para desarrolladores de este documento.

El sangrado del texto debe ser siempre de 4 espacios.

Los nombres de las variables tienen que ser siempre

fáciles de leer, procurando que sean palabras en

minúsculas con significado en inglés.

Las constantes tienen que definirse siempre en

mayúsculas, y empezar por el nombre del módulo al

que pertenecen.

Los nombres de las funciones tienen que ser palabras

sencillas en minúsculas y en Inglés, y empezar con el

nombre del módulo al que pertenecen.

Los bloques de código siempre deben estar encerrados

por llaves

Las cadenas tienen que ser definidas utilizando

comillas simples siempre que sea posible.

Los comentarios deben ser añadidos de forma que

resulten prácticos, para explicar el flujo del código y el

propósito de las funciones y variables.

Tabla 30: RQC-01_Estilo de código

6.3 Análisis de la aplicación

6.3.1 Modelo de datos

Describiremos el modelo de datos del módulo mediante el siguiente diagrama

de Entidad-Relación. A partir de él detallaremos las entidades, relaciones y atributos

que lo componen.

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

117

Ilustración 28: Diagrama Entidad/Relación

6.3.1.1 Entidades

Las entidades que componen el modelo son las siguientes:

gruposlab: La entidad gruposlab almacena la información referente a cada

instancia del módulo Gruposlab. Cada vez que un profesor añada una actividad

de Grupos de Laboratorio a uno de sus cursos, se insertará un resgistro en esta

tabla. Algunos de los datos que se guardan son requeridos por Moodle para el

correcto funcionamiento del módulo, mientras que otros son propios de la

configuración particular de cada instancia. También se guarda la referencia del

curso al que pertenece dicha instancia.

gruposlab_groups: La tabla gruposlab_groups almacena la información de cada

grupo de laboratorio que se configura en el sistema, entre la que se encuentra el

profesor responsable del grupo, el número máximo de alumnos que se

permitirá que se matriculen, o el lugar donde se impartirá. También se

almacena la referencia de la instancia a la que pertenece cada grupo.

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

118

gruposlab_students: Esta entidad almacena las opciones que elige cada

estudiante de Moodle que se inscribe en los grupos de laboratorio, así como la

opción que finalmente se le asigna. Cada alumno que aparece en esta tabla es a

su vez un alumno de Moodle, por lo que se guarda una referencia a la tabla user

del sistema. También se guarda la referencia a la instancia en la que se ha

matriculado el estudiante.

user: Esta es una tabla del sistema que guarda la información personal de cada

usuario registrado en la plataforma Virtual.

course: Esta tabla también pertenece al sistema, y guarda la infomación relativa

a cada curso que existe en la plataforma.

6.3.1.2 Relaciones

En este apartado describiremos las diferentes relaciones que se muestran en el

diagrama E/R.

Relación gruposlab-gruposlab_students: En una instancia del módulo se

pueden inscribir varios o ningún alumno, mientras que cada estudiante que

aparece en un registro de la tabla gruposlab_students solo puede haberse inscrito

en una instancia concreta.

Relación user-gruposlab_students: Un usuario de Moodle puede estar

matriculado en tantas instancias del módulo Gruposlab como desee (puede

matricularse en los grupos de laboratorio de varias asignaturas). Cada

estudiante que aparece en un registro de la tabla gruposlab_students sólo puede

corresponderse con un usuario de la tabla user del sistema.

Relación user-gruposlab_groups: Un usuario de Moodle puede ser profesor en

tantas instancias del módulo Gruposlab como desee. Cada uno de estos

profesores registrados en la tabla gruposlab_groups sólo puede corresponderse

con un usuario de la tabla user del sistema.

Relación gruposlab-gruposlab_groups: Cada instancia del módulo gruposlab

puede tener configurados varios grupos de laboratorio (como mínimo uno).

Cada uno de estos grupos que aparecen en la tabla gruposlab_groups sólo puede

pertenecer a una instancia concreta.

Relación course-gruposlab: Cada curso del sistema puede configurar las

instancias del módulo Gruposlab que desee. Cada una de estas instancias sólo

pertenece a un curso concreto.

Relación gruposlab_groups-gruposlab_students: en cada grupo de laboratorio

pueden estar inscritos varios alumnos, pero cada alumno sólo puede estar

inscrito en un grupo.

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

119

6.3.1.3 Atributos

Entidad gruposlab:

o id: Identificador de la instancia y clave primaria de la entidad. Se trata

de un entero de 10 dígitos.

o course: Identificador del curso en el que se encuentra la instancia. Es un

entero.

o name: Nombre que se le da a la instancia. Es una cadena de caracteres.

o start_date: Fecha en la que comenzará el periodo de inscripción de los

grupos de laboratorio. Es un entero.

o end_date: Fecha en la que terminará el periodo de inscripción de los

grupos de laboratorio. Es un entero.

o groups_number: Número de grupos de laboratorio que tendrán

disponibles los alumnos para elegir entre ellos. Es un entero.

o intro: Descripción de la actividad Grupos de laboratorio. Es un campo

de texto.

o introformat: Formato del campo intro. Es un entero.

o timecrated: Fecha de creación de la instancia. Es un entero.

o timemodified: Fecha de modificación de la instancia. Es un entero.

o configured: Este campo indica si el profesor ha configurado ya o no los

grupos de laboratorio. Es un entero.

o distributed: Indica si se ha producido ya el reparto automático de los

alumnos en los grupos de laboratorio. Es un entero.

o full_groups: Indica si se han tratado de inscibir en los grupos más

alumnos de los que entran en el total de las plazas ofertadas por el

profesor.

Entidad gruposlab_groups:

o id: Identificador del grupo de laboratorio y clave primaria de la entidad.

Es un entero.

o id_instance: Identificador de la instancia del módulo a la que pertenece

un grupo de laboratorio. Es un entero.

o group_name: Nombre del grupo de laboratorio. Es una cadena de

caracteres.

o id_teacher: Identificador del profesor que impartirá este grupo de

laboratorio. Es un entero.

o weekday: Día de la semana en que se impartirá el grupo de laboratorio.

Es un entero que puede tomar varios valores (0-lunes, 1-martes, 2-

miércoles, etc.).

o repetition: Indica la periodicidad con la que se impartirá el grupo de

laboratorio. Es un entero que puede tomar varios valores (0-semanal, 1-

quincenal, 2-mensual).

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

120

o parity: En caso de que el laboratorio se imparta quincenalmente, este

campo indica si se celebra las semanas pares o impares del mes. Es un

entero que puede tomar varios valores (0-semanas pares, 1-semanas

impares).

o start_time: Este campo indica la hora a la que comienza la clase de este

grupo de laboratorio. Es un entero.

o end_time: Indica la hora a la que finaliza la clase de este grupo de

laboratorio.

o place: Este campo almacena el nombre del aula en la que se impartirán

las clases de este grupo de laboratorio. Es una cadena de caracteres.

o max_students: Este campo contiene el número de plazas libres que

quedan en este grupo de laboratorio. Es un entero.

Entidad gruposlab_students:

o id: Identificador del registro y clave principal de la entidad. Es un

entero.

o id_student: Identificador que tiene en la base de datos de Moodle el

estudiante que ha elegido estas opciones. Es un entero.

o id_choice: Identificador del grupo de laboratorio al que finalmente ha

sido asignado el estudiante, después de producirse el reparto

automático de grupos. Es un entero.

o option1: Identificador del grupo de laboratorio que ha elegido el

alumno como primera opción. Es un entero.

o option2: Identificador del grupo de laboratorio que ha elegido el

alumno como segurnda opción. Es un entero.

o option3: Identificador del grupo de laboratorio que ha elegido el

alumno como tercera opción. Es un entero.

Entidad user: La entidad user no pertenece al módulo gruposlab, sino a la base

de datos de Moodle. La incluimos en el esquema porque se relaciona con las

tablas gruposlab_students y gruposlab_groups por medio de su campo id.

Entidad course: La entidad course no pertenece al módulo gruposlab, sino a la

base de datos de Moodle. La incluimos en el esquema porque se relaciona con

la tabla gruposlab por medio de su campo id.

6.3.2 Modelo de casos de uso

A continuación se muestra el diagrama general de casos de uso del módulo:

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

121

Ilustración 29: Modelo de casos de uso general

Como podemos ver en el diagrama, contamos con tres tipos de usuario que

podrán realizar distintas acciones en la aplicación. El sistema comprobará el rol de cada

usuario para saber qué tareas puede o no realizar. Los actores que aparecen en este

diagrama son los que definíamos en el apartado Identificación de usuarios, con las

funcionalidades que allí se detallaban.

Estas funcionalidades están reflejadas en los casos de uso que se pueden ver en

la imagen, que son los siguientes:

Gestión de instancias: Aquí se incluye la configuración y edición de una

instancia, así como la inserción y borrado del curso de la misma.

Gestión de grupos: La gestión de grupos incluye la configuración y edición de

los grupos de laboratorio, así como la visualización por pantalla de información

relacionada con ellos.

Gestión de alumnos: La gestión de alumnos consiste en la visualización y

descarga de listas de usuario, así como en la redistribución de alumnos entre

grupos.

Avisos: Los avisos consistirán en notificaciones vía correo electrónico de

distintos eventos en el sistema.

Inscripción: La inscripción se refiere a la capacidad de elegir y editar las

opciones preferidas de inscripción en un grupo de laboratorio, así como la

visualización por pantalla del grupo asignado.

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

122

Validación usuario: Antes de poder realizar cualquier caso de uso de los

anteriores, el sistema debe verificar las capacidades que le otorga su rol a cada

usuario.

Como se puede ver en el diagrama, también existen relaciones entre los actores

del sistema y los diferentes grupos de acciones (casos de uso) que pueden llevar a cabo.

Además de estas relaciones también existen relaciones entre el sistema de validación de

usuarios y todos los demás casos de uso que hacen uso de este sistema para controlar

el acceso de los actores a las acciones que pueden realizar.

6.3.2.1 Gestión de instancias

A continuación se muestra el diagrama de casos de uso para la acción Gestión de

instancias:

Ilustración 30: Modelo de casos de uso: Gestión de instancias

Como nos muestra el diagrama, las acciones incluidas en este caso de uso las

puede realizar tanto el profesor del curso como el administrador del sistema.

Se puede desglosar los siguientes cuatro casos de uso:

Añadir instancia: Se puede añadir al curso instancias del módulo Gruposlab.

Borrar instancia: Se puede borrar del curso instancias del módulo Gruposlab.

Configurar instancia: La instancia puede ser configurada introduciendo los

parámetros necesarios.

Editar instancia: Una instancia configurada puede ser editada para modificar

sus parámetros.

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

123

También existen relaciones entre los actores (Profesor y Administrador) y todos

los casos de uso (Acciones). Además, los casos de uso también se relacionan entre sí.

Borrar instancia <incluye> Añadir instancia: La relación representa que para

poder eliminar una instancia del módulo Gruposlab de un curso, primero debe

haberse añadido.

Configurar instancia <incluye> Añadir instancia: Esta relación nos indica que

para poder configurar una instancia, primero debemos haberla añadido al

curso.

Editar instancia <incluye> Configurar instancia: Para poder modificar la

configuración de una instancia, primero debe estar configurada.

6.3.2.2 Gestión de grupos

A continuación podemos ver el diagrama de casos de uso de la acción Gestión de

grupos.

Ilustración 31: Modelo de casos de uso: Gestión de grupos

En este caso, el profesor y el administrador pueden realizar las siguientes

acciones:

Configurar grupos: Permite asignar a los grupos los parámetros deseados.

Modificar grupos: Se puede modificar la configuración de los grupos.

Ver grupos: Es posible visualizar por pantalla información sobre los grupos de

laboratorio.

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

124

En cuanto a las relaciones que nos muestra este diagrama, podemos ver que no

es posible modificar la configuración de un grupo si este no ha sido previamente

configurado.

6.3.2.3 Gestión de alumnos

En el siguiente diagrama podemos ver los casos de uso de la acción Gestión de

alumnos:

Ilustración 32: Modelo de casos de uso: Gestión de alumnos

En este caso, el profesor puede realizar las siguientes acciones:

Ver alumnos de un grupo: Permite visualizar por pantalla la lista de alumnos

asignados a un grupo de laboratorio.

Añadir alumnos a un grupo: Permite seleccionar de una lista los alumnos que se

han quedado sin grupo y añadirlos al grupo deseado.

Eliminar alumnos de un grupo: Se pueden eliminar alumnos de un grupo de

laboratorio, por ejemplo para después reubicarlos en otro grupo.

Descargar lista de alumnos de un grupo: Permite descargar en formato de hoja

de cálculo la lista de alumnos de un grupo de laboratorio.

Además podemos ver que existe una relación de extensión entre Descargar lista

de alumnos de un grupo y Ver alumnos de un grupo. Esto significa que el caso de uso

Descargar lista de alumnos de un grupo extiende la funcionalidad ofrecida por Ver alumnos

de un grupo, permitiendo descargar la información además de verla por pantalla.

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

125

6.3.2.4 Avisos

A continuación se muestra el diagrama de casos de uso del sistema de avisos:

Ilustración 33: Modelo de casos de uso: Avisos

En este caso tenemos dos actores distintos en el diagrama: el Profesor y el

Alumno. Ambos tendrán acceso al sistema de avisos, pero cada uno recibirá correos

electrónicos referentes a eventos distintos.

El profesor tendrá asignados los siguientes casos de uso:

Aviso de reparto de grupos: El usuario recibirá un correo electrónico

indicándole que ya se ha llevado a cabo el reparto de grupos de laboratorio.

Aviso de plazas llenas: Se recibirá un aviso por correo electrónico cuando el

número de alumnos que se ha tratado de inscribir a la actividad supera el

número total de plazas asignadas por el profesor a todos los grupos.

A su vez, el alumno tendrá acceso a la siguiente acción:

Aviso de grupo asignado: El usuario recibirá un correo electrónico cuando se

haya producido el reparto de grupos de laboratorio, indicándole el grupo al que

finalmente ha sido asignado.

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

126

6.3.2.5 Inscripción

A continuación podemos ver el diagrama de casos de uso del sistema de

inscripción:

Ilustración 34: Modelo de casos de uso: Inscripción

El usuario puede realizar las siguientes acciones:

Inscribirse a los grupos: Permite que un usuario se inscriba, seleccionando por

orden de preferencia los grupos deseados.

Editar inscripción: El usuario puede cambiar sus opciones antes de que se

cierre el periodo de matriculación.

Ver grupo asignado: Una vez que se ha producido el reparto de grupos, el

usuario puede acceder al sistema para ver en qué grupo ha sido inscrito.

En cuanto a las relaciones entre casos de uso, como podemos ver en el

diagrama, editar una inscripción implica haberla realizado antes.

6.3.3 Diagramas de flujo

A continuación mostraremos el diagrama de flujo de ejecución del programa

tanto para el usuario Profesor como para el Alumno.

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

127

6.3.3.1 Diagrama de flujo del usuario Profesor

Ilustración 35: Diagrama de flujo de usuario profesor

Como se muestra en el diagrama, una vez que el usuario ha iniciado sesión

como profesor, el sistema comprueba si los grupos están configurados, si no es así

muestra la interfaz para configurarlos, y si ya están configurados, permite al usuario

modificar dicha configuración. A continuación comprueba en qué momento del

periodo de matriculación nos encontramos, para mostrar por pantalla unas cosas u

otras dependiendo del momento en el que estemos. Además de permitir modificar la

configuración de los grupos, el sistema muestra un calendario semanal en el que

aparecen enlaces a los grupos de laboratorio configurados. Si el profesor pincha sobre

uno de esos enlaces, se le mostrará la lista de alumnos de ese grupo en caso de que los

grupos ya hayan sido repartidos. Además le permitirá redistribuir los alumnos en los

grupos y descargar el listado de alumnos como hoja de cálculo.

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

128

6.3.3.2 Diagrama de flujo del usuario Alumno

Ilustración 36: Diagrama de flujo del usuario Alumno

Después de iniciar sesión correctamente como alumno, el usuario podrá realizar

distintas acciones dependiendo del momento del periodo de matriculación en el que se

encuentre. Si está dentro del periodo de inscripción y el profesor ha configurado

correctamente los grupos, el alumno se podrá apuntar a sus grupos preferidos, siempre

que no se haya superado el límite de plazas. Si el alumno ya ha elegido sus opciones,

podrá acceder al sistema para modificarlas siempre que se encuentre dentro del

periodo de matriculación.

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

129

6.3.3.3 Diagrama de flujo del algoritmo de reparto de grupos

Ilustración 37: Diagrama de flujo del algoritmo de reparto de grupos

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

130

En el diagrama anterior se puede ver la secuencia que sigue el algoritmo para

repartir los grupos de laboratorio. Suponemos que hay al menos dos grupos de

laboratorio y que el número de plazas ofertadas entre todos los grupos de laboratorios

es igual al número total de alumnos.

Se selecciona un grupo (según el orden en el que aparecen en la base de datos).

El algoritmo selecciona a todos los alumnos que tienen como primera opción la del

grupo seleccionado y los ordena de forma aleatoria. El algoritmo elije el primer alumno

de la lista y, si el grupo aún no está lleno, lo inscribe en ese grupo, le envía un correo

para avisarle y lo marca como asignado. Este proceso se repite hasta que no queden

alumnos (cuya primera opción fuera el grupo actual) o el grupo esté completo.

A continuación el algoritmo toma el siguiente grupo y repite la misma

secuencia de operaciones con los alumnos. Así, hasta completar todos los grupos y

todas las primeras opciones de todos lo estudiante. Si todos los alumnos han sido

asignados, el algoritmo manda un correo al profesor y termina. En caso contrario,

queda al menos un alumno sin asignar.

El algoritmo empieza de nuevo, trabajando ahora con la segunda opción

solicitada por los alumnos no asignados y, si fuera necesario, se repite el proceso con la

tercera.

Una vez que se ha completado el proceso, los estudiantes que no han sido

inscritos en ningún grupo serán asignados aleatoriamente en alguno de los grupos que

tengan plazas libres. Por último el sistema enviará un correo electrónico a los

profesores informando de que se ha producido el reparto de grupos de laboratorio.

6.3.4 Definición de interfaces de usuario

Las principales interfaces que podemos encontrar en la aplicación son:

Listados: Son unas tablas donde se muestran los diferentes datos de una

consulta a la base de datos.

Formularios de datos: Pantallas con una serie de campos de texto para

introducir datos.

De este modo, las interfaces con las que contará el sistema son las siguientes:

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

131

Listado Formulario

Configurar/editar instancia X

Listado de instancias X

Configurar/editar grupos de laboratorio X

Listado de alumnos de un grupo X

Agregar/eliminar alumnos de un grupo X X

Inscribirse/editar inscripción X

Tabla 31: Interfaces de usuario

En algunos casos se puede combinar un formulario con un listado, como en la

pantalla de agregar/ eliminar alumnos de un grupo.

A continuación se muestran los prototipos de estas interfaces de usuario:

Configurar/editar instancias:

Mediante el formulario que aparece en la imagen inferior el usuario

podrá introducir los campos necesarios para configurar una instancia del

módulo Gruposlab. Se divide en tres bloques de elementos.

o Ajustes generales: en esta sección introduciremos el nombre que le

daremos a la instancia y una descripción. Ambos campos son

obligatorios.

o Ajustes particulares del módulo: Aquí se debe indicar el número de

grupos de laboratorio que se creará para los alumnos, así como las

fechas de inicio y fin del periodo de inscripción. Mientras este periodo

esté abierto los alumnos podrán apuntarse a los grupos de laboratorio.

Si estamos tratando de editar la instancia, debemos tener en cuenta que

una vez que haya comenzado el periodo de matriculación los cambios

que se hagan sobre la fecha de inicio no se aplicarán. El campo donde se

indica el número de grupos es obligatorio.

o Ajustes comunes del módulo: Este bloque es común a todos los

módulos de Moodle. Aquí podremos seleccionar si queremos que el

módulo aparezca visible o no para los alumnos. El campo ID number lo

utiliza el sistema de calificaciones de Moodle. Como el módulo

Gruposlab no utiliza calificaciones, este campo se puede dejar en blanco.

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

132

Ilustración 38: interfaz Configurar/Editar instancias

Listado de instancias:

En este listado el usuario podrá ver los grupos que ha configurado

dentro de su curso. Si pincha sobre uno de ellos le llevará a la página principal

de la instancia.

Ilustración 39: Interfaz listado de instancias

Configurar/editar grupos de laboratorio:

En este formulario se podrá configurar tantos grupos como se haya

seleccionado en el formulario de configuración de la instancia. Es obligatorio

introducir información en los campos Nombre de grupo, Lugar y Número máximo

de alumnos. El resto de campos, si no se modifican, guardan los valores por

defecto. El campo Elegir semanas sólo se habilitará si en el campo Repetición se ha

elegido el valor Quincenal, e indica si el laboratorio se impartirá las semanas

pares o impares del mes.

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

133

Ilustración 40: Interfaz Configurar/Editar grupos de laboratorio

Listado de alumnos de un grupo:

Se puede acceder al listado de alumnos inscritos en cada grupo de

laboratorio. En la lista aparecerá el nombre y apellidos del alumno junto con su

imagen de perfil. Se puede ordenar la lista tanto por nombre como por

apellidos.

Ilustración 41: Interfaz listado de alumnos de un grupo

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

134

Agregar/eliminar alumnos de un grupo:

Este formulario consta de dos listados de alumnos, uno con los

miembros actualmente inscritos en un grupo y otro con los miembros

potenciales, es decir, los alumnos que no están inscritos en ningún otro grupo.

Se pueden seleccionar uno o varios alumnos a la vez de estas listas, y moverlos

de una a otra mediante los botones Añadir y Quitar.

Ilustración 42: Interfaz Agregar/Eliminar alumnos de un grupo

Inscribirse/editar inscripción:

En este formulario el alumno obtendrá información referente a cada

grupo disponible y, mediante listas desplegables, podrá seleccionar sus

opciones por orden de preferencia. Si hay uno o dos grupos de laboratorio

disponibles, solo se le permitirá elegir su primera opción. En caso de haber dos

grupos la opción no elegida se considerará automáticamente la segunda opción.

Si existen tres o más grupos de laboratorio, el alumno tendrá tres listas

desplegables donde podrá elegir su primera, segunda y tercera opción.

Independientemente del número de grupos disponibles, el alumno no podrá

elegir más de tres opciones. Cabe destacar que aunque el alumno seleccione tres

veces la misma opción, no aumentan sus posibilidades de ser admitido en ese

grupo de laboratorio.

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

135

Ilustración 43: Interfaz Inscribirse/Editar inscripción

6.3.5 Diagrama de componentes

El diagrama de componentes muestra de forma directa y visual los directorios y

ficheros que componen el módulo Gruposlab.

Ilustración 44: Diagrama de componentes

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

136

La funcionalidad de cada uno de estos ficheros se comenta a continuación:

gruposlab: Directorio que contiene todos los archivos y carpetas del módulo.

o edit_form.php: Formulario para editar la configuración de los grupos

de laboratorio.

o groups_form.php: Formulario para configurar los grupos de

laboratorio.

o mod_form.php: Formulario para configurar la instancia del módulo.

o options_form.php: Formulario para inscribirse a los grupos de

laboratorio.

o index.php: Muestra el listado de instancias del módulo.

o members.php: Muestra la página de agregar/quitar alumnos de los

grupos de laboratorio.

o versión.php: Contiene el número de versión actual del módulo.

o view.php: Página principal del módulo.

o lib.php: Librería de funciones del módulo.

o icon.gif: Icono gráfico del módulo.

o db: Directorio que contiene todos los ficheros relacionados con la base

de datos.

access.php: Fichero de permisos.

install.xml: Declaración de las tablas de la base de datos.

upgrade.php: Instrucciones de actualización de la base de datos.

o lang: Directorio que contiene los ficheros de cadenas de idioma y de

ayuda. Habrá una subcarpeta por cada idioma soportado por el módulo.

en_utf8: Carpeta que contiene los archivos de ayuda y las

cadenas de idioma en inglés.

gruposlab.php: Cadenas de idioma del módulo en inglés.

help: Directorio que contiene los ficheros de ayuda del

módulo en inglés.

es_es_utf8: Carpeta que contiene los archivos de ayuda y las

cadenas de idioma en español de España.

gruposlab.php: Cadenas de idioma del módulo en español

de España.

help: Directorio que contiene los ficheros de ayuda del

módulo en español de España.

6.3.6 Especificación del plan de pruebas

El objetivo del plan de pruebas es asegurar que la aplicación desarrollada

cumple con los requisitos impuestos y funciona correctamente. A continuación

generaremos una lista con una serie de pruebas que se han de pasar en el sistema, para

simplificar se incluirá en la misma tabla el resultado de dichas pruebas.

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

137

Código de

prueba

Requisito a probar Objetivo que se quiere conseguir Resultado

P001 RQF-01. Visualización

de la información

Comprobar que el estudiante puede

visualizar correctamente el calendario

semanal donde aparecen los grupos de

laboratorio.

Correcto

P002 RQF-02. Inscripción Probar que el alumno puede ver

correctamente el formulario de

inscripción, donde aparece toda la

información sobre los grupos de

laboratorio, y que puede inscribirse

correctamente seleccionando las

opciones necesarias.

Correcto

P003 RQF-03. Modificación

de la inscripción

Comprobar que, cuando acceda al

módulo un estudiante que ya se ha

inscrito a los grupos, le aparezca el

formulario de modificación de

inscripción (siempre que se encuentre

dentro del periodo de matriculación).

También comprobar que la modificación

de la inscripción se realiza

correctamente.

Correcto

P004 RQF-04. Aviso de

reparto

Comprobar que el alumno recibe

correctamente un correo después de

realizarse el reparto de grupos de

laboratorio.

Correcto

P005 RQF-05. Información

de grupo asignado

Comprobar que cuando el alumno

accede al módulo, después de haberse

producido el reparto de grupos de

laboratorio, puede visualizar la

información sobre el grupo en el que ha

sido inscrito.

Correcto

P006 RQF-06. Inserción en

un curso

Comprobar que el profesor puede

agregar correctamente el módulo

Gruposlab en su curso.

Correcto

P007 RQF-07. Eliminación

de un curso

Comrpobar que el profesor puede

eliminar correctamente el módulo

Gruposlab de su curso.

Correcto

P008 RQF-08. Configuración

de la instancia

Agregar el módulo Gruposlab a un curso

y comprobar que el profesor puede

configurar la instancia correctamente.

Comprobar que el formulario muestra

un aviso si se introducen datos

incorrectos en los campos o si no se

introducen datos obligatorios.

Correcto

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

138

Código de

prueba

Requisito a probar Objetivo que se quiere conseguir Resultado

P009 RQF-09. Modificación

de la instancia

Comprobar que es posible modificar

correctamente la configuración de una

instancia anteriormente configurada, y

que además se es posible modificar las

opciones permitidas dependiendo del

momento del periodo de matriculación

en que nos encontremos.

Correcto

P010 RQF-10. Configuración

particular de cada

grupo

Comrpobar que el profesor puede

configurar correctamente cada uno de

sus grupos de laboratorio, y que el

sistema le envía automáticamente al

formulario de configuración de los

grupos cada vez que accede al módulo si

los grupos están sin configurar.

Comrpobar que los campos muestran

los avisos necesarios si no se introducen

los datos esperados.

Correcto

P011 RQF-11. Modificación

de configuración de

grupos

En una instancia con los grupos de

laboratorio configurados, comprobar

que estos se pueden editar

correctamente, siempre que el periodo

de matriculación no haya finalizado.

Correcto

P012 RQF-12. Visualización

de grupos

En una instancia correctamente

configurada, comprobar que se pueden

visualizar los grupos de laboratorio en el

calendario semanal, y que si se pincha

sobre el nombre de alguno de dichos

grupos, se muestra una página con más

información sobre el grupo.

Correcto

P013 RQF-13. Visualización

de listas de estudiantes

Una vez que se ha producido el reparto

de grupos, comrpobar que el profesor, al

pinchar sobre uno de los grupos en el

calendario semanal, puede ver la lista de

alumnos que han sido asignados a ese

grupo.

Correcto

P014 RQF-14. Descarga de

listas de estudiantes

Comprobar que se puede descargar

correctamente el listado de estudiantes

de cada grupo en formato de hoja de

cálculo.

Correcto

(con

problemas)

P015 RQF-15.

Redistribución de

estudiantes

Después de producirse el reparto de

estudiantes, comprobar que el profesor

puede acceder a la pantalla de

redistribución de estudiantes, y que

puede eliminarlos y añadirlos

correctamente a los grupos.

Correcto

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

139

Código de

prueba

Requisito a probar Objetivo que se quiere conseguir Resultado

P016 RQF-16. Aviso de

reparto

Después del reparto de grupos de

laboratorio, comprobar que todos los

profesores del curso reciben

correctamente un correo electrónico

avisándoles de que se ha producido el

reparto.

Correcto

P017 RQF-17. Instalación

del módulo

Comrpobar que un administrador

puede instalar correctamente el módulo

en la plataforma Moodle.

Correcto

P018 RQF-18.

Desinstalación del

módulo

Comrpobar que un administrador

puede desinstalar el módulo de la

plataforma Moodle y que sus tablas

asociadas se eliminan correctamente de

la base de datos.

Correcto

P019 RQF-19. Reparto de

grupos

Comprobar que el reparto de grupos se

realiza de la forma correcta y en el

momento indicado.

Correcto

P020 RQF-20. Eliminación

de archivos

temporales

Comrpobar que se eliminan

correctamente del sistema los archivos

temporales generados por el módulo.

Correcto

P021 RQD-01. Datos de la

instancia

Comprobar que se almacena

correctamente en la tabla gruposlab de la

base de datos la información referente a

cada instancia del módulo.

Correcto

P022 RQD-02. Datos de los

grupos

Comprobar que se almacena

correctamente en la tabla

gruposlab_groups de la base de datos la

información referente a grupo de

laboratorio configurado.

Correcto

P023 RQD-03. Datos de los

estudiantes

Comrpobar que se almacena

correctamente en la tabla

gruposlab_students de la base de datos la

información referente a las opciones

seleccionadas por cada estudiante

inscrito en los grupos de laboratorio.

Correcto

P024 RQI-01. Interfaces

separadas

Comprobar la correcta visualización de

todas las interfaces del sistema.

Correcto

P025 RQI-02. Calendario de

grupos

Comprobar la correcta visualización del

calendario semanal donde se muestran

los grupos de laboratorio. Probar que los

enlaces apunten a las páginas correctas.

Correcto

P026 RQS-01. Control de

acceso de usuarios

Comprobar que solo los usuarios que

han iniciado sesión en el sistema tienen

acceso al módulo.

Correcto

P027 RQS-02. Configurar

grupos

Comprobar que solo los roles

permitidos tienen la capacidad de

configurar los grupos de laboratorio.

Correcto

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

140

Código de

prueba

Requisito a probar Objetivo que se quiere conseguir Resultado

P028 RQS-03. Inscribirse Comprobar que sólo el usuario

estudiante puede inscribirse a los

grupos de laboratorio.

Correcto

P029 RQC-01. Estilo del

código

Revisar el código fuente para comprobar

que cumple con los estándares de

programación de Moodle.

Correcto

Tabla 32: Especificación del plan de pruebas

Como se puede ver en los resultados que muestra la tabla anterior, todas las

pruebas realizadas con la última versión del módulo Gruposlab han sido positivas. Por

lo tanto podemos afirmar que la aplicación cumple con todos los requisitos que se

especificaban en el apartado de Análisis de requisitos.

Tan solo una de las pruebas, la P014, no ha dado resultados completamente

satisfactorios. La hoja de cálculo que se genera se visualiza correctamente el visor de

hojas de cálculo de la suite ofimática OpenOffice.org, pero en Microsoft Excel se

muestra un aviso donde dice que los datos pueden haberse perdido, a pesar de que

finalmente abre el archivo y los muestra correctamente.

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

141

7 Manuales de usuario

7.1 Manual del usuario profesor

7.1.1 Añadir el módulo GruposLab a un curso

Para añadir el módulo Gruposlab a un curso, es necesario entrar en el curso y

activar la edición pulsando el botón Activar Edición que aparece en la parte superior

derecha de la pantalla.

A continuación se debe pulsar sobre la lista desplegable Agregar actividad..., y

seleccionar Grupos de Laboratorio.

Ilustración 45: Agregar el módulo GruposLab a un curso

7.1.2 Configuración general de la aplicación

Al añadir la actividad Grupos de Laboratorio a nuestro curso, se mostrará una

pantalla de configuración como la que se aparece en la imagen siguiente.

En ella hay que rellenar algunos campos necesarios para la correcta

configuración de la actividad. Estos campos son los siguientes:

Nombre: Se debe introducir el nombre que se le quiere dar a la actividad, por

ejemplo “Grupos de prácticas de Álgebra”.

Descripción: En este campo el profesor puede introducir una descripción de la

actividad que se llevará a cabo en los grupos de laboratorio, o cualquier otra

información que considere oportuna. Esta descripción se mostrará a los

alumnos cuando interactúen con el módulo.

Número de grupos: Se debe indicar el número de grupos de laboratorio que se

va a abrir. Posteriormente se podrá configurar cada uno de estos grupos de

forma individual.

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

142

Inicio de matriculación: Se debe introducir la fecha en la que los alumnos

podrán comenzar a apuntarse a los grupos.

Fin de matriculación: Se debe introducir la fecha tope para que los alumnos se

matriculen. Esta será también la fecha en la que el módulo realizará de forma

automática la distribución de los alumnos en los grupos.

El resto de campos son estándar para todos los módulos de Moodle y se pueden

dejar con los valores por defecto.

Ilustración 46: Configuración general de la aplicación

Para guardar la configuración general y pasar a configurar los grupos

individualmente, se debe pulsar el botón Guardar cambios y mostrar. Si, por el contrario,

se desea guardar la configuración actual, pero se quiere continuar con el resto de

opciones más tarde, se debe pulsar el botón Guardar cambios y regresar al curso.

7.1.3 Configuración particular de cada grupo

Después de realizar la configuración general del módulo, que se explica en el

apartado anterior, si pulsamos el botón Guardar cambios y mostrar, aparecerá una

pantalla como la que se muestra en la imagen inferior, donde tendremos la posibilidad

de configurar cada grupo de forma individual. Si hemos decidido terminar la

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

143

configuración anterior pulsando el botón Guardar cambios y regresar al curso, la próxima

vez que intentemos acceder a la actividad también aparecerá la pantalla inferior para

configurar los grupos.

Ilustración 47: Configuración individual de los grupos

Las opciones que podemos configurar para cada grupo de laboratorio son las

siguientes:

Nombre del grupo: En este campo se debe poner el nombre que queremos dar a

este grupo, por ejemplo: “Grupo A” o “Grupo Mañana”.

Profesor: Al pinchar en esta lista desplegable aparecerán todos los profesores

que están dados de alta en el curso. Se debe seleccionar cuál de los profesores

será el encargado de impartir ese laboratorio.

Día: En esta lista se debe seleccionar el día de la semana que se impartirá el

laboratorio.

Hora de comienzo: Seleccionaremos la hora a la que comienza el laboratorio.

Hora de fin: Aquí pondremos la hora a la que finaliza. La hora de fin debe ser

posterior a la hora de inicio. Si por error esto no se configura así, el grupo no se

creará.

Repetición: En este campo podremos seleccionar si el laboratorio se imparte

una vez a la semana, cada quince días o una vez al mes.

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

144

Elegir semanas: Este campo solo será editable si hemos seleccionado la

modalidad quincenal en el apartado anterior. Aquí se debe elegir si el

laboratorio se imparte las semanas pares del mes o las semanas impares.

Lugar: En este campo se debe escribir el nombre del aula donde se impartirá el

laboratorio, por ejemplo: “Laboratorio L1” o “Seminario E21”.

Número máximo de alumnos: Aquí se debe escribir el número máximo de

alumnos que se podrán apuntar a ese laboratorio. Si la asignatura cuenta con

más alumnos de los que suman las plazas asignadas en total a todos los grupos,

algunos alumnos no podrán matricularse y será el profesor quien deba

colocarlos manualmente en alguno de los grupos. El número máximo de

alumnos en cada grupo se puede modificar en cualquier momento, siempre

queno se haya producido aún el reparto de grupos.

Cuando hemos terminado de establecer la configuración deseada para los

grupos, si pulsamos el botón Guardar cambios, el sistema nos mostrará un mensaje

indicándonos que los cambios se han guardado correctamente:

Ilustración 48: Mensaje grupos configurados correctamente

A continuación el sistema nos redirigirá a la página principal de nuestro curso.

En cualquier momento podremos pulsar el botón Actualizar Grupos de

Laboratorio que aparece en la parte superior derecha de la imagen. Si lo hacemos,

aparecerá de nuevo la pantalla de configuración general y podremos modificar las

opciones del módulo, tanto las opciones generales como la configuración particular de

cada grupo.

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

145

7.1.4 Administrar los grupos de laboratorio

Una vez que la configuración del módulo está completada, si el profesor accede

a sus Grupos de Laboratorio, se mostrará una página como la que aparece más abajo

(Ilustración 49).

El mensaje que aparece en el recuadro inferior depende del momento en el que

nos encontremos con respecto a la matriculación:

Si aún no ha comenzado el periodo de matriculación, el sistema lo indicará, y

además informará de las fecha de inicio y finalización del periodo de

matriculación.

Durante el periodo de matriculación, aparecerá un mensaje que indicar el

número de alumnos que hasta el momento se ha apuntado a los grupos de

laboratorio.

Después de que se haya cerrado el periodo de matriculación, no aparece

ningún mensaje.

Ilustración 49: Calendario con los grupos de laboratorio

El calendario donde se muestran los grupos disponibles se muestra siempre, y

el profesor puede pinchar sobre sus enlaces para obtener más información sobre cada

grupo configurado.

Cuando llega la fecha tope del periodo de matriculación, se produce el reparto

de los alumnos en los grupos.

Después de que se haya producido el reparto, si el profesor pincha sobre el

calendario en uno de los enlaces de los grupos, podrá ver una pantalla como la de la

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

146

imagen inferior (Ilustración 50), desde la que podrá administrar los alumnos de dicho

grupo.

Ilustración 50: Administración de un grupo de laboratorio

7.1.4.1 Exportar listado de alumnos a una hoja de cálculo

Pulsando el botón Exportar a Excel, el profesor puede obtener una lista con

todos los alumnos de un laboratorio en formato Excel. El resultado sería similar al

siguiente:

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

147

Grupos de prácticas

Grupo A

Profesor: Profesor1 Pruebas

Horario: Semanal, Lunes 8:00 - 9:00

Lugar: Laboratorio EL1

Nº Alumnos: 5

ALUMNOS

# Apellidos Nombre E-mail Comentarios

1 Pruebas Alumno9 [email protected]

2 Pruebas Alumno10 [email protected]

3 Pruebas Alumno17 [email protected]

4 Pruebas Alumno19 [email protected]

5 Pruebas Alumno20 [email protected]

7.1.4.2 Añadir/eliminar alumnos a un grupo

Una vez que se ha producido el reparto de alumnos el profesor, de manera

manual, puede agregar alumnos a un grupo o eliminarlos de otro. Para ello debe

pulsar el botón Agregar/quitar alumnos, que está bajo el listado de alumnos.

En la pantalla que aparece, tiene a un lado la lista de alumnos que están

matriculados en el grupo, y al otro lado la lista de alumnos potenciales. Es decir, los

alumnos que están matriculados en el curso, pero han sido asignados a ningún grupo

de laboratorio, bien porque el número de plazas era inferior al número de alumnos, o

bien porque el profesor los haya eliminado de otro grupo de laboratorio.

Para agregar un alumno, tan solo se debe seleccionar el alumno deseado de la

lista de miembros potenciales y pulsar el botón Añadir.

Para eliminar un alumno del grupo, se debe seleccionar el alumno deseado de

la lista de miembros existentes y pulsar el botón Quitar.

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

148

Ilustración 51: Agregar/quitar alumnos de un grupo

7.2 Manual del usuario alumno

7.2.1 Matricularse en un grupo de laboratorio

Para matricularse en un grupo de laboratorio, el alumno debe acceder al curso y

pinchar sobre el enlace del módulo Grupos de laboratorio.

En la página que aparece, hay un calendario donde se encuentran todos los

grupos que ha configurado el profesor y debajo de él, un listado de dichos grupos con

información referente a cada uno de ellos.

Al final de la página, el alumno debe seleccionar el grupo que más se ajuste a

sus necesidades y ponerlo como primera opción. En caso de que existan tres o más

grupos de laboratorio disponibles, el alumno deberá elegir otras dos opciones en orden

de preferencia, que serán valoradas adecuadamente en caso de que no pudiera ser

asignado al grupo preferido.

El alumno debe tener en cuenta que seleccionar varias veces el mismo grupo de

laboratorio no aumenta sus posibilidades de ser asignado a dicho grupo. Si el alumno

selecciona varias veces el mismo grupo y no es posible matricularlo en él, el sistema le

asignará otro de los grupos disponibles de forma aleatoria.

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

149

Ilustración 52: Elegir grupo de laboratorio

Tras hacer su elección, el alumno puede guardar los cambios, y un mensaje le

indicará que sus opciones se han guardado correctamente en el sistema.

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

150

Si el alumno vuelve a acceder a la actividad Grupos de laboratorio después de

haber seleccionado sus grupos preferidos, el sistema se lo indicará mediante un

mensaje, pero le dejará modificar su elección mientras el periodo de matrícula siga

abierto.

Ilustración 53: Modificar grupos de laboratorio

Si pulsa sobre el botón Cambiar grupos, volverá a una página como la anterior,

donde de nuevo podrá seleccionar sus opciones en el orden que desee.

7.2.2 Comprobar su grupo de laboratorio

Después de cerrarse el periodo de matriculación y de haberse realizado el

reparto de alumnos entre los grupos disponibles, el alumno recibirá un correo

electrónico, indicándole el grupo al que finalmente ha sido asignado. El mensaje que el

alumno recibirá será similar al siguiente:

“Se han repartido los grupos de laboratorio de la asignatura Curso Pruebas GruposLab,

Has sido apuntado/a en el grupo: Grupo A”

A partir de este momento, el alumno ya no podrá cambiarse de grupo. Si desea

hacerlo deberá ponerse en contacto con el profesor para que él haga el cambio

manualmente.

Si el alumno accede al módulo de los grupos de laboratorio, tan solo obtendrá

información sobre el grupo en el que está matriculado:

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

151

Ilustración 54: Comprobar grupo asignado

7.3 Manual de administrador

7.3.1 Instalar módulo GruposLab

Para instalar el módulo Gruposlab, debemos descomprimir el archivo

gruposlab.zip y colocar la carpeta que contiene en el directorio de los módulos de

nuestro servidor Moodle.

Este directorio normalmente se ubica en la ruta por defecto, que suele ser la

siguiente:

/var/www/moodle/mod

Ilustración 55: Colocar carpeta gruposlab en el directorio de módulos

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

152

Una vez que colocada la carpeta gruposlab en su sitio, debemos acceder a la

página principal de Moodle como administrador, y pulsar el enlace Notificaciones, que

aparece en la parte izquierda de la pantalla:

Ilustración 56: Pulsar Notificaciones para instalar el módulo

Al pulsar este enlace, se realiza automáticamente la instalación del módulo,

creándose en este momento todas las tablas que sean necesarias en la base de datos.

Cuando haya finalizado la instalación, aparecerá una pantalla con el resumen

de todas las operaciones que se han llevado a cabo durante la instalación. Si no ha

sucedido ningún problema, podremos desplazarnos hasta el final de la página y pulsar

el botón Continuar.

A partir de este momento ya tenemos instalado el módulo Grupos de Laboratorio

en Moodle, y podremos hacer uso de él.

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

153

Ilustración 57: Módulo instalado correctamente

7.3.2 Desinstalar módulo GruposLab

Para desinstalar el módulo GruposLab, debemos acceder como administrador a

la página principal de Moodle, y seleccionar en la parte izquierda de la pantalla

Módulos->Actividades->Gestionar Actividades.

A continuación aparece en pantalla la lista con todos los módulos instalados en

Moodle. Seleccionaremos el módulo Grupos de Laboratorio y pulsaremos borrar.

Ilustración 58: Desinstalar módulo GruposLab

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

154

A continuación aparecerá en pantalla un aviso, indicándo que se eliminará

completamente todo lo que haya en la base de datos asociado al módulo. Si estamos

seguros de que queremos borrarlo, pulsaremos Sí.

Si no ha habido ningún problema durante la eliminación, el siguiente mensaje

nos informará de que todos los datos asociados con el módulo Grupos de Laboratorio han

sido eliminados de la base de datos, y se advierte que para completar la eliminación (y

prevenir que el módulo se reinstale por sí mismo) se debería borrar del servidor el

directorio gruposlab, ubicado en la carpeta que contiene los módulos de Moodle.

Normalmente la ruta de esta carpeta es la siguiente:

/var/www/moodle/mod/gruposlab.

Por lo tanto, para completar la desinstalación, se debe eliminar dicho directorio.

Una vez que lo hayamos hecho, ya no aparecerá el módulo Gruposlab en la lista

de módulos de la imagen anterior, y habrá desaparecido también de todos los cursos

que hubieran estado haciendo uso de él en el momento de la desinstalación.

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

155

8 Presupuesto A continuación se detallan los distintos apartados que constituyen el

presupuesto del proyecto.

8.1 Presupuesto de ejecución material

En este apartado se incluyen tanto los costes hardware como software, así como

los costes por tiempo de trabajo.

8.1.1 Costes de sistemas

En este apartado se muestran los costes de los equipos hardware necesarios

para el desarrollo del proyecto, así como de las licencias de los distintos programas

software que se han utilizado, y también de los consumibles.

COSTES DE SISTEMAS

Concepto Coste

Hardware 99,5 €

Software 635 €

Consumibles 86,36 €

TOTAL: 820,86 €

Tabla 33: Costes de sistemas

A continuación se muestra el desglose de los distintos apartados:

HARDWARE

Concepto Coste Duración Tiempo de uso Total

Equipo

desarrollo

700€ 4 años 6 meses 87,5€

Impresora Color 400€ 4 años 1 mes 12 €

TOTAL: 99,5 €

Tabla 34: Costes de Hardware

Los requisitos mínimos de hardware deseables, tanto para el equipo como para

la impresora, son los siguientes:

Equipo de desarrollo:

o Procesador Intel Pentium 4, 2 GHz.

o 1 Gb Memoria RAM

o 40 Gb disco duro

o Conexión a internet

Impresora láser a color:

o Velocidad de impresión en color (normal, A4): 30 ppm

o Calidad de impresión en color (óptima): Hasta 1200 x 600 ppp

o Memoria de serie: 256 Mb

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

156

SOFTWARE

Concepto Coste

Licencia Windows 7 319 €

Licencia Ubuntu 10.10 0 €

Licencia Microsoft Office 2010 139 €

Licencia VMware Workstation 177 €

Licencia Apache 0 €

Licencia MySQL 0 €

Licencia PHP 0 €

Licencia Paint.net 0 €

Licencia Notepad++ 0 €

Licencia NX 0 €

Licencia Moodle 0 €

TOTAL: 635 €

Tabla 35: Costes de Software

RECURSOS CONSUMIBLES

Concepto Precio Duración Uso Total

Tóner Negro 190 € 10.500 páginas 200 páginas 3,62 €

Tóner Amarillo 258 € 7.000 páginas 200 páginas 7,38 €

Tóner Cian 258 € 7.000 páginas 200 páginas 7,38 €

Tóner Magenta 258 € 7.000 páginas 200 páginas 7,38 €

Papel 15 € 5.000 páginas 200 páginas 0,6 €

Encuadernación 60 € 60 €

TOTAL: 86,36 €

Tabla 36: Costes de consumibles

8.1.2 Costes por tiempo de trabajo

Coste por hora establecido por la asociación de Ingenieros e Ingenieros técnicos

en informática, además de los costes de realización de la documentación.

COSTE TOTAL DE TIEMPO TRABAJADO

Concepto Horas Coste/hora Total

INGENIERÍA 250 h

Análisis 20 h 42 € 840 €

Diseño 30 h 42 € 1.260 €

Desarrollo 150 h 42 € 6.300 €

Pruebas 50 h 42 € 2.100 €

DOCUMENTACIÓN 130 h 15 € 1.950 €

TOTAL: 12.450 €

Tabla 37: Coste total de tiempo trabajado

8.1.3 Coste total de ejecución material

El coste total de ejecución material es la suma del importe del coste de sistemas

y de los costes por tiempo de trabajo.

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

157

COSTE TOTAL DE EJECUCIÓN MATERIAL

Concepto Total

Coste de sistemas 820,86 €

Coste por tiempo de trabajo 12.450 €

TOTAL: 13.270,86 €

Tabla 38: Coste total de ejecución material

8.2 Gastos generales y beneficio industrial

Normalmente se trata de los gastos necesarios para disponer de instalaciones en

las que desempeñar el trabajo, además de otros gastos adicionales. Los gastos generales

y el beneficio industrial son el resultado de aplicar un recargo del 22% sobre el Coste

Total de Ejecución Material, resultando:

GASTOS GENERALES Y BENEFICIO INDUSTRIAL

TOTAL: 2.919,59 €

Tabla 39: Gastos generales y beneficio industrial

8.3 Presupuesto de ejecución por contrata

El presupuesto de ejecución por contrata es el resultado de sumar el Coste Total

de Ejecución y los Gastos Generales.

COSTE DE EJECUCIÓN POR CONTRATA

Concepto Coste

Coste total de ejecución 13.270,86 €

Gastos generales 2.919,59 €

TOTAL: 16.190,45

Tabla 40: Coste de ejecución por contrata

8.4 Honorarios facultativos

Se estiman unas tarifas sobre el presupuesto de Ejecución Material como las

siguientes:

CONCEPTO COEFICIENTE REDUCTOR PORCENTAJE

Hasta 30.000 € C=1 7%

Desde 30.000 € C=0,9 7%

Tabla 41: Tarifas de honorarios facultativos

Los derechos del visado se calcularán aplicando la siguiente fórmula:

Derechos del visado = p x P x C, donde:

p → porcentaje

P → Presupuesto de Ejecución Material

C → Coeficiente reductor

Obteniendo un valor para los honorarios de:

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

158

HONORARIOS FACULTATIVOS

TOTAL: 928,96 €

Tabla 42: Honorarios facultativos

8.5 Importe total del presupuesto

El importe total del presupuesto se calcula sumando el presupuesto de

ejecución por contrata y los honorarios. A dicho valor se le aplicará el 18% de IVA.

TOTAL PRESUPUESTO

Concepto Coste

Presupuesto de Ejecución por contrata 16.192,45 €

Honorarios 928,96 €

SUBTOTAL 17.121,41 €

IVA (18%) 3.081,85 €

TOTAL: 20.203,26 €

Tabla 43: Presupuesto total

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

159

9 Conclusiones y trabajos futuros Los resultados de este proyecto de fin de carrera han sido la sistematización de

la documentación para desarrolladores y la creación de un módulo para la gestión de

laboratorios docentes.

En cuanto a la documentación para desarrolladores, se han examinado todas las

fuentes disponibles en Internet y se ha realizado una recopilación de todos los

elementos que el desarrollador novel debe tener en cuenta antes de comenzar su

trabajo. Además se ha realizado una sencilla guía en la que se explica paso por paso

cómo realizar un módulo para Moodle que disponga de las funcionalidades básicas. A

partir de ahí será tarea del desarrollador profundizar lo que considere necesario para

añadir todas las funcionalidades que requiera su aplicación.

El módulo para la gestión de grupos de laboratorio ofrece diversas

funcionalidades tanto a los profesores (configurar grupos de laboratorio, gestionar

alumnos, etc) como a los alumnos (visualizar información sobre cada grupo de

laboratorio disponible, seleccionar varios grupos a los que se quiere apuntar en orden

de preferencia, etc). Además, el módulo se encarga de hacer el reparto de alumnos en

los diferentes grupos por medio de un algoritmo equitativo en el que no influye el

orden en el que los alumnos se hayan apuntado a los grupos, sino que los distribuye

aleatoriamente teniendo en cuenta tanto sus preferencias como las de los profesores. El

código fuente de este módulo, así como toda la documentación en formato digital se

adjunta mediante un CD a la memoria final.

Finalmente, se ha redactado el presente informe (memoria) que cuenta, entre

otros apartados, con una descripción detallada de la arquitectura de Moodle, un listado

detallado de los recursos y librerías de código disponibles para desarrolladores, y una

manual que explicará los pasos a seguir a la hora de desarrollar un nuevo módulo para

la plataforma. Además, el módulo Gruposlab ha sido probado en un entorno educativo

real, gracias a la colaboración de varios profesores del Departamento de Matemáticas,

arrojando resultados positivos tras un periodo de depiuración, y siendo aceptado tanto

por alumnos como por docentes.

Una vez alcanzados los objetivos que se plantearon en el anteproyecto, a nivel

personal este trabajo me ha servido para consolidar mis conocimientos de

programación de aplicaciones Web (en concreto en el lenguaje PHP), así como para

aprender a administrar una plataforma de enseñanza virtual.

Por otro lado, aunque a día de hoy el módulo Gruposlab es completamente

funcional, tras los ensayos realizados han salido a la luz nuevos requisitos funcionales

que no es posible desarrollar dentro del entorno de este proyecto de fin de carrera

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

160

debido al imitaciones temporales, pero que sería bueno tener en cuenta para futuras

versiones de la aplicación.

Entre ellos, cabe destacar que con la entrada de las universidades españolas en

el Espacio Europeo de Educación Superior (conocido como Plan Bolonia) no sólo se

forman grupos (más o menos grandes) para trabajar en el laboratorio, tal y como cubre

este proyecto como necesidad directamente planteada por el Departamento de

Matemáticas de la Universidad de Alcalá. Sin embargo, también hay que formar

grupos para hacer trabajos, resolver bloques de problemas, exponer bloques de

contenidos en clase, trabajos de campo, etc. Para todas estas situaciones sería muy útil

disponer de una herramienta para automatizar en la medida de lo posible la creación y

gestión de grupos. Por tanto sería interesante tratar de generalizar el módulo Gruposlab

tanto como fuera posible para abarcar todos estos problemas, realizando los cambios

oportunos (si fueran necesarios).

Además de lo anterior, otras cosas que se podrían añadir o mejorar en versiones

futuras del módulo actual son las siguientes:

Sería conveniente que se revisase el formulario de configuración de cada grupo

de laboratorio, de forma que la aplicación avisase si detecta que se están

configurando opciones que podrían ser potencialmente incorrectas, como por

ejemplo si se están configurando dos grupos que coinciden a la misma hora en

el mismo aula, o si un profesor está asignado en dos grupos a la vez en el

mismo horario. En casos como estos el sistema debería avisar al profesor que

está realizando la configuración, pero no impedirle que continúa con ella una

vez que se ha asegurado de que es correcta.

En el mismo formulario, también se debería comprobar que la hora a la que

comienza un grupo de laboratorio sea anterior a la hroa en que termina. En la

versión actual el sistema no genera el grupo si se da esta circunstancia, pero no

muestra ningún aviso. El sistema debería impedir que se guarde la

configuración si se da esta circunstancia.

Una vez que se ha producido el reparto de grupos de laboratorio, debería

existir la posibilidad de visualizar a la vez las listas de alumnos de todos los

grupos en la misma pantalla. Actualmente para ver los listados se debe

seleccionar un grupo, y se muestra la lista de alumnos de ese grupo.

Sería conveniente que se desarrollaran las librerías necesarias para que el

módulo tuviera soporte para las copias de seguridad y la restauración de los

cursos de Moodle.

En la versión actual del módulo, cuando se produce el reparto de los grupos de

laboratorio el sistema envía un correo automáticamente a los profesores del

curso y otro a cada alumno indicándole el grupo al que ha sido asignado. Sería

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

161

conveniente que antes enviar el correo a los alumnos, el profesor pudiera

revisar las listas de alumnos generadas por el sistema, realizar los cambios

necesarios y por último dar su confirmación para que los correos fueran

enviados.

Por último, aunque el módulo ya ha sido enviado a la comunidad de Moodle

para su revisión y posterior aprobación, sería conveniente que se realizara un

seguimiento de este proceso, de manera que se asegure la inclusión del módulo

dentro del repositorio oficial de módulos no estándar de la plataforma. De esta

forma toda institución que quiera hacer uso de las funcionalidades

desarrolladas podrá descargarlo, modificarlo y usarlo libremente según sus

propias necesidades.

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

163

10 Bibliografía

AGGARWAL, A. K. & BENTO, R. (2000). Web-based education. En A.

Aggarwal, (Ed.), Web Based Learning and teaching technologies: opportunities and

challenges (pp. 198-215). Hercshey/London: Idea Group.

AVGERIOU, P., PAPASALOURUS, A., RETALIS, S. (2001). Web-Based

Learning Environments: Issues, Trends, Challenges. En Proceedings of the 1 st

IOSTE Symposium in Southern Europe, Science and Technology Education .

(paralimmi, Cyprus , May 2001)

BALLESTER, A. (2002). El Aprendizaje Significativo en la Práctica. Cómo hacer

el Aprendizaje Significativo en el Aula. España

BARTOLOMÉ, A. (2004). Blended Learning, Conceptos Básicos. Píxel-Bit

Revista de Medios y Educación, 23, 7-20.

BATES, T. (A.W.) (2000) Managing Technological Change. Strategies for

College and University Leaders. San Francisco: Jossey-Bass.

BELANGER, F Y JORDAN, D. H. (2000). Evaluation and Implementation Of

Distance Learning: Technologies Tools and Techniques. Virginia Polytecnnic

Institute and State University, USA

BRIET PLANELLS, D. (2006). Un reto en la Formación del Profesorado.

Ponencia presentada al VI Congreso Internacional Virtual de Educación CIVE

2006, España.

BRODSKY, M. W. (2003). Four Blended Learning Blunders and How to Avoid

Them. Learning Circuits, Noviembre 2003.

COMEZAÑA, O. & GARCÍA, F. (2005). Plataformas para Educación Basada en

Web: Herramientas, Procesos de Evaluación y Seguridad. Informe Técnico DPTOIA-

IT-2005-1. Salamanca: Departamento de Informática y Automática, Universidad

de Salamanca.

DODGE, B. (2001). FOCUS: Five rules for writing a great webquest. Learning &

Leading with Technology, 28(8). Recuperado en línea el 3 de junio de 2008, en

http://webquest.sdsu.edu/documents/focus.pdf

DUART, J. & LUPIÁÑEZ, F. (2005). La perspectiva organizativa del e-learning.

Revista de Universidad y Sociedad del Conocimiento Vol.2 - Nº 1 / Mayo de

2005. Recuperado en línea el 3 de junio de 2008, de www.uoc.edu/rusc

EDUTOOLS. (2010). Compare Management Systems . Recuperado en línea el 7

noviembre 2010, de http://www.edutools.info/course/compare/all.jsp.

ESCORCIA G. (2001). La Importancia de la Tecnología en la Educación.

GARCÍA PEÑALVO, F.J. (s/f) Estado actual de los sistemas e-learning.

Recuperado en línea el 7 de noviembre de 2010, en

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

164

http://campus.usal.es/~teoriaeducacion/rev_numero_06_2/n6_02_art_garcia_pe

nalvo.htm

GARCÍA PEÑALVO, F. J. y GARCÍA CARRASCO, J. (2001) Los espacios

virtuales educativos en el ámbito de Internet: Un refuerzo a la formación

tradicional, Teoría de la Educación. Educación y Culturaen la Sociedad de la

Información. Recuperado en línea el 7 de noviembre de 2010, en

http://www3.usal.es/~teoriaeducacion/rev_numero_03/n3_art_garcia-

garcia.htm

GÓMEZ, J. (2006). Moodle 1.5 Manual de Consulta. Propuesta Pedagógica.

Valladolid: GNU Press.

GONZÁLEZ DE FELIPE, A.T. (s/f). Guía de apoyo para el uso de Moodle 1.9.4.

Usuario desarrollador. EUITIO, Universidad de Oviedo. Recuperado en línea el

9 de noviembre de 2010, en

http://download.moodle.org/docs/es/1.9.4_usuario_desarrollador.pdf

GONZÁLEZ DE FELIPE, A.T. (s/f). Guía de apoyo para el uso de Moodle 1.9.4.

Usuario profesor. EUITIO, Universidad de Oviedo. Recuperado en línea el 9 de

noviembre de 2010, en

http://download.moodle.org/docs/es/1.9.4_usuario_profesor.pdf

GONZÁLEZ MARIÑO J.C. (2006). B-Learning utilizando Software Libre, una

alternativa viable en Educación Superior. Universidad Autónoma de

Tamaulipas. Mexico. Recuperado en línea el 9 de noviembre de 2010, en

http://revistas.ucm.es/edu/11302496/articulos/RCED0606120121A.PDF

HERNÁNDEZ, J.M. (2005). Software libre: técnicamente viable,

económicamente sostenible y socialmente justo. Zero Factory S.L. Barcelona.

IVORRA OLTRA, I. (2009). Tutorial:Creación de unmódulo actividad.Moodle

(1.9.3). Recuperado en línea el 9 de noviembre de 2010, en

http://gplsi.dlsi.ua.es/~slujan/materiales/creacion-modulo-moodle.pdf

JOIN (2005). Evaluación de las plataformas LMS.

KAPLAN-LEISERSON, E. (s/f). Glosary. American Society of Training and

Development. Citado por Clara López Guzmán.

LARA FUILLERAT J.M. (2009). Moodle, Manual de referencia para el

profesorado. Recuperado en línea el 9 de noviembre de 2010, en

http://www.scribd.com/doc/16990042/Moodle-Manual-de-referencia-para-

profesores-version-19

LÓPEZ GUZMÁN, C. (2005) Los repositorios de objetos de aprendizaje como

soporte para los entornos e-learning (Cap. 2). Recuperado en línea el 9 de

noviembre de 2010, en

http://www.biblioweb.dgsca.unam.mx/libros/repositorios/la_web.htm

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

165

MARCELO, C., PUENTE, D., BALLESTEROS, M. A. & PALAZÓN, A. (2002).

e-learning, Teleformación, Diseño, Desarrollo y Evaluación de la Formación a través de

Internet . Barcelona: Gestión 2000.

MENA, M. (2004). América Latina en la Búsqueda de Nuevos Modelos de

Educación a Distancia. En M. Mena (compiladora), La Educación a Distancia en

América Latina (pp 15-36). Buenos Aires: ICDE-UNESCO.

MOODLE (2010). Página oficial de Moodle. Recuperada en línea el 9 de

noviembre de 2010, en http://moodle.org/

MOORE, J. & CHURCHWARD, M. (2010). Moodle 1.9 Extension

Development. Birmingham: Packt Publishing.

PHPXREF: MOODLE (2010). Referencia del código fuente de Moodle.

Recuperado en línea el 9 de noviembre de 2010, en

http://xref.moodle.org/nav.html?index.html

RENGARAJAN, R. (2001). LCMS and LMS: Taking Advantage of Tight

Integration. Click 2 Learn. Recuperado en línea el 7 de noviembre de 2010, de

http://www.e-learn.cz/soubory/lcms_and_lms.pdf.

RODRÍGUEZ MARTÍN, F.J. (2007). Tutorial para la creación de un Módulo en

Moodle. Recuperado en línea el 9 de noviembre de 2010, en

http://moodle.org/pluginfile.php/226/mod_forum/attachment/335652/Tutorial_

M_dulos.pdf

ROMERO, L. M. & RUBIO M. J. (2004). Lineamientos generales para la

educación a distancia. En Mena, M. (compiladora) La Educación a Distancia en

América Latina (pp 175-215). Buenos Aires: ICDE-UNESCO.

ROMERO, T.A. (2006). Moodle, Unimos Mentes, Creamos Conocimiento Libre.

Ponencia presentada al VI Congreso Internacional Virtual de Educación CIVE

2006, España.

ROSAS, P. (2005). La Gestión de Ambientes Virtuales de Aprendizaje en los

Posgrados de la U de G. en Tecnologías para Internacionalizar el Aprendizaje.

(pp. 63-75). Guadalajara: Universidad de Guadalajara, Méjico.

ROSENBERG, M. J. (2001). e-learning Strategies for Delivering Knowledge in the

Digital Age. Columbus, HO: McGraw-Hill.

SANGRÁ MORER A. (2002) Educación a distancia, educación presencial y

usos de la tecnología: una tríada para el progreso educativo. Recuperado en

línea el 7 de noviembre de 2010, en

http://edutec.rediris.es/Revelec2/revelec15/sangra.pdf

STALLMAN, R M. (2004). Software Libre para una Sociedad Libre. Madrid:

GNU Press.

SUTTON, L. (1999). Interaction. Arizona State University. Recuperado en línea

el 7 de noviembre de 2010, en

http://seamonkey.ed.asu.edu/~mcisaac/emc703/leah5.html

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

166

TAIT, A.; MILLS, R. (ED) (1999) The convergence of distance and

conventional education. London: Routdlege

THORNE, K. (2003). Blended Learning: How to Integrate Online & Traditional

Learning . London : VA Kogan.

VASSILEVA J. (1997) Dynamic Courseware Generation on the WWW.

Proceedings of the Intelligent Educational Systems on the World Wide Web.

Workshop at AIED'97, Kobe. Japan.

VERA, F. (2008) La modalidad Blended Learning en Educación Superior.

Recuperado en línea el 7 de noviembre de 2010, en

http://www.utemvirtual.cl/nodoeducativo/wp-

content/uploads/2009/03/fvera_2.pdf

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

167

11 Índice de ilustraciones Ilustración 1: Sistemas de Administración de Aprendizaje (LMS) ....................... 26

Ilustración 2: Plataformas de enseñanza virtual más comunes ............................ 27

Ilustración 3: Sistemas de Administración de Contenidos de Aprendizaje

(LCMS) ....................................................................................................................................... 28

Ilustración 4: Entorno LAMP ..................................................................................... 34

Ilustración 5: Arquitecturas típicas de Moodle ....................................................... 36

Ilustración 6: Las tres áreas de Moodle .................................................................... 37

Ilustración 7: Directorios de Moodle ........................................................................ 38

Ilustración 8: Estructura general de Moodle............................................................ 41

Ilustración 9: Apache instalado correctamente ....................................................... 53

Ilustración 10: Instalación de MySql ......................................................................... 54

Ilustración 11: Instalación de Moodle-Paso 1 .......................................................... 55

Ilustración 12: Instalación de Moodle-Paso 2 .......................................................... 56

Ilustración 13: Instalación de Moodle-Paso 3 .......................................................... 56

Ilustración 14: Instalación de Moodle-Paso 4 .......................................................... 57

Ilustración 15: Instalación de Moodle-Paso 5 .......................................................... 57

Ilustración 16: Instalación de Moodle-Paso 6 .......................................................... 58

Ilustración 17: Instalación de Moodle-Paso 7 .......................................................... 58

Ilustración 18: Instalación de Moodle-Paso 8 .......................................................... 59

Ilustración 19: Instalación de Moodle-Paso 9 .......................................................... 59

Ilustración 20: Instalación de Moodle-Paso 10 ........................................................ 60

Ilustración 21: Instalación de Moodle-Paso 11 ........................................................ 60

Ilustración 22: Instalación de Moodle-Paso 12 ........................................................ 61

Ilustración 23: Instalación de Moodle-Paso 13 ........................................................ 61

Ilustración 24: Formulario generado con la clase moodleform_mod................... 93

Ilustración 25: Añadir un campo selector de fecha a un formulario .................... 94

Ilustración 26: Editor XMLDB .................................................................................... 95

Ilustración 27: Entorno tecnológico ......................................................................... 105

Ilustración 28: Diagrama Entidad/Relación ........................................................... 117

Ilustración 29: Modelo de casos de uso general .................................................... 121

Ilustración 30: Modelo de casos de uso: Gestión de instancias ........................... 122

Ilustración 31: Modelo de casos de uso: Gestión de grupos ................................ 123

Ilustración 32: Modelo de casos de uso: Gestión de alumnos ............................. 124

Ilustración 33: Modelo de casos de uso: Avisos .................................................... 125

Ilustración 34: Modelo de casos de uso: Inscripción ............................................ 126

Ilustración 35: Diagrama de flujo de usuario profesor ......................................... 127

Ilustración 36: Diagrama de flujo del usuario Alumno ........................................ 128

Ilustración 37: Diagrama de flujo del algoritmo de reparto de grupos ............. 129

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

168

Ilustración 38: interfaz Configurar/Editar instancias ........................................... 132

Ilustración 39: Interfaz listado de instancias .......................................................... 132

Ilustración 40: Interfaz Configurar/Editar grupos de laboratorio ...................... 133

Ilustración 41: Interfaz listado de alumnos de un grupo ..................................... 133

Ilustración 42: Interfaz Agregar/Eliminar alumnos de un grupo ....................... 134

Ilustración 43: Interfaz Inscribirse/Editar inscripción .......................................... 135

Ilustración 44: Diagrama de componentes ............................................................. 135

Ilustración 45: Agregar el módulo GruposLab a un curso .................................. 141

Ilustración 46: Configuración general de la aplicación ........................................ 142

Ilustración 47: Configuración individual de los grupos ...................................... 143

Ilustración 48: Mensaje grupos configurados correctamente .............................. 144

Ilustración 49: Calendario con los grupos de laboratorio .................................... 145

Ilustración 50: Administración de un grupo de laboratorio ................................ 146

Ilustración 51: Agregar/quitar alumnos de un grupo .......................................... 148

Ilustración 52: Elegir grupo de laboratorio ............................................................ 149

Ilustración 53: Modificar grupos de laboratorio ................................................... 150

Ilustración 54: Comprobar grupo asignado ........................................................... 151

Ilustración 55: Colocar carpeta gruposlab en el directorio de módulos ............ 151

Ilustración 56: Pulsar Notificaciones para instalar el módulo............................. 152

Ilustración 57: Módulo instalado correctamente ................................................... 153

Ilustración 58: Desinstalar módulo GruposLab .................................................... 153

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

169

12 Índice de tablas Tabla 1: RQF-01_Visualización de información .................................................... 106

Tabla 2: RQF-02_Inscripción .................................................................................... 107

Tabla 3: RQF-03_Modificación de la inscripción ................................................... 107

Tabla 4: RQF-04_Aviso de reparto .......................................................................... 107

Tabla 5: RQF-05_Información de grupo asignado ................................................ 108

Tabla 6: RQF-06_Inserción en un curso .................................................................. 108

Tabla 7: RQF-07:_Eliminación de un curso ............................................................ 108

Tabla 8: RQF-08_Configuración de la instancia .................................................... 108

Tabla 9: RQF-9_Modificación de la instancia ........................................................ 109

Tabla 10: RQF-10_Configuración particular de cada grupo ................................ 109

Tabla 11: RQF-11_Modificación particular de grupo ........................................... 109

Tabla 12: RQF-12_Visualización de grupos ........................................................... 109

Tabla 13: RQF-13_Visualización de listas de estudiantes .................................... 110

Tabla 14: RQF-14_Descarga de listas de estudiantes ............................................ 110

Tabla 15: RQF-15_Redistribución de estudiantes ................................................. 110

Tabla 16: RQF-16_Aviso de reparto ........................................................................ 110

Tabla 17: RQF-17_Instalación del módulo ............................................................. 111

Tabla 18: RQF-18_Actualización del módulo ........................................................ 111

Tabla 19: RQF-19_Desinstalación del módulo ....................................................... 111

Tabla 20: RQF-20_Reparto de grupos ..................................................................... 112

Tabla 21: RQF-21_Eliminación de archivos temporales ....................................... 112

Tabla 22: RQD-01_Datos de la instancia................................................................. 113

Tabla 23: RQD-02_Datos de los grupos .................................................................. 113

Tabla 24: RQD-03_Datos de los estudiantes .......................................................... 114

Tabla 25: RQI-01_Interfaces separadas ................................................................... 114

Tabla 26: RQI-02_Calendario de grupos ................................................................ 114

Tabla 27: RQS-01_Control de acceso de usuarios ................................................. 115

Tabla 28: RQS-02_Configurar grupos ..................................................................... 115

Tabla 29: RQS-03_Inscribirse ................................................................................... 115

Tabla 30: RQC-01_Estilo de código ......................................................................... 116

Tabla 31: Interfaces de usuario ................................................................................ 131

Tabla 32: Especificación del plan de pruebas ........................................................ 140

Tabla 33: Costes de sistemas .................................................................................... 155

Tabla 34: Costes de Hardware ................................................................................. 155

Tabla 35: Costes de Software ................................................................................... 156

Tabla 36: Costes de consumibles ............................................................................. 156

Tabla 37: Coste total de tiempo trabajado .............................................................. 156

Tabla 38: Coste total de ejecución material ............................................................ 157

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

170

Tabla 39: Gastos generales y beneficio industrial ................................................. 157

Tabla 40: Coste de ejecución por contrata .............................................................. 157

Tabla 41: Tarifas de honorarios facultativos .......................................................... 157

Tabla 42: Honorarios facultativos ........................................................................... 158

Tabla 43: Presupuesto total ...................................................................................... 158

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

171

13 Índice de código Código 1: Instalación de Apache2 ............................................................................. 53

Código 2: Instalación de MySQL ............................................................................... 53

Código 3: Instalación de PHP .................................................................................... 54

Código 4: Descarga de Moodle .................................................................................. 54

Código 5: Descomprimir Moodle y colocarlo el directorio www ........................ 54

Código 6: Crear el directorio moodledata y darle permisos adecuados ............. 55

Código 7: Ejemplos de nombres de variables correctos e incorrectos ................. 64

Código 8: Ejemplo de definición de una constante ................................................ 64

Código 9: Ejemplo de función bien definida ........................................................... 64

Código 10: Ejemplo de bloque de código correcto siguiendo el estilo de Moodle

..................................................................................................................................................... 65

Código 11: Ejemplos de definición de cadenas ....................................................... 65

Código 12: Ejemplos de comentarios de línea y párrafo ........................................ 66

Código 13: Ejemplo del uso de espacios para hacer más claro el código ............ 66

Código 14: Ejemplo de copia correcta de un objeto ................................................ 66

Código 15: Ejemplo de fichero access.php ............................................................... 73

Código 16: Ejemplo de fichero install.xml ............................................................... 76

Código 17: Ejemplo de fichero upgrade.php ........................................................... 77

Código 18: Ejemplo de fichero mod_form.php ....................................................... 80

Código 19: Ejemplo de fichero version.php ............................................................. 81

Código 20: Ejemplo de fichero view.php ................................................................. 83

Código 21: Función require_capability .................................................................... 84

Código 22: Función has_capability ........................................................................... 84

Código 23: Función get_context_instance ................................................................ 84

Código 24: Función get_users .................................................................................... 85

Código 25: Función execute_sql ................................................................................ 86

Código 26: Función record_exists ............................................................................. 87

Código 27: Función record_exists_select .................................................................. 87

Código 28: función record_exists_sql ....................................................................... 87

Código 29: Función count_records ........................................................................... 88

Código 30: Función count_records_select ................................................................ 88

Código 31: Función count_records_sql .................................................................... 88

Código 32: Función insert_record ............................................................................. 89

Código 33: Función update_record ........................................................................... 89

Código 34: Ejemplo añadir lista desplegable ........................................................... 93

Código 35: Ejemplo de cadenas en el fichero de idioma ........................................ 96

Código 36: Recuperación de cadenas del fichero de idioma ................................. 96

Código 37: Ejemplo de definición de capacidades ................................................. 98

Análisis del desarrollo de extensiones para Moodle: Desarrollo de un módulo para la gestión de

laboratorios docentes

172

Código 38: Ejemplo de cambios en la base de datos .............................................. 99

Código 39: Ejemplo de código XML de backup .................................................... 100