Export Web/SCORM : corrige la résolution des champs "relation" hors ligne
Bug signalé : une Donnée liée/un filtre référençant un champ "relation"
affichait "{{champ}}" tel quel une fois exporté, alors qu'il fonctionnait
en ligne. Deux causes cumulées :
- full_game_payload.py lisait la colonne SQL "<champ>" au lieu de
"<champ>_id" (seule vraie colonne d'un champ relation, voir
_field_column dans filter_repeater_rows.py) en construisant
gameData.data — une valeur toujours None. Invisible en ligne (les
filtres y requêtent la base fraîche, jamais cette snapshot), mais
fatal hors ligne (aucune base à requêter).
- Une fois ce None corrigé, le port JS (forgeFieldColumn) relisait
cette même valeur sous une clé slugifiée+suffixée ("boss_id") alors
que gameData.data est déjà indexé par le nom D'AFFICHAGE du champ
("boss") — mismatch qui ne se voyait que sur un champ relation (le
seul cas où slugify(nom)+suffixe diverge du nom original). Supprime
ce port erroné, lit directement row[fieldName] partout.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
7bc4c89eaa
commit
e08c53e042
@@ -1,8 +1,8 @@
|
||||
// Export Web/SCORM (voir le plan "port complet du runtime jouable côté
|
||||
// navigateur") — port de screens/rendering/visibility_condition.py
|
||||
// (is_element_visible). Réutilise forgeResolveFilterValue/
|
||||
// forgeResolveVariablePath/forgeFieldColumn (filter-repeater-rows.js) et
|
||||
// compareValues (conditions.js), chargés avant ce fichier.
|
||||
// forgeResolveVariablePath (filter-repeater-rows.js) et compareValues
|
||||
// (conditions.js), chargés avant ce fichier.
|
||||
//
|
||||
// `ctx` : les {{champ}} de la ligne en cours quand cet élément est
|
||||
// descendant d'un Répéteur (voir render-element.js) — en mode "objet", si
|
||||
@@ -43,7 +43,9 @@ function forgeIsElementVisibleOffline(gameData, attrs, ctx) {
|
||||
var rows = gameData.data && gameData.data[definitionId];
|
||||
if (!rows || !rows.length) return true; // objet sans donnée pour l'instant : ne bloque pas
|
||||
var row = rows[0]; // convention "état de partie" : une seule ligne
|
||||
return compareValues(row[forgeFieldColumn(fieldsMetaForDef, fieldName)], operator, expected, fieldType);
|
||||
// row[fieldName] : gameData.data est déjà indexé par le nom D'AFFICHAGE
|
||||
// du champ (voir full_game_payload.py), jamais par sa colonne SQL.
|
||||
return compareValues(row[fieldName], operator, expected, fieldType);
|
||||
}
|
||||
|
||||
if (typeof module !== 'undefined' && module.exports) {
|
||||
@@ -51,6 +53,5 @@ if (typeof module !== 'undefined' && module.exports) {
|
||||
var filterMod = require('./filter-repeater-rows.js');
|
||||
global.forgeResolveFilterValue = global.forgeResolveFilterValue || filterMod.forgeResolveFilterValue;
|
||||
global.forgeResolveVariablePath = global.forgeResolveVariablePath || filterMod.forgeResolveVariablePath;
|
||||
global.forgeFieldColumn = global.forgeFieldColumn || filterMod.forgeFieldColumn;
|
||||
global.compareValues = global.compareValues || require('../conditions.js').compareValues;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user