252 lines
9.3 KiB
Python
252 lines
9.3 KiB
Python
'''
|
|
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:
|
|
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 liste ")
|
|
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]) + " - Le token 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 recuperer 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 ("message" in diction.keys()):
|
|
if diction['message']:
|
|
new_diction['message'] = diction['message']
|
|
|
|
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ée. Id message = '" + str(nb_doc) + "' ")
|
|
return True, "Le message a été bien enregistrée"
|
|
else:
|
|
return False, "Impossible d'ajouter le message"
|
|
|
|
|
|
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'ajouter 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:
|
|
mycommon.myprint(
|
|
str(inspect.stack()[0][3]) + " - Le champ '" + val + "' n'existe pas, requete annulée")
|
|
return False, " Impossible de recuperer 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 liste ")
|
|
return False, " Impossible de recuperer 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 recuperer le message" |