Commit 248a1674 authored by Jérémie Passerat's avatar Jérémie Passerat

Correction erreur menu maj et mise en place de la 'duplication' de fichier pour la consultation

parent b7c07746
......@@ -30,5 +30,9 @@ from Utils import Utils
# 4. Lancer Main.py, soit directement à la main, soit via un IDE configuré pour ça (environnement virtual utilisable) \n
Menu()
# Utils.initialiseMongo()
# Utils.getContenuFichiers()
# Utils.initialise_mongo()
# Utils.tout_peter()
# Utils.creer_auteur_si_besoin()
# Utils.ajouter_contenu("Contenu1", "Auteur 1")
# Utils.detruire_fichier_tmp(1, "Auteur 1")
......@@ -16,9 +16,9 @@ class Menu:
def __init__(self):
# obligatoire à faire au début
Utils.initialiseMongo()
Utils.initialise_mongo()
# si les auteurs n'existent pas on les créée
Utils.creerAuteurSiBesoin()
Utils.creer_auteur_si_besoin()
self.menu_de_base()
## 1er menu affiché et proposé à l'utilisateur
......@@ -35,13 +35,13 @@ class Menu:
choix = (input())
if choix == 'p':
Utils.toutPeter()
Utils.tout_peter()
self.menu_de_base()
if choix.isdigit():
auteur = Utils.switchAuteur(int(choix))
auteur = Utils.switch_auteur(int(choix))
if auteur != "Auteur inconnu":
if Utils.presenceUtilisateur(auteur):
if Utils.presence_utilisateur(auteur):
self.auteur_en_cours = auteur
self.menu_des_actions()
else:
......@@ -98,7 +98,7 @@ class Menu:
os.system('clear')
print("Bonjour ", self.auteur_en_cours)
print("Menu des contenus personnels :")
questions = Utils.consulterContenu(self.auteur_en_cours, True)
questions = Utils.get_contenus(self.auteur_en_cours, True)
print(f"Voici les contenus que vous avez {str(questions.count())} : ")
print("Actions disponibles : ")
print("n : Ajouter un contenu")
......@@ -106,7 +106,7 @@ class Menu:
if questions.count() > 0:
self.afficher_contenus(questions)
print("c : consulter le détail d'un contenu")
print("m : modifier un contenu")
#print("m : modifier un contenu")
print("s : supprimer un contenu")
print("Pour manipuler un contenu, Saisir le numero du contenu puis l'action désirée (par ex : 1c)")
......@@ -122,7 +122,7 @@ class Menu:
if choix == 'q':
self.menu_contenus_personnels()
elif choix.isdigit() and 1 <= int(choix) <= 2:
Utils.ajouterContenu("Contenu" + str(choix), self.auteur_en_cours)
Utils.ajouter_contenu("Contenu" + str(choix), self.auteur_en_cours)
print("Le contenu ", choix, " a été ajouté dans vos contenus personnels")
sleep(1)
self.menu_contenus_personnels()
......@@ -136,18 +136,34 @@ class Menu:
id = int(choix[:len(choix) - 1])
action = choix[len(choix) - 1:]
if action == 'c':
print("Voici le contenu de votre contenu n°", id)
Utils.affichage(Utils.getCheminDuContenu(id))
os.system('clear')
print("Bonjour ", self.auteur_en_cours)
print("Voici le détail de votre contenu n°", id)
Utils.consulter_un_contenu(id, self.auteur_en_cours)
#Utils.affichage(Utils.get_chemin_du_contenu(id))
print("Appuyer sur q pour revenir en arrière : ")
input()
print("Appuyez sur m pour modifier le fichier ou sur q pour quitter")
choix = input()
if choix == 'q':
Utils.detruire_fichier_tmp(id, self.auteur_en_cours)
self.menu_contenus_personnels()
elif action == 'm':
self.modifierContenu(id)
elif choix == 'm':
self.modifier_contenu(id)
print("Modification ouverte sur ce contenu")
print("Appuyer sur q pour revenir en arrière : ")
input()
self.menu_contenus_en_cours()
else:
print("Choix non disponible, appuyer sur q pour revenir en arrière : ")
input()
self.menu_contenus_personnels()
# elif action == 'm':
# self.modifier_contenu(id)
# print("Modification ouverte sur ce contenu")
# print("Appuyer sur q pour revenir en arrière : ")
# input()
# self.menu_contenus_en_cours()
elif action == 's':
if Utils.existe_en_tiers(id):
Utils.renier_contenu(id)
......@@ -171,13 +187,13 @@ class Menu:
print("nom :", elt["fichier"], " - v", elt["versionEnCours"]["numero"], " - du",
elt["versionEnCours"]["date"])
def modifierContenu(self, id_contenu):
def modifier_contenu(self, id_contenu):
os.system('clear')
print("Bonjour ", self.auteur_en_cours)
print("Vous avez choisi de modifier le contenu ", id_contenu)
Utils.modifierContenu(id_contenu, self.auteur_en_cours)
Utils.modifier_contenu(id_contenu, self.auteur_en_cours)
print(
"Un contenu en cours a été créé, appuyer sur c pour accéder aux contenus en cours ou q pour revenir au menu des actions")
choix = input()
......@@ -199,11 +215,10 @@ class Menu:
if len(Utils.get_contenus_tiers(self.auteur_en_cours)):
for (id, version) in Utils.get_contenus_tiers(self.auteur_en_cours):
self.afficher_contenus_tiers(
Utils.getContenuavecIdEtVersion(int(id['contenu']), int(version['version'])),
Utils.get_contenu_avec_id_et_version(int(id['contenu']), int(version['version'])),
int(version['version']))
print("c : consulter le détail d'un tiers")
print("m : modifier un tiers")
print("s : supprimer un tiers")
print("Pour manipuler un contenu, Saisir le numero du contenu puis l'action désirée (par ex : 1c)")
choix = input()
......@@ -213,21 +228,32 @@ class Menu:
id = int(choix[:len(choix) - 1])
action = choix[len(choix) - 1:]
if action == 'c':
print("Voici le contenu de votre contenu n°", id)
Utils.affichage(Utils.getCheminDuContenu(id))
os.system('clear')
print("Bonjour ", self.auteur_en_cours)
version_tiers = Utils.get_version_tiers_avec_id(id, self.auteur_en_cours)
print("Voici le détail de votre tiers n°", id, "dans sa version ", version_tiers)
Utils.changer_version(id, version_tiers)
Utils.consulter_un_contenu(id, self.auteur_en_cours)
# Utils.affichage(Utils.get_chemin_du_contenu(id))
print("Appuyer sur q pour revenir en arrière : ")
input()
self.menu_contenus_tiers()
elif action == 'm':
self.modifierContenu(id)
print("Appuyez sur m pour modifier le fichier ou sur q pour quitter")
choix = input()
if choix == 'q':
Utils.detruire_fichier_tmp(id, self.auteur_en_cours)
self.menu_contenus_personnels()
elif choix == 'm':
self.modifier_contenu(id)
print("Modification ouverte sur ce tiers")
print("Appuyer sur q pour revenir en arrière : ")
input()
self.menu_contenus_en_cours()
else:
print("Choix non disponible, appuyer sur q pour revenir en arrière : ")
input()
self.menu_contenus_personnels()
elif action == 's':
Utils.supprimer_tiers(id, self.auteur_en_cours,
Utils.getVersionFavoriById(id, self.auteur_en_cours))
Utils.get_version_tiers_avec_id(id, self.auteur_en_cours))
print("Contenu Tiers supprimé")
print("Appuyer sur q pour revenir en arrière : ")
input()
......@@ -273,35 +299,39 @@ class Menu:
id = int(choix[:len(choix) - 1])
action = choix[len(choix) - 1:]
if action == 'c':
Utils.changerVersion(id, 0, Utils.getBrancheContenuEnCours(id))
Utils.affichage(Utils.getCheminDuContenu(id))
Utils.changer_version(id, 0, Utils.get_branche_contenu_en_cours(id))
Utils.consulter_un_contenu(id, self.auteur_en_cours)
print("Appuyez sur m pour modifier le fichier ou sur q pour quitter")
choix = input()
if choix == 'q':
self.menu_contenus_en_cours()
elif choix == 'm':
Utils.modifier_contenu(id, self.auteur_en_cours, True)
print("Appuyer sur q pour revenir en arrière : ")
input()
self.menu_contenus_en_cours()
elif action == 'm':
Utils.changerVersion(id, 0, Utils.getBrancheContenuEnCours(id))
Utils.modifierContenu(id, self.auteur_en_cours, True)
Utils.affichage(Utils.getCheminDuContenu(id))
print("Appuyer sur q pour revenir en arrière : ")
else:
print("Action inconnue, Appuyer sur q pour revenir en arrière : ")
input()
self.menu_contenus_en_cours()
elif action == 's':
Utils.supprimerContenuEnCours(int(id))
Utils.supprimer_contenu_en_cours(int(id))
print("Appuyer sur q pour revenir en arrière : ")
input()
self.menu_contenus_en_cours()
elif action == 'v':
self.valider_modification(int(id))
Utils.supprimerContenuEnCours(int(id))
Utils.supprimer_contenu_en_cours(int(id))
print ("La demande de validation du contenu a été effectuée")
print("Appuyer sur q pour revenir en arrière : ")
input()
self.menu_contenus_en_cours()
elif action == 'n':
print ("Is favori :", Utils.is_favori_auteur(self.auteur_en_cours, id))
if not Utils.is_favori_auteur(self.auteur_en_cours, id):
contenu_associe = Utils.getIdContenuAssocieAUnEnCours(int(id))
chemin = Utils.getCheminDuContenu(contenu_associe)
Utils.creerNouveauContenu(chemin,
print ("Is favori :", Utils.is_tiers_auteur(self.auteur_en_cours, id))
if not Utils.is_tiers_auteur(self.auteur_en_cours, id):
contenu_associe = Utils.get_id_contenu_associe_a_un_en_cours(int(id))
chemin = Utils.get_chemin_du_contenu(contenu_associe)
Utils.creer_nouveau_contenu(chemin,
self.auteur_en_cours, id)
else:
print("Vous n'avez pas le droit de faire directement cette action sur un contenu tiers")
......@@ -328,7 +358,7 @@ class Menu:
print("Bonjour ", self.auteur_en_cours)
print(
f"Il y a {len(Utils.get_contenus_tiers(self.auteur_en_cours))} contenus présents en banque (excepteption des votres): ")
questions = Utils.consulterContenu(self.auteur_en_cours, False)
questions = Utils.get_contenus(self.auteur_en_cours, False)
print("La banque possède actuellement", questions.count(), " contenu(s)")
print("Actions disponibles : ")
print("q : revenir au menu des actions")
......@@ -346,10 +376,11 @@ class Menu:
id = int(choix[:len(choix) - 1])
action = choix[len(choix) - 1:]
if action == 'c':
Utils.changerVersion(id, 0, Utils.getBrancheContenuEnCours(id))
Utils.affichage(Utils.getCheminDuContenu(id))
Utils.changer_version(id, 0, Utils.get_branche_contenu_en_cours(id))
Utils.consulter_un_contenu(id, self.auteur_en_cours)
print("Appuyer sur q pour revenir en arrière : ")
input()
Utils.detruire_fichier_tmp(id, self.auteur_en_cours)
self.menu_contenus_banque()
elif action == 't':
Utils.mettre_contenu_en_tiers(id, self.auteur_en_cours)
......@@ -372,16 +403,16 @@ class Menu:
def valider_modification(self, idContenuEnCours):
# on récupère l'auteur et l'id du contenu "de base" associé à la modif
auteur = Utils.getAuteurContenuEnCours(idContenuEnCours)
idContenu = Utils.getIdContenuAssocieAUnEnCours(idContenuEnCours)
branche = Utils.getBrancheContenuEnCours(idContenuEnCours)
auteur = Utils.get_auteur_contenu_en_cours(idContenuEnCours)
idContenu = Utils.get_id_contenu_associe_a_un_en_cours(idContenuEnCours)
branche = Utils.get_branche_contenu_en_cours(idContenuEnCours)
if auteur == self.auteur_en_cours:
chemin = Utils.getCheminDuContenu(idContenu)
Utils.majContenu(chemin, idContenu, branche)
chemin = Utils.get_chemin_du_contenu(idContenu)
Utils.maj_contenu(chemin, idContenu, branche)
else:
Utils.demandePublication(idContenu, idContenuEnCours, self.auteur_en_cours, auteur)
Utils.demande_publication(idContenu, idContenuEnCours, self.auteur_en_cours, auteur)
## Fonction globale de gestion des évaluations
def gestion_des_evaluations(self):
......@@ -417,7 +448,7 @@ class Menu:
input()
self.gestion_des_evaluations()
elif action == 's':
Utils.supprimerEvaluation(id)
Utils.supprimer_evaluation(id)
print("Evaluation supprimée")
print("Appuyer sur q pour revenir en arrière : ")
input()
......@@ -439,10 +470,10 @@ class Menu:
print("Bonjour ", self.auteur_en_cours)
# on charge tous les contenus présents
questions = Utils.consulterTousLesContenu()
questions = Utils.get_tous_les_contenus()
if questions.count() > 0:
self.afficher_contenus_banque(questions)
print("Nombre de contenus à ajouter : (entre 1 et ", Utils.getMaxIdContenus(),
print("Nombre de contenus à ajouter : (entre 1 et ", Utils.get_max_id_contenus(),
"), q pour revenir en arrière")
choix = (input())
questions = list()
......@@ -454,7 +485,7 @@ class Menu:
for i in range(int(choix)):
print("Contenu ", i + 1, ", donner l'id du contenu :")
questions.append(int(input()))
Utils.creerEvaluation(questions, self.auteur_en_cours)
Utils.creer_evaluation(questions, self.auteur_en_cours)
## Fonction de gestion des mises à jour
def menu_de_maj(self):
......@@ -468,6 +499,7 @@ class Menu:
if choix == 'q':
self.menu_des_actions()
if choix == 'd':
os.system('clear')
print("Vous aurez, ici, les maj possibles de contenu perso et de contenu tiers")
print("Actions disponibles : ")
print("q : revenir au menu des mises à jour")
......@@ -478,7 +510,10 @@ class Menu:
self.menu_de_maj()
elif choix == 'p':
# mise à jour de contenus personnels
publications = Utils.getDemandesPub(self.auteur_en_cours, False)
os.system('clear')
publications = Utils.get_demandes_pub(self.auteur_en_cours, False)
print ("Vous avez ", publications.count(), "mises à jour disponibles")
if publications.count() > 0:
for pub in publications:
etat = pub["etat"]
# pour raison de simplicité, les demandes de publication refusées sont invisibles (dans un futur proche elle seront visibles mais non interactives)
......@@ -501,7 +536,7 @@ class Menu:
if action == 'o' or action == 'n':
id = choix[0:len(choix) - 1]
choix = choix[len(choix) - 1:]
Utils.gererDemandePub(id, action)
Utils.gerer_demande_pub(id, action)
if choix == 'o':
decision = "acceptée"
else:
......@@ -512,16 +547,23 @@ class Menu:
input()
self.menu_de_maj()
elif action == 'c':
Utils.changerVersion(id, 0, Utils.getBrancheContenuEnCours(id))
Utils.changer_version(id, 0, Utils.get_branche_contenu_en_cours(id))
print("Voici le contenu associé à la demande de publication : ")
Utils.affichage(Utils.getCheminDuContenu(Utils.getIdContenuAssocieAUnEnCours(id)))
branche_contenu_en_cours = Utils.get_branche_contenu_en_cours(id)
Utils.changer_version(Utils.get_id_contenu_associe_a_un_en_cours(id), 0, branche_contenu_en_cours)
Utils.consulter_un_contenu(id, self.auteur_en_cours)
print("Appuyer sur q pour revenir en arrière : ")
input()
Utils.detruire_fichier_tmp(id, self.auteur_en_cours)
self.menu_de_maj()
else:
print("Action inconnue, Appuyer sur q pour revenir en arrière : ")
input()
self.menu_de_maj()
else:
print("Appuyer sur q pour revenir en arrière : ")
input()
self.menu_de_maj()
elif choix == 't':
# mise à jour de contenus favoris
......@@ -532,9 +574,10 @@ class Menu:
nbre_favoris = len(Utils.get_contenus_tiers(self.auteur_en_cours))
print("L'auteur possède ", nbre_favoris, " favoris")
if nbre_favoris > 0:
Utils.listeMajFavoris(self.auteur_en_cours)
print("Vous n'avez aucun favori, appuyez sur q pour revenir en arriere")
Utils.liste_maj_tiers(self.auteur_en_cours)
print("Appuyez sur q pour revenir en arriere")
else :
print("Vous n'avez aucun favori possédant une mise à jour, appuyez sur q pour revenir en arriere")
input()
self.menu_de_maj()
......@@ -544,8 +587,9 @@ class Menu:
self.menu_de_maj()
if choix == 'p':
print("Vous aurez, ici, les suites des demandes de publication des en_cours")
publications = Utils.getDemandesPub(self.auteur_en_cours, True)
os.system('clear')
publications = Utils.get_demandes_pub(self.auteur_en_cours, True)
print("Vous avez", publications.count(), " demandes de publication en cours")
for pub in publications:
id_pub = pub["id"]
print("auteur d'origine :", pub["auteurContenu"], "idDemandePublication : ", pub["id"], "date : ",
......@@ -558,20 +602,20 @@ class Menu:
print("q : remettre ce choix à plus tard")
choix = input()
if choix == 'n':
id_en_cours = Utils.getIdContenuEnCoursAssocieAUnePublication(id_pub)
contenu_associe = Utils.getIdContenuAssocieAUnEnCours(id_en_cours)
chemin = Utils.getCheminDuContenu(contenu_associe)
id_en_cours = Utils.get_id_contenu_en_cours_associe_a_une_publication(id_pub)
contenu_associe = Utils.get_id_contenu_associe_a_un_en_cours(id_en_cours)
chemin = Utils.get_chemin_du_contenu(contenu_associe)
Utils.creerNouveauContenu(chemin,
Utils.creer_nouveau_contenu(chemin,
self.auteur_en_cours, id_pub)
if Utils.is_favori_auteur(self.auteur_en_cours, contenu_associe):
versionFavori = Utils.getVersionFavoriById(contenu_associe, self.auteur_en_cours)
if Utils.is_tiers_auteur(self.auteur_en_cours, contenu_associe):
versionFavori = Utils.get_version_tiers_avec_id(contenu_associe, self.auteur_en_cours)
Utils.supprimer_tiers(contenu_associe, self.auteur_en_cours, versionFavori)
print("Vous venez de créer un nouveau contenu")
sleep(2)
self.menu_contenus_personnels()
elif choix == 's':
Utils.supprimerContenuEnCours(Utils.getIdContenuEnCoursAssocieAUnePublication(pub["id"]))
Utils.supprimer_contenu_en_cours(Utils.get_id_contenu_en_cours_associe_a_une_publication(pub["id"]))
elif choix == 'q':
self.menu_de_maj()
print("Appuyer sur q pour revenir en arrière : ")
......
......@@ -25,7 +25,7 @@ class Utils:
## Filtrage de la saisie utilisateur pour le choix d'un auteur
# @param Le numéro d'auteur choisi
@staticmethod
def switchAuteur(argument):
def switch_auteur(argument):
switcher = {
1: "Auteur 1",
2: "Auteur 2",
......@@ -40,7 +40,7 @@ class Utils:
# maj -> update_one, update_many and replace_one
# suppression -> delete_one and delete_many
@staticmethod
def initialiseMongo():
def initialise_mongo():
client = MongoClient('localhost', 27017)
## extraction d'une base de données. Si elle n'existe pas, elle esst créée
......@@ -49,15 +49,15 @@ class Utils:
## Création d'utilisateur
# @param nomUtilisateur Le nom de l'utilisateur
@staticmethod
def ajouterUtilisateur(nomUtilisateur):
def ajouter_utilisateur(nomUtilisateur):
Utils.statdb.utilisateur.insert_one(
{"nom": nomUtilisateur, "note": randrange(0, 10, 1), "favoris": []})
{"nom": nomUtilisateur, "note": randrange(0, 10, 1), "tiers": []})
## Vérification de la présence d'un utilisateur en base
# @param nomUtilisateurLe nom de l'utilisateur
# @return True si Utilisateur présent, False sinon
@staticmethod
def presenceUtilisateur(nomUtilisateur):
def presence_utilisateur(nomUtilisateur):
# print("Je suis dans présence utilisateur pour ", nomUtilisateur)
nmbre = Utils.statdb.utilisateur.find({"nom": nomUtilisateur})
# print("Et j'en ai trouvé : ", nmbre.count())
......@@ -68,9 +68,9 @@ class Utils:
# @param nomFichier le nom du fichier importé
# @param auteur l'auteur qui importe le fichier
@staticmethod
def ajouterContenu(nomFichier, auteur):
def ajouter_contenu(nomFichier, auteur):
max_id = Utils.getMaxIdContenus()
max_id = Utils.get_max_id_contenus()
if max_id is None:
max_id = 0
......@@ -91,7 +91,7 @@ class Utils:
"versionEnCours": {"numero": 1, "date": datetime.now().strftime("%d/%m/%y"),
"popularite": 0, "commit": commit},
"tags_banque_fixes": ["tag1", "tag2", "tag3", "tag4", "tag5"],
"tags_banque_libres": ["tagl1", "tagl2", "tagl3", "tagl4", "tagl5"]})
"tags_banque_libres": ["tagl1", "tagl2", "tagl3", "tagl4", "tagl5"], "type": " ", "source": " "})
print("Le contenu a bien été ajouté pour l'utilisateur ", auteur)
......@@ -102,7 +102,7 @@ class Utils:
# @return les contenus de l'auteur ou tous les autres
@staticmethod
def consulterContenu(auteur, panier=False):
def get_contenus(auteur, panier=False):
if panier:
return Utils.statdb.contenu.find({"auteur": auteur})
else:
......@@ -114,7 +114,7 @@ class Utils:
# @return tous les contenus présents
@staticmethod
def consulterTousLesContenu():
def get_tous_les_contenus():
return Utils.statdb.contenu.find()
## Suppression d'un contenu (dissociation avec son auteur)
......@@ -139,7 +139,8 @@ class Utils:
def mettre_contenu_en_tiers(idContenu, auteur):
# print("Le contenu est dans la version ", Utils.getVersionContenuavecId(idContenu))
Utils.statdb.utilisateur.update({"nom": auteur}, {
"$push": {"favoris": [{"contenu": int(idContenu)}, {"version": Utils.getVersionContenuavecId(idContenu)}]}})
"$push": {
"tiers": [{"contenu": int(idContenu)}, {"version": Utils.get_version_contenu_avec_id(idContenu)}]}})
## Permet de dissocier un contenu du panier d'un auteur tiers
# Si cet auteur était le seul à posséder une question "anonyme", elle est supprimée
......@@ -147,12 +148,12 @@ class Utils:
@staticmethod
def supprimer_tiers(idContenu, auteur, version):
Utils.statdb.utilisateur.update({"nom": auteur},
{"$pull": {"favoris": [{"contenu": idContenu}, {"version": version}]}})
{"$pull": {"tiers": [{"contenu": idContenu}, {"version": version}]}})
## Permet de savoir si un contenu possède un auteur légitime
# @param idContenu l'identifiant du contenu
@staticmethod
def isAnonyme(idContenu):
def is_anonyme(idContenu):
print("Is anonyme : ", Utils.statdb.contenu.find_one({"id": idContenu})["auteur"])
return Utils.statdb.contenu.find_one({"id": idContenu})["auteur"] == "Aucun"
......@@ -162,10 +163,10 @@ class Utils:
# @return Le contenu lié à l'id
@staticmethod
def getContenuavecIdEtVersion(idContenu, version):
def get_contenu_avec_id_et_version(idContenu, version):
# a décommenter quand git sera actif
Utils.changerVersion(idContenu, version, "")
Utils.changer_version(idContenu, version, "")
return Utils.statdb.contenu.find_one({"id": idContenu})
# return Utils.statdb.contenu.find_one({"$and": [
# {"id": idContenu},
......@@ -176,14 +177,14 @@ class Utils:
## récupérer la version courante d'un contenu
# @param idContenu l'id du contenu concerné
@staticmethod
def getVersionCourante(idContenu):
def get_version_courante(idContenu):
return Utils.statdb.contenu.find_one({"id": idContenu})["versionEnCours"]["numero"]
## Récupérer un contenu à partir de son identifiant
# @param idContenu l'id associé au contenu
# @return Le contenu lié à l'id
@staticmethod
def getContenuavecId(idContenu):
def get_contenu_avec_Id(idContenu):
# Id unique donc find_one utilisable
return Utils.statdb.contenu.find_one({"id": idContenu})
......@@ -191,15 +192,15 @@ class Utils:
# @param idContenu l'id associé au contenu
# @return La version en cours du contenu lié à l'id
@staticmethod
def getVersionContenuavecId(idContenu):
def get_version_contenu_avec_id(idContenu):
# print("Je veux le contenu : ", int(idContenu))
return int(Utils.getContenuavecId(int(idContenu))["versionEnCours"]["numero"])
return int(Utils.get_contenu_avec_Id(int(idContenu))["versionEnCours"]["numero"])
## Récupérer l'id maximal (pour les contenus)
# permet de s'assurer que les id de contenu soient uniques
@staticmethod
def getMaxIdContenus():
def get_max_id_contenus():
## Fonction permettant de récupérer l'id max présent en base (pour pouvoir incrémenter un nouveau contenu).
element = Utils.statdb.contenu.find().sort("id", -1).limit(1)
......@@ -211,7 +212,7 @@ class Utils:
# permet de s'assurer que les id de contenu soient uniques
@staticmethod
def getMaxIdEvaluations():
def get_max_id_evaluations():
## Fonction permettant de récupérer l'id max présent en base (pour pouvoir incrémenter un nouveau contenu).
element = Utils.statdb.evaluation.find().sort("idEval", -1).limit(1)
......@@ -223,7 +224,7 @@ class Utils:
# permet de s'assurer que les id de contenu soient uniques
@staticmethod
def getMaxIdContenusEnCours():
def get_max_id_contenus_en_cours():
## Fonction permettant de récupérer l'id max présent en base (pour pouvoir incrémenter un nouveau contenu).
element = Utils.statdb.encours.find().sort("idContenuEC", -1).limit(1)
......@@ -235,7 +236,7 @@ class Utils:
# permet de s'assurer que les id de demande de publication soient uniques
@staticmethod
def getMaxIdDemandesDePublication():
def get_max_id_demandes_de_publication():
## Fonction permettant de récupérer l'id max présent en base (pour pouvoir incrémenter un nouveau contenu).
element = Utils.statdb.demandesPub.find().sort("id", -1).limit(1)
......@@ -243,25 +244,23 @@ class Utils:
print("id : ", elt)
return int(elt["id"])
## Récupérer les favoris d'un utilisateur
## Récupérer les tiers d'un utilisateur
# @param auteur le nom de l'utilisateur
# @return les favoris de l'utilisateur 'auteur'
# @return les tiers de l'utilisateur 'auteur'
@staticmethod
def get_contenus_tiers(auteur):
return Utils.statdb.utilisateur.find_one({"nom": auteur})["favoris"]
return Utils.statdb.utilisateur.find_one({"nom": auteur})["tiers"]
## Créer une évaluation
# @param contenus les numeros des contenus associés à l'évaluation
# @auteur l'auteur qui créée l'évaluation
@staticmethod
def creerEvaluation(contenus, auteur):
def creer_evaluation(contenus, auteur):
# création de l'évaluation
max_id_eval = Utils.getMaxIdEvaluations()
max_id_eval = Utils.get_max_id_evaluations()
if max_id_eval is None:
max_id_eval = 0
......@@ -277,26 +276,26 @@ class Utils:
# @return les évaluations de l'auteur
@staticmethod
def get_evaluations(auteur, id = 0):
def get_evaluations(auteur, id=0):
if id == 0:
return Utils.statdb.evaluation.find({"auteur": auteur})
else:
return Utils.statdb.evaluation.find({"auteur": auteur} and {"idEval" : id})
return Utils.statdb.evaluation.find({"auteur": auteur} and {"idEval": id})
## Modifier un contenu
# @param idContenu contenu à modifier
# @param auteur l'utilisateur désirant modifier la question
# @param isEnCours Vrai si modification d'un contenu en cours
@staticmethod
def modifierContenu(idContenu, auteur, enCours=False):
def modifier_contenu(idContenu, auteur, enCours=False):
# le chemin du fichier restera tjrs le même
contenu = Utils.statdb.contenu.find_one({"id": int(idContenu)})
Utils.modification(Utils.chemin + contenu["fichier"], idContenu, auteur, not enCours)
Utils.modification_fichier(Utils.chemin + contenu["fichier"], idContenu, auteur, not enCours)
@staticmethod
## affichage d'un contenu de fichier
# @param chemin le fichier à afficher
def affichage(chemin):
with open(chemin, "r") as fichier:
texte = fichier.read()
......@@ -305,6 +304,29 @@ class Utils:
print("Le fichier (v", int(texte[-1]), ") : " + texte)
return texte
@staticmethod
## consulter un contenu
# @param id l'id du contenu à consulter
# @param auteur l'auteur désirant consulter le contenu
def consulter_un_contenu(id, auteur):
# Créer un répertoire au nom de l'auteur (ou l'utiliser si il existe déja)
auteur = auteur.lower().replace(" ", "_")
repertoire_auteur = Utils.chemin + auteur + "/"
Path(repertoire_auteur).mkdir(parents=True, exist_ok=True)
# Copier le fichier lié au contenu dans ce répertoire
chemin = Utils.get_chemin_du_contenu(id)
nom_fichier = chemin[chemin.rfind("/") + 1:]
os.system("cp '" + chemin + "' '" + repertoire_auteur + nom_fichier + "'")
Utils.affichage(chemin)
## détruire un fichier temporaire
@staticmethod
def detruire_fichier_tmp(id, auteur):
auteur = auteur.lower().replace(" ", "_") + "/"
chemin = Utils.get_chemin_du_contenu(id)
nom_fichier = chemin[chemin.rfind("/") + 1:]
os.system("rm '" + Utils.chemin + auteur + nom_fichier + "'")
## modification (directe ici) d'un fichier
# @param chemin chemin d'acces au contenu
# @param id id du contenu
......@@ -312,7 +334,7 @@ class Utils:
# @param modifPremiere permet de déterminer si on est sur une premiere modification du contenu ou si on remodifie un contenu en cours
@staticmethod
def modification(chemin, idContenu, auteur, modifPremiere=True):
def modification_fichier(chemin, idContenu, auteur, modifPremiere=True):
print("Le chemin du fichier est : ", chemin)
......@@ -356,7 +378,7 @@ class Utils:
# si on est dans le cas d'une modification 1ere d'un contenu, on l'entre en bd (sinon il y est déja)
if modifPremiere:
max_id_encours = Utils.getMaxIdContenusEnCours()
max_id_encours = Utils.get_max_id_contenus_en_cours()
if max_id_encours is None:
max_id_encours = 0
Utils.statdb.encours.insert_one(
......@@ -365,7 +387,7 @@ class Utils:
## Mettre à jour un contenu (branche principale)
@staticmethod
def majContenu(chemin, idContenu, nomBranche):
def maj_contenu(chemin, idContenu, nomBranche):
repertoire = chemin[:chemin.rfind("/") + 1]
fin = Utils.affichage(chemin)
......@@ -384,7 +406,7 @@ class Utils:
## Supprimer une évaluation (définitif)
# @param idEval l'id de l'évaluation à supprimer
@staticmethod
def supprimerEvaluation(idEval):
def supprimer_evaluation(idEval):
Utils.statdb.evaluation.delete_one({"idEval": idEval})
## Fonction pour savoir si un contenu est favori chez qqun
......@@ -392,22 +414,22 @@ class Utils:
@staticmethod
def existe_en_tiers(idContenu):
return Utils.statdb.utilisateur.find(
{"favoris": {"$elemMatch": {"$elemMatch": {"contenu": idContenu}}}}).count() != 0
{"tiers": {"$elemMatch": {"$elemMatch": {"contenu": idContenu}}}}).count() != 0
## On entre l'id d'un contenu favori pour un auteur, on veut récupérer en sortie la version associée
# @param idContenu
@staticmethod
def getVersionFavoriById(idContenu, auteur):
favoris = (Utils.statdb.utilisateur.find_one({"nom": auteur})["favoris"])
for i in range(len(favoris)):
fav = favoris[i]
if int(fav[0]["contenu"]) == idContenu:
return int(fav[1]["version"])
def get_version_tiers_avec_id(idContenu, auteur):
tiers = (Utils.statdb.utilisateur.find_one({"nom": auteur})["tiers"])
for i in range(len(tiers)):
tmp = tiers[i]
if int(tmp[0]["contenu"]) == idContenu:
return int(tmp[1]["version"])
return 0
## Suppression définitive d'un contenu
@staticmethod
def aneantirContenu(idContenu):
def aneantir_contenu(idContenu):
Utils.statdb.contenu.delete_one({"id": idContenu})
## permet de récupérer tous les contenus en cours pour un auteur
......@@ -421,17 +443,17 @@ class Utils:
# @param idContenuEnCours l'id du contenu en cours de modification
@staticmethod
def getIdContenuAssocieAUnEnCours(idContenuEnCours):
def get_id_contenu_associe_a_un_en_cours(idContenuEnCours):
print("L'id en cours que j'ai est", idContenuEnCours, " - ", type(idContenuEnCours))
return Utils.statdb.encours.find_one({"idContenuEC": int(idContenuEnCours)})["reference"]
@staticmethod
def getIdContenuAssocieAUnePublication(idDdePublication):
def get_id_contenu_associe_a_une_publication(idDdePublication):
# print("L'id en cours que j'ai est", idContenuEnCours, " - ", type(idContenuEnCours))
return Utils.statdb.demandesPub.find_one({"id": int(idDdePublication)})["idContenu"]
@staticmethod
def getIdContenuEnCoursAssocieAUnePublication(idDdePublication):
def get_id_contenu_en_cours_associe_a_une_publication(idDdePublication):
print("L'id en cours que j'ai est", idDdePublication, " - ", type(idDdePublication))
return Utils.statdb.demandesPub.find_one({"id": int(idDdePublication)})["idContenuEnCours"]
......@@ -439,7 +461,7 @@ class Utils:
# @param idContenu l'id du contenu
@staticmethod
def getCheminDuContenu(idContenu):
def get_chemin_du_contenu(idContenu):
return Utils.chemin + Utils.statdb.contenu.find_one({"id": idContenu})["fichier"]
## permet de changer de version pour un contenu (modification de la branche / du commit en fonction de la situation)
......@@ -447,17 +469,17 @@ class Utils:
# @param version la version du contenu désirée
# @param nomBranche changement direct de branche -> utile pour naviguer parmi les versions "en cours"
@staticmethod
def changerVersion(idContenu, version, nomBranche=""):
def changer_version(idContenu, version, nomBranche=""):
# si la version courante est la 1 on a pas besoin de faire la suite
if Utils.getVersionCourante(idContenu) != 1:
if Utils.get_version_courante(idContenu) != 1:
# on recupere le chemin du fichier associé au contenu (dans les 2 cas)
chemin = Utils.getCheminDuContenu(idContenu)
chemin = Utils.get_chemin_du_contenu(idContenu)
repertoire = chemin[:chemin.rfind("/") + 1]
if version != 0:
# on change le repertoire récupéré ci dessus dans la bonne version (si on travaille avec une version)
idCommit = Utils.getCommitPourUneVersion(idContenu, version)
idCommit = Utils.get_commit_pour_une_version(idContenu, version)
UtilsGit.changerVersionCommit(repertoire, idCommit)
else:
UtilsGit.changerVersionBranche(repertoire, nomBranche)
......@@ -465,41 +487,42 @@ class Utils:
## supprimer un contenu en cours
# @param idContenuEnCours id du contenu a supprimer
@staticmethod
def supprimerContenuEnCours(idContenuEnCours):
def supprimer_contenu_en_cours(idContenuEnCours):
Utils.statdb.encours.delete_one({"idContenuEC": idContenuEnCours})
## récupérer l'auteur initial d'un contenu en cours (peut être l'auteur effectuant la modification ou non)
# @param idContenuEnCours l'id du contenu en cours de modification
@staticmethod
def getAuteurContenuEnCours(idContenuEnCours):
id_contenu = Utils.getIdContenuAssocieAUnEnCours(idContenuEnCours)
def get_auteur_contenu_en_cours(idContenuEnCours):
id_contenu = Utils.get_id_contenu_associe_a_un_en_cours(idContenuEnCours)
return Utils.statdb.contenu.find_one({"id": id_contenu})["auteur"]
## récupérer la branche d'un contenu en cours
# @param idContenuEnCours l'id du contenu en cours de modification
@staticmethod
def getBrancheContenuEnCours(idContenuEnCours):
def get_branche_contenu_en_cours(idContenuEnCours):
# id_contenu = Utils.getIdContenuAssocieAUnEnCours(idContenuEnCours)
return Utils.statdb.encours.find_one({"idContenuEC": idContenuEnCours})["branche"]
## A NE JAMAIS UTILISER SANS REFLECHIR
# Suppression integrale de la base de données & recreation des 3 auteurs
@staticmethod
def toutPeter():
def tout_peter():
Utils.statdb.contenu.delete_many({})
Utils.statdb.utilisateur.delete_many({})
Utils.statdb.evaluation.delete_many({})
Utils.statdb.encours.delete_many({})
Utils.statdb.demandesPub.delete_many({})
os.system("rm -rf dossierContenu*/")
Utils.ajouterUtilisateur("Auteur 1")
Utils.ajouterUtilisateur("Auteur 2")
Utils.ajouterUtilisateur("Auteur 3")
os.system("rm -rf auteur_*/")
Utils.ajouter_utilisateur("Auteur 1")
Utils.ajouter_utilisateur("Auteur 2")
Utils.ajouter_utilisateur("Auteur 3")
## creer un contenu à partir d'un contenu en cours
@staticmethod
def creerNouveauContenu(chemin, auteurEnCours, idContenuEnCours):
def creer_nouveau_contenu(chemin, auteurEnCours, idContenuEnCours):
print("chemin : ", chemin)
# hard codé pour l'exemple, sera adaptatif dans le futur
......@@ -528,13 +551,13 @@ class Utils:
"tags": {"1": "tag1", "2": "tag1", "3": "tag1", "4": "tag1", "5": "tag1"}})
print("Le contenu a bien été ajouté pour l'utilisateur ", auteurEnCours)
Utils.supprimerContenuEnCours(idContenuEnCours)
Utils.supprimer_contenu_en_cours(idContenuEnCours)
## fonction qui permet de savoir si un contenu fait partie des favoris d'un auteur
## fonction qui permet de savoir si un contenu fait partie des tiers d'un auteur
# On fraude un peu en utilisant getVersionFavoriById -> si la sortie est à 0 ben le contenu n'est pas un favori
@staticmethod
def is_favori_auteur(auteur, idContenu):
return Utils.getVersionFavoriById(idContenu, auteur) != 0
def is_tiers_auteur(auteur, idContenu):
return Utils.get_version_tiers_avec_id(idContenu, auteur) != 0
## créer une demande de Publication à l'auteur d'origine
# @param idContenuEnCours la modification à soumettre
......@@ -543,8 +566,8 @@ class Utils:
# @param auteur l'auteur du contenu d'origine
# ATTENTION, IL FAUDRA SUREMENT INSERER UN ID POUR PLUS DE FACILITE A MANIPULER
@staticmethod
def demandePublication(idContenu, idContenuEnCours, auteurEnCours, auteur):
max_id = Utils.getMaxIdDemandesDePublication()
def demande_publication(idContenu, idContenuEnCours, auteurEnCours, auteur):
max_id = Utils.get_max_id_demandes_de_publication()
if max_id is None:
max_id = 0
Utils.statdb.demandesPub.insert_one(
......@@ -556,7 +579,7 @@ class Utils:
# @param auteur l'auteur concerné
# @param emises si true -> publications envoyées, si False, demandes recues
@staticmethod
def getDemandesPub(auteur, emises=True):
def get_demandes_pub(auteur, emises=True):
if emises:
return Utils.statdb.demandesPub.find({"auteurDemande": auteur})
else:
......@@ -566,7 +589,7 @@ class Utils:
# @param idContenu l'id du contenu manipulé
# @param version le numéro de version désiré
@staticmethod
def getCommitPourUneVersion(idContenu, version):
def get_commit_pour_une_version(idContenu, version):
print("Je veux récupérer le commit associé à la version ", version, "pour le contenu ", idContenu)
historique = Utils.statdb.contenu.find_one({"id": idContenu})["historique"]
for elt in historique:
......@@ -578,15 +601,15 @@ class Utils:
# @param idPublication la publication concernée
# @param reponse la reponse donnée (0 / N)
@staticmethod
def gererDemandePub(idPublication, reponse):
def gerer_demande_pub(idPublication, reponse):
if reponse == 'O':
print("Publication acceptée")
id_en_cours = Utils.getIdContenuEnCoursAssocieAUnePublication(idPublication)
branche = Utils.getBrancheContenuEnCours(id_en_cours)
idContenu = Utils.getIdContenuAssocieAUnePublication(idPublication)
chemin = Utils.getCheminDuContenu(idContenu)
Utils.majContenu(chemin, idContenu, branche)
Utils.supprimerContenuEnCours(id_en_cours)
id_en_cours = Utils.get_id_contenu_en_cours_associe_a_une_publication(idPublication)
branche = Utils.get_branche_contenu_en_cours(id_en_cours)
idContenu = Utils.get_id_contenu_associe_a_une_publication(idPublication)
chemin = Utils.get_chemin_du_contenu(idContenu)
Utils.maj_contenu(chemin, idContenu, branche)
Utils.supprimer_contenu_en_cours(id_en_cours)
Utils.statdb.demandesPub.delete_one({"id": int(idPublication)})
else:
print("Publication refusée ", idPublication)
......@@ -595,25 +618,25 @@ class Utils:
Utils.statdb.demandesPub.update_one({"id": int(idPublication)}, {"$set": {"etat": "refus"}})
# Utils.statdb.demandesPub.update_one({"id": 1}, {"$set": {"etat": "refus"}})
## listing de toutes les mises a jour possibles pour les favoris d'un auteur
## listing de toutes les mises a jour possibles pour les tiers d'un auteur
# @param auteur l'auteur en cours
@staticmethod
def listeMajFavoris(auteur):
# on cherche toutes les versions en cours dans les favoris et on compare avec celles de la banque
def liste_maj_tiers(auteur):
# on cherche toutes les versions en cours dans les tiers et on compare avec celles de la banque
# Trouver un moyen de sauvegarder le fait qu'une maj ait été refusée.
favoris = Utils.get_contenus_tiers(auteur)
for (id, version) in favoris:
versionCourante = Utils.getVersionCourante(id["contenu"])
tiers = Utils.get_contenus_tiers(auteur)
for (id, version) in tiers:
versionCourante = Utils.get_version_courante(id["contenu"])
if version["version"] < versionCourante:
# Utils.isMajRefusee(auteur, id["contenu"], versionCourante)
if not Utils.isMajRefusee(auteur, id["contenu"], versionCourante):
if not Utils.is_maj_refusee(auteur, id["contenu"], versionCourante):
print("Mise à jour possible")
print("Voulez vous la faire (O / N)")
choix = input()
if choix == 'O':
Utils.majFavori(id["contenu"], versionCourante, auteur)
Utils.maj_tiers(id["contenu"], versionCourante, auteur)
else:
Utils.majFavori(id["contenu"], versionCourante, auteur, True)
Utils.maj_tiers(id["contenu"], versionCourante, auteur, True)
else:
pass
......@@ -622,18 +645,18 @@ class Utils:
# @param versionContenu la version du favori
# @param auteur l'auteur concerné
# @param refuse True = maj acceptée, False = maj refusée
def majFavori(idFavori, idNouvelleVersion, auteur, refuse=False):
def maj_tiers(idFavori, idNouvelleVersion, auteur, refuse=False):
if not refuse:
# on vire le précédent
Utils.statdb.utilisateur.update({"nom": auteur},
{"$pull": {
"favoris": [{"contenu": idFavori},
"tiers": [{"contenu": idFavori},
{"version": idNouvelleVersion - 1}]}})
# et on ajoute la version maj
Utils.statdb.utilisateur.update({"nom": auteur},
{"$push": {
"favoris": [{"contenu": idFavori}, {"version": idNouvelleVersion}]}})
"tiers": [{"contenu": idFavori}, {"version": idNouvelleVersion}]}})
else:
Utils.statdb.utilisateur.update({"nom": auteur},
{"$push": {
......@@ -644,7 +667,7 @@ class Utils:
# @param idContenu l'id du favori
# @param versionMaj la version de la mise à jour potentielle
@staticmethod
def isMajRefusee(auteur, idContenu, versionMaj):
def is_maj_refusee(auteur, idContenu, versionMaj):
print("print")
compteur = Utils.statdb.utilisateur.find({"nom": auteur} and
{"majRejetees": {"$elemMatch": {"$elemMatch": {"contenu": idContenu,
......@@ -656,10 +679,10 @@ class Utils:
# Très basique pour le moment elle permettra des recherches plus complexes prochainement
@staticmethod
def rechercheSurContenu(action, texteRecherche):
def recherche_sur_contenu(action, texteRecherche):
if action == 1:
print("Recherche pour l'auteur ", texteRecherche)
if Utils.presenceUtilisateur(texteRecherche):
if Utils.presence_utilisateur(texteRecherche):
print("J'ai", Utils.statdb.contenu.find({"auteur": texteRecherche}).count(),
"contenu(s) pour cet auteur")
else:
......@@ -685,7 +708,7 @@ class Utils:
from nltk.tokenize import word_tokenize
## Fonction test permettant de récupérer le contenu des fichiers
@staticmethod
def getContenuFichiers():
def get_contenu_fichiers():
fichier1 = "Contenu1"
fichier2 = "Contenu2"
......@@ -724,9 +747,9 @@ class Utils:
## Fonction permettant de détecter si les auteurs sont créés, et les créer si besoin
# (exclusive squelette)
@staticmethod
def creerAuteurSiBesoin():
def creer_auteur_si_besoin():
nmbreAuteurs = Utils.statdb.utilisateur.find({}).count()
if not nmbreAuteurs:
Utils.ajouterUtilisateur("Auteur 1")
Utils.ajouterUtilisateur("Auteur 2")
Utils.ajouterUtilisateur("Auteur 3")
Utils.ajouter_utilisateur("Auteur 1")
Utils.ajouter_utilisateur("Auteur 2")
Utils.ajouter_utilisateur("Auteur 3")
Bonjour, je suis un contenu 1 dans sa version 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