Saltar al contenido principal

Bloque "Cursos que necesitan atención"

Ficha técnica
  • 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_courses y caché useralerts en local_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-pre del 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ímiteValorEfecto
attention_courses::MAX_EVALUATED10Máximo de matrículas evaluadas por petición, en orden "acceso más reciente primero"
attention_courses::DEFAULT_LIMIT3Má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

ArchivoContenido
block_pccntr8203403_atencion.phpapplicable_formats() = ['my' => true], hide_header(), armado del contexto (nombre, URL, carátula)
templates/content.mustacheMarkup del banner: encabezado con ícono, copy y lista de tarjetas de curso
db/access.phpCapacidades 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.phpDeclara 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.