Développement - ericfalcon/moodle-theme-iomad GitHub Wiki
Organisation du code
- Styles :
scss/epure.scssimporte, dans l'ordre de compilation, les fichiers descss/epure/(un par sujet : en-tête, page de cours, activités, mode sombre…). Le mode sombre vient après les règles qu'il remplace. - IOMAD : tout ce qu'Épure utilise d'IOMAD passe par la classe
theme_epure\iomad: détection, API (entreprise de l'utilisateur, capacités, catégories), contexte d'entreprise, noms des tables et adresses des pages. IOMAD 5.1 a renommé ses tables (companydevientlocal_iomad_companies…) et ses classes ; cette classe connaît les deux versions, si bien qu'un changement d'IOMAD se traite à un seul endroit. - Ordre du cours : la classe
theme_epure\course_structuredonne les activités d'un cours dans l'ordre de la page du cours. Moodle range les sections des sous-sections (mod_subsection, sections « déléguées » à une activité) après toutes les sections du cours, etcourse_modinfo::get_cms()liste leurs activités à la fin ; la classe les remet à la place de la sous-section. La prochaine activité, la position dans le cours et les activités précédente et suivante passent par elle. - Cache : la progression, la prochaine activité et la prochaine échéance de chaque cours d'un apprenant, et les événements de sa semaine, sont gardées 5 minutes dans le cache MUC
learnerprogress(db/caches.php). Elles sont oubliées aussitôt quand l'apprenant termine une activité ou un cours, remet un devoir ou une tentative de test, et, pour tous les apprenants du cours, quand ses activités, ses sections ou son achèvement changent (db/events.php). - Application web : la classe
theme_epure\web_appfournit le manifeste, l'icône, la page hors ligne et le service worker, servis par les scripts dewebapp/. - Erreurs : les erreurs inattendues (thème d'une entreprise, échéances, attestations…) sont signalées en mode débogage développeur, sans interrompre la page.
Compatibilité testée
L'intégration continue teste Moodle 4.5 à 5.3 (PostgreSQL, et MariaDB pour 4.5 et 5.3) et IOMAD 4.5, 5.1 et 5.2. Les tests Behat couvrent les formats de cours thématique, hebdomadaire (avec une sous-section), activité unique et informel, avec l'audit axe-core.
Behat tourne aussi sur IOMAD 4.5, 5.1 et 5.2. Deux contextes Behat d'IOMAD, qui empêchent Behat de démarrer, sont retirés du clone d'IOMAD de l'intégration continue : celui d'auth_iomadsaml2 (signature incompatible sur IOMAD 4.5) et celui de tool_iomadpolicy (il redéfinit une étape de tool_policy). Un scénario vérifie qu'un apprenant d'une entreprise voit la couleur et le logo de son entreprise, qu'un utilisateur sans entreprise garde la couleur du site, et que la page « Mes cours » d'IOMAD est la page par rôle d'Épure, avec l'audit axe-core. Les scénarios IOMAD (étiquette @theme_epure_iomad) tournent sur les tâches IOMAD, les autres sur les tâches Moodle.
Performances
Mesures du 8 octobre 2026 sur Moodle 4.5, en apprenant, comparées au thème Boost (moyenne de 3 chargements, caches chauds, serveur de développement PHP : les durées sont indicatives, les écarts comptent).
| Page | Temps serveur Boost → Épure | HTML | Éléments DOM | Requêtes | LCP Boost → Épure |
|---|---|---|---|---|---|
| Tableau de bord | 212 → 344 ms | +14 % | +11 % | 29 → 32 | 1093 → 423 ms |
| Page de cours | 163 → 168 ms | +11 % | +12 % | 27 → 30 | 855 → 233 ms |
| Discussion de forum | 169 → 171 ms | +9 % | +16 % | 19 → 26 | 245 → 224 ms |
| Test (accueil) | 200 → 217 ms | +10 % | +16 % | 19 → 26 | 285 → 295 ms |
- Feuille de style : 173 Ko contre 158 Ko pour Boost (+9 %). JavaScript : identique (les modules d'Épure sont chargés à la demande).
- Aucun décalage de mise en page (CLS de 0 à 0,001).
- Le surcoût du tableau de bord venait de la vue d'ensemble de l'apprenant (progression de chaque cours, prochaine activité, échéances) : environ 80 ms pour quelques cours, en proportion du nombre de cours suivis. Depuis 0.26.0, ces calculs sont gardés en cache (voir Organisation du code) : mesurée en local sur Moodle 4.5 avec 3 cours, la vue d'ensemble passe d'environ 60 à 80 ms à environ 5 ms une fois en cache ; elle ne coûte plus que quelques millisecondes. Le tableau ci-dessus date d'avant ce cache. La vue d'ensemble se désactive dans l'onglet Cours.
- Les requêtes en plus sont les polices du thème et ses images, mises en cache par le navigateur.
Tests
Les variables de la palette sont exposées en propriétés CSS (--epure-brand, --epure-brand-text, --epure-on-brand, etc.) pour les SCSS personnalisés.
Tests :
vendor/bin/phpunit --testsuite theme_epure_testsuite
vendor/bin/behat --config <behat_dataroot>/behatrun/behat/behat.yml --tags @theme_epure
Les tests Behat passent l'audit axe-core de Moodle (« the page should meet accessibility standards ») sur le tableau de bord, le panneau des préférences, la déclaration d'accessibilité, la page de cours, les formats de cours et, sur IOMAD, les pages d'un apprenant d'une entreprise (page d'arrivée après la connexion, page de cours, « Mes cours »).