From 18f108913432e261b50fd1fc011517ebf2ad5fef Mon Sep 17 00:00:00 2001
From: Table <romain.drouin@ensiie.fr>
Date: Fri, 6 May 2016 14:54:44 +0200
Subject: [PATCH] =?UTF-8?q?ajout=20de=20la=20page=20d'=C3=A9dition=20d'un?=
 =?UTF-8?q?=20profil?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 app/controller/ProfilController.php |  62 +++++++++++++++
 app/kernel/Router.php               |  18 +++++
 app/model/Profil.php                |  18 +++++
 app/view/Profil/display.html        |   5 ++
 app/view/Profil/displayEdit.html    | 116 ++++++++++++++++++++++++++++
 app/view/Profil/displayValid.html   |   8 ++
 6 files changed, 227 insertions(+)
 create mode 100644 app/view/Profil/displayEdit.html
 create mode 100644 app/view/Profil/displayValid.html

diff --git a/app/controller/ProfilController.php b/app/controller/ProfilController.php
index e5b24b9..57b635c 100644
--- a/app/controller/ProfilController.php
+++ b/app/controller/ProfilController.php
@@ -1,4 +1,5 @@
 <?php
+include(ROOT."/Image.php");
 
 class ProfilController extends Controller { // classe de contrôleur pour l'affichage des profils
 	public function display() {
@@ -12,4 +13,65 @@ class ProfilController extends Controller { // classe de contrôleur pour l'affi
 		$this->view->jeu_favori = $p;
 		$this->view->display(); // on affiche ce profil
 	}
+
+	public function displayEdit() {
+		$slug = $this->route["params"]["slug"]; // on récupère le "slug", en gros tout le reste de l'URL qui n'a pas encore servi
+		// je précise que dans ce cas précis, le $slug ne contient que le pseudo du joueur sosu forme normalisée. Donc je pourrais renommer la variable $slug_joueur...
+		$this->view->profil = Profil::getFromSlug($slug); // on utilise le modèle pour aller chercher en BDD le profil qui nous intéresse
+		$this->view->display(); // on affiche ce profil
+	}
+
+	public function displayValid() {
+		$slug = $this->route["params"]["slug"]; // on récupère le "slug", en gros tout le reste de l'URL qui n'a pas encore servi
+		// je précise que dans ce cas précis, le $slug ne contient que le pseudo du joueur sosu forme normalisée. Donc je pourrais renommer la variable $slug_joueur...
+		$this->view->profil = Profil::getFromSlug($slug); // on utilise le modèle pour aller chercher en BDD le profil qui nous intéresse
+		$this->view->display(); // on affiche ce profil
+	}
+	
+	public function verifyEdit() {
+		if (!isset($_POST['nom']) || !isset($_POST['prenom']) || !isset($_POST['email'])) { // si l'une des données manque, erreur
+			echo "<h1>Erreur : variables absentes</h1>";
+			die();
+		}
+		$slug = $this->route["params"]["slug"];
+		$profil = Profil::getFromSlug($slug);
+		if (isset($_POST['password']) && isset($_POST['password_bis']) && $_POST['password'] != "") {
+			if ($_POST['password'] == $_POST['password_bis']) {
+				$password = password_hash($_POST['password'], PASSWORD_DEFAULT);
+				Profil::setPassword($slug, $password);
+			} else {
+				session_start(); // on démarre une session pour avoir accès aux variables superglobales de session
+				$_SESSION["registerErrCode"] = 4; // on stocke le code d'erreur
+				header('Location:../edit'); // on redirige vers la page de formulaire (il faut faire un retour dans le dossier parent pour que ça fonctionne)
+				die();
+			}
+		}
+		$data = $_POST;
+		if(!isset($data['avatar_suppr'])) {
+			if(isset($_FILES['avatar'])) {
+				list($err, $avatar) = getImage($_FILES['avatar'], 512, 512);
+				if ($err == 0) {
+					unlink(ROOT . "/www/images/avatar/" . $slug . ".jpg");
+					saveImage($avatar, ROOT . "/www/images/avatar/" . $slug . ".jpg");
+					$data['avatar'] = 1;
+				} elseif ($err == 1) {
+					$data['avatar'] = $profil->avatar;
+				} else {
+					session_start(); // on démarre une session pour avoir accès aux variables superglobales de session
+					$_SESSION["registerErrCode"] = $err; // on stocke le code d'erreur
+					header('Location:../edit'); // on redirige vers la page de formulaire (il faut faire un retour dans le dossier parent pour que ça fonctionne)
+					die();
+				}
+			} else {
+				$data['avatar'] = $profil->avatar;
+			}
+		} else {
+			unlink(ROOT."/www/images/avatar/".$slug.".jpg");
+			$data['avatar'] = 0;
+		}
+		Profil::setAutre($slug, $data);
+		session_start();
+		$_SESSION['user'] = Connexion::getUser($slug);
+		header('Location:valid');
+	}
 }
diff --git a/app/kernel/Router.php b/app/kernel/Router.php
index 821d272..c624faf 100644
--- a/app/kernel/Router.php
+++ b/app/kernel/Router.php
@@ -50,7 +50,25 @@ class Router { // classe PHP permettant l'analyse de l'URL des requêtes
 				$result["action"] = "display"; 
 				$result["params"]["slug"] = $parts[1]; 
 			}
+
+			else if($parts[0] == "profil" && count($parts) == 3 && $parts[2] == "edit") {
+				$result["controller"] = "Profil";
+				$result["action"] = "displayEdit";
+				$result["params"]["slug"] = $parts[1];
+			}
 			
+			else if($parts[0] == "profil" && count($parts) == 4 && $parts[2] == "edit" && $parts[3] == "verify") {
+				$result["controller"] = "Profil";
+				$result["action"] = "verifyEdit";
+				$result["params"]["slug"] = $parts[1];
+			}
+
+			else if($parts[0] == "profil" && count($parts) == 4 && $parts[2] == "edit" && $parts[3] == "valid") {
+				$result["controller"] = "Profil";
+				$result["action"] = "displayValid";
+				$result["params"]["slug"] = $parts[1];
+			}
+
 			/*** consultation des classements ***/
 			else if($parts[0] == "classement" && count($parts) > 1) { // si classement général : 2 morceaux(classement/global), si classement spécifique : 3 morceaux (classement/jeu/nomDuJeu)
 				$result["controller"] = "Classement";
diff --git a/app/model/Profil.php b/app/model/Profil.php
index 521528a..e3b1bee 100644
--- a/app/model/Profil.php
+++ b/app/model/Profil.php
@@ -19,6 +19,24 @@ class Profil extends Model { // classe de modèle pour l'affichage de profils
 		$req->setFetchMode(PDO::FETCH_CLASS, "Profil");
 		return $req->fetchAll();
 	}
+
+	public static function setPassword($slug, $password) {
+		$db = Database::getInstance(); // idem à au-dessus
+		$sql = "UPDATE R_joueur SET password = :password WHERE slug = :slug";
+		$req = $db->prepare($sql);
+		$req->execute(array(':password' => $password, ':slug' => $slug));
+	}
+	
+	public static function setAutre($slug, $data) {
+		$db = Database::getInstance(); // idem à au-dessus
+		$sql = "UPDATE R_joueur SET nom = :nom, prenom = :prenom, email = :email, avatar = :avatar WHERE slug = :slug";
+		$req = $db->prepare($sql);
+		$req->execute(array(':nom' => $data['nom'],
+							':prenom' => $data['prenom'],
+							':email' => $data['email'],
+							':avatar' => $data['avatar'],
+							':slug' => $slug));
+	}
 }
 
 
diff --git a/app/view/Profil/display.html b/app/view/Profil/display.html
index 2f7b6e1..8bbf2e2 100644
--- a/app/view/Profil/display.html
+++ b/app/view/Profil/display.html
@@ -88,6 +88,11 @@
 				<div class="more-link"><a href="" >Plus...</a></div>
 			</div>
 		</div>
+		<?php
+		if(isset($_SESSION['connected']) && $_SESSION['connected'] == true && $_SESSION['user']->slug == $this->profil->slug) {
+		?>
+				<div class="more-link"><a href="<?php print $this->profil->slug;?>/edit" >Modifier le profil</a></div>
+		<?php } ?>
 
     </article>
 	
diff --git a/app/view/Profil/displayEdit.html b/app/view/Profil/displayEdit.html
new file mode 100644
index 0000000..e0075d9
--- /dev/null
+++ b/app/view/Profil/displayEdit.html
@@ -0,0 +1,116 @@
+<?php
+	session_start();
+
+	$page_title = "Édition du profil de ".$this->profil->pseudo;
+	include(ROOT."/app/view/Includes/header.include.html");
+?>
+
+<?php
+		if(isset($_SESSION['registerErrCode'])) { // si message d'erreur
+			$errCode = $_SESSION['registerErrCode'];
+			if($errCode == 2) { // on détermine le message
+				$errMsg = '<h3>Pseudo déjà utilisé !</h3>';
+} elseif($errCode == 3) {
+$errMsg = '<h3>Adresse e-mail déjà utilisée !</h3>';
+} elseif($errCode == 4) {
+$errMsg = '<h3>Mots de passe différants</h3>';
+} elseif($errCode == 5) {
+$errMsg = '<h3>Problème sur l\'avatar</h3>';
+} elseif($errCode == 6) {
+$errMsg = '<h3>Le fichier n\'est pas une image</h3>';
+} elseif($errCode == 7) {
+$errMsg = '<h3>L\'image est trop grande</h3>';
+}
+echo '<article class="msg-erreur">'.$errMsg.'</article>'; // on affiche le message
+unset($_SESSION['registerErrCode']); // on retire la variable de session
+}
+?>
+
+<?php if(isset($_SESSION['connected']) && $_SESSION['connected'] == true &&
+    isset($_SESSION['user']) && $_SESSION['user']->slug == $this->profil->slug) { ?>
+<article>
+    <h2>Édition du profil de <?php print $this->profil->pseudo; ?></h2>
+        <div class="inscription-form">
+			<form  method="post" action="edit/verify" enctype="multipart/form-data" onsubmit="return checkForm();">
+				<div class="form-line">
+					<div class="validation-container-left">
+						<label for="password">Mot de passe* : </label>
+						<input type="password" name="password" id="password" onchange="if(this.value != '') callAjax('checkPassword', this.value, this.id);" />
+					</div>
+					<div class="validation-container">
+						<span id="rsp_password" class="validation-container-content"></span>
+						<input type="checkbox" disabled name="valid_password" class="validation-checkbox" />
+					</div>
+				</div>
+				<div class="form-line">
+					<div class="validation-container-left">
+						<label for="password_bis">Vérification mdp* : </label>
+						<input type="password" name="password_bis" id="password_bis" onchange="if(this.value != '') callAjax('checkPasswordBis', this.value+'¤'+$.(\'#password\').value, this.id);" />
+					</div>
+					<div class="validation-container">
+						<span id="rsp_password_bis" class="validation-container-content"></span>
+						<input type="checkbox" disabled name="valid_password_bis" class="validation-checkbox" />
+					</div>
+				</div>
+				<div class="form-line">
+					<div class="validation-container-left">
+						<label for="nom">Nom* : </label>
+						<input type="text" required="" name="nom" id="nom" <?php print "value=\"".$this->profil->nom."\"";?> />
+					</div>
+					<div class="validation-container">
+						<span id="rsp_nom" class="validation-container-content"></span>
+						<input type="checkbox" disabled name="valid_nom" class="validation-checkbox" />
+					</div>
+				</div>
+				<div class="form-line">
+					<div class="validation-container-left">
+						<label for="prenom">Prénom* : </label>
+						<input type="text" required="" name="prenom" id="prenom" <?php print "value=\"".$this->profil->prenom."\"";?>/>
+					</div>
+					<div class="validation-container">
+						<span id="rsp_prenom" class="validation-container-content"></span>
+						<input type="checkbox" disabled name="valid_prenom" class="validation-checkbox" />
+					</div>
+				</div>
+				<div class="form-line">
+					<div class="validation-container-left">
+						<label for="email">Adresse e-mail* : </label>
+						<input type="email" required="" name="email" id="email" <?php print "value=\"".$this->profil->email."\"";?> onchange="if(this.value != '') callAjax('checkEmail', this.value, this.id);" />
+					</div>
+					<div class="validation-container">
+						<span id="rsp_email" class="validation-container-content"></span>
+						<input type="checkbox" disabled name="valid_email" class="validation-checkbox" />
+					</div>
+				</div>
+				<div class="form-line">
+					<div class="validation-container-left">
+						<label for="description">Une description de vous : </label>
+						<textarea name="description" id="description" ><?php print $this->profil->description;?></textarea>
+					</div>
+				</div>
+				<div class="form-line">
+					<div class="validation-container-left">
+						<label for="avatar">Avatar</label>
+						<input type="file" name="avatar" id="avatar" />
+					</div>
+				</div>
+				<div class="form-line">
+					<div class="validation-container-left">
+						<label for="avatar_suppr">Supprimer l'avatar : </label>
+						<input type="checkbox" name="avatar_suppr" id="avatar_suppr" value="1"/>
+					</div>
+				</div>
+				<div class="submit">
+					<input type="reset" name="reset" value="Réinitialiser">
+					<input type="submit" name="submit" value="Modifier">
+				</div>
+			</form>
+        </div>
+    </article>
+    <?php } else {?>
+        <article class="msg-erreur">Vous n'êtes pas <?php print $this->profil->pseudo; ?></article>
+    <?php } ?>
+
+
+
+<?php include(ROOT."/app/view/Includes/footer.include.html"); ?>
\ No newline at end of file
diff --git a/app/view/Profil/displayValid.html b/app/view/Profil/displayValid.html
new file mode 100644
index 0000000..3e111d3
--- /dev/null
+++ b/app/view/Profil/displayValid.html
@@ -0,0 +1,8 @@
+<?php 
+	$page_title = "Inscription réussie"; 
+	include(ROOT."/app/view/Includes/header.include.html");
+?>
+
+	<article class="msg-valide"><h2>Modifiction Réussi</h2></article>
+	
+<?php include(ROOT."/app/view/Includes/footer.include.html"); ?>
-- 
GitLab