From 14dca87d5545dbee9b814d1f5e2e0b813d56fe9b Mon Sep 17 00:00:00 2001
From: Table <romain.drouin@ensiie.fr>
Date: Thu, 5 May 2016 13:46:50 +0200
Subject: [PATCH] Creation du fichier Image.php + utilisation dans
 l'inscription + modifiction de la table r_joueur pour ajouter une colonne
 pour savoir si le joueur a un avatar

---
 Image.php                             | 36 +++++++++++++++++++++++++++
 app/controller/RegisterController.php | 25 ++++++-------------
 app/model/Register.php                |  5 ++--
 app/view/Register/displayForm.html    |  2 ++
 4 files changed, 49 insertions(+), 19 deletions(-)
 create mode 100644 Image.php

diff --git a/Image.php b/Image.php
new file mode 100644
index 0000000..276aaec
--- /dev/null
+++ b/Image.php
@@ -0,0 +1,36 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: table
+ * Date: 05/05/16
+ * Time: 11:34
+ */
+
+/**
+ * Creer un objet image a partir du fichier envoyé par l'utilisateur.
+ * @param array $file
+ *
+ * @return une image ou false si erreur.
+ */
+function getImage($file, $max_hauteur, $max_largeur) {
+    if ($file['error'] > 0) {
+        return array(5, null);
+    }
+    if (!($taille = getimagesize($file['tmp_name']))) {
+        return array(6, null);
+    }
+    if ($taille[0] > $max_largeur OR $taille[1] > $max_hauteur) {
+        return array(7, null); // mais on pourait la réduire
+    }
+    if ($avatar = imagecreatefromjpeg($file['tmp_name'])) {
+        return array(0, $avatar);
+    } elseif ($avatar = imagecreatefrompng($file['tmp_name'])) {
+        return array(0, $avatar);
+    } else {
+        return array(6, null);
+    }
+}
+
+function saveImage($image, $path) {
+    imagejpeg($image, $path);
+}
\ No newline at end of file
diff --git a/app/controller/RegisterController.php b/app/controller/RegisterController.php
index e8672e8..2085479 100644
--- a/app/controller/RegisterController.php
+++ b/app/controller/RegisterController.php
@@ -1,5 +1,5 @@
 <?php
-
+include(ROOT."/Image.php");
 class RegisterController extends Controller { // classe de contrôleur pour l'inscription au site
 
 	public function displayValid() { // la fonction d'affichage de réussite
@@ -21,28 +21,19 @@ class RegisterController extends Controller { // classe de contrôleur pour l'in
 		if($data['password'] == $data['password_bis']) {
 			$data['password'] = password_hash($data['password'], PASSWORD_DEFAULT);
 			$data['slug_joueur'] = self::slugify($_POST['pseudo']);
-
+			$data['avatar'] = 0;
 			$result = Register::check($data['slug_joueur'], $_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
 				if(isset($_FILES['avatar'])) {
-					if ($_FILES['avatar']['error'] > 0) {
+					list($err, $avatar) = getImage($_FILES['avatar'], 512, 512);
+					if ($err == 0) {
+						saveImage($avatar, ROOT."/www/images/avatar/".$data['slug_joueur'].".jpg");
+						$data['avatar'] = 1;
+					} else {
 						session_start(); // on démarre une session pour avoir accès aux variables superglobales de session
-						$_SESSION["registerErrCode"] = 5; // on stocke le code d'erreur
+						$_SESSION["registerErrCode"] = $err; // 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)
 						die();
-					} else {
-						mkdir(ROOT . "/www/images/avatar/", $recursive = true);
-						if ($avatar = imagecreatefromjpeg($_FILES['avatar']['tmp_name'])) {
-							imagejpeg($avatar, ROOT . "/www/images/avatar/" . $data['slug_joueur'] . ".jpg");
-						} elseif ($avatar = imagecreatefrompng($_FILES['avatar']['tmp_name'])) {
-							imagejpeg($avatar, ROOT . "/www/images/avatar/" . $data['slug_joueur'] . ".jpg");
-						} else {
-							session_start(); // on démarre une session pour avoir accès aux variables superglobales de session
-							$_SESSION["registerErrCode"] = 6; // 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)
-							die();
-
-						}
 					}
 				}
 				$success = Register::writedb($data);// on réalise l'inscription à l'aide d'une méthode de la classe Register
diff --git a/app/model/Register.php b/app/model/Register.php
index 146b069..8c4dd30 100644
--- a/app/model/Register.php
+++ b/app/model/Register.php
@@ -28,7 +28,7 @@ class Register extends Model { // classe de modèle pour l'inscription
 	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)";
+		$sql = "INSERT INTO R_joueur (slug, pseudo, password, nom, prenom, email, description, avatar) VALUES (:slug, :pseudo, :password, :nom, :prenom, :email, :description, :avatar)";
 		$req = $db->prepare($sql); // on prépare la requête
 		$result = $req->execute(array(":slug" 		=> $data['slug_joueur'],
 										":pseudo" 	=> $data['pseudo'],
@@ -36,7 +36,8 @@ class Register extends Model { // classe de modèle pour l'inscription
 										":nom" 		=> $data['nom'],
 									  	":prenom" 	=> $data['prenom'],
 									  	":email" 	=> $data['email'],
-									  	":description" => $data['description'])); // on remplace les variables dans la requête
+									  	":description" => $data['description'],
+										":avatar" => $data['avatar'])); // 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
index 5a6a250..1003656 100644
--- a/app/view/Register/displayForm.html
+++ b/app/view/Register/displayForm.html
@@ -19,6 +19,8 @@
 				$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
-- 
GitLab