Inscription Connexion et deconnexion fonctionnelles avec création du profil associé lors de l'inscription

inscription-connection
Leo Tuaillon 1 year ago
parent a9afecf68a
commit 206e3ef580

@ -2,9 +2,7 @@
<module type="WEB_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/php/config" isTestSource="false" packagePrefix="config\" />
<sourceFolder url="file://$MODULE_DIR$/php/controleur" isTestSource="false" packagePrefix="controleur\" />
<sourceFolder url="file://$MODULE_DIR$/php/modeles" isTestSource="false" packagePrefix="modeles\" />
<sourceFolder url="file://$MODULE_DIR$/php/src" isTestSource="false" packagePrefix="App\" />
<excludeFolder url="file://$MODULE_DIR$/vendor/composer" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/polyfill-ctype" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/polyfill-mbstring" />

@ -0,0 +1,102 @@
.three-body {
--uib-size: 500px;
--uib-speed: 0.8s;
--uib-color: #00DBFF;
position: relative;
display: inline-block;
height: var(--uib-size);
width: var(--uib-size);
animation: spin78236 calc(var(--uib-speed) * 2.5) infinite linear;
}
.three-body__dot {
position: absolute;
height: 100%;
width: 30%;
}
.three-body__dot:after {
content: '';
position: absolute;
height: 0;
width: 100%;
padding-bottom: 100%;
background-color: var(--uib-color);
border-radius: 50%;
}
.three-body__dot:nth-child(1) {
bottom: 5%;
left: 0;
transform: rotate(60deg);
transform-origin: 50% 85%;
}
.three-body__dot:nth-child(1)::after {
bottom: 0;
left: 0;
animation: wobble1 var(--uib-speed) infinite ease-in-out;
animation-delay: calc(var(--uib-speed) * -0.3);
}
.three-body__dot:nth-child(2) {
bottom: 5%;
right: 0;
transform: rotate(-60deg);
transform-origin: 50% 85%;
}
.three-body__dot:nth-child(2)::after {
bottom: 0;
left: 0;
animation: wobble1 var(--uib-speed) infinite
calc(var(--uib-speed) * -0.15) ease-in-out;
}
.three-body__dot:nth-child(3) {
bottom: -5%;
left: 0;
transform: translateX(116.666%);
}
.three-body__dot:nth-child(3)::after {
top: 0;
left: 0;
animation: wobble2 var(--uib-speed) infinite ease-in-out;
}
@keyframes spin78236 {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
@keyframes wobble1 {
0%,
100% {
transform: translateY(0%) scale(1);
opacity: 1;
}
50% {
transform: translateY(-66%) scale(0.65);
opacity: 0.8;
}
}
@keyframes wobble2 {
0%,
100% {
transform: translateY(0%) scale(1);
opacity: 1;
}
50% {
transform: translateY(66%) scale(0.65);
opacity: 0.8;
}
}

@ -17,6 +17,9 @@ class UtilisateurControleur
case "accueil":
$this->accueil();
break;
case "inscription_success":
$this->inscription_success();
break;
case "connection":
$this->connection();
break;
@ -28,7 +31,7 @@ class UtilisateurControleur
$this->consulterProfilLimite();
break;
default:
$dVueErreur[] ="Action rjhghuiergiuhou non autorisée";
$dVueErreur[] ="Action non autorisée";
echo $twig->render("erreur.html",['dVueErreur' => $dVueErreur]);
}
@ -59,22 +62,24 @@ class UtilisateurControleur
{
global $twig;
$dVueErreur = []; // Tableau pour stocker les erreurs, le cas échéant
$userModel = new \App\modele\UtilisateurModele();
if (isset($_POST['email'], $_POST['username'], $_POST['password'])) {
if (isset($_POST['firstname'],$_POST['name'], $_POST['email'], $_POST['password'])) {
$nom = \App\config\Validation::nettoyerString($_POST['name']);
$prenom = \App\config\Validation::nettoyerString($_POST['firstname']);
$email = \App\config\Validation::nettoyerString($_POST['email']);
$motDePasse = \App\config\Validation::nettoyerString($_POST['password']);
// verification que l'email est valide et unique :
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$dVueErreur[] = "L'adresse email n'est pas valide.";
$dVueErreur[] = "L'adresse email n'est pas valide ou est déjà utilisée.";
} else {
$userModel = new \App\modele\UtilisateurModele();
$utilisateur = $userModel->getUtilisateurByEmail($email);
if ($utilisateur instanceof \App\metier\Alumni) {
$dVueErreur[] = "L'adresse email est déjà utilisée.";
}
}
$userModel = new \App\modele\UtilisateurModele();
$nouvelUtilisateur = $userModel->inscription($email, $motDePasse);
$nouvelUtilisateur = $userModel->inscription($prenom,$nom,$email, $motDePasse);
if ($nouvelUtilisateur instanceof \App\metier\Alumni) {
header('Location: index.php?action=inscription_success');
@ -91,15 +96,21 @@ class UtilisateurControleur
global $twig;
// Ajout d'un var_dump pour déboguer
if (isset($_SESSION['utilisateur']) && $_SESSION['utilisateur'] instanceof \App\metier\Alumni) {
$pseudo = $_SESSION['utilisateur']->getEmail(); // ou getPseudo() si la méthode existe
$prenom = $_SESSION['utilisateur']->getPrenom();
$nom = $_SESSION['utilisateur']->getNom();
} else {
$pseudo = null;
$prenom = "Utilisateur";
$nom = "inconnu";
}
echo $twig->render('accueil.html', ['pseudo' => $pseudo]);
//aller sur la page d'accueil avec le nom et prenom de l'utilisateur
echo $twig->render('accueil.html', ['prenom' => $prenom, 'nom' => $nom]);
}
protected function inscription_success()
{
global $twig;
echo $twig->render('inscription_success.html');
}
protected function consulterProfilLimite()
{
//TODO

@ -64,20 +64,21 @@ class AlumniGateway
}
public function findByEmail(string $email){
$query='SELECT * FROM Alumni WHERE mail=:e';
$query = 'SELECT Alumni.mail, Alumni.mdp, Alumni.role, Profil.nom, Profil.prenom
FROM Alumni
LEFT JOIN Profil ON Alumni.id = Profil.alumni
WHERE Alumni.mail = :e';
$this->con->executeQuery($query, array(
':e' => array($email, PDO::PARAM_STR),
));
$res = $this->con->getResults();
var_dump($res);
if (count($res) == 0) {
echo "Aucun utilisateur trouvé";
return null;
}
echo "Utilisateur trouvé";
return new \App\metier\Alumni($res[0]['mail'],$res[0]['mdp'],$res[0]['role']);
return new \App\metier\Alumni($res[0]['mail'], $res[0]['mdp'], $res[0]['role'], $res[0]['nom'], $res[0]['prenom']);
}
public function getAll(){
$query='SELECT * FROM Alumni';
$this->con->executeQuery($query);
@ -88,4 +89,14 @@ class AlumniGateway
}
return $array;
}
public function getID(string $email)
{
$query = 'SELECT id FROM Alumni WHERE mail=:e';
$this->con->executeQuery($query, array(
':e' => array($email, PDO::PARAM_STR),
));
$res = $this->con->getResults();
return $res[0]['id'];
}
}

