summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDebulois <quentin@debulois.fr>2022-04-24 17:16:05 +0200
committerDebulois <quentin@debulois.fr>2022-04-24 17:16:05 +0200
commit6104a59cbdf6474acea6a8a1d4c865f3d88d2296 (patch)
tree2920dea1346aafb041643d87ba1bb6dc1a813ee2
parent4c4f70bf6eb88a419add86e182d3080674196433 (diff)
Mise en place du système de connexion / enregistrement
-rw-r--r--src/core/funcSearch.py3
-rw-r--r--src/core/funcUser.py123
-rw-r--r--src/core/user.py25
-rw-r--r--src/database/dbadmin.py2
-rw-r--r--src/database/dbmain.py71
-rw-r--r--src/database/dbmission.py2
-rw-r--r--src/database/dbsearch.py10
-rw-r--r--src/database/dbuser.py23
-rw-r--r--src/gui/home.py24
-rw-r--r--src/gui/include/__init__.py0
-rw-r--r--src/gui/include/connexionInfo.py10
-rw-r--r--src/gui/include/menu.py16
-rw-r--r--src/gui/include/ressources/icon.ico (renamed from src/gui/ressources/icon.ico)bin41662 -> 41662 bytes
-rw-r--r--src/gui/login.py42
-rw-r--r--src/gui/menu.py17
-rw-r--r--src/gui/pageHome.py74
-rw-r--r--src/gui/pageLogin.py64
-rw-r--r--src/gui/pageRegister.py74
-rw-r--r--src/gui/windowAPropos.py (renamed from src/gui/aPropos.py)2
-rw-r--r--src/main.py22
20 files changed, 444 insertions, 160 deletions
diff --git a/src/core/funcSearch.py b/src/core/funcSearch.py
new file mode 100644
index 0000000..664a24b
--- /dev/null
+++ b/src/core/funcSearch.py
@@ -0,0 +1,3 @@
+
+def search_by_job_id(mainWindow, jobId) -> None:
+ print(jobId)
diff --git a/src/core/funcUser.py b/src/core/funcUser.py
new file mode 100644
index 0000000..5b5ac2c
--- /dev/null
+++ b/src/core/funcUser.py
@@ -0,0 +1,123 @@
+
+import re
+from PyQt5.QtWidgets import QMessageBox
+from src.gui import pageHome
+from src.database import dbuser, dbsearch
+
+
+def login(mainWindow, email, password) -> None:
+ user = dbuser.DbUser(mainWindow)
+ if user.check_exist_email(email):
+ res = user.check_user_credential(email, password)
+ if res:
+ search = dbsearch.DbSearch(mainWindow).get_user_account_by_userid(res)
+ QMessageBox.information(
+ mainWindow,
+ "Connexion",
+ "Vous êtes connecté"
+ )
+ mainWindow.userConnected = True
+ mainWindow.userId = str(search[0][0])
+ mainWindow.userEmail = search[0][1]
+ mainWindow.userInscriptionDate = search[0][2]
+ if search[0][3] == 0:
+ mainWindow.userStatus = "Admin"
+ elif search[0][3] == 1:
+ mainWindow.userStatus = "Pro"
+ elif search[0][3] == 2:
+ mainWindow.userStatus = "Client"
+ pageHome.main(mainWindow)
+ else:
+ QMessageBox.warning(
+ mainWindow,
+ "Connexion",
+ "Mauvaise combinaison mail & mot de passe"
+ )
+ else:
+ QMessageBox.warning(
+ mainWindow,
+ "Connexion",
+ "Mauvais email"
+ )
+
+
+def register(mainWindow, email, password, userStatus) -> None:
+ user = dbuser.DbUser(mainWindow)
+ regNumb = "[0-9]"
+ regUpper = "[A-Z]"
+ regSpecial = "[`!@#$%^&*()_+\-=\[\]{};':\"\\|,.<>\/?~µ°€£]"
+ regEmail = "^[a-z0-9._-]+@[a-z0-9-]+\.[a-z]+"
+
+ # Si vide
+ if not email:
+ QMessageBox.warning(
+ mainWindow,
+ "Email invalide",
+ "Veuillez renseigner un email"
+ )
+ return
+
+ if not password:
+ QMessageBox.warning(
+ mainWindow,
+ "Mot de passe invalide",
+ "Veuillez renseigner un mot de passe"
+ )
+ return
+
+ if not userStatus:
+ QMessageBox.warning(
+ mainWindow,
+ "Mauvais rôle",
+ "Veuillez selectionner un rôle"
+ )
+ return
+
+ # les regex
+ if not re.fullmatch(regEmail, email):
+ QMessageBox.warning(
+ mainWindow,
+ "Email invalid",
+ "Email non conforme"
+ )
+ return
+
+ if len(password) < 8\
+ or not re.search(regNumb, password)\
+ or not re.search(regUpper, password)\
+ or not re.search(regSpecial, password):
+ QMessageBox.warning(
+ mainWindow,
+ "Mot de passe invalide",
+ ("Le mot de passe doit avoir:\n"
+ "-Au moins 8 characters\n"
+ "-Une majuscule\n"
+ "-Un chiffre\n"
+ "-Un character spécial")
+ )
+ return
+
+ # si email deja présent
+ if user.check_exist_email(email):
+ QMessageBox.warning(
+ mainWindow,
+ "Email invalid",
+ "Email déja utilisé"
+ )
+ return
+
+ res = user.register_user(email, password, userStatus)
+ if res:
+ QMessageBox.information(
+ mainWindow,
+ "Inscription",
+ "Inscription réussie!"
+ )
+ return
+ else:
+ QMessageBox.warning(
+ mainWindow,
+ "Erreur bdd",
+ "Erreur lors de l'inscritpion"
+ )
+ return
diff --git a/src/core/user.py b/src/core/user.py
deleted file mode 100644
index 1d9db8d..0000000
--- a/src/core/user.py
+++ /dev/null
@@ -1,25 +0,0 @@
-from src.database import dbuser
-from PyQt5.QtWidgets import QMessageBox
-
-def login(mainWindow, email, password):
- user = dbuser.DbUser()
- if user.check_exist_email(email):
- res = user.check_user_credential(email, password)
- if res:
- QMessageBox.information(
- mainWindow,
- "Connexion",
- "Vous êtes connecté"
- )
- else:
- QMessageBox.warning(
- mainWindow,
- "Connexion",
- "Mauvaise combinaison mail & mot de passe"
- )
- else:
- QMessageBox.warning(
- mainWindow,
- "Connexion",
- "Mauvais email"
- )
diff --git a/src/database/dbadmin.py b/src/database/dbadmin.py
index dd6b4d0..7463021 100644
--- a/src/database/dbadmin.py
+++ b/src/database/dbadmin.py
@@ -7,7 +7,7 @@
############################################################################
# Import de dbmain
-from . import dbmain
+from src.database import dbmain
# Extension de cette classe avec dbmain
class DbAdmin(dbmain.DbMain):
diff --git a/src/database/dbmain.py b/src/database/dbmain.py
index 602cec6..1dbb301 100644
--- a/src/database/dbmain.py
+++ b/src/database/dbmain.py
@@ -6,8 +6,10 @@
# #
############################################################################
+from types import NoneType
import mysql.connector
from passlib.hash import sha512_crypt
+from PyQt5.QtWidgets import QMessageBox
# const si CAPS
# https://www.w3schools.com/python/python_mysql_getstarted.asp
@@ -142,37 +144,18 @@ class DbMain():
# ****************************************************************************
# FONCTIONS PRINCIPALES
# ****************************************************************************
- # Constructeur, fonction "auto" déclenchée à l'instanciation
- def __init__(self):
- if self.DEBUG:
- self.conn = mysql.connector.connect(
- host=self.HOST,
- user=self.USER,
- password=self.PASSWORD,
- database=self.DATABASE,
- raise_on_warnings=self.DEBUG
- )
- else:
- self.conn = mysql.connector.connect(
- host=self.HOST,
- user=self.USER,
- password=self.PASSWORD,
- database=self.DATABASE
- )
- self.cur = self.conn.cursor()
-
# Création de la DB si elle n'existe pas
- def create_db(self):
+ def create_db(self) -> None:
reqInitDb = "CREATE DATABASE IF NOT EXISTS " + self.DATABASE
self.cur.execute(reqInitDb)
# Sélection de la DB
- def select_db(self):
+ def select_db(self) -> None:
reqSelectDb = "USE " + self.DATABASE
self.cur.execute(reqSelectDb)
# Création des tables si elles n'existent pas
- def create_table(self):
+ def create_table(self) -> None:
# userAccount
reqInitUserAccount = self.CREATETABLEUSERACCOUNT
self.cur.execute(reqInitUserAccount)
@@ -190,28 +173,64 @@ class DbMain():
self.cur.execute(reqInitMission)
# Déclenche les méthodes pour créer la BDD
- def init(self):
+ def init(self) -> None:
self.create_db()
self.select_db()
self.create_table()
# Chiffre la data reçue
- def crypt_pass(self, password):
+ def crypt_pass(self, password: str) -> str:
return sha512_crypt.hash(password, rounds=10000)
# Prépare la requète pour mitiger (se protéger) les injections SQL et
# initialise si nécessaire la BDD à chaque requète
- def exec_cmd(self, req, arg=None):
+ def exec_cmd(self, req: str, arg: list = None, commit: bool = False) -> None:
self.init()
if arg:
self.cur.execute(req, arg)
+ if commit:
+ self.conn.commit()
else:
self.cur.execute(req)
# Vérifie si l'email existe dans la table userAccount de la BDD
- def check_exist_email(self, email):
+ def check_exist_email(self, email: str) -> int:
reqCheckEmailExist = "SELECT EXISTS(SELECT * FROM " + \
self.TABLEUSERACCOUNT + " WHERE email = %s)"
self.exec_cmd(reqCheckEmailExist, [email])
# Retourne 1 si existe, sinon 0
return self.cur.fetchall()[0][0]
+
+ # Constructeur, fonction "auto" déclenchée à l'instanciation
+ def __init__(self, mainWindow) -> None:
+ try:
+ if self.DEBUG:
+ self.conn = mysql.connector.connect(
+ host=self.HOST,
+ user=self.USER,
+ password=self.PASSWORD,
+ database=self.DATABASE,
+ raise_on_warnings=self.DEBUG
+ )
+ else:
+ self.conn = mysql.connector.connect(
+ host=self.HOST,
+ user=self.USER,
+ password=self.PASSWORD,
+ database=self.DATABASE
+ )
+ self.cur = self.conn.cursor()
+ except mysql.connector.errors.DatabaseError as e:
+ if self.DEBUG:
+ QMessageBox.warning(
+ mainWindow,
+ "Erreur avec la BDD",
+ str(e)
+ )
+ else:
+ QMessageBox.warning(
+ mainWindow,
+ "Erreur avec la BDD",
+ "Veuillez vérifier si la BDD est accessible."
+ )
+ exit(1)
diff --git a/src/database/dbmission.py b/src/database/dbmission.py
index 0a33a12..7f6620e 100644
--- a/src/database/dbmission.py
+++ b/src/database/dbmission.py
@@ -10,7 +10,7 @@
# https:#www.freecodecamp.org/news/sql-joins-tutorial/
# Import de dbmain
-from . import dbmain
+from src.database import dbmain
from datetime import datetime
diff --git a/src/database/dbsearch.py b/src/database/dbsearch.py
index 15d4a24..3089bf1 100644
--- a/src/database/dbsearch.py
+++ b/src/database/dbsearch.py
@@ -9,7 +9,7 @@
# https:#www.freecodecamp.org/news/sql-joins-tutorial/
# Import de dbmain
-from . import dbmain
+from src.database import dbmain
# Extension de cette classe avec dbmain
@@ -18,7 +18,7 @@ class DbSearch(dbmain.DbMain):
# RECUPERATION DES INFORMATIONS RELATIVES AUX UTILISATEURS
# ****************************************************************************
# Récupération des infos d'un compte par son id
- def get_user_account_by_userid(self, userId):
+ def get_user_account_by_userid(self, userId: int) -> list:
reqSearchUser = """
SELECT
userId, email, inscriptionDate, userStatus
@@ -30,7 +30,7 @@ class DbSearch(dbmain.DbMain):
return self.cur.fetchall()
# Récupération des infos d'un utilisateur par son id
- def get_user_info_by_userid(self, userId):
+ def get_user_info_by_userid(self, userId: int) -> list:
reqGetUserInfo = """
SELECT
userId, lastname, firstname, degree,
@@ -118,7 +118,7 @@ class DbSearch(dbmain.DbMain):
# RECUPERATION DES INFORMATIONS RELATIVES AUX EMPLOIS
# ****************************************************************************
# Récupérer toutes les infos de la table jobCategory
- def get_job_all(self):
+ def get_job_all(self) -> list:
reqGetAllJobs = """
SELECT
*
@@ -128,7 +128,7 @@ class DbSearch(dbmain.DbMain):
return self.cur.fetchall()
# Récupérer toutes les infos de la table jobCategory
- def get_job_by_jobid(self, jobId):
+ def get_job_by_jobid(self, jobId: int) -> list:
reqGetJobinfo = """
SELECT
*
diff --git a/src/database/dbuser.py b/src/database/dbuser.py
index e0a62fb..e71d936 100644
--- a/src/database/dbuser.py
+++ b/src/database/dbuser.py
@@ -10,7 +10,7 @@
from datetime import datetime
from passlib.hash import sha512_crypt
# Import de dbmain
-from . import dbmain
+from src.database import dbmain
# Extension de cette classe avec dbmain
class DbUser(dbmain.DbMain):
@@ -19,28 +19,29 @@ class DbUser(dbmain.DbMain):
# GESTION DES UTILISATEURS
# ****************************************************************************
# Enregistrement d'un nouvel utilisateur
- def register_user(self, email, password, userStatus):
+ def register_user(self, email: str, password: str, userStatus: int) -> int:
# On vérifie si l'email existe deja dans la bdd
exist = self.check_exist_email(email)
# Si non
if not exist:
# Chiffrement du pass
- hash = self.crypt_pass(password)
+ passwordHash = self.crypt_pass(password)
# Préparation de la requète
- reqAddUser = """""
+ reqAddUser = """
INSERT INTO
""" + self.TABLEUSERACCOUNT + """
(email, password, inscriptionDate, userStatus)
VALUES
(%s, %s, %s, %s)"""
# Execution de la requète
- self.exec_cmd(reqAddUser,
- [email,
- hash,
- datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
- userStatus
- ]
- )
+ self.exec_cmd(
+ reqAddUser,
+ [email,
+ passwordHash,
+ datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
+ userStatus],
+ True
+ )
# Retourne 1 pour réussite
return 1
else:
diff --git a/src/gui/home.py b/src/gui/home.py
deleted file mode 100644
index 554d561..0000000
--- a/src/gui/home.py
+++ /dev/null
@@ -1,24 +0,0 @@
-
-from PyQt5 import QtWidgets
-from src.gui import login
-
-def home_page(mainWindow):
- label1 = QtWidgets.QLabel("Home page")
- btnConnexion = QtWidgets.QPushButton("Connexion")
- btnConnexion.clicked.connect(lambda: login.login_page(mainWindow))
-
- inputRecherche = QtWidgets.QLineEdit("Nom d'un pro")
- comboRecherche = QtWidgets.QComboBox()
-
- layoutMain = QtWidgets.QVBoxLayout()
-
- layoutMain.addWidget(btnConnexion)
- layoutMain.addWidget(label1)
- layoutMain.addWidget(inputRecherche)
- layoutMain.addWidget(comboRecherche)
-
- if hasattr(mainWindow, "mainWidget"):
- mainWindow.mainWidget.deleteLater()
- mainWindow.mainWidget = QtWidgets.QWidget()
- mainWindow.mainWidget.setLayout(layoutMain)
- mainWindow.setCentralWidget(mainWindow.mainWidget)
diff --git a/src/gui/include/__init__.py b/src/gui/include/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/gui/include/__init__.py
diff --git a/src/gui/include/connexionInfo.py b/src/gui/include/connexionInfo.py
new file mode 100644
index 0000000..8130f6f
--- /dev/null
+++ b/src/gui/include/connexionInfo.py
@@ -0,0 +1,10 @@
+
+from PyQt5.QtWidgets import QLabel
+
+def get_text(mainWindow) -> object:
+ if not mainWindow.userConnected:
+ connexionInfo = QLabel("Non connecté.")
+ else:
+ connexionInfo = QLabel(f"Connecté: {mainWindow.userEmail} - {mainWindow.userStatus}")
+
+ return connexionInfo
diff --git a/src/gui/include/menu.py b/src/gui/include/menu.py
new file mode 100644
index 0000000..e5a6ddd
--- /dev/null
+++ b/src/gui/include/menu.py
@@ -0,0 +1,16 @@
+
+from os.path import join
+from pathlib import Path
+from PyQt5.QtGui import QIcon
+from PyQt5.QtWidgets import QAction
+from src.gui import windowAPropos
+
+def init(mainWindow):
+ logo = join(Path(__file__).parent, "ressources", "icon.ico")
+ mainWindow.setWindowIcon(QIcon(logo))
+ menu = mainWindow.menuBar()
+ menuOptions = menu.addMenu("Options")
+ btnApropos = QAction("A propos", mainWindow)
+ btnApropos.triggered.connect(lambda: windowAPropos.main(mainWindow))
+ menuOptions.addAction(btnApropos)
+ mainWindow.setWindowTitle("Alphajob")
diff --git a/src/gui/ressources/icon.ico b/src/gui/include/ressources/icon.ico
index 7c550a3..7c550a3 100644
--- a/src/gui/ressources/icon.ico
+++ b/src/gui/include/ressources/icon.ico
Binary files differ
diff --git a/src/gui/login.py b/src/gui/login.py
deleted file mode 100644
index 601cd18..0000000
--- a/src/gui/login.py
+++ /dev/null
@@ -1,42 +0,0 @@
-
-from PyQt5 import QtWidgets
-from src.core import user
-from src.gui import home
-
-
-def login_page(mainWindow):
- btnAccueil = QtWidgets.QPushButton("Accueil")
- btnAccueil.clicked.connect(lambda: home.home_page(mainWindow))
- leditMail = QtWidgets.QLineEdit("Email")
- leditPassword = QtWidgets.QLineEdit("Password")
- btnConnexion = QtWidgets.QPushButton("Connexion")
- btnConnexion.clicked.connect(
- lambda: user.login(
- mainWindow,
- leditMail.text(),
- leditPassword.text()
- )
- )
-
- layoutMain = QtWidgets.QVBoxLayout()
- layoutNavigation = QtWidgets.QHBoxLayout()
- layoutPassword = QtWidgets.QHBoxLayout()
- layoutPasswordWidgets = QtWidgets.QVBoxLayout()
-
- layoutMain.addLayout(layoutNavigation)
- layoutNavigation.addWidget(btnAccueil)
- layoutNavigation.addStretch()
-
- layoutMain.addLayout(layoutPassword)
- layoutPassword.addStretch()
- layoutPassword.addLayout(layoutPasswordWidgets)
- layoutPassword.addStretch()
-
- layoutPasswordWidgets.addWidget(leditMail)
- layoutPasswordWidgets.addWidget(leditPassword)
- layoutPasswordWidgets.addWidget(btnConnexion)
-
- mainWindow.mainWidget.deleteLater()
- mainWindow.mainWidget = QtWidgets.QWidget()
- mainWindow.mainWidget.setLayout(layoutMain)
- mainWindow.setCentralWidget(mainWindow.mainWidget) \ No newline at end of file
diff --git a/src/gui/menu.py b/src/gui/menu.py
deleted file mode 100644
index 90dffcf..0000000
--- a/src/gui/menu.py
+++ /dev/null
@@ -1,17 +0,0 @@
-
-from os.path import join
-from pathlib import Path
-from PyQt5.QtWidgets import QAction
-from PyQt5.QtGui import QIcon
-from src.gui import aPropos
-
-def init_menu(mainWindow):
- logo = join(Path(__file__).parent, "ressources", "icon.ico")
- print(logo)
- mainWindow.setWindowIcon(QIcon(logo))
- menu = mainWindow.menuBar()
- menuOptions = menu.addMenu("Options")
- btnApropos = QAction("A propos", mainWindow)
- btnApropos.triggered.connect(lambda: aPropos.a_propos(mainWindow))
- menuOptions.addAction(btnApropos)
- mainWindow.setWindowTitle("Alphajob")
diff --git a/src/gui/pageHome.py b/src/gui/pageHome.py
new file mode 100644
index 0000000..7745aa5
--- /dev/null
+++ b/src/gui/pageHome.py
@@ -0,0 +1,74 @@
+
+from PyQt5.QtWidgets import (
+ QGroupBox, QPushButton,
+ QComboBox, QLineEdit,
+ QHBoxLayout, QWidget,
+ QVBoxLayout
+)
+from src.core import funcSearch
+from src.database import dbsearch
+from src.gui import pageLogin, pageRegister
+from src.gui.include import connexionInfo
+
+
+def main(mainWindow) -> None:
+ classSearch = dbsearch.DbSearch(mainWindow)
+
+ connexionState = connexionInfo.get_text(mainWindow)
+
+ btnConnexion = QPushButton("Connexion")
+ btnConnexion.clicked.connect(lambda: pageLogin.main(mainWindow))
+ btnInscription = QPushButton("Inscription")
+ btnInscription.clicked.connect(lambda: pageRegister.main(mainWindow))
+
+ layoutUser = QHBoxLayout()
+ layoutUser.addStretch()
+ layoutUser.addWidget(btnConnexion)
+ layoutUser.addWidget(btnInscription)
+ grpUtilisateur = QGroupBox("Gestion de l'utilisateur")
+ grpUtilisateur.setLayout(layoutUser)
+
+ inputRechercheNom = QLineEdit("Nom d'un pro")
+ btnRechercheNom = QPushButton("Rechercher")
+ comboRechercheCat = QComboBox()
+ alljobs = classSearch.get_job_all()
+ for i in alljobs:
+ comboRechercheCat.addItem("{0}".format(i[2]), i[0])
+ btnRechercheCat = QPushButton("Rechercher")
+ btnRechercheCat.clicked.connect(
+ lambda: funcSearch.search_by_job_id(
+ mainWindow,
+ comboRechercheCat.currentData()
+ )
+ )
+
+ layoutRechercheNom = QVBoxLayout()
+ layoutRechercheNom.addWidget(inputRechercheNom)
+ layoutRechercheNom.addWidget(btnRechercheNom)
+ layoutRechercheCat = QVBoxLayout()
+ layoutRechercheCat.addWidget(comboRechercheCat)
+ layoutRechercheCat.addWidget(btnRechercheCat)
+
+ layoutRecherche = QHBoxLayout()
+ layoutRecherche.addStretch()
+ layoutRecherche.addLayout(layoutRechercheNom)
+ layoutRecherche.addStretch()
+ layoutRecherche.addLayout(layoutRechercheCat)
+ layoutRecherche.addStretch()
+
+ grpRecherche = QGroupBox("Recherche")
+ grpRecherche.setLayout(layoutRecherche)
+
+ layoutMain = QVBoxLayout()
+ layoutMain.addWidget(connexionState)
+ layoutMain.addWidget(grpUtilisateur)
+ layoutMain.addStretch()
+ layoutMain.addWidget(grpRecherche)
+ layoutMain.addStretch()
+
+ if hasattr(mainWindow, "mainWidget"):
+ mainWindow.mainWidget.deleteLater()
+
+ mainWindow.mainWidget = QWidget()
+ mainWindow.mainWidget.setLayout(layoutMain)
+ mainWindow.setCentralWidget(mainWindow.mainWidget)
diff --git a/src/gui/pageLogin.py b/src/gui/pageLogin.py
new file mode 100644
index 0000000..46e328a
--- /dev/null
+++ b/src/gui/pageLogin.py
@@ -0,0 +1,64 @@
+
+from PyQt5.QtWidgets import (
+ QPushButton, QHBoxLayout, QGroupBox, QLabel,
+ QLineEdit, QWidget, QVBoxLayout, QGridLayout
+)
+from src.core import funcUser
+from src.gui import pageHome, pageRegister
+from src.gui.include import connexionInfo
+
+
+def main(mainWindow) -> None:
+ connexionState = connexionInfo.get_text(mainWindow)
+
+ btnAccueil = QPushButton("Accueil")
+ btnAccueil.clicked.connect(lambda: pageHome.main(mainWindow))
+ btnInscription = QPushButton("Inscription")
+ btnInscription.clicked.connect(lambda: pageRegister.main(mainWindow))
+ layoutUser = QHBoxLayout()
+ layoutUser.addWidget(btnAccueil)
+ layoutUser.addStretch()
+ layoutUser.addWidget(btnInscription)
+ grpUtilisateur = QGroupBox("Gestion de l'utilisateur")
+ grpUtilisateur.setLayout(layoutUser)
+
+ labMail = QLabel("Email")
+ leditMail = QLineEdit()
+ labPassword = QLabel("Mot de passe")
+ leditPassword = QLineEdit()
+ leditPassword.setEchoMode(QLineEdit.Password)
+ btnConnexion = QPushButton("Connexion")
+ btnConnexion.clicked.connect(
+ lambda: funcUser.login(
+ mainWindow,
+ leditMail.text(),
+ leditPassword.text()
+ )
+ )
+
+ LayoutInfoConnexion = QGridLayout()
+ LayoutInfoConnexion.addWidget(labMail, 0, 0)
+ LayoutInfoConnexion.addWidget(leditMail, 0, 1)
+ LayoutInfoConnexion.addWidget(labPassword, 1, 0)
+ LayoutInfoConnexion.addWidget(leditPassword, 1, 1)
+ LayoutInfoConnexion.addWidget(btnConnexion, 2, 1)
+
+ layoutGroupConnexion = QHBoxLayout()
+ layoutGroupConnexion.addStretch()
+ layoutGroupConnexion.addLayout(LayoutInfoConnexion)
+ layoutGroupConnexion.addStretch()
+
+ grpConnexion = QGroupBox("Connexion")
+ grpConnexion.setLayout(layoutGroupConnexion)
+
+ layoutMain = QVBoxLayout()
+ layoutMain.addWidget(connexionState)
+ layoutMain.addWidget(grpUtilisateur)
+ layoutMain.addStretch()
+ layoutMain.addWidget(grpConnexion)
+ layoutMain.addStretch()
+
+ mainWindow.mainWidget.deleteLater()
+ mainWindow.mainWidget = QWidget()
+ mainWindow.mainWidget.setLayout(layoutMain)
+ mainWindow.setCentralWidget(mainWindow.mainWidget) \ No newline at end of file
diff --git a/src/gui/pageRegister.py b/src/gui/pageRegister.py
new file mode 100644
index 0000000..63cae28
--- /dev/null
+++ b/src/gui/pageRegister.py
@@ -0,0 +1,74 @@
+
+from PyQt5.QtWidgets import (
+ QPushButton, QHBoxLayout, QGroupBox, QLabel,
+ QLineEdit, QWidget, QVBoxLayout, QComboBox, QGridLayout
+)
+from src.core import funcUser
+from src.gui import pageHome, pageLogin
+from src.gui.include import connexionInfo
+
+
+def main(mainWindow) -> None:
+ connexionState = connexionInfo.get_text(mainWindow)
+
+ btnAccueil = QPushButton("Accueil")
+ btnAccueil.clicked.connect(lambda: pageHome.main(mainWindow))
+
+ btnConnexion = QPushButton("Connexion")
+ btnConnexion.clicked.connect(lambda: pageLogin.main(mainWindow))
+
+ layoutUser = QHBoxLayout()
+ layoutUser.addWidget(btnAccueil)
+ layoutUser.addStretch()
+ layoutUser.addWidget(btnConnexion)
+ grpUtilisateur = QGroupBox("Gestion de l'utilisateur")
+ grpUtilisateur.setLayout(layoutUser)
+
+ labMail = QLabel("Email")
+ leditMail = QLineEdit()
+ labPassword = QLabel("Mot de passe")
+ leditPassword = QLineEdit()
+ leditPassword.setEchoMode(QLineEdit.Password)
+ labStatus = QLabel("Rôle")
+ comboStatus = QComboBox()
+ comboStatus.addItem("Admin", 0)
+ comboStatus.addItem("Pro", 1)
+ comboStatus.addItem("Client", 2)
+
+ btnRegister = QPushButton("S'inscrire")
+ btnRegister.clicked.connect(
+ lambda: funcUser.register(
+ mainWindow,
+ leditMail.text(),
+ leditPassword.text(),
+ comboStatus.currentData()
+ )
+ )
+
+ LayoutInfoConnexion = QGridLayout()
+ LayoutInfoConnexion.addWidget(labMail, 0, 0)
+ LayoutInfoConnexion.addWidget(leditMail, 0, 1)
+ LayoutInfoConnexion.addWidget(labPassword, 1, 0)
+ LayoutInfoConnexion.addWidget(leditPassword, 1, 1)
+ LayoutInfoConnexion.addWidget(labStatus, 2, 0)
+ LayoutInfoConnexion.addWidget(comboStatus, 2, 1)
+ LayoutInfoConnexion.addWidget(btnRegister, 3, 1)
+
+ layoutGroupConnexion = QHBoxLayout()
+ layoutGroupConnexion.addStretch()
+ layoutGroupConnexion.addLayout(LayoutInfoConnexion)
+ layoutGroupConnexion.addStretch()
+ grpConnexion = QGroupBox("Inscription")
+ grpConnexion.setLayout(layoutGroupConnexion)
+
+ layoutMain = QVBoxLayout()
+ layoutMain.addWidget(connexionState)
+ layoutMain.addWidget(grpUtilisateur)
+ layoutMain.addStretch()
+ layoutMain.addWidget(grpConnexion)
+ layoutMain.addStretch()
+
+ mainWindow.mainWidget.deleteLater()
+ mainWindow.mainWidget = QWidget()
+ mainWindow.mainWidget.setLayout(layoutMain)
+ mainWindow.setCentralWidget(mainWindow.mainWidget)
diff --git a/src/gui/aPropos.py b/src/gui/windowAPropos.py
index 49cb663..9ecdfda 100644
--- a/src/gui/aPropos.py
+++ b/src/gui/windowAPropos.py
@@ -2,7 +2,7 @@
from PyQt5.QtWidgets import QMessageBox
-def a_propos(mainWindow):
+def main(mainWindow):
QMessageBox.information(
mainWindow,
"A propos",
diff --git a/src/main.py b/src/main.py
index 693964e..a17e39f 100644
--- a/src/main.py
+++ b/src/main.py
@@ -1,8 +1,8 @@
from sys import argv
-from sys import exit as ex
from PyQt5.QtWidgets import QMainWindow, QApplication
-from src.gui import menu, home
+from src.gui import pageHome
+from src.gui.include import menu
"""
@@ -11,19 +11,27 @@ https://peps.python.org/pep-0008/
"""
class mainWindow(QMainWindow):
VERSION = 0.1
- def __init__(self):
+ # Misc
+ mysqlReachable: bool = False
+ # Utilisateur
+ userConnected: bool = False
+ userId: str = ""
+ userEmail: str = ""
+ userInscriptionDate: str = ""
+ userStatus: str = ""
+ def __init__(self) -> None:
super(mainWindow, self).__init__()
- menu.init_menu(self)
- home.home_page(self)
+ menu.init(self)
+ pageHome.main(self)
if __name__ == "__main__":
def main():
"""Démarrage de l'app
"""
- app = QApplication(argv)
+ APP = QApplication(argv)
GUI = mainWindow()
GUI.show()
- ex(app.exec_())
+ exit(APP.exec_())
main()