Saltar al contenido principal

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:

  1. Mover el Stats Row al Área personal (/my/).
  2. Rediseñar el Área personal según Figma (node 19539-773) con varios widgets adicionales.
  3. 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_learnstats se 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 mydashboard fija la zona superior del Área personal; la personalización del usuario queda limitada a la región lateral de bloques.