chamilo / chamilo-lms

Chamilo is a learning management system focused on ease of use and accessibility
https://chamilo.org
GNU General Public License v3.0
769 stars 470 forks source link

Informes de usuario/myStudents: Posible error de calculo de tiempo en lecciones con ejercicios #5580

Open juancp-contidosdixitais opened 3 weeks ago

juancp-contidosdixitais commented 3 weeks ago

Actualmente parece que hay dos problemas con el calculo del tiempo de un usuario en una lección, los valores que vemos en los informes de usuario dentro de un curso (/main/mySpace/myStudents.php) y que se muestra en el desglose de tiempo por lección.

image

Este dato se saca del método getCalculateTime de main/inc/lib/tracking.lib.php. Según la casuistica tanto pueda que devuelva tiempo de menos como tiempo de más.

Tiempo de menos:

Si en la lección incluimos un ejercicio con múltiples pasos (más de una pregunta y con el ejercicio configurado para que sea una pagina por pregunta) para calcular el tiempo que pasa el usuario en el ejercicio dentro de la lección solo utiliza el registro de track_e_access_complete que crea cuando carga la introducción del ejercicio (la vista con el botón de "Iniciar la prueba") y el registro de la primera pregunta que tenga el ejercicio, si hubiese más preguntas no tomaría el tiempo que pasó el usuario en ellas para el total de la lección:

https://github.com/chamilo/chamilo-lms/blob/d3f8c22fe6334e0733765599e4f95fe4091a42fa/main/inc/lib/tracking.lib.php#L7565-L7567

Sin embargo si que se guarda para el acumulado de tiempo que pasa el alumno en ejercicios ...

https://github.com/chamilo/chamilo-lms/blob/d3f8c22fe6334e0733765599e4f95fe4091a42fa/main/inc/lib/tracking.lib.php#L7567-L7569

Exceso de tiempo. También se puede dar el caso opuesto y dar tiempo de más

Hay varias formas de provocarlo, en todo caso ocurre cuando la lección tiene al menos un ejercicio y algún otro paso, como un documento, un ejemplo básico sería una lección con un documento, un ejercicio y otro documento, con este estructura de lección entramos como alumno a la lección y realizamos los siguiente pasos:

  1. A las 00:00 entramos en la lección y se carga el documento

  2. A las 00:02 pasamos al siguiente elemento de la lección el ejercicio, pero no pasamos de la pantalla de introducción del ejercicio (la del botón "Iniciar la prueba"). Esto deja registro en track_e_access_complete con el valor "learnpath_id" en la columna "action"

  3. A las 00:02 pasamos del ejercicio al siguiente paso, el otro documento.

  4. A las 00:10 saltamos del documento al ejercicio, esta vez si entramos y lo completamos, llevándonos hasta las 00:15. Esto deja un primer registro en track_e_access_complete con el valor "learnpath_id" en la columna "action" y nuevos registros con cada paso que se da dentro del ejercicio con el id de la lección en la columna "action"

Con la lógica del método getCalculateTime($userId, $courseId, $sessionId): https://github.com/chamilo/chamilo-lms/blob/d3f8c22fe6334e0733765599e4f95fe4091a42fa/main/inc/lib/tracking.lib.php#L7561-L7570

En vez de dar que ha estado en esa lección 15 minutos en total (10 minutos en los documentos y 5 en el ejercicio) nos va a devolver que se ha estado 18 de minutos porque cogerá el tiempo desde el punto 2 (00:02) hasta el tiempo que vuelva iniciar el ejercicio en el punto 5 (00:10) dando como diferencia entre ambos 8 minutos https://github.com/chamilo/chamilo-lms/blob/d3f8c22fe6334e0733765599e4f95fe4091a42fa/main/inc/lib/tracking.lib.php#L7561-L7570

Otro ejemplo con calculo incorrecto dando un exceso de tiempo podría ser con dos lecciones con la estructura anterior (documento, ejercicio, documento), donde el usuario completó todo la primera lección, pero entra nuevamente en el ejercicio y no avanza más allá de la introducción, esto provocará que en la siguiente lección donde exista un ejercicio se tome como punto de partida para calcular el tiempo el último registro con el valor "learnpath_id" en la columna "action" de track_e_access_complete sin importar que realmente sea de otra lección, dando un dato distorsionado:

https://github.com/chamilo/chamilo-lms/blob/d3f8c22fe6334e0733765599e4f95fe4091a42fa/main/inc/lib/tracking.lib.php#L7565

¿Posible solución?

Cada vez que se completa un paso dentro de un ejercicio queda en track_e_access_complete un registro con el valor del identificador de la lección en la columna "action_details" (bueno ... y en la columna "action")

image

Teniendo en cuenta esto podríamos modificar la lógica para comprobar si el punto de referencia anterior es de la misma lección e incluso omitir usar como punto de referencia si el campo "action" de track_e_access_complete es "learnpath_id"

image

Esto debiera dar un valor de tiempo más ajustado a la realidad

Servidor