From 51b87638672efb125ee4b92f2ebcc4e5bcf210a1 Mon Sep 17 00:00:00 2001
From: vbochet <vbochet@gmail.com>
Date: Fri, 29 Apr 2016 12:09:57 +0200
Subject: [PATCH] =?UTF-8?q?Modification=20du=20contr=C3=B4leur=20et=20du?=
 =?UTF-8?q?=20mod=C3=A8le=20pour=20le=20formulaire=20d'inscription,=20pour?=
 =?UTF-8?q?=20la=20validation=20JS=20du=20formulaire=20(ajout=20d'une=20no?=
 =?UTF-8?q?uvelle=20route=20pour=20la=20validation=20AJAX=20de=20champs=20?=
 =?UTF-8?q?+=20renommage=20de=20la=20route=20d'inscription=20en=20BDD)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 app/controller/RegisterController.php | 84 ++++++++++++++++++++++++++-
 app/kernel/Router.php                 |  6 +-
 app/model/Register.php                | 28 +++++++++
 3 files changed, 116 insertions(+), 2 deletions(-)

diff --git a/app/controller/RegisterController.php b/app/controller/RegisterController.php
index ac92392..b3b922c 100644
--- a/app/controller/RegisterController.php
+++ b/app/controller/RegisterController.php
@@ -10,7 +10,89 @@ class RegisterController extends Controller { // classe de contrôleur pour l'in
 		$this->view->display();
 	}
 	
-	public function verify() { // vérifie si le login est disponible 
+	public function verify() { // vérifie si les données envoyées sont valides
+		if(!isset($_POST['method']) || !isset($_POST['value'])) { // si l'une des données manque, erreur
+			//appeler une fonction d'erreur
+			echo "<h1>Erreur : données absentes</h1>";
+			die();
+		}
+		
+		$method = $_POST['method'];
+		$value = $_POST['value'];
+		
+		$passed = false;
+		$retval = '';
+		switch($method) {
+			case 'checkPseudo':
+				// vérifie que le pseudo est libre
+				$slug_joueur = self::slugify($value);
+				if(Register::checkPseudo($slug_joueur)) {
+					$passed = true;
+					$retval = "Pseudo valide";
+				}
+				else {
+					$passed = false;
+					$retval = "Déjà utilisé";
+				}
+				break;
+			
+			case 'checkPassword':
+				//if(preg_match("#^[a-z0-9._-]+(@|%40)[a-z0-9._-]{2,}\.[a-z]{2,4}$#", $value)) {
+					$passed = true;
+					$retval = "Mdp valide";
+				//}
+				//else {
+				//	$passed = false;
+				//	$retval = "Mdp invalide";
+				//}
+				break;
+			
+			case 'checkPaswordBis':
+				$mdp = explode("¤", $value);
+				if($mdp[0]==$mdp[1]) {
+					$passed = true;
+					$retval = "Mdp valide";
+				}
+				else {
+					$passed = false;
+					$retval = "Mdp différents";
+				}
+				break;
+				
+			case 'checkEmail':
+				if(preg_match("#^[a-z0-9._-]+(@|%40)[a-z0-9._-]{2,}\.[a-z]{2,4}$#", $value)) {
+					// deuxième test : le mail est il déjà utilisé ?
+					//$value = str_replace("%40", "@", $value); // on corrige le "%40" en "@" pour vérifier l'existence
+					if(Register::checkEmail($value)) {
+						$passed = true;
+						$retval = "E-mail valide";
+					}
+					else {
+						$passed = false;
+						$retval = "Déjà utilisé";
+					}
+				}
+				else {
+					$passed = false;
+					$retval = "Format invalide";
+				}
+				break;
+		
+			default: exit;
+		}
+		
+		if($passed) {
+			// set the message colour to green and the checkbox to checked
+			echo '{"success":true, "text":"'.$retval.'", "color":"green"}';
+		
+		} 
+		else {
+			// set the message colour to red, the checkbox to unchecked and focus back on the field
+			echo '{"success":false, "text":"'.$retval.'", "color":"red"}';
+		}
+	}
+	
+	public function save() { // vérifie les données d'inscription, et enregistre les infos dans la BDD
 		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>";
diff --git a/app/kernel/Router.php b/app/kernel/Router.php
index 8f657f0..7f8698b 100644
--- a/app/kernel/Router.php
+++ b/app/kernel/Router.php
@@ -84,10 +84,14 @@ class Router { // classe PHP permettant l'analyse de l'URL des requêtes
 				$result["controller"] = "Register"; 
 				$result["action"] = "displayValid"; // "displayValid" pour afficher la page avec le message de réussite
 			}
-			else if($parts[0] == "inscription" && count($parts) == 2 && $parts[1] == "verify") { // vérification de la validité de l'inscription
+			else if($parts[0] == "inscription" && count($parts) == 2 && $parts[1] == "verify") { // vérification de la validité des champs
 				$result["controller"] = "Register"; 
 				$result["action"] = "verify"; // "verify" pour appeler la méthode de vérification
 			}
+			else if($parts[0] == "inscription" && count($parts) == 2 && $parts[1] == "save") { // réalisation de l'inscription dans la BDD
+				$result["controller"] = "Register"; 
+				$result["action"] = "save"; // "save" pour appeler la méthode d'enregistrement dans la BDD
+			}
 
 			/*** Ajout de partie ***/
 			else if($parts[0] == "add_partie" && count($parts) == 1){ // formulaire d'ajout de partie
diff --git a/app/model/Register.php b/app/model/Register.php
index 146b069..f9141cb 100644
--- a/app/model/Register.php
+++ b/app/model/Register.php
@@ -1,6 +1,34 @@
 <?php
 
 class Register extends Model { // classe de modèle pour l'inscription
+	public static function checkPseudo($slug_joueur) { // méthode permettant de vérifier si un pseudo est libre
+		
+		$db = Database::getInstance(); // on récupère la connexion à la BDD
+		$sql = "SELECT * FROM R_joueur WHERE slug = :slug";
+		$req = $db->prepare($sql); // on prépare la requête
+		$req->execute(array(":slug" => $slug_joueur)); // on remplace les variables dans la requête
+		
+		if($result = $req->fetch()) { // si un enregistrement existe en BDD, on retourne 0
+			return 0;
+		}
+		
+		return 1; // sinon : OK -> on retourne  1
+	}
+	
+	public static function checkEmail($email) { // méthode permettant de vérifier si un pseudo est libre
+		
+		$db = Database::getInstance(); // on récupère la connexion à la BDD
+		$sql = "SELECT * FROM R_joueur WHERE email = :email";
+		$req = $db->prepare($sql); // on prépare la requête
+		$req->execute(array(":email" => $email)); // on remplace les variables dans la requête
+		
+		if($result = $req->fetch()) { // si un enregistrement existe en BDD, on retourne 0
+			return 0;
+		}
+		
+		return 1; // sinon : OK -> on retourne  1
+	}
+	
 	public static function check($slug_joueur, $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)
-- 
GitLab