From 98f52455dc72a1bee8c6cb7bbeb8730eac910c88 Mon Sep 17 00:00:00 2001
From: vbochet <vbochet@gmail.com>
Date: Tue, 12 Apr 2016 15:24:32 +0200
Subject: [PATCH] =?UTF-8?q?Ajout=20de=20fichiers=20et=20modification=20de?=
 =?UTF-8?q?=20la=20classe=20Jeu=20pour=20impl=C3=A9menter=20le=20formulair?=
 =?UTF-8?q?e=20de=20demande=20d'ajout=20de=20jeu.=20Mise=20=C3=A0=20jour?=
 =?UTF-8?q?=20de=20la=20page=20d'accueil.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 app/controller/JeuController.php      | 35 ++++++++++++++++++++++++++-
 app/kernel/Router.php                 | 15 ++++++++++++
 app/model/Jeu.php                     | 29 ++++++++++++++++++++--
 app/view/index/display.html           |  1 +
 app/view/jeu/displayFormAdd.html      | 28 +++++++++++++++++++++
 app/view/jeu/displayRequestValid.html | 17 +++++++++++++
 6 files changed, 122 insertions(+), 3 deletions(-)
 create mode 100644 app/view/jeu/displayFormAdd.html
 create mode 100644 app/view/jeu/displayRequestValid.html

diff --git a/app/controller/JeuController.php b/app/controller/JeuController.php
index 40f18a3..4aa041b 100644
--- a/app/controller/JeuController.php
+++ b/app/controller/JeuController.php
@@ -6,9 +6,42 @@ class JeuController extends Controller {
 		$this->view->jeu = Jeu::getFromSlug($slug);
 		$this->view->display();
 	}
-	
+
 	public function displayListe() {
 		$this->view->liste = Jeu::getList();
 		$this->view->display();
 	}
+
+	public function displayFormAdd() {
+		$this->view->display();
+	}
+
+	public function addRequest() {
+		if(!isset($_POST['nom']) || !isset($_POST['description'])) { // si l'une des données manque, erreur
+			//appeler une fonction d'erreur
+			echo "<h1>Erreur : variables absentes</h1>";
+			die();
+		}
+
+        $data = $_POST;
+        $data['slug_jeu'] = self::slugify($_POST['nom']);
+
+        $result = Jeu::checkExists($data['slug_jeu']); // vérifie si le jeu n'est pas encore dans la BDD
+
+        if($result == 0) { // connexion valide
+            Jeu::addRequest($data['nom'], $data['description'], $data['slug_jeu'], 0);// on ajoute le jeu à la BDD avec
+            header('Location:requestvalid'); // on redirige vers la  page OK
+        }
+        else {
+            session_start(); // on démarre une session pour avoir accès aux variables superglobales de session
+            $_SESSION["addRequestErrCode"] = $result; // on stocke le code d'erreur
+            header('Location:../addjeu'); // on redirige vers la page de formulaire (il faut faire un retour dans le dossier parent pour que ça fonctionne)
+        }
+
+		//$this->view->display();
+	}
+
+    public function displayRequestValid() { // la fonction d'affichage de réussite
+        $this->view->display(); // on affiche la page avec le message de réussite
+    }
 }
diff --git a/app/kernel/Router.php b/app/kernel/Router.php
index f0375d5..46e5b23 100644
--- a/app/kernel/Router.php
+++ b/app/kernel/Router.php
@@ -28,6 +28,21 @@ class Router { // classe PHP permettant l'analyse de l'URL des requêtes
 				$result["action"] = "displayListe"; // on veut afficher la liste des jeux, donc on donne l'action "displayListe"
 				// il n'y a pas de paramètres attendus, on n'affecte pas $result["params"]
 			}
