Commit 74ac7b0d authored by Jérémie Passerat's avatar Jérémie Passerat

Reprise des travaux sur les filtres

parent 8b78db94
......@@ -61,6 +61,12 @@ def ajouter_tiers():
return "Tiers ajouté"
@app.route('/auteursExistants', methods=['GET'])
@cross_origin()
def recuperer_tous_les_utilisateurs():
return json.dumps(list(utilisateur_dao.get_all_utilisateurs()), default=json_util.default)
## *********************************************************************************************************************
## Routage contenus : beaucoup de fonctions
@app.route("/addContenu", methods=['POST'])
......@@ -124,12 +130,12 @@ def creer_nouveau_contenu():
@app.route("/majContenu", methods=['PATCH'])
@cross_origin()
def maj_contenu():
id_contenu = json.loads(request.json["id_contenu"])
id_contenu_en_cours = json.loads(request.json["id_contenu_en_cours"])
if request.json["auteur"] == "":
auteur = None
else:
auteur = request.json["auteur"]
contenu_dao.maj_contenu(id_contenu["$oid"], auteur)
contenu_dao.maj_contenu(id_contenu_en_cours["$oid"], auteur)
return "Le contenu a été mis à jour"
......@@ -137,6 +143,7 @@ def maj_contenu():
@cross_origin()
def gerer_demande_pub():
id_publication = json.loads(request.json["id_publication"])
print("Je suis l'id de la publication : ", id_publication["$oid"])
demande_pub_Dao.gerer_demande_pub(id_publication["$oid"], request.json["reponse"], request.json["auteur"])
return "Réponse à la publication gérée"
......@@ -147,6 +154,13 @@ def get_tous_les_contenus():
return json.dumps(list(contenu_dao.get_tous_les_contenus()), default=json_util.default)
@app.route("/getTags/<id_contenu>", methods=['GET'])
@cross_origin()
def get_tags_contenu(id_contenu):
id_tiers = json.loads(request.json["id_tiers"])
return json.dumps(list(contenu_dao.get_tags_contenu(id_tiers["$oid"])), default=json_util.default())
@app.route("/isContenuAnonyme/<id_contenu>", methods=['GET'])
@cross_origin()
def is_contenu_anonyme(id_contenu):
......@@ -188,10 +202,16 @@ def get_texte_contenu(id_json):
return Utils().recuperer_contenu_fichier(id_contenu["$oid"])
@app.route("/getTexteVersionContenu/<id_json>/<version>", methods=['GET'])
@cross_origin()
def get_texte_version_contenu(id_json, version):
id_contenu = json.loads(id_json)
return Utils().recuperer_contenu_version_fichier(id_contenu["$oid"], version)
@app.route("/changerTexte/<id_contenu>", methods=['PATCH'])
@cross_origin()
def changer_texte_contenu(id_contenu):
if len(id_contenu) % 12 == 0:
id_contenu = ObjectId(id_contenu)
else:
......@@ -256,16 +276,17 @@ def supprimer_en_cours_par_id(id_en_cours):
@cross_origin()
def creer_en_cours():
id_contenu = json.loads(request.json["id_contenu"])
en_cours_dao.creer_en_cours(request.json['auteur'], id_contenu["$oid"], request.json['version'])
en_cours_dao.creer_en_cours(request.json['auteur'], id_contenu["$oid"], request.json['version'],
request.json['provenance'])
return en_cours_dao.recuperer_dernier_id()
@app.route("/newEnCoursRefuse", methods=['POST'])
@app.route("/newEnCoursRefuse", methods=['PATCH'])
@cross_origin()
def creer_en_cours_refuse():
id_contenu = json.loads(request.json["id_contenu"])
id_contenu_en_cours = json.loads(request.json["id_contenu_en_cours"])
en_cours_dao.creer_en_cours_refuse(request.json['auteur'], id_contenu["$oid"], request.json['version'])
en_cours_dao.creer_en_cours_refuse(id_contenu_en_cours["$oid"])
return "En Cours Refuse créé"
......
......@@ -27,7 +27,7 @@ class Utils:
from modele.contenu_dao import ContenuDao
from modele.encours_dao import EncoursDao
if(en_cours):
if (en_cours):
chemin = EncoursDao().get_chemin_contenu_en_cours(id_contenu)
else:
......@@ -37,12 +37,28 @@ class Utils:
return texte.strip()
## Fonction qui permet de mettre à jour l'intérieur du texte d'un contenu
def changer_texte_fichier(self, id_contenu, nouveau_texte):
def recuperer_contenu_version_fichier(self, id_contenu, version):
from modele.contenu_dao import ContenuDao
from modele.encours_dao import EncoursDao
chemin_fichier = EncoursDao().get_chemin_contenu_en_cours(id_contenu)
print("chemin_fichier " + chemin_fichier)
chemin = ContenuDao().get_chemin_du_contenu(id_contenu)
commit = ContenuDao().get_commit_pour_une_version(id_contenu, version)
repertoire = chemin[:chemin.rfind("/")]
GitUtils().changerVersionCommit(repertoire, commit)
with open(chemin, "r") as fichier:
texte = fichier.read()
return texte.strip()
## Fonction qui permet de mettre à jour l'intérieur du texte d'un contenu
def changer_texte_fichier(self, id_contenu, nouveau_texte, majContenu=False):
if majContenu:
from modele.contenu_dao import ContenuDao
chemin_fichier = ContenuDao().get_chemin_du_contenu(id_contenu)
else:
from modele.encours_dao import EncoursDao
chemin_fichier = EncoursDao().get_chemin_contenu_en_cours(id_contenu)
myFile = open(chemin_fichier, "w")
# y ajouter le texte du contenu
myFile.write(nouveau_texte)
......
......@@ -10,6 +10,7 @@ from pathlib import Path
import string
from config.gitUtils import GitUtils
from config.utils import Utils
from modele.encours_dao import EncoursDao
......@@ -59,7 +60,7 @@ class ContenuDao:
commit = self.gitUtils.commit(chemin_fichier, nom_contenu, "version" + str(1))
# puis le mettre a jour dans le contenu
self.base_donnees.contenu.update_one({"_id": record.get("_id")}, {"$set": {"commit": commit}})
self.base_donnees.contenu.update_one({"_id": record.get("_id")}, {"$set": {"versionEnCours.commit": commit}})
## recherche d'un contenu par id (pour affichage de son contenu. charge la version courante
# @param id_contenu l'id du contenu recherché
......@@ -69,16 +70,9 @@ class ContenuDao:
## recherche d'un contenu par id et une version précise
# @param id l'id du contenu recherché
# @param version la version du contenu recherché
def get_contenu_avec_id_et_version(self, id_contenu, version):
def get_contenu_avec_id(self, id_contenu):
# a décommenter quand git sera actif
# Utils.changer_version(idContenu, version, "")
return self.base_donnees.contenu.find({"_id": ObjectId(id_contenu["contenu"])})
# return Utils.contenu.find_one({"$and": [
# {"id": idContenu},
# {"$or": [{"versionEnCours.numero": version}, {"historique.numero": version}]}
# ]
# })
## recherche des contenus pour un auteur donné (son 'panier')
# @param auteur l'auteur des contenus
......@@ -93,10 +87,10 @@ class ContenuDao:
if tiers:
id_tiers = self.get_contenus_tiers(auteur)
for (id, version) in id_tiers:
curseur_tiers = self.get_contenu_avec_id_et_version(id, version)
curseur_tiers = self.get_contenu_avec_id(id)
for contenu in curseur_tiers:
contenu["provenance"] = "tiers"
contenu["version"] = version
contenu["version"] = version["version"]
contenus.append(contenu)
if perso:
......@@ -176,12 +170,14 @@ class ContenuDao:
# @param auteur_en_cours l'auteur du contenu en cours
# @param id_contenu_en_cours l'id du contenu en cours
def creer_nouveau_contenu(self, id_demande_publication, auteur_en_cours):
from modele.demande_pubDao import DemandePubDao
# hard codé pour l'exemple, sera adaptatif dans le futur
max_id = 3
id_contenu = modele.DemandePubDao().get_id_contenu_associe_a_une_publication(id_demande_publication)
id_contenu_en_cours = modele.DemandePubDao().get_id_contenu_en_cours_associe_a_une_publication(id_demande_publication)
id_contenu = DemandePubDao().get_id_contenu_associe_a_une_publication(id_demande_publication)
id_contenu_en_cours = DemandePubDao().get_id_contenu_en_cours_associe_a_une_publication(
id_demande_publication)
chemin = self.get_chemin_du_contenu(id_contenu)
......@@ -193,14 +189,14 @@ class ContenuDao:
self.base_donnees.contenu.insert_one(
{"auteur": auteur_en_cours, "note": randrange(0, 10, 1),
"fichier": "dossierContenu" + str(max_id) + "/Contenu" + str(max_id),
"fichier": str(id_contenu) + "/" + str(id_contenu),
"versionEnCours": {"numero": 1, "date": datetime.now().strftime("%d/%m/%y"),
"popularite": 0, "commit": ""},
"tags_fixes": {"1": "tag1", "2": "tag1", "3": "tag1", "4": "tag1",
"tags_banque_libres": {"1": "tag1", "2": "tag1", "3": "tag1", "4": "tag1",
"5": "tag1"},
"tags": {"1": "tag1", "2": "tag1", "3": "tag1", "4": "tag1", "5": "tag1"}})
"tags_banque_fixes": {"1": "tag1", "2": "tag1", "3": "tag1", "4": "tag1", "5": "tag1"}})
modele.DemandePubDao().supprimer_publication(id_demande_publication)
DemandePubDao().supprimer_publication(id_demande_publication)
## récupère le chemin d'un contenu
# @param id_contenu l'id du contenu recherché
......@@ -233,7 +229,21 @@ class ContenuDao:
# @param idContenu l'id du contenu à mettre à jour
# @param nomBranche le nom de la branche
# @param auteur l'auteur du contenu à mettre à jour
def maj_contenu(self, id_contenu, auteur=None):
# @param enCours permet de déterminer si l'origine de la maj est un contenu en cours ou une demande de publication
def maj_contenu(self, id_contenu_en_cours, auteur=None, enCours=True):
from modele.demande_pubDao import DemandePubDao
if (enCours):
id_contenu = EncoursDao().get_id_origine_contenu_en_cours(id_contenu_en_cours)
else:
print ("L'id de la publication est ", id_contenu_en_cours )
id_contenu = DemandePubDao().get_id_contenu_associe_a_une_publication(id_contenu_en_cours)
id_contenu_en_cours = DemandePubDao().get_id_contenu_en_cours_associe_a_une_publication(id_contenu_en_cours)
chemin = self.get_chemin_du_contenu(id_contenu)
......@@ -252,9 +262,28 @@ class ContenuDao:
self.base_donnees.contenu.update_one({"_id": id_contenu}, {
"$set": {"versionEnCours": {"numero": version, "date": datetime.now().strftime("%d/%m/%y"), "popularite": 0,
"commit": ""}}})
# Si un auteur est passé en paramètres de la fonction maj = on l'ajoute dans les métadonnées
if auteur is not None:
self.base_donnees.contenu.update_one({"_id": id_contenu}, {
"$set": {"auteur": auteur}})
self.supprimer_tiers(id_contenu, auteur, version - 1)
# on modifie le texte du contenu d'origine
nouveau_texte = Utils().recuperer_contenu_fichier(id_contenu_en_cours, True)
Utils().changer_texte_fichier(id_contenu, nouveau_texte, True)
## on supprime le contenu en cours
EncoursDao().supprimer_contenu_en_cours_via_id(id_contenu_en_cours)
# initialiser le git et récupérer le commit
version = self.get_version_courante(id_contenu)
index = chemin.rindex("/")
chemin = chemin[:index]
commit = self.gitUtils.commit(chemin, str(id_contenu), "version" + str(version + 1))
# puis le mettre a jour dans le contenu
self.base_donnees.contenu.update_one({"_id": id_contenu}, {"$set": {"versionEnCours.commit": commit}})
## lecture d'un contenu (version basique pour les tests)
# @param id l'id du contenu à consulter
......@@ -270,8 +299,6 @@ class ContenuDao:
os.system("cp '" + chemin + "' '" + repertoire_auteur + nom_fichier + "'")
# self.affichage(chemin)
## après fin de consultation, destruction du fichier temporaire généré
# @param id l'id du contenu consulté
# @param auteur l'auteur auant effectué la consultation
......@@ -286,7 +313,7 @@ class ContenuDao:
# @return booléen true.false si le contenu est anonyme ou pas
def is_anonyme(self, idContenu):
# print("Is anonyme : ", Utils.contenu.find_one({"id": idContenu})["auteur"])
return self.base_donnees.contenu.find_one({"id": idContenu})["auteur"] == "Aucun"
return self.base_donnees.contenu.find_one({"_id": ObjectId(idContenu)})["auteur"] == "Aucun"
## Récupérer tous les contenus
def get_tous_les_contenus(self):
......@@ -351,16 +378,25 @@ class ContenuDao:
for (id, version) in tiers:
versionCourante = self.get_version_courante(id["contenu"])
if version["version"] < versionCourante:
liste += self.get_contenu_avec_id_et_version(id, version)
liste += self.get_contenu_avec_id(id)
return liste
def get_commit_pour_une_version(self, idContenu, version):
if version == self.get_version_courante(idContenu):
courante = self.base_donnees.contenu.find_one({"id": idContenu})["versionEnCours"]
## Fonction permettant de récupérer le 'hash' d'un commit
# @param id_contenu l'id du contenu concerné
# @param version la version pour laquelle on veux récupérer le commit
def get_commit_pour_une_version(self, id_contenu, version):
if version == str(self.get_version_courante(id_contenu)) or version == '0':
courante = self.base_donnees.contenu.find_one({"_id": ObjectId(id_contenu)})["versionEnCours"]
return courante["commit"]
else:
historique = self.base_donnees.contenu.find_one({"id": idContenu})["historique"]
historique = self.base_donnees.contenu.find_one({"_id": ObjectId(id_contenu)})["historique"]
for elt in historique:
if elt["numero"] == version:
if str(elt["numero"]) == version:
return elt["commit"]
## Fonction permettant de récupérer les tags associés à un contenu
# @param id_contenu l'id du contenu concerné
def get_tags_contenu(self, id_contenu):
return self.base_donnees.contenu.find({"_id": ObjectId(id_contenu)})["tags_banque_fixes"]
......@@ -2,7 +2,8 @@ from pymongo import MongoClient
from datetime import datetime
from bson import ObjectId
from modele.contenu_dao import ContenuDao
from modele.encours_dao import EncoursDao
class DemandePubDao:
......@@ -25,32 +26,31 @@ class DemandePubDao:
"idContenuEnCours": ObjectId(id_contenu_en_cours), "version_en_cours": version_en_cours,
"etat": "enCours"})
self.base_donnees.encours.update_one({"_id": ObjectId(id_contenu_en_cours)}, {"$set": {"isPublie": "oui"}})
## Fonction permettant de gérer une demande de publication
# @param idPublication l'id de la demande de publication
# @param reponse la réponse donnée par l'auteur d'origine
# @param auteur l'auteur d'origine
def gerer_demande_pub(self, idPublication, reponse, auteurEnCours):
def gerer_demande_pub(self, id_publication, reponse, auteur_en_cours):
if reponse == 'o':
# branche = self.get_branche_contenu_en_cours(id_en_cours)
# on récupère l'id du contenu d'origine et l'id en cours
id_contenu = self.get_id_contenu_associe_a_une_publication(idPublication)
id_contenu_en_cours = self.get_id_contenu_en_cours_associe_a_une_publication(idPublication)
# on récupère l'id du contenu d'origine
id_contenu = self.get_id_contenu_associe_a_une_publication(id_publication)
# et on met à jour le contenu d'id 'id_contenu' (sans en modifier l'auteur)
ContenuDao().maj_contenu(id_contenu, None)
# et on met à jour le contenu (sans en modifier l'auteur)
ContenuDao().maj_contenu(id_publication, None, False)
# on notifie au 'demandeur' que sa demande de publication est acceptée
self.base_donnees.demandesPub.update_one({"_id": ObjectId(idPublication)}, {"$set": {"etat": "accepté"}})
version = modele.ContenuDao().get_version_courante(id_contenu)
self.base_donnees.demandesPub.update_one({"_id": ObjectId(id_publication)}, {"$set": {"etat": "accepté"}})
# On met à jour le tiers (chez le 'demandeur' de la publication)
modele.ContenuDao().maj_tiers(id_contenu, version, auteurEnCours)
modele.EncoursDao().supprimer_contenu_en_cours(id_contenu_en_cours)
version = ContenuDao().get_version_courante(id_contenu)
ContenuDao().maj_tiers(id_contenu, version, auteur_en_cours)
else:
# on change l'état de la demande de publication
self.base_donnees.demandesPub.update_one({"_id": ObjectId(idPublication)}, {"$set": {"etat": "refus"}})
self.base_donnees.demandesPub.update_one({"_id": ObjectId(id_publication)}, {"$set": {"etat": "refus"}})
## Supprimer une demande de publication
# @param idPub l'id de la demande de publication
......@@ -65,13 +65,21 @@ class DemandePubDao:
## Récupérer lid du contenu (perso ou tiers) associé à une demande de publication
# @param idDdePublication l'id de la demande de publication
def get_id_contenu_associe_a_une_publication(self, idDdePublication):
return self.base_donnees.demandesPub.find_one({"_id": ObjectId(idDdePublication)})["idContenu"]
def get_id_contenu_associe_a_une_publication(self, id_dde_publication):
if type(id_dde_publication) == str:
id_dde_publication = ObjectId(id_dde_publication)
print ("id dde publication", id_dde_publication, " de type ", type(id_dde_publication))
return self.base_donnees.demandesPub.find_one({"_id": id_dde_publication})["idContenu"]
## Récupérer lid du contenu en cours associé à une demande de publication
# @param idDdePublication l'id de la demande de publication
def get_id_contenu_en_cours_associe_a_une_publication(self, idDdePublication):
return self.base_donnees.demandesPub.find_one({"_id": ObjectId(idDdePublication)})["idContenuEnCours"]
def get_id_contenu_en_cours_associe_a_une_publication(self, id_dde_publication):
if type(id_dde_publication) == str:
id_dde_publication = ObjectId(id_dde_publication)
print("id dde publication", id_dde_publication, " de type ", type(id_dde_publication))
return self.base_donnees.demandesPub.find_one({"_id": id_dde_publication})["idContenuEnCours"]
## Récupérer les demandes de publication
# @param auteur l'auteur des demandes
......
......@@ -34,7 +34,11 @@ class EncoursDao:
# @param idContenuEnCours l'id du contenu en cours de modification
# @return l'id intial du contenu en cours
def get_id_origine_contenu_en_cours(self, id_contenu_en_cours):
return self.base_donnees.encours.find_one({"_id": ObjectId(id_contenu_en_cours)})["reference"]
if type(id_contenu_en_cours) == str:
id_contenu_en_cours = ObjectId(id_contenu_en_cours)
return self.base_donnees.encours.find_one({"_id": id_contenu_en_cours})["reference"]
## permet de récupérer tous les contenus en cours pour un auteur
# @param auteur le nom de l'auteur
......@@ -62,10 +66,20 @@ class EncoursDao:
## création d'un contenu en cours
# @param version la version du contenu d'origine
# @param nomBranche -> plus utile.
def creer_en_cours(self, auteur, id_contenu, version):
self.base_donnees.encours.insert_one(
{"date": datetime.now().strftime("%d/%m/%y"), "fichier": "", "auteur": auteur,
"reference": ObjectId(id_contenu), "version": version})
def creer_en_cours(self, auteur, id_contenu, version, provenance):
from modele.contenu_dao import ContenuDao
if ContenuDao().is_anonyme(id_contenu):
self.base_donnees.encours.insert_one(
{"date": datetime.now().strftime("%d/%m/%y"), "fichier": "", "auteur": auteur,
"reference": ObjectId(id_contenu), "version": version, "origine": provenance, "anonyme": "oui"})
else:
self.base_donnees.encours.insert_one(
{"date": datetime.now().strftime("%d/%m/%y"), "fichier": "", "auteur": auteur,
"reference": ObjectId(id_contenu), "version": version, "origine": provenance})
id = self.recuperer_dernier_id()
......@@ -99,10 +113,10 @@ class EncoursDao:
## création d'un contenu en cours, dans l'état refuse
# @param version la version du contenu d'origine
# @param nomBranche -> plus utile.
def creer_en_cours_refuse(self, auteur, idContenu, version):
self.base_donnees.encours.insert_one(
{"date": datetime.now().strftime("%d/%m/%y"), "auteur": auteur,
"reference": ObjectId(idContenu), "version": version, "etat": "refuse"})
def creer_en_cours_refuse(self, id_contenu_en_cours):
self.base_donnees.encours.update_one({"_id": ObjectId(id_contenu_en_cours)}, {"$set": {"refuse": "oui"}})
self.base_donnees.encours.update_one({"_id": ObjectId(id_contenu_en_cours)}, {"$unset": {"isPublie": "oui"}})
def recuperer_dernier_id(self):
dernier_id_insere = self.base_donnees.encours.find().sort("_id", -1).limit(1)
......
......@@ -20,6 +20,15 @@ class UtilisateurDao:
return nmbre.count() == 1
## Fonction de création d'un utilisateur
# @param nomUtilisateur le nom de l'utilisateur à créer
# @param(bientot) mot_de_passe le mdp de l'utilsateur à créer
def ajouter_utilisateur(self, nomUtilisateur):
self.base_donnees.utilisateur.insert_one(
{"nom": nomUtilisateur, "note": randrange(0, 10, 1), "tiers": []})
## Fonction de récupération de tous les utilisateurs existants (pour le filtre)
# @return les utilisateurs en base
def get_all_utilisateurs(self):
return self.base_donnees.utilisateur.find({}, {"nom": 1, "_id": 0})
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