diff --git a/exercices/corriger-exercice.html b/exercices/corriger-exercice.html index 2cff3ad..e919a2a 100644 --- a/exercices/corriger-exercice.html +++ b/exercices/corriger-exercice.html @@ -792,11 +792,38 @@ function parseTp(raw) { /* ======================= REGISTRE DES EXERCICES ======================= */ const EXERCISES = { - biocid: { parse: parseBiocid, sentinel: /Réponses aux exercices|Ex1\s*[—-]/i, name: "BioCID" }, - fds: { parse: parseFds, sentinel: /\[P1-Q1\]|Partie 1\s*[—-]\s*FDS/i, name: "FDS, FT & Étiquettes" }, - tp: { parse: parseTp, sentinel: /Réponses TP1|TP Nuisibles/i, name: "TP Nuisibles" }, + biocid: { + parse: parseBiocid, + // Signature : en-tête propre au PDF exporté par Exo_BioCID.html + signature: /Exercices\s+Pratiques\s+BioCID/i, + sentinel: /Réponses aux exercices|Ex1\s*[—–-]/i, + name: "Plate-forme BioCID", + }, + fds: { + parse: parseFds, + signature: /TD\s*[—–-]\s*FDS,\s*FT/i, + sentinel: /\[P1-Q1\]|Partie 1\s*[—–-]\s*FDS/i, + name: "FDS, FT & Étiquettes", + }, + tp: { + parse: parseTp, + signature: /TP\s+Nuisibles\s*[—–-]\s*Certibiocide/i, + sentinel: /Réponses TP1|TP3\s*[—–-]\s*Analyse de risques/i, + name: "TP Nuisibles", + }, }; +// Identifie l'exercice réellement contenu dans le PDF (signature d'abord, sentinelle en secours). +function detectExercise(text) { + for (const [key, cfg] of Object.entries(EXERCISES)) { + if (cfg.signature.test(text)) return key; + } + for (const [key, cfg] of Object.entries(EXERCISES)) { + if (cfg.sentinel.test(text)) return key; + } + return null; +} + /* ======================= RENDU ======================= */ let currentData = null; @@ -949,7 +976,15 @@ async function handleFile(file) { const text = await readPdfText(file); const config = EXERCISES[exo]; - if (!config.sentinel.test(text)) { + const detected = detectExercise(text); + + if (detected && detected !== exo) { + statusEl.className = "error"; + statusEl.textContent = `Fichier incompatible : ce PDF est un rendu « ${EXERCISES[detected].name} », or vous avez sélectionné « ${config.name} ». Changez d'exercice ou déposez le bon fichier.`; + return; + } + + if (!detected) { statusEl.className = "error"; statusEl.textContent = `Ce PDF ne ressemble pas à un rendu « ${config.name} ». Vérifiez l'exercice sélectionné.`; return;