diff options
| author | Debulois <quentin@debulois.fr> | 2022-04-24 17:16:05 +0200 |
|---|---|---|
| committer | Debulois <quentin@debulois.fr> | 2022-04-24 17:16:05 +0200 |
| commit | 6104a59cbdf6474acea6a8a1d4c865f3d88d2296 (patch) | |
| tree | 2920dea1346aafb041643d87ba1bb6dc1a813ee2 | |
| parent | 4c4f70bf6eb88a419add86e182d3080674196433 (diff) | |
Mise en place du système de connexion / enregistrement
| -rw-r--r-- | src/core/funcSearch.py | 3 | ||||
| -rw-r--r-- | src/core/funcUser.py | 123 | ||||
| -rw-r--r-- | src/core/user.py | 25 | ||||
| -rw-r--r-- | src/database/dbadmin.py | 2 | ||||
| -rw-r--r-- | src/database/dbmain.py | 71 | ||||
| -rw-r--r-- | src/database/dbmission.py | 2 | ||||
| -rw-r--r-- | src/database/dbsearch.py | 10 | ||||
| -rw-r--r-- | src/database/dbuser.py | 23 | ||||
| -rw-r--r-- | src/gui/home.py | 24 | ||||
| -rw-r--r-- | src/gui/include/__init__.py | 0 | ||||
| -rw-r--r-- | src/gui/include/connexionInfo.py | 10 | ||||
| -rw-r--r-- | src/gui/include/menu.py | 16 | ||||
| -rw-r--r-- | src/gui/include/ressources/icon.ico (renamed from src/gui/ressources/icon.ico) | bin | 41662 -> 41662 bytes | |||
| -rw-r--r-- | src/gui/login.py | 42 | ||||
| -rw-r--r-- | src/gui/menu.py | 17 | ||||
| -rw-r--r-- | src/gui/pageHome.py | 74 | ||||
| -rw-r--r-- | src/gui/pageLogin.py | 64 | ||||
| -rw-r--r-- | src/gui/pageRegister.py | 74 | ||||
| -rw-r--r-- | src/gui/windowAPropos.py (renamed from src/gui/aPropos.py) | 2 | ||||
| -rw-r--r-- | src/main.py | 22 |
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 Binary files differindex 7c550a3..7c550a3 100644 --- a/src/gui/ressources/icon.ico +++ b/src/gui/include/ressources/icon.ico 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() |