@ -0,0 +1,26 @@
<?php
namespace App\gateway;
use PDO;
class ProfilGateway
{
private \App\gateway\Connection $con;
/**
* @param Connection $con
*/
public function __construct(\App\gateway\Connection $con)
{
$this->con = $con;
}
public function insert(int $alumni,string $nom, string $prenom, string $email)
{
$query = 'INSERT INTO Profil (alumni,nom, prenom,email) VALUES (:alumni,:nom, :prenom,:email)';
return $this->con->executeQuery($query, array(
':alumni' => array($alumni, PDO::PARAM_INT),
':nom' => array($nom, PDO::PARAM_STR),
':prenom' => array($prenom, PDO::PARAM_STR),
':email' => array($email, PDO::PARAM_STR)
));
}
}

@ -18,16 +18,20 @@ class Alumni{
*/
private String $role;
private Profil $profil;
/**
* @param string $email
* @param string $motDePasse
* @param String $role
* @param Profil $profil
*/
public function __construct(string $email, string $motDePasse, String $role)
public function __construct(string $email, string $motDePasse, String $role, string $nom, string $prenom)
{
$this->email = $email;
$this->motDePasse = $motDePasse;
$this->role = $role;
$this->profil = new Profil($nom, $prenom, $email, "","", "", "");
}
/**
@ -38,6 +42,10 @@ class Alumni{
return $this->email;
}
public function getProfil() : Profil
{
return $this->profil;
}
/**
* @return string
*/
@ -55,4 +63,14 @@ class Alumni{
{
return $this->motDePasse;
}
public function getPrenom()
{
return $this->profil->getPrenom();
}
public function getNom()
{
return $this->profil->getNom();
}
}

@ -8,10 +8,6 @@ class Profil
*/
private int $id;
/**
* @var Alumni Compte
*/
private Alumni $alumni;
/**
* @var string CV
@ -28,6 +24,7 @@ class Profil
*/
private string $prenom;
private string $email;
/**
* @var string Url linkedin
*/
@ -44,8 +41,6 @@ class Profil
private string $portfolioUrl;
/**
* @param int $id
* @param Alumni $alumni
* @param string $cv
* @param string $nom
* @param string $prenom
@ -53,27 +48,18 @@ class Profil
* @param string $githubUrl
* @param string $portfolioUrl
*/
public function __construct(int $id, Alumni $alumni, string $cv, string $nom, string $prenom, string $linkedinUrl, string $githubUrl, string $portfolioUrl)
public function __construct(string $nom, string $prenom, string $email, string $cv, string $linkedinUrl, string $githubUrl, string $portfolioUrl)
{
$this->id = $id;
$this->alumni = $alumni;
$this->cv = $cv;
$this->nom = $nom;
$this->prenom = $prenom;
$this->email = $email;
$this->cv = $cv;
$this->linkedinUrl = $linkedinUrl;
$this->githubUrl = $githubUrl;
$this->portfolioUrl = $portfolioUrl;
}
public function getId(): int
{
return $this->id;
}
public function getAlumni(): Alumni
{
return $this->alumni;
}
public function getCv(): string
{
@ -100,6 +86,10 @@ class Profil
return $this->githubUrl;
}
public function getEmail(): string
{
return $this->email;
}
public function getPortfolioUrl(): string
{
return $this->portfolioUrl;

@ -51,7 +51,7 @@ class UtilisateurModele
* @param string $pseudo
* @return \Alumni chargé
*/
public function inscription(string $email, string $hashpassword): \App\metier\Alumni
public function inscription(string $prenom, string $nom,string $email, string $hashpassword):? \App\metier\Alumni
{
$dsn = "mysql:host=localhost;dbname=dbAlica";
$username = "Dev";
@ -60,14 +60,19 @@ class UtilisateurModele
$role = "Membre";
$con = new \App\gateway\Connection($dsn, $username, $password);
$gate = new \App\gateway\AlumniGateway($con);
$profilGate = new \App\gateway\ProfilGateway($con);
// Insérez le nouvel utilisateur dans la base de données en utilisant AlumniGateway
if ($gate->insert($email, $hashpassword, $role)) {
$alumni = $gate->getID($email);
if($profilGate->insert($alumni,$nom, $prenom,$email)){
// L'insertion a réussi, retournez le nouvel utilisateur
$nouvelUtilisateur = new \App\metier\Alumni($email, $hashpassword, $role);
$nouvelUtilisateur = new \App\metier\Alumni($email, $hashpassword, $role,$nom,$prenom);
return $nouvelUtilisateur;
}
return null;
} else {
// L'insertion a échoué, renvoyez un utilisateur vide pour indiquer l'échec
return new \App\metier\Alumni(null, null, null);
return null;
}
}

@ -14,19 +14,26 @@
</header>
<h1>Accueil</h1>
<!-- Bienvenu suivie du mail des informations sessions de l'utilisateur -->
<p>{% if pseudo %}
Bienvenue, {{ pseudo }}!
<p>{% if prenom and nom %}
Bienvenue, {{ prenom }} {{ nom }}!
{% else %}
Bienvenue, invité!
{% endif %}</p>
<p>Vous êtes sur la page d'accueil</p>
<p>Vous pouvez vous connecter ou vous inscrire</p>
<p>Vous pouvez aussi consulter les articles</p>
<p>Vous pouvez aussi consulter les annonces</p>
<p>Connexion :</p>
<form action="../public/index.php?action=connection" method="POST">
<input type="submit" value="Se connecter">
</form>
{% if dVueErreur is not empty %}
<div class="CadreInput">
<div class="box">
<div class="error">
<ul>
{% for erreur in dVueErreur %}
<li>{{ erreur }}</li>
{% endfor %}
</ul>
</div>
</div>
</div>
{% endif %}
</body>
</html>

@ -35,6 +35,7 @@
</div>
</div>
</form>
<div class="CadreInput">
<div class="box">
<form action="../public/index.php?action=inscription" method="POST">
@ -42,6 +43,19 @@
</form>
</div>
</div>
{% if dVueErreur is not empty %}
<div class="CadreInput">
<div class="box">
<div class="error">
<ul>
{% for erreur in dVueErreur %}
<li>{{ erreur }}</li>
{% endfor %}
</ul>
</div>
</div>
</div>
{% endif %}
</div>
<script type="module" src="https://unpkg.com/ionicons@5.5.2/dist/ionicons/ionicons.esm.js"></script>
<script nomodule src="https://unpkg.com/ionicons@5.5.2/dist/ionicons/ionicons.js"></script>

@ -11,12 +11,25 @@
<form action="" method="POST">
<h3>S'inscrire</h3>
<div class="CadreInput">
<span>Identifiant</span>
<span>Prénom :</span>
<div class="box">
<div class="icon">
<ion-icon name="person"></ion-icon>
</div>
<input type="text" name="username" required>
<label>
<input type="text" name="firstname" required>
</label>
</div>
</div>
<div class="CadreInput">
<span>Nom :</span>
<div class="box">
<div class="icon">
<ion-icon name="person"></ion-icon>
</div>
<label>
<input type="text" name="name" required>
</label>
</div>
</div>
<div class="CadreInput">
@ -25,7 +38,9 @@
<div class="icon">
<ion-icon name="mail-outline"></ion-icon>
</div>
<label>
<input type="email" name="email" required>
</label>
</div>
</div>
<div class="CadreInput">
@ -34,7 +49,9 @@
<div class="icon">
<ion-icon name="lock-closed"></ion-icon>
</div>
<label>
<input type="password" name="password" required>
</label>
</div>
</div>
<div class="CadreInput">
@ -50,6 +67,19 @@
</form>
</div>
</div>
{% if dVueErreur is not empty %}
<div class="CadreInput">
<div class="box">
<div class="error">
<ul>
{% for erreur in dVueErreur %}
<li>{{ erreur }}</li>
{% endfor %}
</ul>
</div>
</div>
</div>
{% endif %}
</div>
<script type="module" src="https://unpkg.com/ionicons@5.5.2/dist/ionicons/ionicons.esm.js"></script>
<script noModule src="https://unpkg.com/ionicons@5.5.2/dist/ionicons/ionicons.js"></script>

@ -0,0 +1,24 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Success</title>
<link rel="stylesheet" type="text/css" href="../public/css/inscription_success.css">
</head>
<body>
<h1>Inscription effectuée avec succès, vous pouvez désormais vous connecter</h1>
<p>Vous allez être redirigé vers la page de connexion dans 5 secondes</p>
<div class="three-body">
<div class="three-body__dot"></div>
<div class="three-body__dot"></div>
<div class="three-body__dot"></div>
</div>
<script>
setTimeout(function () {
window.location.href = "../public/index.php?action=connection";
}, 5000);
</script>
</body>
</html>
Loading…
Cancel
Save