Por defecto, el plugin Attendance de Moodle permite registrar cuatro estados diferentes de asistencia:
Estados de asistencia del plugin Attendance de Moodle
- Present: Se registra como P y puntúa 1 punto. Se utiliza para marcar los estudiantes que asisten al curso.
- Excused: Se registra como E y puntúa 0.5 puntos. Se utiliza para marcar las faltas justificadas de los estudiantes.
- Late: Se registra como L y puntúa 0.5 puntos. Se utiliza para marcar asistencias parciales de los asistentes al curso.
- Absent: Se registra como A y puntúa 0 puntos. Se utiliza para marcar ausencias.
Añadir, un estado de asistencia diferente de los que ya trae el plugin Attendance, se realiza desde la opción: Administración->Plugins->Attendance->Default Status Set, tal y como muestra la imagen contigua:

La configuración a través de esta pantalla, permite que los nuevos cursos que creemos, se creen con la nueva configuración aplicada, pero no se aplica a los cursos que ya existentes. Una vez se empiece un curso, la configuración anterior debería aplicarse al contexto del curso, donde accederíamos a una pantalla similar y los nuevos estados de asistencia se aplicarían únicamente al contexto del mismo.
Si hay muchos cursos de Moodle funcionando, ¿Cómo se añaden, nuevos estados de asistencia a todos los cursos?. El plugin Attendance de Moodle, no permite añadir de forma masiva nuevos estados a los cursos que están funcionando. Para ello se necesita un procedimiento almacenado MySQL que permita insertar nuevos estados en la tabla mdl_attendance_statuses.
Estructura de la tabla mdl_attendance_statuses
La tabla mdl_attendance_statuses, muestra la siguiente apariencia:


La tabla mdl_attendance_statuses, es la tabla responsable de almacenar los estados registrados por el plugin Attendance de Moodle, en los cursos que están funcionado. Dispone de un campo clave autonumerico y tres indices que se usan como claves foráneas para la relación entre tablas.
El campo attendanceid es el responsable de relacionar los valores de asistencia con un curso y el resto de campos son bastante intuitivos.
Añadir nuevos estados de asistencia en la tabla mdl_attendance_statuses consiste en crear un procedimiento almacenado en MySQL, que lea los registros agrupándolos por el campo attendanceid, y utilizar cada lectura de fila para incluir un nuevo estado.
La siguiente consulta lee la tabla mdl_attendance_statuses agrupando por el campo attendanceid:
SELECT DISTINCT attendanceid FROM mdl_attendance_statuses;
Solo se necesita conocer los valores que cambian para cada curso, ya que los usaremos para saber cuando insertar un nuevo estado. Este proceso se lleva a cabo mediante un cursor MySQL, que permita insertar el nuevo valor en la tabla tal y como en el ejemplo:
INSERT INTO mdl_attendance_statuses (attendanceid, acronym, description, grade, studentavailability, setunmarked, visible, deleted, setnumber)
VALUES (singleattendanceid, acronimo, descripcion, puntuacion, NULL, NULL, 1, 0, 0);
PROCEDIMIENTO ALMACENADO PARA AÑADIR NUEVOS ESTADOS DE ASISTENCIA EN TABLA MDL_ATTENDANCE_STATUSES
Cualquier procedimiento que creemos en MySQL presenta siempre la misma estructura:
- Declaración de variables
- Manipulación de la consulta
En el procedimiento siguiente utilizamos un bucle que lee las filas de la consulta y utiliza cada valor para insertar los valores que pasamos por parámetro en la tabla.
DROP PROCEDURE IF EXISTS addAttendanceStatuses;
DELIMITER $$
CREATE PROCEDURE addAttendanceStatuses(IN acronimo VARCHAR(2); IN descripcion VARCHAR(30); IN puntuacion DECIMAL(5,2) )
BEGIN
DECLARE singleattendanceid bigint(10);
DECLARE status_cursor CURSOR FOR SELECT DISTINCT attendanceid FROM mdl_attendance_statuses;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET @hecho = TRUE;
OPEN status_cursor;
do_loop:LOOP
FETCH status_cursor INTO singleattendanceid;
IF @hecho THEN
LEAVE do_loop;
END IF;
INSERT INTO mdl_attendance_statuses (attendanceid, acronym, description, grade, studentavailability, setunmarked, visible, deleted, setnumber)
VALUES (singleattendanceid, acronimo, descripcion, puntuacion, NULL, NULL, 1, 0, 0);
END LOOP do_loop;
CLOSE status_cursor;
END $$
DELIMITER ;
El procedimiento anterior acepta tres parámetros: acronym, description y grade. Estos parámetros se actualizarán en la base de datos permitiendo así que los cursos dispongan de una sola vez de la nueva configuración.
Para más información sobre el uso de consultas y procedimientos almacenados en MySQL puedes visitar la web oficial picando en el siguiente enlace: documentación MySQL
También puedes encontrar documentación detallada sobre Moodle o el plugin Attendance en el sitio oficial del sitio.
Por último, en mi blog también trato el tema de procedimientos almacenados que permiten modificar la base de datos de moodle: Posts sobre moodle