18/03/23 - 17h45

master
cherif 2023-03-18 15:15:05 +01:00
parent 3591ab90bc
commit b2594e981b
4 changed files with 2024 additions and 22 deletions

View File

@ -1,16 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ChangeListManager">
<list default="true" id="1122d9e2-679f-46d6-8c4f-97e9ae4041b5" name="Changes" comment="06/03/23 - 17h45">
<change afterPath="$PROJECT_DIR$/lms_chamilo/local_import.py" afterDir="false" />
<change afterPath="$PROJECT_DIR$/lms_chamilo/mysy_lms.py" afterDir="false" />
<change afterPath="$PROJECT_DIR$/tools_cherif/__init__.py" afterDir="false" />
<list default="true" id="1122d9e2-679f-46d6-8c4f-97e9ae4041b5" name="Changes" comment="16/03/23 - 17h45">
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/GlobalVariable.py" beforeDir="false" afterPath="$PROJECT_DIR$/GlobalVariable.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Log/log_file.log" beforeDir="false" afterPath="$PROJECT_DIR$/Log/log_file.log" afterDir="false" />
<change beforePath="$PROJECT_DIR$/email_mgt.py" beforeDir="false" afterPath="$PROJECT_DIR$/email_mgt.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/lms_chamilo/mysy_lms.py" beforeDir="false" afterPath="$PROJECT_DIR$/lms_chamilo/mysy_lms.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/main.py" beforeDir="false" afterPath="$PROJECT_DIR$/main.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/tools_cherif/tools_cherif.py" beforeDir="false" afterPath="$PROJECT_DIR$/tools_cherif/tools_cherif.py" afterDir="false" />
</list>
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
@ -349,7 +344,14 @@
<option name="project" value="LOCAL" />
<updated>1678074797958</updated>
</task>
<option name="localTasksCounter" value="40" />
<task id="LOCAL-00040" summary="16/03/23 - 17h45">
<created>1678993462192</created>
<option name="number" value="00040" />
<option name="presentableId" value="LOCAL-00040" />
<option name="project" value="LOCAL" />
<updated>1678993462192</updated>
</task>
<option name="localTasksCounter" value="41" />
<servers />
</component>
<component name="Vcs.Log.Tabs.Properties">
@ -364,7 +366,6 @@
</option>
</component>
<component name="VcsManagerConfiguration">
<MESSAGE value="27/12/2022 - 16h00" />
<MESSAGE value="09/01/22 à 11h" />
<MESSAGE value="13/01/22 à 20h" />
<MESSAGE value="15/01/2023 - 22h" />
@ -389,17 +390,7 @@
<MESSAGE value="24/02/23 - 23h23" />
<MESSAGE value="28/02/23 - 17h45" />
<MESSAGE value="06/03/23 - 17h45" />
<option name="LAST_COMMIT_MESSAGE" value="06/03/23 - 17h45" />
</component>
<component name="XDebuggerManager">
<breakpoint-manager>
<breakpoints>
<line-breakpoint enabled="true" suspend="THREAD" type="python-line">
<url>file://$PROJECT_DIR$/Session_Formation.py</url>
<line>4</line>
<option name="timeStamp" value="2" />
</line-breakpoint>
</breakpoints>
</breakpoint-manager>
<MESSAGE value="16/03/23 - 17h45" />
<option name="LAST_COMMIT_MESSAGE" value="16/03/23 - 17h45" />
</component>
</project>

File diff suppressed because one or more lines are too long

View File

@ -227,7 +227,6 @@ def Create_MySy_LMS_User(diction):
Cette fonction permet de mofifier le mot de passe de l'utilisateur
"""
def Update_Passwd_MySy_LMS_User(diction):
try:
@ -353,6 +352,158 @@ def Update_Passwd_MySy_LMS_User(diction):
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
@ -531,3 +682,123 @@ def Update_Pack_MySy_LMS_User(diction):
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

25
main.py
View File

@ -2404,6 +2404,31 @@ def Update_Pack_MySy_LMS_User():
localStatus, message, lms_user_id = mysy_lms.Update_Pack_MySy_LMS_User(payload)
return jsonify(status=localStatus, message=message, lms_user_id=lms_user_id)
"""
Cette API permet de desactivier un utilisateur ainsi que les formations qui sont rattachées
"""
@app.route('/myclass/api/Disable_MySy_LMS_User/', methods=['POST','GET'])
@crossdomain(origin='*')
def Disable_MySy_LMS_User():
# On recupere le corps (payload) de la requete
payload = request.form.to_dict()
print(" ### Disable_MySy_LMS_User : payload = ",payload)
localStatus, message = mysy_lms.Disable_MySy_LMS_User(payload)
return jsonify(status=localStatus, message=message)
"""
Cette API permet de Reactivier le compte utilisateur. on ne reactive pas les formations, s'il y en a. l'utilisateur doit contacter le support pr cela
"""
@app.route('/myclass/api/Enable_MySy_LMS_User/', methods=['POST','GET'])
@crossdomain(origin='*')
def Enable_MySy_LMS_User():
# On recupere le corps (payload) de la requete
payload = request.form.to_dict()
print(" ### Enable_MySy_LMS_User : payload = ",payload)
localStatus, message = mysy_lms.Enable_MySy_LMS_User(payload)
return jsonify(status=localStatus, message=message)