''' Ce fichier traite tout ce qui est lié à la gestion des messages envoyé par un utilisateur. le type de message definit son objet et son traitement. par exemple : - type = "mail" ==> c'est email à envoyer - type = "phone" ==> c'est un sms à envoyer - type = "comment_article" ==> c'est commentaire posté sur un articles par un user. ''' import pymongo from pymongo import MongoClient import json from bson import ObjectId import re from datetime import datetime import prj_common as mycommon import secrets import inspect import sys, os import GlobalVariable as MYSY_GV from pymongo import MongoClient class JSONEncoder(json.JSONEncoder): def default(self, o): if isinstance(o, ObjectId): return str(o) return json.JSONEncoder.default(self, o) ''' Ajout du message d'un utilisateur - la valeur du champs type renseigne si le message doit etre envoyer par "mail, sms, whatsapp", etc ''' def add_user_message(diction): try: ''' # Verification que les champs reçus dans l'API sont bien dans la liste des champs autorisés # Cela evite le cas ou une entité tierce ajouter les valeurs inconnu dans l'API # Ici on doit mettre tous les champs possible (obligatoire ou non) de la BDD dans la liste # field_list. ''' field_list = ['type', 'sender_mail', 'sender_tel', 'recever_mail', 'recever_tel', 'object', 'message', 'token', 'user_ip', 'user_country_code', 'user_country_name', 'user_city','user_postal', 'user_latitude', 'user_longitude', 'user_state', 'sender_name', 'article_avis_url'] incom_keys = diction.keys() for val in incom_keys: if val not in field_list and val.startswith('my_') is False: mycommon.myprint(str(inspect.stack()[0][ 3]) + " - Creation formation : Le champ '" + val + "' n'existe pas, Creation formation annulée") return False, "Impossible d'ajouter le message" ''' Une fois qu'on a controlé que toutes les clés mise dans l'API sont correcte. etape precedente, On controle que les champs obligatoires sont presents dans la liste ''' field_list_obligatoire = ['sender_mail', 'sender_tel', 'recever_mail', 'recever_tel', 'message', 'object', 'token'] for val in field_list_obligatoire: if val not in diction: mycommon.myprint( str(inspect.stack()[0][3]) + " - La valeur '" + val + "' n'est pas presente dans la liste des arguments ") return False, "Impossible d'ajouter le message" # recuperation des paramettre user_recid = "None" token = "" new_diction = {} new_diction['user_recid'] = "" if ("token" in diction.keys()): if diction['token']: token = diction['token'] new_diction['token'] = diction['token'] # Verification de la validité du token dans le cas des user en mode connecté if (len(str(token)) > 0): retval = mycommon.check_token_validity("", token) if retval is False: mycommon.myprint(str(inspect.stack()[0][3]) + " - La session de connexion n'est pas valide") return False, "Impossible d'ajouter le message" # Recuperation du recid de l'utilisateur user_recid = mycommon.get_user_recid_from_token(token) if user_recid is False: mycommon.myprint( str(inspect.stack()[0][3]) + " - Impossible de récupérer le token de l'utilisateur") return False, "Impossible d'ajouter le message" if ("type" in diction.keys()): if diction['type']: new_diction['type'] = diction['type'] if ("sender_name" in diction.keys()): if diction['sender_name']: new_diction['sender_name'] = diction['sender_name'] if ("sender_mail" in diction.keys()): if diction['sender_mail']: new_diction['sender_mail'] = diction['sender_mail'] if ("sender_tel" in diction.keys()): if diction['sender_tel']: new_diction['sender_tel'] = diction['sender_tel'] if ("recever_mail" in diction.keys()): if diction['recever_mail']: new_diction['recever_mail'] = diction['recever_mail'] if ("recever_tel" in diction.keys()): if diction['recever_tel']: new_diction['recever_tel'] = diction['recever_tel'] if ("object" in diction.keys()): if diction['object']: new_diction['object'] = diction['object'] if (len(str(diction['message'])) > 300): mycommon.myprint( str(inspect.stack()[0][3]) + " - L'objet du message doit faire moins de 300 caractères") return False, "Le sujet doit faire moins de 300 caractères" if ("message" in diction.keys()): if diction['message']: new_diction['message'] = diction['message'] if(len(str(diction['message'])) > 1500): mycommon.myprint( str(inspect.stack()[0][3]) + " - Le message doit faire moins de 1500 caractères") return False, "Le message doit faire moins de 1500 caractères" if ("user_ip" in diction.keys()): if diction['user_ip']: new_diction['user_ip'] = diction['user_ip'] if ("user_country_code" in diction.keys()): if diction['user_country_code']: new_diction['user_country_code'] = diction['user_country_code'] if ("user_country_name" in diction.keys()): if diction['user_country_name']: new_diction['user_country_name'] = diction['user_country_name'] if ("user_city" in diction.keys()): if diction['user_city']: new_diction['user_city'] = diction['user_city'] if ("user_postal" in diction.keys()): if diction['user_postal']: new_diction['user_postal'] = diction['user_postal'] if ("user_latitude" in diction.keys()): if diction['user_latitude']: new_diction['user_latitude'] = diction['user_latitude'] if ("user_longitude" in diction.keys()): if diction['user_longitude']: new_diction['user_longitude'] = diction['user_longitude'] if ("user_state" in diction.keys()): if diction['user_state']: new_diction['user_state'] = diction['user_state'] if ("article_avis_url" in diction.keys()): if diction['article_avis_url']: new_diction['article_avis_url'] = diction['article_avis_url'] new_diction['user_recid'] = user_recid new_diction['sent'] = '0' new_diction['valide'] = '1' new_diction['date_update'] = str(datetime.now()) new_diction['locked'] = "0" coll_name = MYSY_GV.dbname['user_message'] ret_val = coll_name.insert_one(new_diction) if ret_val and ret_val.inserted_id: nb_doc = ret_val.inserted_id mycommon.myprint(" Le message a été bien enregistré. Id message = '" + str(nb_doc) + "' ") return True, "Le message a été bien enregistré" else: return False, "Impossible d'enregistrer le message (2) " except Exception as e: exc_type, exc_obj, exc_tb = sys.exc_info() mycommon.myprint(str(inspect.stack()[0][3]) + " -" + str(e) + " - ERRORRRR AT Line : " + str(exc_tb.tb_lineno)) return False, "Impossible d'enregistrer le message" ''' Recuperation d'un message asscié à un article. C'est le cas de commentaires d'articles. ''' def get_user_message(diction): try: # Dictionnaire des champs utilisables field_list = ['type', 'article_avis_url'] incom_keys = diction.keys() for val in incom_keys: if val not in field_list and val.startswith('my_') is False: mycommon.myprint( str(inspect.stack()[0][3]) + " - Le champ '" + val + "' n'existe pas, requete annulée") return False, " Impossible de récupérer le message" ''' Une fois qu'on a controlé que toutes les clés mise dans l'API sont correcte. etape precedente, On controle que les champs obligatoires sont presents dans la liste ''' field_list_obligatoire = ['type', 'article_avis_url'] for val in field_list_obligatoire: if val not in diction: mycommon.myprint( str(inspect.stack()[0][3]) + " - : La valeur '" + val + "' n'est pas presente dans la liste des arguments ") return False, " Impossible de récupérer le message" mytype = "" if ("type" in diction.keys()): if diction['type']: mytype = diction['type'] myurl = "" if ("article_avis_url" in diction.keys()): if diction['article_avis_url']: myurl = diction['article_avis_url'] coll_name = MYSY_GV.dbname['user_message'] RetObject = [] tmp_key = 1 for retVal in coll_name.find({'type': str(mytype), 'article_avis_url': str(myurl), "valide":"1", "locked":"0"}, {"sender_name": 1, "sender_mail":1, "message":1, "date_update":1, "_id":1}).\ sort([("date_update",pymongo.DESCENDING)]): mycommon.myprint(str(retVal)) user = retVal user['tmp_key'] = tmp_key tmp_key = tmp_key + 1 RetObject.append(JSONEncoder().encode(user)) return True, RetObject except Exception as e: exc_type, exc_obj, exc_tb = sys.exc_info() mycommon.myprint(str(inspect.stack()[0][3]) + " -" + str(e) + " - ERRORRRR AT Line : " + str(exc_tb.tb_lineno)) return False, "Impossible de récupérer le message"