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étodo | Descripció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étodo | Descripció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é | TTL | Usada por |
|---|---|---|
courseaverages | 1 hora | get_course_average_progress, get_course_average_grade, get_course_average_streak |
userstreaks | 2 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 Moodle | Uso |
|---|---|
mdl_course_modules_completion | Completación de actividades |
mdl_grade_grades, mdl_grade_items | Calificaciones |
mdl_logstore_standard_log | Logs de actividad para racha y accesos |
mdl_assign_submission | Fechas límite de entregas |
mdl_event | Eventos del calendario |
mdl_course_sections | Estructura de secciones del curso |
Instalación
- Copiar
public/local/pccntr8203403_dashboard/al directoriolocal/de Moodle. - Ejecutar upgrade:
docker exec colombiaaprende_web php /var/www/admin/cli/upgrade.php
- 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_cdigitalconsume las clases de datos directamente desde su renderer (course_stats,academic_alerts) y desde el layoutmydashboard.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.