Commit e5ee0da7 authored by Jérémie Passerat's avatar Jérémie Passerat

Ajout (non fini) de fonctions pour maj un xml moodle

parent 17461616
......@@ -672,6 +672,21 @@ class parser_contenu_xml(Resource):
return ContenuDao().previsualiser_xml_moodle(id_contenu["$oid"]), 200
@contenus.route("/modifierXML")
@contenus.doc(params={'id_contenu': "L'id du contenu à modifier"})
@contenus.doc(params={'elements_contenu': "Le détail du contenu"})
@contenus.doc(desciption="modifier un xml moodle")
class modifier_xml(Resource):
@contenus.response(200, "contenu modifié")
def patch(self):
id_contenu = json.loads(request.json['id_contenu'])
elements_contenu = json.loads(request.json['elements_contenu'])
print("elements_contenu : ", elements_contenu)
ContenuDao().modifier_xml_moodle(id_contenu["$oid"], elements_contenu)
return "contenu modifié", 200
en_cours = api.namespace('en_cours', description='Entrées liées à la gestion des contenus en cours')
......
......@@ -9,6 +9,9 @@ import os
# from UtilsGit import UtilsGit
from pathlib import Path
import string
from xml.etree import ElementTree as ET
from xml.dom import minidom
from xml.etree.ElementTree import Element, SubElement, Comment
from werkzeug.utils import secure_filename
......@@ -77,8 +80,6 @@ class ContenuDao:
Path(chemin_fichier).mkdir(0o777, parents=True, exist_ok=True)
file.save(os.path.join(chemin_fichier, filename))
print(chemin_fichier + filename)
xmldoc = minidom.parse(chemin_fichier + filename)
mite = xmldoc.getElementsByTagName('name')
titre = mite[0].childNodes[1].firstChild.nodeValue
......@@ -710,9 +711,227 @@ class ContenuDao:
{"$set": {"historique": contenus}})
return json.dumps([cont['note'], cont['nbreNotes']])
## Fonction qui permet de parser un contenu (de type XML - Moodle) -Fonction utile pour la prévisualisation & l'édition
# @param id_contenu l'id du contenu à parser
# @return un dictionnaire comprenant toutes les informations utiles
# # Fonction qui permet de parser un contenu (de type XML - Moodle) -Fonction utile pour la prévisualisation &
# l'édition @param id_contenu l'id du contenu à parser @return un dictionnaire comprenant toutes les informations
# utiles
def previsualiser_xml_moodle(self, id_contenu):
print("Shiny ", id_contenu, " ", type(id_contenu))
return "Seize the day"
texte = Utils().recuperer_contenu_fichier(id_contenu)
# nom_fichier = os.path.basename(self.lineedit_adresse.text())
# adresse_fichier = os.path.dirname(self.lineedit_adresse.text())
type_question = ""
nom_question = ""
intitule_question = ""
note_defaut = ""
penalite = ""
feedback_general = ""
elements_question = dict()
root = ET.fromstring(texte)
for question in root.iter('question'):
if question.attrib["type"] != "category":
elements_question["type_question"] = question.attrib["type"]
for note in root.iter('defaultgrade'):
elements_question["note_defaut"] = note.text
for penalty in root.iter('penalty'):
elements_question["penalite"] = penalty.text
for name in root.iter('name'):
for nom in name.iter('text'):
elements_question["nom_question"] = nom.text
for question in root.iter('questiontext'):
for intitule in question.iter('text'):
# print("new game now loading : " + intitule.text)
# elements_question["intitule_question"] = intitule.text[3:len(intitule.text) - 4]
elements_question["intitule_question"] = intitule.text
for general in root.iter('generalfeedback'):
for feedback in general.iter('text'):
elements_question["feedback_general"] = feedback.text
if elements_question["type_question"] == "truefalse":
note_faux = 0
# on récupère la bonne réponse (mise par défault à Vrai mais changée si besoin).
elements_question["bonne_reponse"] = 'Vrai'
for answer in root.iter('answer'):
note_faux = answer.attrib["fraction"]
# On analyse la dernière réponse enrengistrée dans le for. Si elle est égale à 100, on change la bonne réponse.
if note_faux == '100':
elements_question["bonne_reponse"] = 'Faux'
# on récupère le texte associé aux deux réponses (pas forcément vrai / faux, l'auteur peut mettre a peu près ce qu'il veut)
liste_feedback = []
for answer in root.iter('answer'):
for feedback in answer.iter('text'):
liste_feedback.append(feedback.text)
elements_question["liste_feedback"] = liste_feedback
elif elements_question["type_question"] == "shortanswer":
# majuscule -> permet la casse (à 1) ou non (à 0)
# majuscule = ''
for usecase in root.iter('usecase'):
elements_question["majuscule"] = usecase.text
# on récupère les réponses valables, les notes associées et les feedback
liste_reponse = []
liste_note = []
liste_feedback = []
for answer in root.iter('answer'):
liste_note.append(answer.attrib["fraction"])
for question in answer.iter('text'):
liste_reponse.append(question.text)
for feedback in answer.iter('feedback'):
for feed in feedback.iter('text'):
liste_feedback.append(feed.text)
# for k in range(3):
# liste_reponse.append("")
# liste_note.append("")
# liste_feedback.append("")
elements_question["liste_reponse"] = liste_reponse
elements_question["liste_note"] = liste_note
elements_question["liste_feedback"] = liste_feedback
elif elements_question["type_question"] == "multichoice":
# nb_reponse = ''
for single in root.iter('single'):
elements_question["nb_reponse"] = single.text
# print ("nb_reponse : ", nb_reponse)
for shuffleanswers in root.iter('shuffleanswers'):
elements_question["melange_reponse"] = shuffleanswers.text
for answernumbering in root.iter('answernumbering'):
elements_question["numerotation"] = answernumbering.text
liste_reponse = []
liste_note = []
liste_feedback = []
for answer in root.iter('answer'):
liste_note.append(answer.attrib["fraction"])
for question in answer.iter('text'):
if question.text is not None:
liste_reponse.append(question.text)
for feedback in answer.iter('feedback'):
for feed in feedback.iter('text'):
liste_feedback.append(feed.text)
elements_question["liste_reponse"] = liste_reponse
elements_question["liste_note"] = liste_note
elements_question["liste_feedback"] = liste_feedback
liste_feedback_principaux = []
for feedback in root.iter('text'):
liste_feedback_principaux.append(feedback.text)
elements_question["liste_feedback_principaux"] = liste_feedback_principaux
elif elements_question["type_question"] == "numerical" or \
elements_question["type_question"] == "calculatedsimple":
for unit in root.iter('unitgradingtype'):
elements_question["traitement_unite"] = unit.text
for showunits in root.iter('showunits'):
elements_question["saisie_unite"] = showunits.text
for unitsleft in root.iter('unitsleft'):
elements_question["position_unite"] = unitsleft.text
liste_unite_nom = []
for unit_name in root.iter('unit_name'):
liste_unite_nom.append(unit_name.text)
for k in range(3):
liste_unite_nom.append('')
liste_unite_coef = []
for multiplier in root.iter('multiplier'):
liste_unite_coef.append(multiplier.text)
for k in range(3):
liste_unite_coef.append('')
elements_question["liste_unite_nom"] = liste_unite_nom
elements_question["liste_unite_coef"] = liste_unite_coef
liste_reponse = []
liste_note = []
liste_feedback = []
liste_tolerance = []
for answer in root.iter('answer'):
liste_note.append(answer.attrib["fraction"])
for question in answer.iter('text'):
if question.text is not None:
liste_reponse.append(question.text)
for feedback in answer.iter('feedback'):
for feed in feedback.iter('text'):
liste_feedback.append(feed.text)
for tolerance in answer.iter('tolerance'):
#print ("tolerance : ", tolerance.text)
if tolerance.text is not None:
liste_tolerance.append(tolerance.text)
elements_question["liste_reponse"] = liste_reponse
elements_question["liste_note"] = liste_note
elements_question["liste_feedback"] = liste_feedback
elements_question["liste_tolerance"] = liste_tolerance
# elif elements_question["type_question"] == 'calculatedsimple':
# print("calculatedsimple")
#
# liste_reponse = []
# liste_note = []
# liste_feedback = []
# liste_erreur = []
# for answer in root.iter('answer'):
# liste_note.append(answer.attrib["fraction"])
# for question in answer.iter('text'):
# liste_reponse.append(question.text)
# for feedback in answer.iter('feedback'):
# for feed in feedback.iter('text'):
# liste_feedback.append(feed.text)
# for tolerance in answer.iter('tolerance'):
# liste_erreur.append(tolerance.text)
#
# elements_question["liste_reponse"] = liste_reponse
# elements_question["liste_note"] = liste_note
# elements_question["liste_feedback"] = liste_feedback
# elements_question["liste_tolerance"] = liste_erreur
# print("elements_question : ", elements_question)
return elements_question
## Fonction permettant de modifier un xml Moodle
# @param id_contenu
# @param elements_contenu
def modifier_xml_moodle(self, id_contenu, elements_contenu):
texte = Utils().recuperer_contenu_fichier(id_contenu)
root = ET.fromstring(texte)
print("root")
print(root)
print(type(root))
print(ET.tostring(root))
for name in root.iter('name'):
for nom in name.iter('text'):
nom.text = "Chabala"
print(ET.tostring(root))
pass
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment