Bloque "Cursos que necesitan atención"
- Impacto — Tema: SCSS
.cdigital-atencion*y override del chrome de bloque dentro de.cdigital-activitypanel - Impacto — Plugin: Bloque nuevo
block_pccntr8203403_atencion(solo lectura) +data\attention_coursesy cachéuseralertsenlocal_pccntr8203403_dashboard - Requisito: 02 · Lógica Dashboard (xlsx) · Figma:
19735-3646· Estado: Implementado
Propósito
Banner informativo del Área personal (/my/) que lista los cursos del estudiante donde el
motor de alertas académicas detecta al menos una condición de
riesgo, para que pueda entrar directamente al que necesita trabajo.
Es la vista transversal de la misma información que la card "Alertas académicas" muestra curso por curso dentro de la modal "Ver mi avance": allí se responde "¿qué me pasa en este curso?"; aquí, "¿en cuál de mis cursos debo enfocarme?".
Comportamiento
- Se muestra como bloque en la región
side-predel Panel de Actividades, disponible en el desplegable Añadir… con la edición activada. - Lista hasta 3 cursos, cada uno como una tarjeta blanca con la carátula del curso y su
nombre completo, enlazada a
/course/view.php. - Si ningún curso tiene alertas de riesgo, el bloque no emite contenido y Moodle lo oculta automáticamente. No hay estado vacío.
Criterio de selección
Un curso entra en la lista cuando academic_alerts::get_active_alerts() devuelve al menos una
alerta no motivacional (critico o leve). Las alertas 11 y 12 —racha positiva y alto
desempeño— se descartan por ser positivas.
El orden es: primero los cursos cuya alerta más grave es critico, y dentro de cada grupo, los
que acumulan más alertas de riesgo.
Alcance de la evaluación
El motor ejecuta 12 evaluadores por curso, así que recorrer todas las matrículas en cada carga
de /my/ sería costoso. La evaluación está acotada en dos frentes:
| Límite | Valor | Efecto |
|---|---|---|
attention_courses::MAX_EVALUATED | 10 | Máximo de matrículas evaluadas por petición, en orden "acceso más reciente primero" |
attention_courses::DEFAULT_LIMIT | 3 | Máximo de cursos mostrados en el banner |
Además, el resultado por curso se memoiza en la caché MUC useralerts con clave
alerts_{curso}_{usuario}_{día}: solo se guardan tres escalares (conteo de alertas, código de
la alerta principal y su nivel), y la clave incorpora el día en la zona horaria del estudiante,
con la misma convención que course_stats usa para las rachas.
Los cursos ocultos se filtran con can_access_course(): solo aparecen si el estudiante puede
entrar realmente en ellos.
Estructura del bloque
| Archivo | Contenido |
|---|---|
block_pccntr8203403_atencion.php | applicable_formats() = ['my' => true], hide_header(), armado del contexto (nombre, URL, carátula) |
templates/content.mustache | Markup del banner: encabezado con ícono, copy y lista de tarjetas de curso |
db/access.php | Capacidades addinstance y myaddinstance (esta última con archetype user, para que el estudiante pueda añadirlo a su propia Área personal) |
lang/{es,en}/ | Título, copy del banner y motivos accesibles (reason_critico, reason_leve) |
pix/warning.svg | Ícono de advertencia propio, para no depender de que theme_cdigital sea el tema activo |
version.php | Declara dependencies sobre local_pccntr8203403_dashboard |
La carátula sale de core_course\external\course_summary_exporter::get_course_image(), con
get_generated_image_for_id() como respaldo cuando el curso no tiene imagen propia.
Presentación en el tema
Los tokens del Figma se aplican en scss/preset/cdigital.scss: fondo corn-silk #fffae8, borde
sunglow #fecc2f, tarjetas blancas con borde vis-vis #fee697 y carátula de 75×42 px con radio
12 px. Son los mismos tokens del
banner informativo de curso.
El Panel de Actividades pinta todos sus bloques con un chrome azul
(borde #c4c6d6, fondo #eff4ff); este banner lo neutraliza para poner el suyo. La plantilla
core lib/templates/block.mustache envuelve el contenido en card-body p-3 y
card-text content mt-3 —utilidades de Bootstrap declaradas con !important—, así que el
override las anula explícitamente para que el banner ocupe el ancho completo de la columna,
igual que el resto de las tarjetas del panel.
Personalización del texto
El copy del banner es un string de idioma fijo (bannermessage). El código de la alerta
principal de cada curso (topcode) está disponible en el contexto pero no se usa todavía para
variar el mensaje.
Para ajustar qué tan sensible es el banner, se calibran los umbrales del motor: ver Thresholds calibrables.