ADR-002: Un solo plugin de datos y presentación quemada en el tema (Alcance 2)
Estado: Aceptado | Fecha: 2026-06-09 | Autores: Equipo Campus Virtual
Contexto
El Alcance 2 (Dashboard de aprendizaje) tenía dos plugins custom: local_pccntr8203403_dashboard (capa de datos) y block_pccntr8203403_learnstats (bloque). El bloque nunca operó como bloque: get_content() vacío, cero instancias en mdl_block_instances; solo aportaba template, CSS y strings que theme_cdigital consumía para pintar el Stats Row fijo en /my/courses.php.
Requisitos que motivaron la revisión:
- Mover el Stats Row al Área personal (
/my/). - Rediseñar el Área personal según Figma (node
19539-773) con varios widgets adicionales. - El cliente no requiere que los widgets sean administrables ni parametrizables por instancia.
Restricción técnica relevante: en Moodle un plugin block_ registra exactamente un tipo de bloque, por lo que "un plugin con varios bloques" no es posible; las alternativas eran un bloque multi-widget con configuración por instancia, o renderizado fijo desde el tema.
Opciones consideradas
Opción 1: Bloque multi-widget configurable por instancia
- Ventajas: widgets gestionables desde la UI de bloques (agregar, quitar, reordenar); patrón nativo (
instance_allow_multiple+edit_form.php). - Desventajas: complejidad innecesaria sin requisito del cliente; composición dependiente del estado de BD ("Área personal por defecto" + reset de dashboards de usuarios); fidelidad al Figma limitada por el chrome de bloques.
Opción 2: Presentación quemada en el tema, datos en el plugin local
- Ventajas: patrón ya probado en el proyecto (
layout/mycourses.php); control pixel-perfect del Figma; sin gestión de instancias ni resets; menos artefactos que desplegar; el plugin local queda como única capa de datos, reutilizable por el Alcance 3 (ADR-001). - Desventajas: los widgets no son administrables (no requerido); cada sección nueva implica cambios en el tema.
Decisión
Opción elegida: Opción 2, porque el cliente no requiere widgets administrables y el patrón de layout del tema ya está validado en Mis Cursos.
Reglas resultantes:
- Toda query nueva del dashboard se agrega a
local_pccntr8203403_dashboard(classes/data/). No se crean plugins adicionales de queries. - La presentación de los widgets custom vive en
theme_cdigital(layouts, templates, SCSS, strings). - Para secciones del Figma con equivalente nativo (Calendario, Usuarios en línea, Insignias) se usan los bloques de core en la región
side-pre, estilizados con CSS del tema. block_pccntr8203403_learnstatsse desinstaló y eliminó; sus assets se migraron al tema (ver documento de retiro).
Mapeo de plugins por alcance: Alcance 1 sin plugin custom (block_xp + Badges nativos) · Alcance 2 = local_pccntr8203403_dashboard + theme_cdigital · Alcance 3 = plugin local_ propio futuro (ADR-001).
Consecuencias
- Si el cliente pide widgets administrables más adelante, habrá que crear un plugin
block_de nuevo; la decisión es reversible porque las queries ya están en el plugin local y los templates son reutilizables. - El layout
mydashboardfija la zona superior del Área personal; la personalización del usuario queda limitada a la región lateral de bloques.