Ela_Back/lms_chamilo/mysy_lms.py

804 lines
34 KiB
Python

import pymongo
import zeep
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 csv
import pandas as pd
from pymongo import ReturnDocument
from math import isnan
import GlobalVariable as MYSY_GV
import ela_index_bdd_classes as eibdd
import email_mgt as email
import socket
import smtplib
import re
import requests
# Connexion mariadb sur serveur
import mariadb
import hashlib
import bcrypt
"""
Cette fonction créer un utilisateur lms mysy, donc dans chamilo
"""
def Create_MySy_LMS_User(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 = ['token', 'lastname', 'firstname', 'email', 'password', 'locked', 'official_code', 'username']
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'est pas autorisé")
return False, " Le champ '" + val + "' n'est pas autorisé", False
'''
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 = ['token', 'lastname', 'firstname', 'email', 'password', 'locked', 'official_code']
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, " Toutes les informations obligatoire n'ont pas été fournies", False
# recuperation des paramettre
my_token = ""
if ("token" in diction.keys()):
if diction['token']:
my_token = diction['token']
partner_recid = ""
# Verification de la validité du token/mail dans le cas des user en mode connecté
if (len(str(my_token)) > 0):
retval = mycommon.check_partner_token_validity("", my_token)
if retval is False:
mycommon.myprint(str(inspect.stack()[0][3]) + " - Le token n'est pas valide")
return False, " Impossible de créer le compte LMS", False
# Recuperation du recid de l'utilisateur
partner_recid = mycommon.get_parnter_recid_from_token(my_token)
if partner_recid is False:
mycommon.myprint(str(inspect.stack()[0][3]) + " - Impossible de recuperer le token du partenaire")
return False, " Impossible de recuperer le token du partenaire", False
if (len(str(my_token)) <= 0):
mycommon.myprint(str(inspect.stack()[0][3]) + " - Le token est vide")
return False, " Impossible de créer le compte LMS", False
lastname = ""
if ("lastname" in diction.keys()):
if diction['lastname']:
lastname = diction['lastname']
firstname = ""
if ("firstname" in diction.keys()):
if diction['firstname']:
firstname = diction['firstname']
password = ""
if ("password" in diction.keys()):
if diction['password']:
password = diction['password']
email = ""
if ("email" in diction.keys()):
if diction['email']:
email = diction['email']
locked = ""
if ("locked" in diction.keys()):
if diction['email']:
locked = diction['locked']
official_code = ""
if ("official_code" in diction.keys()):
if diction['official_code']:
official_code = diction['official_code']
username = ""
if ("username" in diction.keys()):
if diction['username']:
username = diction['username']
registration_date = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
# Rcuperation de la sequence de l'objet "lms_user_id" dans la collection : "mysy_sequence"
retval = MYSY_GV.dbname['mysy_sequence'].find_one({'related_mysy_object':'lms_user_id', 'valide':'1'})
mypasswd = password.encode('UTF-8')
salt = bcrypt.gensalt()
hashed_pwd = bcrypt.hashpw(mypasswd, salt)
if (retval is None or "current_val" not in retval.keys()):
mycommon.myprint(" Impossible de recuperer la sequence 'mysy_sequence' ")
return False, "Impossible de recuperer la sequence 'mysy_sequence'",False
new_lms_user_id = str(retval['prefixe'])+str(retval['current_val'])
local_status, local_val = mycommon.IsInt(new_lms_user_id)
if( local_status is False):
mycommon.myprint(" Impossible de generer l'ID du user LMS. La valeur actuelle est ", new_lms_user_id)
return False, " Impossible de generer l'ID du user LMS", False
current_seq_value = str(retval['current_val'])
conn = mariadb.connect(
user=MYSY_GV.MYSY_MARIADB_USER,
password=MYSY_GV.MYSY_MARIADB_USER_PASS,
host=MYSY_GV.MYSY_MARIADB_HOST,
port=MYSY_GV.MYSY_MARIADB_PORT,
database=MYSY_GV.MYSY_LMS_BDD
)
cur = conn.cursor()
"""
# retrieving information
cur.execute("SELECT username, email_canonical FROM user WHERE id=?", (2,))
for username, email_canonical in cur:
print(f"username: {username}, email_canonical : {email_canonical}")
"""
# insert information
my_query = "INSERT INTO user SET id='"+str(new_lms_user_id)+"' , " \
"user_id='"+str(new_lms_user_id)+"' , " \
"lastname = '"+lastname+"', " \
"firstname = '"+firstname+"', " \
"username = '"+username+"', " \
"salt = '"+str(salt)+"'," \
" registration_date = '"+registration_date+"'," \
" credentials_expired='0', " \
"enabled='1', " \
"expired='0', " \
"created_at='" + str( registration_date) + "'," \
" updated_at='" + str( registration_date) + "', " \
" status = '1', " \
"password = '"+str(hashed_pwd)+"', " \
"locked = '0', " \
"username_canonical = '"+username+"', " \
" email_canonical = '"+email+"', " \
"email = '"+email+"'," \
" official_code = '"+official_code+"', " \
"creator_id = '1', " \
"auth_source = 'platform'," \
"roles = 'a:0:{}', " \
"language = 'french'," \
"active = '1';"
try:
#print(" ### my_query = ", my_query)
#cur.execute("INSERT INTO employees (first_name,last_name) VALUES (?, ?)", ("Maria", "DB"))
cur.execute(my_query)
except mariadb.Error as e:
print(f"Error: {e}")
mycommon.myprint(" Impossible de créer l'utilisateur LMS "+str({e}))
return False, "Impossible de créer l'utilisateur LMS "+str({e}), False
conn.commit()
print(f"Last Inserted ID: {cur.lastrowid}")
lastrowid = cur.lastrowid
conn.close()
# Crementation de la sequence de l'objet "lms_user_id" dans la collection : "mysy_sequence"
new_sequence_value = int(current_seq_value)+1
mydata = {'current_val':new_sequence_value}
ret_val2 = MYSY_GV.dbname['mysy_sequence'].find_one_and_update({'related_mysy_object':'lms_user_id', 'valide':'1'},
{"$set": mydata},
return_document=ReturnDocument.AFTER,
upsert= False,
)
return True, " Creation du compte LMS OK. l'id = "+str(lastrowid), str(lastrowid)
except Exception as e:
exc_type, exc_obj, exc_tb = sys.exc_info()
mycommon.myprint(str(inspect.stack()[0][3]) + " -" + str(e) + " - Line : " + str(exc_tb.tb_lineno))
return False, " Impossible de créer le compte LMS", False
"""
Cette fonction permet de mofifier le mot de passe de l'utilisateur
"""
def Update_Passwd_MySy_LMS_User(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 = ['token', 'new_password', 'lms_user_id']
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'est pas autorisé")
return False, " Le champ '" + val + "' n'est pas autorisé", False
'''
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 = ['token', 'new_password', 'lms_user_id']
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, " Toutes les informations obligatoire n'ont pas été fournies", False
# recuperation des paramettre
my_token = ""
if ("token" in diction.keys()):
if diction['token']:
my_token = diction['token']
partner_recid = ""
# Verification de la validité du token/mail dans le cas des user en mode connecté
if (len(str(my_token)) > 0):
retval = mycommon.check_partner_token_validity("", my_token)
if retval is False:
mycommon.myprint(str(inspect.stack()[0][3]) + " - Le token n'est pas valide")
return False, " Impossible de mettre à jour le compte LMS", False
# Recuperation du recid de l'utilisateur
partner_recid = mycommon.get_parnter_recid_from_token(my_token)
if partner_recid is False:
mycommon.myprint(str(inspect.stack()[0][3]) + " - Impossible de recuperer le token du partenaire")
return False, " Impossible de recuperer le token du partenaire", False
if (len(str(my_token)) <= 0):
mycommon.myprint(str(inspect.stack()[0][3]) + " - Le token est vide")
return False, " Impossible de mettre à jour le compte LMS", False
newpassword = ""
if ("new_password" in diction.keys()):
if diction['new_password']:
newpassword = diction['new_password']
lms_user_id = ""
if ("lms_user_id" in diction.keys()):
if diction['lms_user_id']:
lms_user_id = diction['lms_user_id']
updated_at = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
mypasswd = newpassword.encode('UTF-8')
salt = bcrypt.gensalt()
hashed_pwd = bcrypt.hashpw(mypasswd, salt)
conn = mariadb.connect(
user=MYSY_GV.MYSY_MARIADB_USER,
password=MYSY_GV.MYSY_MARIADB_USER_PASS,
host=MYSY_GV.MYSY_MARIADB_HOST,
port=MYSY_GV.MYSY_MARIADB_PORT,
database=MYSY_GV.MYSY_LMS_BDD
)
cur = conn.cursor()
"""
# retrieving information
cur.execute("SELECT username, email_canonical FROM user WHERE id=?", (2,))
for username, email_canonical in cur:
print(f"username: {username}, email_canonical : {email_canonical}")
"""
# insert information
my_query = "UPDATE user SET salt = '" + str(salt) + "', credentials_expired='0', " \
"updated_at='" + str( updated_at) + " ', " \
"password = '" + str( hashed_pwd) + "' " \
" WHERE " \
"id='" + str(lms_user_id) + "' " \
"AND user_id='" + str( lms_user_id) + "' AND enabled='1' AND status = '1' AND active = '1' ;"
try:
print(" ### my_query update = ", my_query)
# cur.execute("INSERT INTO employees (first_name,last_name) VALUES (?, ?)", ("Maria", "DB"))
cur.execute(my_query)
except mariadb.Error as e:
#print(f"Error: {e}")
mycommon.myprint(" Impossible de créer l'utilisateur LMS " + str({e}))
return False, "Impossible de créer l'utilisateur LMS " + str({e}), False
conn.commit()
#print(f"Last Inserted ID: {cur.lastrowid}")
lastrowid = cur.lastrowid
conn.close()
return True, " Creation du compte LMS OK. l'id modifié est = " + str(lastrowid), str(lastrowid)
except Exception as e:
exc_type, exc_obj, exc_tb = sys.exc_info()
mycommon.myprint(str(inspect.stack()[0][3]) + " -" + str(e) + " - Line : " + str(exc_tb.tb_lineno))
return False, " Impossible de créer le compte LMS", False
"""
Cette fonction reactive un compte utilisation dans chamilo. on ne reactive pas les formations, s'il y en a. l'utilisateur doit contacter le support pr cela
"""
def Enable_MySy_LMS_User(diction):
try:
field_list_obligatoire = ['lms_user_id','password' ]
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, " Toutes les informations obligatoire n'ont pas été fournies"
# recuperation des paramettre
lms_user_id = ""
if ("lms_user_id" in diction.keys()):
if diction['lms_user_id']:
lms_user_id = diction['lms_user_id']
password = ""
if ("password" in diction.keys()):
if diction['password']:
password = diction['password']
mypasswd = password.encode('UTF-8')
salt = bcrypt.gensalt()
hashed_pwd = bcrypt.hashpw(mypasswd, salt)
updated_at = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
conn = mariadb.connect(
user=MYSY_GV.MYSY_MARIADB_USER,
password=MYSY_GV.MYSY_MARIADB_USER_PASS,
host=MYSY_GV.MYSY_MARIADB_HOST,
port=MYSY_GV.MYSY_MARIADB_PORT,
database=MYSY_GV.MYSY_LMS_BDD
)
cur = conn.cursor()
# Reactivation du compte dans chamilo
my_query = "UPDATE user SET active='1', enabled = '1', " \
" salt = '"+str(salt)+"', password = '"+str(hashed_pwd)+"' WHERE id='" + str(lms_user_id) + "' AND user_id='" + str( lms_user_id) + "' ;"
try:
print(" ### my_query update = ", my_query)
# cur.execute("INSERT INTO employees (first_name,last_name) VALUES (?, ?)", ("Maria", "DB"))
cur.execute(my_query)
except mariadb.Error as e:
#print(f"Error: {e}")
mycommon.myprint(" Impossible de reactiver l'utilisateur LMS " + str({e}))
return False, "Impossible de reactiver l'utilisateur LMS " + str({e})
conn.commit()
conn.close()
return True, " Le compte a été correctement activié"
except Exception as e:
exc_type, exc_obj, exc_tb = sys.exc_info()
mycommon.myprint(str(inspect.stack()[0][3]) + " -" + str(e) + " - Line : " + str(exc_tb.tb_lineno))
return False, " Impossible de reactiver le compte LMS"
"""
Cette fonction Desactivment un compte chamilo ansi que les formations associée à ce compte
"""
def Disable_MySy_LMS_User(diction):
try:
field_list_obligatoire = ['lms_user_id',]
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, " Toutes les informations obligatoire n'ont pas été fournies"
# recuperation des paramettre
lms_user_id = ""
if ("lms_user_id" in diction.keys()):
if diction['lms_user_id']:
lms_user_id = diction['lms_user_id']
updated_at = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
conn = mariadb.connect(
user=MYSY_GV.MYSY_MARIADB_USER,
password=MYSY_GV.MYSY_MARIADB_USER_PASS,
host=MYSY_GV.MYSY_MARIADB_HOST,
port=MYSY_GV.MYSY_MARIADB_PORT,
database=MYSY_GV.MYSY_LMS_BDD
)
cur = conn.cursor()
cur2 = conn.cursor()
# Desactivation du compte :
# Reactivation du compte dans chamilo
# insert information
my_query = "UPDATE user SET active='0', enabled = '0', " \
" updated_at='" + str(updated_at) + "' WHERE id='" + str(lms_user_id) + "' AND user_id='" + str(lms_user_id) + "' ;"
try:
print(" ### my_query update = ", my_query)
# cur.execute("INSERT INTO employees (first_name,last_name) VALUES (?, ?)", ("Maria", "DB"))
cur.execute(my_query)
except mariadb.Error as e:
# print(f"Error: {e}")
mycommon.myprint(" Impossible de créer l'utilisateur LMS " + str({e}))
return False, "Impossible de créer l'utilisateur LMS " + str({e})
conn.commit()
# Recuperation des formation de cet utilisateur
cur.execute("SELECT c_id FROM course_rel_user WHERE user_id="+str(lms_user_id))
for course_id in cur:
mycommon.myprint(str(inspect.stack()[0][3]) + " Desactivation de la formation_id = " + str(course_id)+" ")
# Desactivation du compte dans chamilo
# insert information
my_query = "UPDATE course SET subscribe='0', visibility = '0' , expiration_date='" + str(updated_at) + "' WHERE id='" + str(course_id[0]) + "' ;"
try:
print(" ### my_query update = ", my_query)
# cur.execute("INSERT INTO employees (first_name,last_name) VALUES (?, ?)", ("Maria", "DB"))
cur2.execute(my_query)
except mariadb.Error as e:
print(f"Error: {e}")
mycommon.myprint(str(inspect.stack()[0][3]) + " IMPOSSIBLE DE Desactiver la formation_id = " + str(course_id[0]))
conn.commit()
# Desactivation des formations créées par ce compte utilisateur
conn.close()
return True, " Le compte a été correctement desactive"
except Exception as e:
exc_type, exc_obj, exc_tb = sys.exc_info()
mycommon.myprint(str(inspect.stack()[0][3]) + " -" + str(e) + " - Line : " + str(exc_tb.tb_lineno))
return False, " Impossible de desactiver le compte"
"""
Cette fonction permet de mettre à jour
- le pack abonnement et
- le nombre max de formations
"""
def Update_Pack_MySy_LMS_User(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 = ['token', 'lms_user_id', 'mysy_pack', 'mysy_nb_formation']
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'est pas autorisé")
return False, " Le champ '" + val + "' n'est pas autorisé", False
'''
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 = ['token', 'lms_user_id', 'mysy_pack', 'mysy_nb_formation']
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, " Toutes les informations obligatoire n'ont pas été fournies", False
# recuperation des paramettre
my_token = ""
if ("token" in diction.keys()):
if diction['token']:
my_token = diction['token']
partner_recid = ""
# Verification de la validité du token/mail dans le cas des user en mode connecté
if (len(str(my_token)) > 0):
retval = mycommon.check_partner_token_validity("", my_token)
if retval is False:
mycommon.myprint(str(inspect.stack()[0][3]) + " - Le token n'est pas valide")
return False, " Impossible de mettre à jour le compte LMS", False
# Recuperation du recid de l'utilisateur
partner_recid = mycommon.get_parnter_recid_from_token(my_token)
if partner_recid is False:
mycommon.myprint(str(inspect.stack()[0][3]) + " - Impossible de recuperer le token du partenaire")
return False, " Impossible de recuperer le token du partenaire", False
if (len(str(my_token)) <= 0):
mycommon.myprint(str(inspect.stack()[0][3]) + " - Le token est vide")
return False, " Impossible de mettre à jour le compte LMS", False
mysy_pack = ""
if ("mysy_pack" in diction.keys()):
if diction['mysy_pack']:
mysy_pack = diction['mysy_pack']
mysy_nb_formation = ""
if ("mysy_nb_formation" in diction.keys()):
if diction['mysy_nb_formation']:
mysy_nb_formation = diction['mysy_nb_formation']
lms_user_id = ""
if ("lms_user_id" in diction.keys()):
if diction['lms_user_id']:
lms_user_id = diction['lms_user_id']
updated_at = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
conn = mariadb.connect(
user=MYSY_GV.MYSY_MARIADB_USER,
password=MYSY_GV.MYSY_MARIADB_USER_PASS,
host=MYSY_GV.MYSY_MARIADB_HOST,
port=MYSY_GV.MYSY_MARIADB_PORT,
database=MYSY_GV.MYSY_LMS_BDD
)
cur = conn.cursor()
""" MISE à JOUR DU mysy_pack """
query_get_mysy_pack_id = "select id from extra_field where variable = 'mysy_pack' "
print(" ### query_get_mysy_pack_id = ", query_get_mysy_pack_id)
mysy_pack_id = cur.execute(query_get_mysy_pack_id)
mysy_pack_id_val = ""
for mysy_pack_id in cur:
print(f"mysy_pack_id: ", mysy_pack_id[0] )
mysy_pack_id_val = mysy_pack_id[0]
query_2 = "select id from extra_field_values where field_id = '"+str(mysy_pack_id_val)+"' and item_id = '"+str(lms_user_id)+"' "
print(" ### query_2 = ", query_2)
mysy_pack_id2 = cur.execute(query_2)
mysy_pack_id_val2 = ""
for mysy_pack_id2 in cur:
print(f"mysy_pack_id2: ", mysy_pack_id2[0])
mysy_pack_id_val2 = mysy_pack_id2[0]
query_get_mysy_nb_formation_id = "select id from extra_field where variable = '" + str(mysy_nb_formation) + "' "
localquery = "update extra_field_values set extra_field_values.value ='"+str(mysy_pack)+"' where id = '"+str(mysy_pack_id_val2)+"' "
print(" ### localquery = ", localquery)
try:
print(" ### my_query update = ", localquery)
# cur.execute("INSERT INTO employees (first_name,last_name) VALUES (?, ?)", ("Maria", "DB"))
cur.execute(localquery)
except mariadb.Error as e:
# print(f"Error: {e}")
mycommon.myprint(" Impossible de créer l'utilisateur LMS " + str({e}))
return False, "Impossible de créer l'utilisateur LMS " + str({e}), False
conn.commit()
""" MISE à JOUR DU mysy_nb_formation """
query_get_mysy_pack_id = "select id from extra_field where variable = 'mysy_nb_formation' "
print(" ### query_get_mysy_pack_id = ", query_get_mysy_pack_id)
mysy_pack_id = cur.execute(query_get_mysy_pack_id)
mysy_pack_id_val = ""
for mysy_pack_id in cur:
print(f"mysy_pack_id: ", mysy_pack_id[0])
mysy_pack_id_val = mysy_pack_id[0]
query_2 = "select id from extra_field_values where field_id = '" + str(
mysy_pack_id_val) + "' and item_id = '" + str(lms_user_id) + "' "
print(" ### query_2 = ", query_2)
mysy_pack_id2 = cur.execute(query_2)
mysy_pack_id_val2 = ""
for mysy_pack_id2 in cur:
print(f"mysy_pack_id2: ", mysy_pack_id2[0])
mysy_pack_id_val2 = mysy_pack_id2[0]
query_get_mysy_nb_formation_id = "select id from extra_field where variable = '" + str(
mysy_nb_formation) + "' "
localquery = "update extra_field_values set extra_field_values.value ='" + str(
mysy_nb_formation) + "' where id = '" + str(mysy_pack_id_val2) + "' "
print(" ### localquery = ", localquery)
try:
print(" ### my_query update = ", localquery)
# cur.execute("INSERT INTO employees (first_name,last_name) VALUES (?, ?)", ("Maria", "DB"))
cur.execute(localquery)
except mariadb.Error as e:
# print(f"Error: {e}")
mycommon.myprint(" Impossible de créer l'utilisateur LMS " + str({e}))
return False, "Impossible de créer l'utilisateur LMS " + str({e}), False
conn.commit()
return True, " Creation du compte LMS OK. l'id modifié est = ", 1
except Exception as e:
exc_type, exc_obj, exc_tb = sys.exc_info()
mycommon.myprint(str(inspect.stack()[0][3]) + " -" + str(e) + " - Line : " + str(exc_tb.tb_lineno))
return False, " Impossible de créer le compte LMS", False
"""
Cette fonction verifie si un client mysy existe sur chamilo.
Si le client n'existe pas, il le crée avec le pack et le bon nombre de formation
/!\ : On stock dans mysy (collection partnair_account) l'id chamilo du user.
le nom du champ est : mysy_lms_user_id/
"""
def Check_MySy_LMS_User(diction):
try:
# Verification des champs
field_list = ['token', ]
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'est pas autorisé")
return False, str(inspect.stack()[0][3]) +" Le champ '" + val + "' n'est pas autorisé"
'''
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 = ['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, str(inspect.stack()[0][ 3]) +" Toutes les informations obligatoire n'ont pas été fournies"
# recuperation des paramettre
my_token = ""
if ("token" in diction.keys()):
if diction['token']:
my_token = diction['token']
partner_recid = ""
# Verification de la validité du token/mail dans le cas des user en mode connecté
if (len(str(my_token)) > 0):
retval = mycommon.check_partner_token_validity("", my_token)
if retval is False:
mycommon.myprint(str(inspect.stack()[0][3]) + " - Le token n'est pas valide")
return False, " Impossible de créer le compte LMS", False
# Recuperation du recid de l'utilisateur
partner_recid = mycommon.get_parnter_recid_from_token(my_token)
if partner_recid is False:
mycommon.myprint(str(inspect.stack()[0][3]) + " - Impossible de recuperer le token du partenaire")
return False, " Impossible de recuperer le token du partenaire", False
if (len(str(my_token)) <= 0):
mycommon.myprint(str(inspect.stack()[0][3]) + " - Le token est vide")
return False, " Impossible de créer le compte LMS", False
# Recuperation des données du partenaire
local_status, my_partner = mycommon.get_partner_data_from_recid(partner_recid)
if( local_status is False ):
mycommon.myprint(str(inspect.stack()[0][3]) + " - impossible de recuperer les données du partenaire")
return False, str(inspect.stack()[0][3]) +" - impossible de recuperer les données du partenaire"
mysy_lms_user_id = ""
if ("mysy_lms_user_id" in my_partner.keys()):
if diction['mysy_lms_user_id']:
mysy_lms_user_id = diction['mysy_lms_user_id']
pack_service = ""
if ("pack_service" in my_partner.keys()):
if diction['pack_service']:
pack_service = diction['pack_service']
# Recuperation des caracterisques du pack
pack_data = MYSY_GV.dbname['pack'].find_one({'code_pack':str(pack_service).lower()})
if( pack_data is None ):
mycommon.myprint(str(inspect.stack()[0][3]) + " - impossible de recuperer les données du pack (1)")
return False, str(inspect.stack()[0][3]) + " - impossible de recuperer les données du pack (1)"
lms_count = ""
if ("lms_count" in pack_data.keys()):
if diction['lms_count']:
lms_count = diction['lms_count']
if (lms_count != "0" and lms_count != "1") :
mycommon.myprint(str(inspect.stack()[0][3]) + " - lms_count est incorrecte ")
return False, str(inspect.stack()[0][3]) + " - lms_count est incorrecte "
if( mysy_lms_user_id.strip() == ""):
print(" ### ce partenaire n'as pas de compte LMS ")
else:
print(" ### ce partenaire A un compte. ")
"""
/!\ : si le pack utilisateur necessite d'avoir un compte LMS, 3 cas de figures se posent :
1 - C'est un tout nouveau compte, alors on le crée simplement
2 - CAS CRITIQUE : C'est un ancien compte qui a changé plusieurs de fois de pack. il est passé d'un pack avec LMS vers un compte sans LMS puis vers un compte avec LMS.
dans cas, on reative simplement le compte.
3 - Cas d'un client qui passe d'un pack avec LMS vers un pack sans LMS, dans ce cas on desactive le compte LSM, on desacrive ses formations aussi.
"""
return True, " Creation du compte LMS OK. l'id = "
except Exception as e:
exc_type, exc_obj, exc_tb = sys.exc_info()
mycommon.myprint(str(inspect.stack()[0][3]) + " -" + str(e) + " - Line : " + str(exc_tb.tb_lineno))
return False, " Impossible de créer le compte LMS : Check_MySy_LMS_User ", False