{"id":5436,"date":"2026-06-28T08:15:27","date_gmt":"2026-06-28T06:15:27","guid":{"rendered":"https:\/\/dgtlms.fr\/?page_id=5436"},"modified":"2026-06-28T08:59:57","modified_gmt":"2026-06-28T06:59:57","slug":"dgtlms-changelog","status":"publish","type":"page","link":"https:\/\/dgtlms.fr\/en\/dgtlms-changelog\/","title":{"rendered":"Changelog"},"content":{"rendered":"<div class=\"wpb-content-wrapper\"><div class=\"vc_row wpb_row vc_row-fluid\" style=\"border-radius:15px;\"><div class=\"wpb_column vc_column_container vc_col-sm-12\"><div class=\"vc_column-inner\"><div class=\"wpb_wrapper\">\n\t<div class=\"wpb_text_column wpb_content_element\" >\n\t\t<div class=\"wpb_wrapper\">\n\t\t\t<p data-sourcepos=\"9:1-9:412;73-484\">\t\t<div class=\"dgtlms-cl\">\n\t\t\t\t\t\t<div class=\"dgtlms-cl-toolbar\">\n\t\t\t\t<a class=\"dgtlms-cl-rss\" href=\"https:\/\/dgtconcept.dgtlms.fr\/api\/changelog.php?format=rss\" target=\"_blank\" rel=\"noopener nofollow\" title=\"S'abonner aux nouveaut\u00e9s (flux RSS)\">\n\t\t\t\t\t<svg width=\"14\" height=\"14\" viewbox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M6.18 17.82A2.18 2.18 0 1 1 4 15.64a2.18 2.18 0 0 1 2.18 2.18zM4 4.44v3.1A12.46 12.46 0 0 1 16.46 20h3.1A15.56 15.56 0 0 0 4 4.44zm0 5.66v3.04A6.81 6.81 0 0 1 10.86 20h3.04A9.85 9.85 0 0 0 4 10.1z\"\/><\/svg>\n\t\t\t\t\tS'abonner au flux RSS\n\t\t\t\t<\/a>\n\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t<section class=\"dgtlms-cl-release\">\n\t\t\t\t<h3 class=\"dgtlms-cl-version\">\n\t\t\t\t\tDerni\u00e8res \u00e9volutions\t\t\t\t\t\t\t\t\t<\/h3>\n\t\t\t\t\t\t\t\t<div class=\"dgtlms-cl-group\">\n\t\t\t\t\t<span class=\"dgtlms-cl-type\" style=\"background:#dc26261a;color:#dc2626;\">S\u00e9curit\u00e9<\/span>\n\t\t\t\t\t<ul class=\"dgtlms-cl-list\">\n\t\t\t\t\t\t\t\t\t\t\t\t<li>Crons sensibles d\u00e9clenchables publiquement en HTTP<\/li>\n\t\t\t\t\t\t\t\t\t\t\t\t<li>Authentification \u2014 la v\u00e9rification bcrypt ne s&#039;ex\u00e9cutait jamais (colonne non charg\u00e9e)<\/li>\n\t\t\t\t\t\t\t\t\t\t\t\t<li>Wrapper Dispatcher \u2014 isolation multi-tenant du reporting<\/li>\n\t\t\t\t\t\t\t\t\t\t\t\t<li>Wrapper Dispatcher \u2014 durcissement du proxy de contenu<\/li>\n\t\t\t\t\t\t\t\t\t\t\t\t<li>DGT Studio : durcissement des endpoints AJAX (CSRF + permission + MIME)<\/li>\n\t\t\t\t\t\t\t\t\t\t\t\t<li>\u00c9diteur de quiz : validation serveur exhaustive par type de question<\/li>\n\t\t\t\t\t\t\t\t\t\t\t\t<li>\u00c9diteur de quiz : validation du contenu r\u00e9el des uploads (anti-polyglot + refus SVG)<\/li>\n\t\t\t\t\t\t\t\t\t\t\t\t<li>\u00c9diteur de quiz : CSRF + check de permission sur les endpoints AJAX<\/li>\n\t\t\t\t\t\t\t\t\t\t\t\t<li>Mail \u2014 fuite du contenu de chaque email envoy\u00e9 vers Sentry (mots de passe inclus)<\/li>\n\t\t\t\t\t\t\t\t\t\t\t\t<li>Suppression d&#039;une backdoor historique<\/li>\n\t\t\t\t\t\t\t\t\t\t\t<\/ul>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<div class=\"dgtlms-cl-group\">\n\t\t\t\t\t<span class=\"dgtlms-cl-type\" style=\"background:#d977061a;color:#d97706;\">Corrig\u00e9<\/span>\n\t\t\t\t\t<ul class=\"dgtlms-cl-list\">\n\t\t\t\t\t\t\t\t\t\t\t\t<li>SCORM Studio Recorder \u2014 d\u00e9tection des binaires sur macOS Apple Silicon<\/li>\n\t\t\t\t\t\t\t\t\t\t\t\t<li>Fiche membre \u2014 un r\u00e9f\u00e9rent de groupe ne voyait ni les sessions ni les parcours de ses r\u00e9f\u00e9r\u00e9s<\/li>\n\t\t\t\t\t\t\t\t\t\t\t\t<li>SCORM 2004 \u2014 import \u00e9choue (protectUInt failed) quand completionThreshold a des attributs<\/li>\n\t\t\t\t\t\t\t\t\t\t\t\t<li>SCORM 2004 \u2014 blocage du lecteur en fin de parcours sur navigation adl.nav.request<\/li>\n\t\t\t\t\t\t\t\t\t\t\t\t<li>SCORM 2004 SN \u2014 objectif remis \u00e0 \u00ab unknown \u00bb quand un SCO d\u00e9clare passed sans score<\/li>\n\t\t\t\t\t\t\t\t\t\t\t\t<li>SCORM 2004 SN \u2014 objectif global non lu par une activit\u00e9 pas encore jou\u00e9e<\/li>\n\t\t\t\t\t\t\t\t\t\t\t\t<li>Bouton flottant \u00ab Assistance \u00bb (Sentry) qui chevauchait le bouton \u00ab Valider \u00bb<\/li>\n\t\t\t\t\t\t\t\t\t\t\t\t<li>Crons \u2014 aucun script planifi\u00e9 ne s&#039;ex\u00e9cutait (bootstrap interrompu)<\/li>\n\t\t\t\t\t\t\t\t\t\t\t\t<li>Habilitations \u2014 association poste\/habilitation en \u00e9chec (erreur 1364 puis \u00ab protectUInt failed \u00bb)<\/li>\n\t\t\t\t\t\t\t\t\t\t\t\t<li>Habilitations \u2014 les r\u00e9glages d&#039;inscription automatique n&#039;\u00e9taient pas enregistr\u00e9s (conflit de jeton CSRF)<\/li>\n\t\t\t\t\t\t\t\t\t\t\t<\/ul>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<div class=\"dgtlms-cl-group\">\n\t\t\t\t\t<span class=\"dgtlms-cl-type\" style=\"background:#16a34a1a;color:#16a34a;\">Ajout\u00e9<\/span>\n\t\t\t\t\t<ul class=\"dgtlms-cl-list\">\n\t\t\t\t\t\t\t\t\t\t\t\t<li>xAPI \u2014 LRS complet vers la conformit\u00e9 ADL (State, Profils, Statements durcis, attachments)<\/li>\n\t\t\t\t\t\t\t\t\t\t\t\t<li>SCORM Studio Recorder \u2014 diaporama narr\u00e9 : conversion PPTX asynchrone + export SCORM<\/li>\n\t\t\t\t\t\t\t\t\t\t\t\t<li>SCORM 2004 SN \u2014 moteur de rollup (phase SN-1, socle, derri\u00e8re flag)<\/li>\n\t\t\t\t\t\t\t\t\t\t\t\t<li>SCORM 2004 SN \u2014 capture compl\u00e8te du s\u00e9quencement \u00e0 l&#039;import (SN-1bis)<\/li>\n\t\t\t\t\t\t\t\t\t\t\t\t<li>SCORM 2004 SN \u2014 rollup \u00e0 r\u00e8gles explicites (SN-1ter)<\/li>\n\t\t\t\t\t\t\t\t\t\t\t\t<li>SCORM 2004 SN \u2014 objectifs globaux partag\u00e9s (SN-1quater)<\/li>\n\t\t\t\t\t\t\t\t\t\t\t\t<li>Avatars par d\u00e9faut \u2014 jeu SVG abstrait<\/li>\n\t\t\t\t\t\t\t\t\t\t\t\t<li>Mode sombre \u2014 logo sp\u00e9cifique<\/li>\n\t\t\t\t\t\t\t\t\t\t\t\t<li>Automatisations \u2014 actions de gestion de compte &amp; mot de passe<\/li>\n\t\t\t\t\t\t\t\t\t\t\t\t<li>Lecteur SCO \u2014 bouton plein \u00e9cran<\/li>\n\t\t\t\t\t\t\t\t\t\t\t<\/ul>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<div class=\"dgtlms-cl-group\">\n\t\t\t\t\t<span class=\"dgtlms-cl-type\" style=\"background:#2563eb1a;color:#2563eb;\">Modifi\u00e9<\/span>\n\t\t\t\t\t<ul class=\"dgtlms-cl-list\">\n\t\t\t\t\t\t\t\t\t\t\t\t<li>SCORM Studio Recorder \u2014 bouton Arr\u00eater + Pause pour la narration d&#039;une slide<\/li>\n\t\t\t\t\t\t\t\t\t\t\t\t<li>Dashboard \u2014 \u00ab Mon parcours de progression \u00bb et \u00ab Une question sur vos formations ? \u00bb deviennent des widgets ajoutables (home builder)<\/li>\n\t\t\t\t\t\t\t\t\t\t\t\t<li>R\u00e9sultats \u2014 clic sur le nom = d\u00e9tail des r\u00e9sultats, ic\u00f4ne d\u00e9di\u00e9e pour la fiche membre<\/li>\n\t\t\t\t\t\t\t\t\t\t\t\t<li>SCORM 2004 SN \u2014 navigation pilot\u00e9e par le moteur (SN-2, it\u00e9ration 1 Flow)<\/li>\n\t\t\t\t\t\t\t\t\t\t\t\t<li>SCORM 2004 SN \u2014 validit\u00e9 de navigation d\u00e9riv\u00e9e du moteur + forwardOnly (SN-2, it\u00e9ration 2)<\/li>\n\t\t\t\t\t\t\t\t\t\t\t\t<li>SCORM 2004 SN \u2014 sommaire d\u00e9riv\u00e9 du moteur (SN-2, it\u00e9ration 3)<\/li>\n\t\t\t\t\t\t\t\t\t\t\t\t<li>SCORM 2004 SN \u2014 limites de tentatives<\/li>\n\t\t\t\t\t\t\t\t\t\t\t\t<li>SCORM 2004 SN \u2014 finitions : dur\u00e9es absolues + stopForwardTraversal<\/li>\n\t\t\t\t\t\t\t\t\t\t\t\t<li>SCORM 2004 SN \u2014 couverture exhaustive des m\u00e9caniques de la suite ADL (passe \u00ab volume \u00bb, 189 packages)<\/li>\n\t\t\t\t\t\t\t\t\t\t\t\t<li>SCORM 2004 SN \u2014 activation du moteur par parcours depuis l&#039;interface<\/li>\n\t\t\t\t\t\t\t\t\t\t\t<\/ul>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<div class=\"dgtlms-cl-group\">\n\t\t\t\t\t<span class=\"dgtlms-cl-type\" style=\"background:#6b72801a;color:#6b7280;\">Supprim\u00e9<\/span>\n\t\t\t\t\t<ul class=\"dgtlms-cl-list\">\n\t\t\t\t\t\t\t\t\t\t\t\t<li>Retrait des pages d&#039;export \/ restauration \/ r\u00e9initialisation de la base<\/li>\n\t\t\t\t\t\t\t\t\t\t\t\t<li>Retrait de web services d&#039;un ancien connecteur tiers<\/li>\n\t\t\t\t\t\t\t\t\t\t\t\t<li>Feature flag SSO_OAUTH2_ENABLED retir\u00e9<\/li>\n\t\t\t\t\t\t\t\t\t\t\t\t<li>Variables Classes virtuelles retir\u00e9es du dropdown des mod\u00e8les de mail<\/li>\n\t\t\t\t\t\t\t\t\t\t\t<\/ul>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<div class=\"dgtlms-cl-group\">\n\t\t\t\t\t<span class=\"dgtlms-cl-type\" style=\"background:#7c3aed1a;color:#7c3aed;\">Accessibilit\u00e9<\/span>\n\t\t\t\t\t<ul class=\"dgtlms-cl-list\">\n\t\t\t\t\t\t\t\t\t\t\t\t<li>Dashboard apprenant + 10 widgets \u2014 passe RGAA \/ WCAG 2.1 AA (Phase 4)<\/li>\n\t\t\t\t\t\t\t\t\t\t\t\t<li>Page R\u00e9sultats \u2014 passe RGAA \/ navigation clavier compl\u00e8te<\/li>\n\t\t\t\t\t\t\t\t\t\t\t\t<li>Barre de navigation des modules \u2014 passe RGAA \/ WCAG 2.1 AA<\/li>\n\t\t\t\t\t\t\t\t\t\t\t\t<li>Liste des parcours apprenant \u2014 passe RGAA \/ WCAG 2.1 AA<\/li>\n\t\t\t\t\t\t\t\t\t\t\t\t<li>Modale a11y elle-m\u00eame \u2014 bouton fermeture avec focus visible<\/li>\n\t\t\t\t\t\t\t\t\t\t\t\t<li>Page publique d&#039;accessibilit\u00e9 + lien syst\u00e9matique en pied de page (ouverture en modale)<\/li>\n\t\t\t\t\t\t\t\t\t\t\t\t<li>D\u00e9claration de conformit\u00e9 RGAA 4.1<\/li>\n\t\t\t\t\t\t\t\t\t\t\t\t<li>\u00c9diteurs (DGT Studio + Quiz) \u2014 passe RGAA \/ WCAG 2.1 AA d\u00e9fensif (Phase 2)<\/li>\n\t\t\t\t\t\t\t\t\t\t\t\t<li>Player apprenant \u2014 passe RGAA \/ WCAG 2.1 AA d\u00e9fensif<\/li>\n\t\t\t\t\t\t\t\t\t\t\t<\/ul>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<\/section>\n\t\t\t\t\t\t\t\t\t<p class=\"dgtlms-cl-foot\">DGTLMS \u2014 version 26.7.22<\/p>\n\t\t\t\t\t<\/div>\n\n\t\t<style>\n\t\t.dgtlms-cl { max-width:820px; font-size:15px; line-height:1.5; }\n\t\t\/* --- Vue \"nouveaut\u00e9s par mois\" (highlights) --- *\/\n\t\t.dgtlms-cl-filters { display:flex; flex-wrap:wrap; gap:8px; margin:0 0 22px; }\n\t\t.dgtlms-cl-pill { cursor:pointer; border:1px solid #e2e8f0; background:#fff; color:#475569; font-size:13px; font-weight:600; padding:6px 14px; border-radius:999px; line-height:1.2; transition:all .15s; }\n\t\t.dgtlms-cl-pill:hover { border-color:var(--c,#94a3b8); color:var(--c,#334155); }\n\t\t.dgtlms-cl-pill.is-active { background:var(--c,#0f172a); border-color:var(--c,#0f172a); color:#fff; }\n\t\t.dgtlms-cl-month { margin:0 0 24px; }\n\t\t.dgtlms-cl-mlabel { font-size:13px; font-weight:700; text-transform:uppercase; letter-spacing:.05em; color:#94a3b8; margin:0 0 12px; }\n\t\t.dgtlms-cl-cards { display:flex; flex-direction:column; gap:10px; }\n\t\t.dgtlms-cl-card { display:flex; gap:14px; align-items:flex-start; padding:13px 16px; background:#fff; border:1px solid #eef2f7; border-left:3px solid var(--c,#475569); border-radius:10px; box-shadow:0 1px 2px rgba(15,23,42,.04); }\n\t\t.dgtlms-cl-tag { flex-shrink:0; font-size:11px; font-weight:700; padding:3px 10px; border-radius:999px; white-space:nowrap; margin-top:2px; }\n\t\t.dgtlms-cl-body { display:flex; flex-direction:column; gap:3px; min-width:0; }\n\t\t.dgtlms-cl-title { font-weight:700; color:#0f172a; }\n\t\t.dgtlms-cl-desc { color:#475569; font-size:14px; }\n\t\t.dgtlms-cl-empty { color:#94a3b8; font-style:italic; padding:10px 0; }\n\t\t@media (max-width:560px) { .dgtlms-cl-card { flex-direction:column; gap:8px; } }\n\t\t\/* --- Vue changelog technique (versions) --- *\/\n\t\t.dgtlms-cl-release { margin:0 0 26px; }\n\t\t.dgtlms-cl-version { font-size:19px; font-weight:700; margin:0 0 12px; padding-bottom:8px; border-bottom:2px solid #eef2f7; }\n\t\t.dgtlms-cl-date { font-size:13px; font-weight:500; color:#94a3b8; margin-left:8px; }\n\t\t.dgtlms-cl-group { margin:0 0 14px; }\n\t\t.dgtlms-cl-type { display:inline-block; font-size:12px; font-weight:700; padding:2px 10px; border-radius:999px; margin-bottom:6px; }\n\t\t.dgtlms-cl-list { margin:6px 0 0; padding-left:20px; }\n\t\t.dgtlms-cl-list li { margin:0 0 5px; }\n\t\t.dgtlms-cl-foot { font-size:12px; color:#94a3b8; margin-top:18px; }\n\t\t.dgtlms-cl-toolbar { display:flex; justify-content:flex-end; margin:0 0 16px; }\n\t\t.dgtlms-cl-rss { display:inline-flex; align-items:center; gap:7px; padding:7px 14px; border-radius:8px; background:#f97316; color:#fff !important; font-size:13px; font-weight:600; text-decoration:none !important; box-shadow:0 1px 2px rgba(0,0,0,.08); transition:background .15s; }\n\t\t.dgtlms-cl-rss:hover { background:#ea580c; color:#fff !important; }\n\t\t.dgtlms-cl-rss svg { flex-shrink:0; }\n\t\t.dgtlms-cl-error { padding:14px 16px; background:#fef2f2; color:#991b1b; border-radius:8px; font-size:14px; }\n\t\t<\/style>\n\t\t<script>\n\t\t(function () {\n\t\t\tif (window.__dgtlmsClInit) return; window.__dgtlmsClInit = true;\n\t\t\tfunction init() {\n\t\t\t\tdocument.querySelectorAll('.dgtlms-cl-filters').forEach(function (bar) {\n\t\t\t\t\tvar target = document.getElementById(bar.getAttribute('data-target'));\n\t\t\t\t\tif (!target) return;\n\t\t\t\t\tvar empty = document.getElementById(bar.getAttribute('data-target') + '-empty');\n\t\t\t\t\tbar.addEventListener('click', function (e) {\n\t\t\t\t\t\tvar btn = e.target.closest('.dgtlms-cl-pill'); if (!btn) return;\n\t\t\t\t\t\tvar cat = btn.getAttribute('data-cat');\n\t\t\t\t\t\tbar.querySelectorAll('.dgtlms-cl-pill').forEach(function (b) { b.classList.toggle('is-active', b === btn); });\n\t\t\t\t\t\tvar anyVisible = false;\n\t\t\t\t\t\ttarget.querySelectorAll('.dgtlms-cl-month').forEach(function (sec) {\n\t\t\t\t\t\t\tvar shown = 0;\n\t\t\t\t\t\t\tsec.querySelectorAll('.dgtlms-cl-card').forEach(function (card) {\n\t\t\t\t\t\t\t\tvar ok = (cat === '*' || card.getAttribute('data-cat') === cat);\n\t\t\t\t\t\t\t\tcard.style.display = ok ? '' : 'none';\n\t\t\t\t\t\t\t\tif (ok) shown++;\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tsec.style.display = shown ? '' : 'none';\n\t\t\t\t\t\t\tif (shown) anyVisible = true;\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (empty) empty.style.display = anyVisible ? 'none' : '';\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (document.readyState !== 'loading') init();\n\t\t\telse document.addEventListener('DOMContentLoaded', init);\n\t\t})();\n\t\t<\/script>\n\t\t<\/p>\n\n\t\t<\/div>\n\t<\/div>\n<\/div><\/div><\/div><\/div>\n<\/div>","protected":false},"excerpt":{"rendered":"S'abonner au flux RSS Derni\u00e8res \u00e9volutions S\u00e9curit\u00e9 Crons sensibles d\u00e9clenchables publiquement en HTTP Authentification \u2014 la v\u00e9rification bcrypt ne s&#039;ex\u00e9cutait jamais (colonne non charg\u00e9e) Wrapper Dispatcher \u2014 isolation multi-tenant du reporting Wrapper Dispatcher \u2014 durcissement du proxy de contenu DGT [...]","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-5436","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/dgtlms.fr\/en\/wp-json\/wp\/v2\/pages\/5436","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dgtlms.fr\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/dgtlms.fr\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/dgtlms.fr\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/dgtlms.fr\/en\/wp-json\/wp\/v2\/comments?post=5436"}],"version-history":[{"count":7,"href":"https:\/\/dgtlms.fr\/en\/wp-json\/wp\/v2\/pages\/5436\/revisions"}],"predecessor-version":[{"id":5447,"href":"https:\/\/dgtlms.fr\/en\/wp-json\/wp\/v2\/pages\/5436\/revisions\/5447"}],"wp:attachment":[{"href":"https:\/\/dgtlms.fr\/en\/wp-json\/wp\/v2\/media?parent=5436"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}