From a68a9bc510ba0e47c31448fd73c5dbea0e42193b Mon Sep 17 00:00:00 2001
From: vbochet <vbochet@gmail.com>
Date: Tue, 5 Apr 2016 23:28:15 +0200
Subject: [PATCH] =?UTF-8?q?Modification=20de=20la=20classe=20m=C3=A8de=20C?=
 =?UTF-8?q?ontroller.php=20pour=20y=20ajouter=20une=20fonction=20de=20calc?=
 =?UTF-8?q?ul=20de=20slug=20;=20ajout=20de=20fichiers=20pour=20ajouter=20l?=
 =?UTF-8?q?a=20page=20d'inscription.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 app/controller/RegisterController.php | 35 ++++++++++++++++++++
 app/kernel/Controller.php             | 15 +++++++++
 app/model/Register.php                | 46 +++++++++++++++++++++++++++
 app/view/register/displayForm.html    | 33 +++++++++++++++++++
 app/view/register/displayValid.html   | 17 ++++++++++
 5 files changed, 146 insertions(+)
 create mode 100644 app/controller/RegisterController.php
 create mode 100644 app/model/Register.php
 create mode 100644 app/view/register/displayForm.html
 create mode 100644 app/view/register/displayValid.html

diff --git a/app/controller/RegisterController.php b/app/controller/RegisterController.php
new file mode 100644
index 0000000..6174a63
--- /dev/null
+++ b/app/controller/RegisterController.php
@@ -0,0 +1,35 @@
+<?php
+
+class RegisterController extends Controller { // classe de contrôleur pour l'inscription au site
+
+	public function displayValid() { // la fonction d'affichage de réussite
+		$this->view->display(); // on affiche la page avec le message de réussite
+	}
+	
+	public function displayForm() { // la fonction d'affichage du formulaire
+		$this->view->display();
+	}
+	
+	public function verify() { // vérifie si le login est disponible 
+		if(!isset($_POST['pseudo']) || !isset($_POST['password']) || !isset($_POST['nom']) || !isset($_POST['prenom']) || !isset($_POST['email'])) { // si l'une des données manque, erreur
+			//appeler une fonction d'erreur
+			echo "<h1>Erreur : variables absentes</h1>";
+			die();
+		}
+
+		$data = $_POST;
+		$data['slug'] = self::slugify($_POST['pseudo']);
+
+		$result = Register::check($data['slug'], $_POST['email']); // vérifie si le pseudo est libre et que l'adresse email n'est pas déjà utilisée
+		if($result == 1) { // connexion valide
+			Register::writedb($data);// on réalise l'inscription à l'aide d'une méthode de la classe Register
+			header('Location:valid'); // on redirige vers la  page OK
+		}
+		else {
+			session_start(); // on démarre une session pour avoir accès aux variables superglobales de session
+			$_SESSION["registerErrCode"] = $result; // on stocke le code d'erreur
+			header('Location:../inscription'); // on redirige vers la page de formulaire (il faut faire un retour dans le dossier parent pour que ça fonctionne)
+		}
+	}
+	
+}
diff --git a/app/kernel/Controller.php b/app/kernel/Controller.php
index f167d64..8652a28 100644
--- a/app/kernel/Controller.php
+++ b/app/kernel/Controller.php
@@ -8,4 +8,19 @@ class Controller { // classe abstraite de contrôleur
 		$this->route = $route; // on stocke la route donnée en paramètre dans la variable protégée du même nom
 		$this->view = new View($route); // on instancie une vue avec cette route, et on la stocke dans la variable protégée $view
 	}
+
+	static public function slugify($text) { // fonction permettant de transformer une chaîne de caractères en slug
+		$text = preg_replace('~[^\pL\d]+~u', '-', $text); // on remplace les caractères qui ne sont pas des lettres ou des chiffres par "-"
+		$text = iconv('utf-8', 'us-ascii//TRANSLIT', $text); // on transforme la chaîne pour en retirer les accents
+		$text = preg_replace('~[^-\w]+~', '', $text); // on retire les caract-res non désirés (ie les accents seuls)
+		$text = trim($text, '-'); // on retire les caractères inutiles en début et fin de chaîne (ie les "-")
+		$text = preg_replace('~-+~', '-', $text); // on retire les "-" successifs
+		$text = strtolower($text); // on met la chaîne en caractères minuscules
+
+		if (empty($text)) { // si le texte est vide, on retourne par défaut le texte "n-a"
+			return 'n-a';
+		}
+
+		return $text;
+	}
 }
