cisstech / platon

Platform for Learning and Teaching Online
Other
14 stars 3 forks source link

Exercice reload doesn't actually reload but instead relaunch the builder ? #14

Closed Ofghanirre closed 1 year ago

Ofghanirre commented 1 year ago

Salut ! J'espère que tu vas bien!

En écrivant des exercices sur Platon, j'ai remarqué que si je rechargeais un exercice après l'avoir executé, le reload se chargeait uniquement de recharger le script builder, sans recharger les variables globales à leurs états initiaux:

Exemple d'exercice:

https://platon-preprod.univ-eiffel.fr/resources/ab87142c-ccdc-4c40-aed0-39677f2cc56a/browse potentiellement changé d'ici à ce que tu reviews, donc je paste le code ici


title==
Addition aléatoire
==

statement == Quel est le drapeau des Pays Bas?

theories = [ { title: "Wikipédia : Les Pays de l'Europe", url: "https://fr.wikipedia.org/wiki/Liste_des_pays_d'Europe" } ]

hint = [ "Procédez par éliminations", "Le drapeau des Pays Bas possèdent des couleurs similaires à celles présentes sur le drapeau français" ]

/ Ici on définit le composant à jouer comme étant un RadioGroup Documentation : https://platon-preprod.univ-eiffel.fr/docs/pages/forms/wc-radio-group / input = :wc-radio-group / Liens wikipédia dans des balises images en markdown / input.items = [ { content: "img" }, { content: "img" }, { content: "img" } ]

inputSolution = :wc-radio-group / Meme contenu mais on ajoute du css pour mettre en exergue la bonne réponse / inputSolution.items = [ { content: "img", css: "border-color : red; opacity:0.5;" }, { content: "img", css: "border-color : green" }, { content: "img", css: "border-color : red; opacity:0.5;" } ] inputSolution.selection="img"

builder==

grader== grade = 0 feedback.type = "error" feedback.content = "Mauvaise réponse" if (input.selection === inputSolution.selection) { grade = 100 feedback.type = "success" feedback.content = "Bonne réponse" } input.items = inputSolution.items

form== {{input}}

solution==


1. J'execute une fois l'exercice
2. Les items de input deviennent les input de inputSolution, ces dernières ont des propriétés css pour l'exemple
![image](https://github.com/cisstech/platon/assets/18609818/f2e4b76e-aa96-469c-92d3-80dc32a72b60)

3. Je souhaite recharger l'exercice en appuyant sur le bouton  ![image](https://github.com/cisstech/platon/assets/18609818/d410d1fc-d481-4a65-858a-424b8b2fad94)
4. Le contenu de input.items n'est pas rechargé depuis le fichier et on repasse dans le builder 
5. Le contenu de input n'a donc pas pu être rechargé, donc j'ai le meme affichage (j'ai toujours l'ancienne selection, ainsi que les propriétés css)

Pour l'instant je dois faire un destructeur à la main dans le builder:
```ts
for (let item of input.items) item.css = ""
input.selection = ""

Serait-il possible de correctement recharger l'exercice de 0 ? Ou de garder en mémoire l'état des variables globales ?

Voilà je me tiens à ta disposition pour toutes questions

Ofghanirre commented 1 year ago

Au cas où, il faudra faire attention à ne pas recharger des valeurs comme le nombre de tentative, etc...

mciissee commented 1 year ago

La solution implémentée est une recharge de l'exercice de 0 + exécution du builder s'il est défini.

Pour la non recharge des métadonnées de l'exercice, elles sont écrasées et c'est un choix fonctionnel. Recharger un exercice remet à 0 son état (aides, solution, nombre de tentatives en cours...). Par contre le nombre de tentatives total est stocké à part dans une colonne de la table des sessions.

Uploading Enregistrement de l’écran 2023-07-08 à 15.28.25.mov…

Ofghanirre commented 1 year ago

Superbe merci pour ce fix! Pour l'instant j'ai fais en sorte que le builder commence par une sorte d'initialisateur pour les champs, mais ce fix est le bienvenu !