Card "Continúa donde quedaste" (Area personal /my/)
Tipo: Theme (layout + template + SCSS)
Ubicacion: public/theme/cdigital/
Alcance: 2 — Dashboard de aprendizaje
Estado: Implementado
Proposito
Tarjeta que muestra el ultimo curso visitado por el estudiante con un acceso directo para continuar desde donde lo dejo. Se renderiza en la parte superior del Area personal (/my/), debajo del Welcome Hero y encima del contenido de la pagina. Figma node 19644-8002.
La card muestra:
- Imagen del curso (172 x 108 px).
- Titulo "Continua donde quedaste".
- Nombre del curso.
- Nombre del siguiente modulo pendiente (ej. "Modulo 1").
- Barra de progreso del curso con porcentaje.
- Boton "Continuar" que lleva al curso en la seccion correspondiente.
Arquitectura
Mismo patron del Stats Row (ADR-002): presentacion quemada en el tema, sin bloques custom. La capa de datos es el plugin local local_pccntr8203403_dashboard.
theme_cdigital/layout/mydashboard.php
+-- Obtiene el ultimo curso visitado (course_get_recent_courses)
+-- Consulta progreso y modulos (course_stats::get_user_progress / get_user_module_progress)
+-- Determina el primer modulo incompleto
+-- Construye la URL con seccion especifica segun el formato del curso
+-- Renderiza templates/mydashboard.mustache
+-- partial templates/continue_card.mustache (wrapper .continuecard)
Flujo de datos
| Paso | Que hace | Fuente |
|---|---|---|
| 1 | Obtiene el ultimo curso accedido por el usuario | course_get_recent_courses($USER->id, 1) |
| 2 | Porcentaje de progreso general del curso | course_stats::get_user_progress() |
| 3 | Estado de finalizacion por seccion/modulo | course_stats::get_user_module_progress() |
| 4 | Primer modulo con complete === false | Iteracion sobre modulos |
| 5 | Construccion de URL de continuacion | moodle_url con logica segun formato |
Logica de URL
El boton "Continuar" redirige al curso con un ancla a la seccion pendiente. La URL varia segun el formato del curso:
- Formato
onetopic(pestanas):/course/view.php?id=N§ion=N#tabs-tree-start - Otros formatos:
/course/view.php?id=N#section-N
Esto asegura que en formato OneTopic la navegacion active la pestana correspondiente y haga scroll al contenedor de pestanas.
Renderizado condicional
La card solo se muestra cuando:
- El usuario esta autenticado y no es invitado (
isloggedin() && !isguestuser()). - El usuario tiene al menos un curso accedido recientemente.
- La seccion
{{#continuecard}}en el Mustache es verdadera.
Ajustes de layout (pixel-perfect)
La card esta envuelta en un contenedor .cdigital-continuecard con las siguientes caracteristicas tomadas del diseno de Figma:
background-color: #fff— fondo blanco para el espacio exterior.padding: 20px— margen blanco alrededor de la tarjeta.border-radius: 12px— esquinas redondeadas del contenedor.
Archivos clave
| Archivo | Descripcion |
|---|---|
theme/cdigital/layout/mydashboard.php | Arma el contexto continuecard (curso, progreso, modulo, URL) |
theme/cdigital/templates/continue_card.mustache | Partial de la card (imagen, titulo, info, progreso, boton) |
theme/cdigital/templates/mydashboard.mustache | Incluye el partial condicionalmente |
theme/cdigital/scss/preset/cdigital.scss | Secciones .cdigital-continuecard y .continuecard__* |
theme/cdigital/lang/{en,es}/theme_cdigital.php | Strings continuecard_title, continuecard_progresslabel, continuecard_continue, continuecard_continue_aria |
local/pccntr8203403_dashboard/classes/data/course_stats.php | Metodos get_user_progress() y get_user_module_progress() |