diff --git a/app/model/Register.php b/app/model/Register.php
new file mode 100644
index 0000000..eb604db
--- /dev/null
+++ b/app/model/Register.php
@@ -0,0 +1,46 @@
+<?php
+
+class Register extends Model { // classe de modèle pour l'inscription
+	public static function check($slug, $email) { // méthode permettant de vérifier si un compte-joueur est libre
+		// OK si personne avec même pseudo ou même adresse mail n'existe dans la BDD
+		// renvoie 1 si le compte est libre (= n'existe pas)
+		// renvoie 2 si pseudo déjà pris
+		// renvoie 3 si email déjà utilisé
+		
+		$db = Database::getInstance(); // on récupère la connexion à la BDD
+		$sql = "SELECT * FROM R_joueur WHERE slug = :slug OR email = :email";
+		$req = $db->prepare($sql); // on prépare la requête
+		$req->execute(array(":slug" => $slug, ":email" => $email)); // on remplace les variables dans la requête
+		
+		$return = 1; //valeur par défaut si on n'a pas d'autre 
+		if($result = $req->fetch()) { // on récupère l'enregistrement, s'il existe
+			if($result["slug"] == $slug) {
+				$return = 2;
+			} // si on a trouvé quelqu'un avec le pseudo, on ne peut pas faire l'inscription
+			else if($result["email"] == $email) {
+				$return = 3;
+			} // si on a trouvé quelqu'un avec l'e-mail, on ne peut pas faire l'inscription
+		}
+		
+		return $return; // on aurait pu mettre deux return (un dans le if et un ici), mais bon...
+	}
+
+	public static function writedb($data) { // méthode réalisant l'inscription dans la BDD à partir d'un tableau de données
+		$db = Database::getInstance(); // on récupère la connexion à la BDD
+
+		$sql = "INSERT INTO R_joueur (slug, pseudo, password, nom, prenom, email, description) VALUES (:slug, :pseudo, :password, :nom, :prenom, :email, :description)";
+		$req = $db->prepare($sql); // on prépare la requête
+		$result = $req->execute(array(":slug" 		=> $data['slug'],
+										":pseudo" 	=> $data['pseudo'],
+										":password" => $data['password'],
+										":nom" 		=> $data['nom'],
+									  	":prenom" 	=> $data['prenom'],
+									  	":email" 	=> $data['email'],
+									  	":description" => $data['description'])); // on remplace les variables dans la requête
+
+		return $result; // on aurait pu mettre deux return (un dans le if et un ici), mais bon...
+	}
+}
+
+
+
diff --git a/app/view/register/displayForm.html b/app/view/register/displayForm.html
new file mode 100644
index 0000000..dc78b92
--- /dev/null
+++ b/app/view/register/displayForm.html
@@ -0,0 +1,33 @@
+<?php session_start(); ?>
+<!DOCTYPE html>
+<html>
+<head>
+	<meta charset="utf-8"/>
+	<title>Formulaire d'inscription</title>
+	<base href="http://localhost/projet-web-2016/www/"/>
+</head>
+<body>
+	<header>
+		<h1>Connexion au site</h1>
+	</header>
+	<?php if(isset($_SESSION['registerErrCode'])) { // si message d'erreur
+		$errCode = $_SESSION['registerErrCode'];
+		$errMsg = ($errCode == 2) ? '<h3 style="color:red;">Pseudo déjà utilisé !</h3>' : '<h3 style="color:red;">Adresse e-mail déjà utilisée !</h3>'; // on détermine le message à afficher
+		echo $errMsg; // on affiche le message
+		unset($_SESSION['registerErrCode']); // on retire la variable de session
+	} ?>
+	<form method="post" action="inscription/verify">
+		<label for="pseudo">Pseudo* : </label>					<input type="text" required="" name="pseudo" id="pseudo" /><br/>
+		<label for="password">Mot de passe* : </label>			<input type="password" required="" name="password" id="password" /><br/>
+		<label for="password_bis">Vérification mdp* : </label>	<input type="password_bis" required="" name="password_bis" id="password_bis" /><br/>
+		<label for="nom">Nom* : </label>						<input type="text" required="" name="nom" id="nom" /><br/>
+		<label for="prenom">Prénom* : </label>					<input type="text" required="" name="prenom" id="prenom" /><br/>
+		<label for="email">Adresse e-mail* : </label>			<input type="email" required="" name="email" id="email" /><br/>
+		<label for="description">Une description de vous : </label><textarea name="description" id="description"></textarea><br/>
+		<input type="submit" value="Connexion" />
+	</form>
+	<footer>
+		<p>Le pied de page</p>
+	</footer>
+</body>
+</html>
diff --git a/app/view/register/displayValid.html b/app/view/register/displayValid.html
new file mode 100644
index 0000000..2be853c
--- /dev/null
+++ b/app/view/register/displayValid.html
@@ -0,0 +1,17 @@
+<?php session_start(); ?>
+<!DOCTYPE html>
+<html>
+<head>
+	<meta charset="utf-8"/>
+	<title>Connexion réussie</title>
+	<base href="http://localhost/projet-web-2016/www/"/>
+</head>
+<body>
+	<header>
+		<h1 style="color:green;">Vos identifiants sont corrects !</h1>
+	</header>
+	<footer>
+		<p>Le pied de page</p>
+	</footer>
+</body>
+</html>
-- 
GitLab