Bloque les fichiers ne correspondant pas à l'exercice choisi
Chaque exercice dispose désormais d'une signature propre, basée sur l'en-tête du PDF qu'il exporte. La fonction detectExercise identifie l'exercice réellement contenu dans le fichier déposé (signature d'abord, sentinelle en secours). Si le PDF correspond à un autre exercice que celui sélectionné, un message d'incompatibilité nommant les deux exercices s'affiche et la correction n'est pas générée.
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user