Saltar al contenido principal

local_pccntr8203403_dashboard

Tipo: local plugin
Ubicación: public/local/pccntr8203403_dashboard/
Versión: 1.0.1 (2026061000)
Requiere: Moodle 5.0+ (2025092600)
Alcance: 2 — Dashboard de aprendizaje (capa de datos reutilizada por el Alcance 3)
Estado: Estable

Propósito

Capa de datos del Dashboard de aprendizaje (Scope 2). Provee estadísticas de progreso, desempeño y alertas académicas del estudiante en un curso, sin acceso directo a mdl_* desde el tema o el bloque.

Clases

data\course_stats

Estadísticas de un estudiante en un curso concreto. Todas las consultas usan las APIs de Moodle (completion_info, grade_get_course_grade, get_logs), no SQL raw.

MétodoDescripción
get_user_progress($course, $userid)Porcentaje de completación (completed / total × 100). Retorna null si el seguimiento de completación no está habilitado.
get_user_module_progress($course, $userid)Progreso desglosado por sección (módulo). Retorna lista [name, pct, complete, activities].
get_user_course_grade($courseid, $userid)Calificación final del estudiante en el curso (escala 0–5).
get_course_average_grade($courseid)Promedio de calificaciones de todos los estudiantes matriculados.
get_pending_activities($courseid, $userid)Cantidad de actividades sin completar con fecha límite.
get_learning_streak($userid)Días consecutivos con actividad registrada en logs.
get_latest_grades($courseid, $userid)Últimas calificaciones recibidas (módulo, nota, fecha).
get_nearest_due_hours($courseid, $userid)Horas hasta la próxima entrega más cercana.
get_days_since_last_access($courseid, $userid)Días desde el último acceso al curso.
get_expected_progress_pct($course)Porcentaje esperado de avance según la duración del curso y la fecha actual.
get_participation_counts($courseid, $userid)Conteo de participaciones en foros y actividades interactivas.
get_pending_evaluations($courseid, $userid)Evaluaciones entregadas pero aún sin calificar.
get_inactive_progress_days($courseid, $userid)Días con acceso registrado pero sin progreso real (completaciones).
get_modules_behind_count($course, $userid)Secciones que deberían estar completas según la fecha esperada pero no lo están.

data\student_stats

Estadísticas globales del estudiante (todos sus cursos). Usada por el Stats Row del Área personal (/my/).

MétodoDescripción
get_active_courses($userid)Cursos matriculados con actividad en los últimos 30 días.
get_pending_activities_global($userid)Total de actividades pendientes en todos los cursos activos.
get_upcoming_events($userid)Próximos eventos del calendario Moodle del usuario.
get_completed_courses($userid)Cursos con criterio de finalización marcado como completado.

data\academic_alerts

Motor de alertas académicas con 12 tipos (ver Alertas académicas). Presentación-agnóstico: retorna códigos + nivel + flag motivacional.

Optimización de rendimiento (caché)

data\course_stats cachea sus resultados en dos niveles para acotar el costo por vista de curso: el banner "Tu desempeño académico" y la modal "Ver mi avance" invocan varios métodos 2-3 veces en la misma petición, y los agregados de curso (promedios y rachas) requieren escanear mdl_logstore_standard_log para todos los matriculados — sin caché esto suma ~25-30 consultas por carga de course/view.php.

Memoización por request

Los métodos por usuario que se invocan varias veces en la misma petición usan un caché estático en memoria (self::$requestcache, helper remember()), válido solo durante el request actual:

  • get_user_progress($course, $userid)
  • get_user_module_progress($course, $userid)
  • get_user_course_grade($courseid, $userid)

Caché MUC de aplicación (db/caches.php)

Los agregados de curso (iguales para todos los estudiantes, o estables durante el día) se guardan en cachés de aplicación de Moodle (MUC):

Definición de cachéTTLUsada por
courseaverages1 horaget_course_average_progress, get_course_average_grade, get_course_average_streak
userstreaks2 días (clave incluye el día)get_user_streak, get_inactive_progress_days

La lógica de cómputo original de cada método se movió a un método privado compute_*(); el método público ahora consulta la caché, y si hay miss, calcula y guarda el resultado.

Tablas de base de datos

El plugin no crea tablas propias. Consulta exclusivamente tablas core de Moodle:

Tabla MoodleUso
mdl_course_modules_completionCompletación de actividades
mdl_grade_grades, mdl_grade_itemsCalificaciones
mdl_logstore_standard_logLogs de actividad para racha y accesos
mdl_assign_submissionFechas límite de entregas
mdl_eventEventos del calendario
mdl_course_sectionsEstructura de secciones del curso

Instalación

  1. Copiar public/local/pccntr8203403_dashboard/ al directorio local/ de Moodle.
  2. Ejecutar upgrade:
    docker exec colombiaaprende_web php /var/www/admin/cli/upgrade.php
  3. No requiere configuración adicional.

Dependencias

  • Ningún plugin depende de este plugin. (block_pccntr8203403_learnstats, que declaraba la dependencia, fue retirado — ver ADR-002.)
  • theme_cdigital consume las clases de datos directamente desde su renderer (course_stats, academic_alerts) y desde el layout mydashboard.php (student_stats).

Exposicion via API — Scope 3 (pendiente)

El plugin no tiene capa de Web Services. No existe db/services.php ni classes/external/, por lo que los datos de alertas, progreso y calificaciones no son consultables desde fuera de Moodle via REST ni token.

La estructura de retorno de las funciones principales ya es serializable sin cambios:

// academic_alerts::get_active_alerts() → listo para external_multiple_structure
['code' => string, 'level' => 'leve'|'critico', 'motivational' => bool]

La implementacion de la capa externa esta decidida y documentada en el ADR correspondiente.

Ver: ADR-001 — Capa Web Services para datos del dashboard