Commit 59c7797c authored by Jérémie Passerat's avatar Jérémie Passerat

Fin cycle complet xml reponse courte

parent 0c12fa95
...@@ -4,6 +4,7 @@ import random ...@@ -4,6 +4,7 @@ import random
import string import string
from datetime import datetime, timezone, timedelta from datetime import datetime, timezone, timedelta
from distutils import util from distutils import util
from io import BytesIO
from bson import json_util, ObjectId from bson import json_util, ObjectId
from flask import Flask from flask import Flask
...@@ -80,11 +81,11 @@ def my_invalid_token_callback(expired_token): ...@@ -80,11 +81,11 @@ def my_invalid_token_callback(expired_token):
@app.after_request @app.after_request
def refresh_expiring_jwts(response): def refresh_expiring_jwts(response):
try: try:
print(get_jwt())
return response return response
except (RuntimeError, KeyError): except (RuntimeError, KeyError):
return response return response
## ********************************************************************************************************************* ## *********************************************************************************************************************
## Fonction pour recharger le token d'accès ## Fonction pour recharger le token d'accès
...@@ -92,7 +93,6 @@ def refresh_expiring_jwts(response): ...@@ -92,7 +93,6 @@ def refresh_expiring_jwts(response):
@jwt_required(refresh=True) @jwt_required(refresh=True)
def refresh(): def refresh():
identity = get_jwt_identity() identity = get_jwt_identity()
print("identity : " + identity)
access_token = create_access_token(identity=identity) access_token = create_access_token(identity=identity)
return jsonify(access_token=access_token) return jsonify(access_token=access_token)
...@@ -235,7 +235,8 @@ class UploaderContenu(Resource): ...@@ -235,7 +235,8 @@ class UploaderContenu(Resource):
@jwt_required() @jwt_required()
def post(self, auteur): def post(self, auteur):
file = request.files['file'] file = request.files['file']
contenu_dao.importer_contenu(auteur, file) tags = request.args.get('tags')
contenu_dao.importer_contenu(auteur, file, tags)
return json.loads(json.dumps((contenu_dao.get_contenu_par_id(contenu_dao.id_dernier_contenu_ajoute())), return json.loads(json.dumps((contenu_dao.get_contenu_par_id(contenu_dao.id_dernier_contenu_ajoute())),
default=json_util.default)), 201 default=json_util.default)), 201
...@@ -304,11 +305,6 @@ class GetContenuPanier(Resource): ...@@ -304,11 +305,6 @@ class GetContenuPanier(Resource):
## récupérer le contenu du panier d'un auteur ## récupérer le contenu du panier d'un auteur
@jwt_required() @jwt_required()
def get(self, auteur): def get(self, auteur):
exp_timestamp = get_jwt()["exp"]
now = datetime.now(timezone.utc)
target_timestamp = datetime.timestamp(now + timedelta(minutes=30))
print("tuttutututu : ", datetime.fromtimestamp(exp_timestamp - target_timestamp))
auteur = auteur.replace("_", " ") auteur = auteur.replace("_", " ")
return json.loads( return json.loads(
json.dumps(contenu_dao.get_contenus(auteur, request.args.get("perso"), request.args.get("tiers"), json.dumps(contenu_dao.get_contenus(auteur, request.args.get("perso"), request.args.get("tiers"),
...@@ -492,7 +488,6 @@ class associer_tag_libre(Resource): ...@@ -492,7 +488,6 @@ class associer_tag_libre(Resource):
## associer un tag libre à un contenu ## associer un tag libre à un contenu
@jwt_required() @jwt_required()
def patch(self): def patch(self):
print("Couzin")
id_contenu = json.loads(request.json["id_contenu"]) id_contenu = json.loads(request.json["id_contenu"])
ContenuDao().associer_tag_libre(request.json["auteur"], request.json["tag"], id_contenu["$oid"]) ContenuDao().associer_tag_libre(request.json["auteur"], request.json["tag"], id_contenu["$oid"])
return "tag associe", 201 return "tag associe", 201
...@@ -689,10 +684,19 @@ class modifier_xml(Resource): ...@@ -689,10 +684,19 @@ class modifier_xml(Resource):
def patch(self): def patch(self):
id_contenu = json.loads(request.json['id_contenu']) id_contenu = json.loads(request.json['id_contenu'])
elements_contenu = json.loads(request.json['elements_contenu']) elements_contenu = json.loads(request.json['elements_contenu'])
print("elements_contenu : ", elements_contenu)
ContenuDao().modifier_xml_moodle(id_contenu["$oid"], elements_contenu) return ContenuDao().modifier_xml_moodle(id_contenu["$oid"], elements_contenu).decode("utf-8"), 200
return "contenu modifié", 200
@contenus.route("/exporterContenuXml/<id_contenu>")
@contenus.doc(params={'id_contenu': "L'id du contenu à modifier"})
@contenus.doc(description='exporter un xml moodle (contenu tiers ou perso)')
class modifier_xml(Resource):
@contenus.response(200, "contenu exporté")
def get(self, id_contenu):
id_contenu = json.loads(id_contenu)
chemin = ContenuDao().get_chemin_du_contenu(id_contenu["$oid"])
return send_file(chemin)
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')
...@@ -701,6 +705,18 @@ en_cours = api.namespace('en_cours', description='Entrées liées à la gestion ...@@ -701,6 +705,18 @@ en_cours = api.namespace('en_cours', description='Entrées liées à la gestion
## ********************************************************************************************************************* ## *********************************************************************************************************************
## Entrées liées à la gestion des contenus en cours ## Entrées liées à la gestion des contenus en cours
@en_cours.route("/exporterContenuXmlEnCours/<id_contenu>")
@en_cours.doc(params={'id_contenu': "L'id du contenu à modifier"})
@en_cours.doc(description='exporter un xml moodle (contenu tiers ou perso)')
class modifier_xml(Resource):
@en_cours.response(200, "contenu exporté")
def get(self, id_contenu):
id_contenu = json.loads(id_contenu)
chemin = EncoursDao().get_chemin_contenu_en_cours(id_contenu["$oid"])
return send_file(chemin)
@en_cours.route("/getTexteContenuEnCours/<id_en_cours>") @en_cours.route("/getTexteContenuEnCours/<id_en_cours>")
@en_cours.doc(description="récupérer le texte d'un contenu en cours") @en_cours.doc(description="récupérer le texte d'un contenu en cours")
class GetTexteContenuEnCours(Resource): class GetTexteContenuEnCours(Resource):
...@@ -729,6 +745,31 @@ class GetContenuEnCours(Resource): ...@@ -729,6 +745,31 @@ class GetContenuEnCours(Resource):
json.dumps(list(en_cours_dao.get_contenu_en_cours_via_id(id_en_cours)), default=json_util.default)), 200 json.dumps(list(en_cours_dao.get_contenu_en_cours_via_id(id_en_cours)), default=json_util.default)), 200
@en_cours.route("/modifierXMLEnCours")
@en_cours.doc(params={'id_contenu': "L'id du contenu en cours à modifier"})
@en_cours.doc(params={'elements_contenu': "Le détail du contenu"})
@en_cours.doc(desciption="modifier un xml moodle")
class modifier_xml(Resource):
@en_cours.response(200, "contenu en cours modifié")
def patch(self):
id_contenu = json.loads(request.json['id_contenu'])
elements_contenu = json.loads(request.json['elements_contenu'])
xml_modifie = ContenuDao().modifier_xml_moodle(id_contenu["$oid"], elements_contenu, True)
return xml_modifie.decode("utf-8"), 200
@en_cours.route("/parserContenuEnCours/<id_contenu_ec>")
@en_cours.doc(params={'id_contenu_ec': "L(id du contenu en cours à parser"})
@en_cours.doc(desciption="lire le xml du document pour en récupérer les données")
class parser_contenu_xml(Resource):
@en_cours.response(200, "contenu parsé")
@jwt_required()
def get(self, id_contenu_ec):
id_contenu_ec = json.loads(id_contenu_ec)
return ContenuDao().previsualiser_xml_moodle(id_contenu_ec["$oid"], True), 200
@en_cours.route("/getAuteurOrigineEnCours/<id_en_cours>") @en_cours.route("/getAuteurOrigineEnCours/<id_en_cours>")
@en_cours.doc(description="récupérer l'auteur d'origine d'un contenu en cours") @en_cours.doc(description="récupérer l'auteur d'origine d'un contenu en cours")
class GetAuteurOtigineContenuEnCours(Resource): class GetAuteurOtigineContenuEnCours(Resource):
...@@ -765,7 +806,7 @@ class SupprimerEnCoursParId(Resource): ...@@ -765,7 +806,7 @@ class SupprimerEnCoursParId(Resource):
@en_cours.route("/newEnCours") @en_cours.route("/newEnCours")
@en_cours.doc(params={'id_contenu': "l'id du contenu d'origine"}) @en_cours.doc(params={'contenu': "le contenu d'origine"})
@en_cours.doc(params={'auteur': "l'auteur du contenu en cours"}) @en_cours.doc(params={'auteur': "l'auteur du contenu en cours"})
@en_cours.doc(params={'version': "la version du contenu modifié pour créé l'en cours "}) @en_cours.doc(params={'version': "la version du contenu modifié pour créé l'en cours "})
@en_cours.doc(params={'provenance': "la provenance du contenu en cours (perso ou tiers)"}) @en_cours.doc(params={'provenance': "la provenance du contenu en cours (perso ou tiers)"})
...@@ -775,9 +816,9 @@ class CreerEnCours(Resource): ...@@ -775,9 +816,9 @@ class CreerEnCours(Resource):
## créer un contenu en cours ## créer un contenu en cours
@jwt_required() @jwt_required()
def post(self): def post(self):
id_contenu = json.loads(request.json["id_contenu"]) contenu = json.loads(request.json["contenu"])
en_cours_dao.creer_en_cours(request.json['auteur'], id_contenu["$oid"], request.json['version'],
request.json['provenance']) en_cours_dao.creer_en_cours(request.json['auteur'], request.json['provenance'], contenu, request.json['titre'])
return json.loads(json.dumps(en_cours_dao.get_contenu_en_cours_via_id(en_cours_dao.recuperer_dernier_id()), return json.loads(json.dumps(en_cours_dao.get_contenu_en_cours_via_id(en_cours_dao.recuperer_dernier_id()),
default=json_util.default)), 201 default=json_util.default)), 201
...@@ -820,6 +861,7 @@ demande_pub = api.namespace('demande_pub', description='Entrées liées à la ge ...@@ -820,6 +861,7 @@ demande_pub = api.namespace('demande_pub', description='Entrées liées à la ge
@demande_pub.doc(params={'id_contenu_en_cours': "l'id du contenu en cours associé à la demande de publica"}) @demande_pub.doc(params={'id_contenu_en_cours': "l'id du contenu en cours associé à la demande de publica"})
@demande_pub.doc(params={'auteur_en_cours': "l''auteur de la demande de publica"}) @demande_pub.doc(params={'auteur_en_cours': "l''auteur de la demande de publica"})
@demande_pub.doc(params={'version': "la version 'effective' du contenu publié"}) @demande_pub.doc(params={'version': "la version 'effective' du contenu publié"})
@demande_pub.doc(params={'version': "la source du contenu publié"})
@demande_pub.doc(description="créer une demande de publication") @demande_pub.doc(description="créer une demande de publication")
class demande_de_publication(Resource): class demande_de_publication(Resource):
@demande_pub.response(201, "Demande de publication créée") @demande_pub.response(201, "Demande de publication créée")
...@@ -831,7 +873,8 @@ class demande_de_publication(Resource): ...@@ -831,7 +873,8 @@ class demande_de_publication(Resource):
auteur = en_cours_dao.get_auteur_origine_contenu_en_cours(id_contenu_en_cours["$oid"]) auteur = en_cours_dao.get_auteur_origine_contenu_en_cours(id_contenu_en_cours["$oid"])
demande_pub_Dao.creer_demande_publication(id_contenu["$oid"], id_contenu_en_cours["$oid"], demande_pub_Dao.creer_demande_publication(id_contenu["$oid"], id_contenu_en_cours["$oid"],
request.json['auteur_en_cours'], auteur, request.json["version"]) request.json['auteur_en_cours'], auteur, request.json["version"],
request.json["source"])
# return "Demande de publication créée", 201 # return "Demande de publication créée", 201
return json.loads(json.dumps((demande_pub_Dao.get_demande_pub_via_id(demande_pub_Dao.recuperer_dernier_id())), return json.loads(json.dumps((demande_pub_Dao.get_demande_pub_via_id(demande_pub_Dao.recuperer_dernier_id())),
......
...@@ -31,10 +31,13 @@ class Utils: ...@@ -31,10 +31,13 @@ class Utils:
from modele.contenu_dao import ContenuDao from modele.contenu_dao import ContenuDao
from modele.encours_dao import EncoursDao from modele.encours_dao import EncoursDao
if (en_cours): if (en_cours):
chemin = EncoursDao().get_chemin_contenu_en_cours(id_contenu) chemin = EncoursDao().get_chemin_contenu_en_cours(id_contenu)
else: else:
chemin = ContenuDao().get_chemin_du_contenu(id_contenu) chemin = ContenuDao().get_chemin_du_contenu(id_contenu)
with open(chemin, "r") as fichier: with open(chemin, "r") as fichier:
texte = fichier.read() texte = fichier.read()
...@@ -73,7 +76,6 @@ class Utils: ...@@ -73,7 +76,6 @@ class Utils:
from modele.encours_dao import EncoursDao from modele.encours_dao import EncoursDao
chemin_fichier = EncoursDao().get_chemin_contenu_en_cours(id_contenu) chemin_fichier = EncoursDao().get_chemin_contenu_en_cours(id_contenu)
#print("titre : " + titre)
EncoursDao().changer_titre(id_contenu, titre) EncoursDao().changer_titre(id_contenu, titre)
myFile = open(chemin_fichier, "w") myFile = open(chemin_fichier, "w")
# y ajouter le texte du contenu # y ajouter le texte du contenu
......
...@@ -66,20 +66,26 @@ class ContenuDao: ...@@ -66,20 +66,26 @@ class ContenuDao:
{"$set": {"versionEnCours.commit": commit}}) {"$set": {"versionEnCours.commit": commit}})
## Fonction qui permet d'importer un nouveau contenu ## Fonction qui permet d'importer un nouveau contenu
def importer_contenu(self, auteur, file): def importer_contenu(self, auteur, file, tags):
from xml.dom import minidom from xml.dom import minidom
global chemin_fichier, filename global chemin_fichier, filename, chemin_tags, titre
if file: if file:
filename = secure_filename(file.filename) filename = secure_filename(file.filename)
print(filename) chemin_tags = '/'.join(json.loads(tags)) + "/"
chemin_fichier = self.chemin + filename + "/" print("chemin_tags : ", chemin_tags)
print("filename : ", filename)
chemin_fichier = self.chemin + chemin_tags + filename + "/"
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 : ", chemin_fichier)
# on récupère le vrai titre du contenu
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
...@@ -87,10 +93,10 @@ class ContenuDao: ...@@ -87,10 +93,10 @@ class ContenuDao:
# créer la métadonnée dans la base mongo # créer la métadonnée dans la base mongo
self.base_donnees.contenu.insert_one( self.base_donnees.contenu.insert_one(
{"auteur": auteur, "popularite": 0, {"auteur": auteur, "popularite": 0,
"fichier": filename + "/" + filename, "titre": titre, "fichier": chemin_tags + filename + "/" + filename, "titre": titre,
"versionEnCours": {"numero": 1, "date": datetime.now().strftime("%d/%m/%y"), "versionEnCours": {"numero": 1, "date": datetime.now().strftime("%d/%m/%y"),
"note": 0, "nbreNotes": 0, "commit": ""}, "note": 0, "nbreNotes": 0, "commit": ""},
"tags_fixes": ["tag1", "tag2", "tag3", "tag4", "tag5"], "tags_fixes": tags,
"type": "quiz", "source": "moodle"}) "type": "quiz", "source": "moodle"})
nom_contenu = self.id_dernier_contenu_ajoute() nom_contenu = self.id_dernier_contenu_ajoute()
...@@ -372,8 +378,11 @@ class ContenuDao: ...@@ -372,8 +378,11 @@ class ContenuDao:
# initialiser le git et récupérer le commit # initialiser le git et récupérer le commit
version = self.get_version_courante(id_contenu) version = self.get_version_courante(id_contenu)
index = chemin.rindex("/") index = chemin.rindex("/")
nom = chemin[index + 1:]
chemin = chemin[:index] chemin = chemin[:index]
commit = self.gitUtils.commit(chemin, str(id_contenu), "version" + str(version + 1))
commit = self.gitUtils.commit(chemin, nom, "version" + str(version + 1))
# puis le mettre a jour dans le contenu # puis le mettre a jour dans le contenu
self.base_donnees.contenu.update_one({"_id": id_contenu}, {"$set": {"versionEnCours.commit": commit}}) self.base_donnees.contenu.update_one({"_id": id_contenu}, {"$set": {"versionEnCours.commit": commit}})
...@@ -459,7 +468,7 @@ class ContenuDao: ...@@ -459,7 +468,7 @@ class ContenuDao:
# On réfcupère tous les ties d'un auteur # On réfcupère tous les ties d'un auteur
tiers = self.get_contenus_tiers(auteur) tiers = self.get_contenus_tiers(auteur)
print("Je le ai ", len(tiers), " tiers disponibles")
for i in range(len(tiers)): for i in range(len(tiers)):
versionCourante = self.get_version_courante(tiers[i][0]["contenu"]) versionCourante = self.get_version_courante(tiers[i][0]["contenu"])
if tiers[i][1]["version"] < versionCourante: if tiers[i][1]["version"] < versionCourante:
...@@ -714,19 +723,11 @@ class ContenuDao: ...@@ -714,19 +723,11 @@ class ContenuDao:
# # Fonction qui permet de parser un contenu (de type XML - Moodle) -Fonction utile pour la prévisualisation & # # 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 # l'édition @param id_contenu l'id du contenu à parser @return un dictionnaire comprenant toutes les informations
# utiles # utiles
def previsualiser_xml_moodle(self, id_contenu): def previsualiser_xml_moodle(self, id_contenu, en_cours=False):
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 = ""
texte = Utils().recuperer_contenu_fichier(id_contenu, en_cours)
# exit(0)
# on va stocker tous les éléments séparés dans cette structure
elements_question = dict() elements_question = dict()
root = ET.fromstring(texte) root = ET.fromstring(texte)
...@@ -876,7 +877,7 @@ class ContenuDao: ...@@ -876,7 +877,7 @@ class ContenuDao:
for feed in feedback.iter('text'): for feed in feedback.iter('text'):
liste_feedback.append(feed.text) liste_feedback.append(feed.text)
for tolerance in answer.iter('tolerance'): for tolerance in answer.iter('tolerance'):
#print ("tolerance : ", tolerance.text) # print ("tolerance : ", tolerance.text)
if tolerance.text is not None: if tolerance.text is not None:
liste_tolerance.append(tolerance.text) liste_tolerance.append(tolerance.text)
...@@ -914,24 +915,189 @@ class ContenuDao: ...@@ -914,24 +915,189 @@ class ContenuDao:
## Fonction permettant de modifier un xml Moodle ## Fonction permettant de modifier un xml Moodle
# @param id_contenu # @param id_contenu
# @param elements_contenu # @param elements_contenu
def modifier_xml_moodle(self, id_contenu, elements_contenu): def modifier_xml_moodle(self, id_contenu, elements_contenu, en_cours=False):
texte = Utils().recuperer_contenu_fichier(id_contenu) # On charge le fichier actuel
texte = Utils().recuperer_contenu_fichier(id_contenu, en_cours)
root = ET.fromstring(texte) root = ET.fromstring(texte)
print("root") print(elements_contenu)
print(root)
print(type(root)) # On parcourt tous les champs généralistes (type_question est inamovible)
print(ET.tostring(root)) for note in root.iter('defaultgrade'):
note.text = elements_contenu["note_defaut"]
for penalty in root.iter('penalty'):
penalty.text = elements_contenu["penalite"]
for name in root.iter('name'): for name in root.iter('name'):
for nom in name.iter('text'): for nom in name.iter('text'):
nom.text = "Chabala" nom.text = elements_contenu["nom_question"]
print(ET.tostring(root)) 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]
intitule.text = elements_contenu["intitule_question"]
for general in root.iter('generalfeedback'):
for feedback in general.iter('text'):
feedback.text = elements_contenu["feedback_general"]
# puis on fait la même chose que dans la fonction d'au dessus, on parcourt les éléments spécifiques en fonction du type_question
if elements_contenu["type_question"] == "truefalse":
note_faux = 0
# # on récupère la bonne réponse (mise par défault à Vrai mais changée si besoin).
# bonne_reponse = 'Vrai'
i = 0
for answer in root.iter('answer'):
if i == 0:
answer.attrib["fraction"] = '100' if elements_contenu['bonne_reponse'] == 'Vrai' else '0'
elif i == 1:
answer.attrib["fraction"] = '100' if elements_contenu['bonne_reponse'] == 'Faux' else '0'
i = i + 1
pass # for feedback in answer.iter('text'):
# feedback.text = elements_contenu["liste_feedback"][i]
elif elements_contenu["type_question"] == "shortanswer":
pass
# majuscule -> permet la casse (à 1) ou non (à 0)
# majuscule = ''
for usecase in root.iter('usecase'):
usecase.text = elements_contenu["majuscule"]
# on récupère les réponses valables, les notes associées et les feedback
liste_reponse = []
liste_note = []
liste_feedback = []
i = 0
for answer in root.iter('answer'):
answer.attrib["fraction"] = elements_contenu["liste_note"][i]
for question in answer.iter('text'):
if question.text is not None:
question.text = elements_contenu["liste_reponse"][i]
for feedback in answer.iter('feedback'):
for feed in feedback.iter('text'):
feed.text = elements_contenu["liste_feedback"][i]
i += 1
print ("A la sortie, i = ", i)
print ("J'ai ", len(elements_contenu["liste_reponse"]), " reponses")
if i < len(elements_contenu["liste_reponse"]):
print("Je le ai ", len(elements_contenu["liste_reponse"]) - i, " nouveaux contenus")
for question in root.iter('question'):
# eltQuestion = root.iter("question")
newAnswer = SubElement(question, "answer")
newAnswer.attrib["fraction"] = elements_contenu["liste_note"][i]
newAnswer.attrib["format"] = "moodle_auto_format"
text = SubElement(newAnswer, "text")
text.text = elements_contenu["liste_reponse"][i]
feedback = SubElement(newAnswer, "feedback")
textFeedback = SubElement(feedback, "text")
textFeedback.text = elements_contenu["liste_feedback"][i]
i += 1
# # 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_contenu["type_question"] == "multichoice":
pass
# # 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_contenu["type_question"] == "numerical" or \
elements_contenu["type_question"] == "calculatedsimple":
pass
# 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
# on maj le fichier du contenu
Utils().changer_texte_fichier(ObjectId(id_contenu), ET.tostring(root).decode("utf-8"),
elements_contenu["nom_question"])
return ET.tostring(root)
...@@ -18,14 +18,14 @@ class DemandePubDao: ...@@ -18,14 +18,14 @@ class DemandePubDao:
# @param idContenuEnCours l'id du contenu en cours # @param idContenuEnCours l'id du contenu en cours
# @param auteurEnCours l'auteur du contenu en cours # @param auteurEnCours l'auteur du contenu en cours
def creer_demande_publication(self, id_contenu, id_contenu_en_cours, auteur_en_cours, auteur, version_en_cours): def creer_demande_publication(self, id_contenu, id_contenu_en_cours, auteur_en_cours, auteur, version_en_cours, source):
self.base_donnees.demandesPub.insert_one( self.base_donnees.demandesPub.insert_one(
{"date": datetime.now().strftime("%d/%m/%y"), "auteurDemande": auteur_en_cours, {"date": datetime.now().strftime("%d/%m/%y"), "auteurDemande": auteur_en_cours,
"auteurContenu": auteur, "idContenu": ObjectId(id_contenu), "auteurContenu": auteur, "idContenu": ObjectId(id_contenu),
"titre": EncoursDao().get_titre_en_cours(id_contenu_en_cours), "titre": EncoursDao().get_titre_en_cours(id_contenu_en_cours),
"idContenuEnCours": ObjectId(id_contenu_en_cours), "version_en_cours": version_en_cours, "idContenuEnCours": ObjectId(id_contenu_en_cours), "version_en_cours": version_en_cours,
"etat": "enCours"}) "source": source, "etat": "enCours"})
self.base_donnees.encours.update_one({"_id": ObjectId(id_contenu_en_cours)}, {"$set": {"isPublie": "oui"}}) self.base_donnees.encours.update_one({"_id": ObjectId(id_contenu_en_cours)}, {"$set": {"isPublie": "oui"}})
......
import json
import os import os
from pathlib import Path from pathlib import Path
...@@ -69,42 +70,62 @@ class EncoursDao: ...@@ -69,42 +70,62 @@ class EncoursDao:
## création d'un contenu en cours ## création d'un contenu en cours
# @param auteur -> l'auteur du contenu en cours. # @param auteur -> l'auteur du contenu en cours.
# @param id_contenu -> l'id du contenu d'origine # @param contenu -> le contenu d'origine
# @param version la version du contenu d'origine # @param version la version du contenu d'origine
# @param provenance pour déterminer si le contenu d'origine est un tiers ou un perso # @param provenance pour déterminer si le contenu d'origine est un tiers ou un perso
def creer_en_cours(self, auteur, id_contenu, version, provenance): def creer_en_cours(self, auteur, provenance, contenu, titre):
from modele.contenu_dao import ContenuDao from modele.contenu_dao import ContenuDao
if ContenuDao().is_anonyme(id_contenu): if contenu["versionEnCours"]["nbreNotes"] == 0:
moyenne = 0
else:
moyenne = contenu["versionEnCours"]["note"] / contenu["versionEnCours"]["nbreNotes"]
# print("auteur : ", auteur)
# print("provenance : ", provenance)
# print("titre : ", titre)
# print("id : ", contenu["_id"]["$oid"])
# print("type id : ", type(contenu["_id"]["$oid"]))
# print("version : ", contenu["versionEnCours"]["numero"])
if ContenuDao().is_anonyme(contenu["_id"]["$oid"]):
self.base_donnees.encours.insert_one( self.base_donnees.encours.insert_one(
{"date": datetime.now().strftime("%d/%m/%y"), "fichier": "", "auteur": auteur, {"date": datetime.now().strftime("%d/%m/%y"), "fichier": "", "auteur": auteur,
"reference": ObjectId(id_contenu), "version": version, "origine": provenance, "anonyme": "oui"}) "reference": ObjectId(contenu["_id"]["$oid"]), "version": contenu["versionEnCours"]["numero"],
"origine": provenance, "tags_fixes": json.loads(contenu["tags_fixes"]),
"titre": titre, "type": contenu["type"], "source": contenu["source"], "moyenne": moyenne,
"anonyme": "oui"})
else: else:
self.base_donnees.encours.insert_one( self.base_donnees.encours.insert_one(
{"date": datetime.now().strftime("%d/%m/%y"), "fichier": "", "auteur": auteur, {"date": datetime.now().strftime("%d/%m/%y"), "fichier": "", "auteur": auteur,
"reference": ObjectId(id_contenu), "version": version, "origine": provenance}) "reference": ObjectId(contenu["_id"]["$oid"]), "version": contenu["versionEnCours"]["numero"],
"origine": provenance, "tags_fixes": json.loads(contenu["tags_fixes"]),
"titre": titre, "type": contenu["type"], "source": contenu["source"], "moyenne": moyenne})
id = self.recuperer_dernier_id() id = self.recuperer_dernier_id()
chemin_tags = '/'.join(json.loads(contenu["tags_fixes"])) + "/"
nom_fichier = (contenu["fichier"][contenu["fichier"].rfind("/") + 1:])
Path(self.chemin).mkdir(parents=True, exist_ok=True) chemin_fichier = self.chemin + chemin_tags + nom_fichier + "/"
Path(chemin_fichier).mkdir(0o777, parents=True, exist_ok=True)
myFile = open(self.chemin + id, "w") myFile = open(chemin_fichier + nom_fichier, "w")
# y ajouter le texte du contenu # y ajouter le texte du contenu
myFile.write(self.utils.recuperer_contenu_fichier(id_contenu)) myFile.write(self.utils.recuperer_contenu_fichier(contenu["_id"]["$oid"]))
myFile.close() myFile.close()
# mettre a jour le chemin du contenu # mettre a jour le chemin du contenu
self.base_donnees.encours.update_one({"_id": ObjectId(id)}, self.base_donnees.encours.update_one({"_id": ObjectId(id)},
{"$set": {"fichier": id}}) {"$set": {"fichier": chemin_tags + nom_fichier + "/" + nom_fichier}})
## Modification d'un titre d'un contenu en cours ## Modification d'un titre d'un contenu en cours
# @param id_en_cours l'id du contenu en cours # @param id_en_cours l'id du contenu en cours
# @param nouveau_titre le titre à changer # @param nouveau_titre le titre à changer
def changer_titre(self, id_en_cours, nouveau_titre): def changer_titre(self, id_en_cours, nouveau_titre):
# print("Je suis ici : " + nouveau_titre) # print("Je suis ici : " + nouveau_titre)
self.base_donnees.encours.update_one({"_id": ObjectId(id_en_cours)}, {"$set": {"titre": nouveau_titre}}) self.base_donnees.encours.update_one({"_id": ObjectId(id_en_cours)}, {"$set": {"titre": nouveau_titre}})
## Récupération d'un titre d'un contenu en cours ## Récupération d'un titre d'un contenu en cours
......
...@@ -14,9 +14,6 @@ class UtilisateurDao: ...@@ -14,9 +14,6 @@ class UtilisateurDao:
# @param motDePasse le mot de passe tapé # @param motDePasse le mot de passe tapé
# @return un booléen pour dire si l'utilisateur existe ou pas # @return un booléen pour dire si l'utilisateur existe ou pas
def presence_utilisateur(self, nomUtilisateur): def presence_utilisateur(self, nomUtilisateur):
# print("Je suis dans présence utilisateur pour ", nomUtilisateur)
# print("Et j'en ai trouvé : ", nmbre.count())
return self.base_donnees.utilisateur.count_documents({"nom": nomUtilisateur}) == 1 return self.base_donnees.utilisateur.count_documents({"nom": nomUtilisateur}) == 1
......
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