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"> <module type="WEB_MODULE" version="4">
<component name="NewModuleRootManager"> <component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$"> <content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/php/config" isTestSource="false" packagePrefix="config\" /> <sourceFolder url="file://$MODULE_DIR$/php/src" isTestSource="false" packagePrefix="App\" />
<sourceFolder url="file://$MODULE_DIR$/php/controleur" isTestSource="false" packagePrefix="controleur\" />
<sourceFolder url="file://$MODULE_DIR$/php/modeles" isTestSource="false" packagePrefix="modeles\" />
<excludeFolder url="file://$MODULE_DIR$/vendor/composer" /> <excludeFolder url="file://$MODULE_DIR$/vendor/composer" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/polyfill-ctype" /> <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/polyfill-ctype" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/polyfill-mbstring" /> <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": case "accueil":
$this->accueil(); $this->accueil();
break; break;
case "inscription_success":
$this->inscription_success();
break;
case "connection": case "connection":
$this->connection(); $this->connection();
break; break;
@ -28,7 +31,7 @@ class UtilisateurControleur
$this->consulterProfilLimite(); $this->consulterProfilLimite();
break; break;
default: default:
$dVueErreur[] ="Action rjhghuiergiuhou non autorisée"; $dVueErreur[] ="Action non autorisée";
echo $twig->render("erreur.html",['dVueErreur' => $dVueErreur]); echo $twig->render("erreur.html",['dVueErreur' => $dVueErreur]);
} }
@ -59,22 +62,24 @@ class UtilisateurControleur
{ {
global $twig; global $twig;
$dVueErreur = []; // Tableau pour stocker les erreurs, le cas échéant $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']); $email = \App\config\Validation::nettoyerString($_POST['email']);
$motDePasse = \App\config\Validation::nettoyerString($_POST['password']); $motDePasse = \App\config\Validation::nettoyerString($_POST['password']);
// verification que l'email est valide et unique : // verification que l'email est valide et unique :
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { 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 { } else {
$userModel = new \App\modele\UtilisateurModele();
$utilisateur = $userModel->getUtilisateurByEmail($email); $utilisateur = $userModel->getUtilisateurByEmail($email);
if ($utilisateur instanceof \App\metier\Alumni) { if ($utilisateur instanceof \App\metier\Alumni) {
$dVueErreur[] = "L'adresse email est déjà utilisée."; $dVueErreur[] = "L'adresse email est déjà utilisée.";
} }
} }
$userModel = new \App\modele\UtilisateurModele(); $nouvelUtilisateur = $userModel->inscription($prenom,$nom,$email, $motDePasse);
$nouvelUtilisateur = $userModel->inscription($email, $motDePasse);
if ($nouvelUtilisateur instanceof \App\metier\Alumni) { if ($nouvelUtilisateur instanceof \App\metier\Alumni) {
header('Location: index.php?action=inscription_success'); header('Location: index.php?action=inscription_success');
@ -91,15 +96,21 @@ class UtilisateurControleur
global $twig; global $twig;
// Ajout d'un var_dump pour déboguer // Ajout d'un var_dump pour déboguer
if (isset($_SESSION['utilisateur']) && $_SESSION['utilisateur'] instanceof \App\metier\Alumni) { 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 { } else {
$pseudo = null; $prenom = "Utilisateur";
$nom = "inconnu";
} }
//aller sur la page d'accueil avec le nom et prenom de l'utilisateur
echo $twig->render('accueil.html', ['pseudo' => $pseudo]); echo $twig->render('accueil.html', ['prenom' => $prenom, 'nom' => $nom]);
} }
protected function inscription_success()
{
global $twig;
echo $twig->render('inscription_success.html');
}
protected function consulterProfilLimite() protected function consulterProfilLimite()
{ {
//TODO //TODO

@ -64,20 +64,21 @@ class AlumniGateway
} }
public function findByEmail(string $email){ 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( $this->con->executeQuery($query, array(
':e' => array($email, PDO::PARAM_STR), ':e' => array($email, PDO::PARAM_STR),
)); ));
$res = $this->con->getResults(); $res = $this->con->getResults();
var_dump($res);
if (count($res) == 0) { if (count($res) == 0) {
echo "Aucun utilisateur trouvé";
return null; return null;
} }
echo "Utilisateur trouvé"; return new \App\metier\Alumni($res[0]['mail'], $res[0]['mdp'], $res[0]['role'], $res[0]['nom'], $res[0]['prenom']);
return new \App\metier\Alumni($res[0]['mail'],$res[0]['mdp'],$res[0]['role']);
} }
public function getAll(){ public function getAll(){
$query='SELECT * FROM Alumni'; $query='SELECT * FROM Alumni';
$this->con->executeQuery($query); $this->con->executeQuery($query);
@ -88,4 +89,14 @@ class AlumniGateway
} }
return $array; 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 String $role;
private Profil $profil;
/** /**
* @param string $email * @param string $email
* @param string $motDePasse * @param string $motDePasse
* @param String $role * @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->email = $email;
$this->motDePasse = $motDePasse; $this->motDePasse = $motDePasse;
$this->role = $role; $this->role = $role;
$this->profil = new Profil($nom, $prenom, $email, "","", "", "");
} }
/** /**
@ -38,6 +42,10 @@ class Alumni{
return $this->email; return $this->email;
} }
public function getProfil() : Profil
{
return $this->profil;
}
/** /**
* @return string * @return string
*/ */
@ -55,4 +63,14 @@ class Alumni{
{ {
return $this->motDePasse; 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; private int $id;
/**
* @var Alumni Compte
*/
private Alumni $alumni;
/** /**
* @var string CV * @var string CV
@ -28,6 +24,7 @@ class Profil
*/ */
private string $prenom; private string $prenom;
private string $email;
/** /**
* @var string Url linkedin * @var string Url linkedin
*/ */
@ -44,8 +41,6 @@ class Profil
private string $portfolioUrl; private string $portfolioUrl;
/** /**
* @param int $id
* @param Alumni $alumni
* @param string $cv * @param string $cv
* @param string $nom * @param string $nom
* @param string $prenom * @param string $prenom
@ -53,27 +48,18 @@ class Profil
* @param string $githubUrl * @param string $githubUrl
* @param string $portfolioUrl * @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->nom = $nom;
$this->prenom = $prenom; $this->prenom = $prenom;
$this->email = $email;
$this->cv = $cv;
$this->linkedinUrl = $linkedinUrl; $this->linkedinUrl = $linkedinUrl;
$this->githubUrl = $githubUrl; $this->githubUrl = $githubUrl;
$this->portfolioUrl = $portfolioUrl; $this->portfolioUrl = $portfolioUrl;
} }
public function getId(): int
{
return $this->id;
}
public function getAlumni(): Alumni
{
return $this->alumni;
}
public function getCv(): string public function getCv(): string
{ {
@ -100,6 +86,10 @@ class Profil
return $this->githubUrl; return $this->githubUrl;
} }
public function getEmail(): string
{
return $this->email;
}
public function getPortfolioUrl(): string public function getPortfolioUrl(): string
{ {
return $this->portfolioUrl; return $this->portfolioUrl;

@ -51,7 +51,7 @@ class UtilisateurModele
* @param string $pseudo * @param string $pseudo
* @return \Alumni chargé * @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"; $dsn = "mysql:host=localhost;dbname=dbAlica";
$username = "Dev"; $username = "Dev";
@ -60,14 +60,19 @@ class UtilisateurModele
$role = "Membre"; $role = "Membre";
$con = new \App\gateway\Connection($dsn, $username, $password); $con = new \App\gateway\Connection($dsn, $username, $password);
$gate = new \App\gateway\AlumniGateway($con); $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 // Insérez le nouvel utilisateur dans la base de données en utilisant AlumniGateway
if ($gate->insert($email, $hashpassword, $role)) { 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 // 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 $nouvelUtilisateur;
}
return null;
} else { } else {
// L'insertion a échoué, renvoyez un utilisateur vide pour indiquer l'échec // 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> </header>
<h1>Accueil</h1> <h1>Accueil</h1>
<!-- Bienvenu suivie du mail des informations sessions de l'utilisateur --> <!-- Bienvenu suivie du mail des informations sessions de l'utilisateur -->
<p>{% if pseudo %} <p>{% if prenom and nom %}
Bienvenue, {{ pseudo }}! Bienvenue, {{ prenom }} {{ nom }}!
{% else %} {% else %}
Bienvenue, invité! Bienvenue, invité!
{% endif %}</p> {% endif %}</p>
<p>Vous êtes sur la page d'accueil</p> <p>Vous êtes sur la page d'accueil</p>
<p>Vous pouvez vous connecter ou vous inscrire</p> {% if dVueErreur is not empty %}
<p>Vous pouvez aussi consulter les articles</p> <div class="CadreInput">
<p>Vous pouvez aussi consulter les annonces</p> <div class="box">
<p>Connexion :</p> <div class="error">
<form action="../public/index.php?action=connection" method="POST"> <ul>
<input type="submit" value="Se connecter"> {% for erreur in dVueErreur %}
</form> <li>{{ erreur }}</li>
{% endfor %}
</ul>
</div>
</div>
</div>
{% endif %}
</body> </body>
</html> </html>

@ -35,6 +35,7 @@
</div> </div>
</div> </div>
</form> </form>
<div class="CadreInput"> <div class="CadreInput">
<div class="box"> <div class="box">
<form action="../public/index.php?action=inscription" method="POST"> <form action="../public/index.php?action=inscription" method="POST">
@ -42,6 +43,19 @@
</form> </form>
</div> </div>
</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> </div>
<script type="module" src="https://unpkg.com/ionicons@5.5.2/dist/ionicons/ionicons.esm.js"></script> <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> <script nomodule src="https://unpkg.com/ionicons@5.5.2/dist/ionicons/ionicons.js"></script>

@ -11,12 +11,25 @@
<form action="" method="POST"> <form action="" method="POST">
<h3>S'inscrire</h3> <h3>S'inscrire</h3>
<div class="CadreInput"> <div class="CadreInput">
<span>Identifiant</span> <span>Prénom :</span>
<div class="box"> <div class="box">
<div class="icon"> <div class="icon">
<ion-icon name="person"></ion-icon> <ion-icon name="person"></ion-icon>
</div> </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> </div>
<div class="CadreInput"> <div class="CadreInput">
@ -25,7 +38,9 @@
<div class="icon"> <div class="icon">
<ion-icon name="mail-outline"></ion-icon> <ion-icon name="mail-outline"></ion-icon>
</div> </div>
<label>
<input type="email" name="email" required> <input type="email" name="email" required>
</label>
</div> </div>
</div> </div>
<div class="CadreInput"> <div class="CadreInput">
@ -34,7 +49,9 @@
<div class="icon"> <div class="icon">
<ion-icon name="lock-closed"></ion-icon> <ion-icon name="lock-closed"></ion-icon>
</div> </div>
<label>
<input type="password" name="password" required> <input type="password" name="password" required>
</label>
</div> </div>
</div> </div>
<div class="CadreInput"> <div class="CadreInput">
@ -50,6 +67,19 @@
</form> </form>
</div> </div>
</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> </div>
<script type="module" src="https://unpkg.com/ionicons@5.5.2/dist/ionicons/ionicons.esm.js"></script> <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> <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