+			else if($parts[0] == "addjeu" && count($parts) == 1) { // on veut afficher le formulaire d'ajout(url/addjeu)
+				$result["controller"] = "Jeu";
+				$result["action"] = "displayFormAdd"; // on veut afficher le formulaire
+				// il n'y a pas de paramètres attendus, on n'affecte pas $result["params"]
+			}
+			else if($parts[0] == "addjeu" && count($parts) == 2 && $parts[1] == "addrequest") { // on veut enregistrer la demande d'ajout (addjeu/addrequest)
+				$result["controller"] = "Jeu"; // le contrôleur à instancier sera "JeuController", on met donc "Jeu" dans la variable de résultat
+				$result["action"] = "addRequest"; // on veut ajouter le jeu à la BDD, donc on donne l'action "addRequest"
+				// il n'y a pas de paramètres attendus, on n'affecte pas $result["params"]
+			}
+			else if($parts[0] == "addjeu" && count($parts) == 2 && $parts[1] == "requestvalid") { // l'enregistrement de la demande a été effectué, on affiche un message de confirmation (addjeu/requestvalid)
+				$result["controller"] = "Jeu";
+				$result["action"] = "displayRequestValid";
+				// il n'y a pas de paramètres attendus, on n'affecte pas $result["params"]
+			}
 			
 			/*** consultation des profils ***/
 			else if($parts[0] == "profil" && count($parts) == 2) { // consultation d'un profil : 2 morceaux (profil/pseudoDeLaPersonne)
diff --git a/app/model/Jeu.php b/app/model/Jeu.php
index e637fd6..0e85292 100644
--- a/app/model/Jeu.php
+++ b/app/model/Jeu.php
@@ -5,7 +5,7 @@ class Jeu extends Model {
 
    public static function getFromSlug($slug_jeu) {
       $db = Database::getInstance();
-      $sql = "SELECT * FROM jeux WHERE slug = :slug";
+      $sql = "SELECT * FROM R_jeu WHERE slug = :slug";
       $stmt = $db->prepare($sql);
       $stmt->setFetchMode(PDO::FETCH_CLASS, "Jeu"); // règle le type dans lequel on doit mettre les données (PDO va chercher les attributs de la classe de même nom que ses colonnes de BDD et mettre dedans les valeurs correspondantes)
       $stmt->execute(array(":slug" => $slug_jeu));
@@ -14,13 +14,38 @@ class Jeu extends Model {
 
    public static function getList() {
       $db = Database::getInstance();
-      $sql = "SELECT * FROM jeux";
+      $sql = "SELECT * FROM R_jeu";
       $stmt = $db->query($sql);
       $stmt->setFetchMode(PDO::FETCH_CLASS, "Jeu");
       return $stmt->fetchAll();
 
    }
 
+   public static function checkExists($slug_jeu) { // méthode permettant de vérifier si un jeu existe dans la BDD
+      $db = Database::getInstance(); // on récupère la connexion à la BDD
+      $sql = "SELECT * FROM R_jeu WHERE slug = :slug";
+      $req = $db->prepare($sql); // on prépare la requête
+      $req->execute(array(":slug" => $slug_jeu)); // on remplace les variables dans la requête
+
+      if($result = $req->fetch()) { // on récupère l'enregistrement, s'il existe
+         return 1;
+      }
+
+      return 0; // on aurait pu mettre deux return (un dans le if et un ici), mais bon...
+   }
+
+   public static function addRequest($nom_jeu, $description, $slug_jeu, $est_valide) {
+      $db = Database::getInstance();
+      $sql = "INSERT INTO R_jeu (nom, description, slug, est_valide) VALUES (:nom, :description, :slug, :est_valide);";
+      $stmt = $db->prepare($sql);
+      if($stmt->execute(array(":nom" => $nom_jeu, ":description" => $description, ":slug" => $slug_jeu, ":est_valide" => $est_valide))) {
+          //ok
+      }
+       else {
+           echo "Arise, ça marche pas..."; die();
+       }
+   }
+
 }
 
 
diff --git a/app/view/index/display.html b/app/view/index/display.html
index 0d84b5a..435a4c5 100644
--- a/app/view/index/display.html
+++ b/app/view/index/display.html
@@ -17,6 +17,7 @@
 		<li><a href="jeu/<?php echo $jeu->slug;?>"><?php echo $jeu->nom;?></a></li>
 		<?php endforeach;?>
 	</ul>
+	<h2 style="margin-bottom:-2px;"><a href="addjeu">Demander à ajouter un jeu</a></h2>
 	
 	<h2 style="margin-bottom:-4px;">Liste de profils</h2>
 	<em>(modifs à venir lorsqu'on aura défini la BDD)</em>
diff --git a/app/view/jeu/displayFormAdd.html b/app/view/jeu/displayFormAdd.html
new file mode 100644
index 0000000..632feba
--- /dev/null
+++ b/app/view/jeu/displayFormAdd.html
@@ -0,0 +1,28 @@
+<?php session_start(); ?>
+
+<!DOCTYPE html>
+<html>
+<head>
+   <meta charset="utf-8"/>
+   <title>Formulaire de demande d'ajout de jeu</title>
+</head>
+<body>
+   <header>
+      <h1>Formulaire de demande d'ajout de jeu</h1>
+   </header>
+   <?php if(isset($_SESSION['addRequestErrCode'])) {
+   echo '<h3 style="color:red;">Ce jeu est déjà dans la base !</h3>';
+   unset($_SESSION['addRequestErrCode']);
+   } ?>
+   <form method="post" action="addjeu/addrequest">
+        <label for="nom">Nom du jeu :</label> <input type="text" name="nom" required="" id="nom" /> <br/>
+        <label for="description">Description :</label> <textarea name="description" id="description" ></textarea> <br/>
+        <input type="submit" />
+   </form>
+   <footer>
+      <p>Pied de page...</p>
+   </footer>
+</body>
+
+
+</html>
diff --git a/app/view/jeu/displayRequestValid.html b/app/view/jeu/displayRequestValid.html
new file mode 100644
index 0000000..bb9f31d
--- /dev/null
+++ b/app/view/jeu/displayRequestValid.html
@@ -0,0 +1,17 @@
+<?php session_start(); ?>
+<!DOCTYPE html>
+<html>
+<head>
+	<meta charset="utf-8"/>
+	<title>Demande enregistrée</title>
+</head>
+<body>
+	<header>
+		<h1 style="color:green;">Votre demande a été enregistrée !</h1>
+	</header>
+	<p>Elle sera traitée par les administrateurs dès que possible. :)</p>
+	<footer>
+		<p>Le pied de page</p>
+	</footer>
+</body>
+</html>
-- 
GitLab