Problema
El listado nativo de "Mis cursos" de Moodle muestra todas las matrículas en una rejilla plana, sin estructura. Para UNADE, con una oferta amplia organizada en áreas y subáreas formativas, ese listado se volvía inmanejable: el alumno no distinguía a qué programa pertenecía cada curso ni veía de un vistazo cuáles tenía empezados, terminados o pendientes. Hacía falta un panel que reflejara la jerarquía real de categorías virtuales que ya gestionaba el plugin local_ioe y que diera contexto inmediato sobre el avance.
Solución
Diseñé e implementé block_ioe_multicategory, un bloque que reconstruye el dashboard sobre las categorías virtuales de local_ioe. La lógica de datos (391 líneas en main.php) lee las tablas de categorías y matrículas, deduplica resultados y arma una jerarquía de hasta tres niveles que se renderiza como pestañas, pills y sub-pills mediante dos plantillas Mustache. Cada tarjeta calcula el progreso real con la API core_completion, resuelve la imagen del curso con doble fallback sobre la File Storage API y muestra una barra de color (rojo, amarillo, verde) y un botón contextual Comenzar / Continuar / Completado. Un módulo AMD persiste la pestaña activa en localStorage. El bloque respeta "Acceder como" y distingue admin de alumno.
Resultado
UNADE dispone de un dashboard de cursos que sustituye al listado plano por una navegación jerárquica fiel a su estructura formativa, con progreso visible y una llamada a la acción clara en cada curso. El bloque está en madurez STABLE (release 1.0.0), es bilingüe ES/EN y se acopla al plugin hermano local_ioe mediante su flag de categorías virtuales, lo que permite reutilizar la taxonomía ya existente sin duplicar configuración.