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): ...@@ -672,6 +672,21 @@ class parser_contenu_xml(Resource):
return ContenuDao().previsualiser_xml_moodle(id_contenu["$oid"]), 200 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') en_cours = api.namespace('en_cours', description='Entrées liées à la gestion des contenus en cours')
......
...@@ -9,6 +9,9 @@ import os ...@@ -9,6 +9,9 @@ import os
# from UtilsGit import UtilsGit # from UtilsGit import UtilsGit
from pathlib import Path from pathlib import Path
import string 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 from werkzeug.utils import secure_filename
...@@ -77,8 +80,6 @@ class ContenuDao: ...@@ -77,8 +80,6 @@ class ContenuDao:
Path(chemin_fichier).mkdir(0o777, parents=True, exist_ok=True) Path(chemin_fichier).mkdir(0o777, parents=True, exist_ok=True)
file.save(os.path.join(chemin_fichier, filename)) file.save(os.path.join(chemin_fichier, filename))
print(chemin_fichier + filename)
xmldoc = minidom.parse(chemin_fichier + filename) xmldoc = minidom.parse(chemin_fichier + filename)
mite = xmldoc.getElementsByTagName('name') mite = xmldoc.getElementsByTagName('name')
titre = mite[0].childNodes[1].firstChild.nodeValue titre = mite[0].childNodes[1].firstChild.nodeValue
...@@ -710,9 +711,227 @@ class ContenuDao: ...@@ -710,9 +711,227 @@ class ContenuDao:
{"$set": {"historique": contenus}}) {"$set": {"historique": contenus}})
return json.dumps([cont['note'], cont['nbreNotes']]) 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 # # Fonction qui permet de parser un contenu (de type XML - Moodle) -Fonction utile pour la prévisualisation &
# @param id_contenu l'id du contenu à parser # l'édition @param id_contenu l'id du contenu à parser @return un dictionnaire comprenant toutes les informations
# @return un dictionnaire comprenant toutes les informations utiles # utiles
def previsualiser_xml_moodle(self, id_contenu): def previsualiser_xml_moodle(self, id_contenu):
print("Shiny ", id_contenu, " ", type(id_contenu)) texte = Utils().recuperer_contenu_fichier(id_contenu)
return "Seize the day"
# 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