From 449d267bd1ab5dee493872ba083e95aff1fa1c69 Mon Sep 17 00:00:00 2001
From: Eliah REBSTOCK <eliah.rebstock@ensiie.fr>
Date: Sun, 8 May 2016 15:56:52 +0200
Subject: [PATCH] =?UTF-8?q?Ajout=20d'un=20algorithme=20de=20calcul=20du=20?=
 =?UTF-8?q?classement=20global=20inter=20jeux=20par=20moyenne=20et=20vue?=
 =?UTF-8?q?=20associ=C3=A9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 app/controller/ClassementController.php |  7 ++--
 app/model/Classement.php                | 44 ++++++++++++++++++-------
 app/view/Classement/display.html        | 33 +++++++++----------
 3 files changed, 53 insertions(+), 31 deletions(-)

diff --git a/app/controller/ClassementController.php b/app/controller/ClassementController.php
index 8747804..91d88fb 100644
--- a/app/controller/ClassementController.php
+++ b/app/controller/ClassementController.php
@@ -7,8 +7,11 @@ class ClassementController extends Controller { // classe de contrôleur pour l'
 		//explode du slug pour savoir si on veut le classement par jeu ou global
 		$parts = explode("/", $slug); // on sépare la requête selon les /, et on regarde ce qu'on connait comme ordres dedans
 		if($parts[0] == "jeu") { // && count($parts) == 2) { // on veut consulter le classement d'un jeu
-			$this->view->lejeu = $parts[1];
-			$this->view->classement = Classement::getFromSlug($parts[1]); // on utilise le modèle pour aller chercher en BDD le classement relatif au jeu qui nous intéresse
+			
+			header("Location:".BASE_URL."/jeu/".$parts[1]);
+			die();
+			//$this->view->lejeu = $parts[1];
+			//$this->view->classement = Classement::getFromSlug($parts[1]); // on utilise le modèle pour aller chercher en BDD le classement relatif au jeu qui nous intéresse
 		}
 		else { // if($parts[0] == "global") { // on veut consulter le classement d'un jeu (on en fait le cas général pour éviter les pages blanches)
 			$this->view->lejeu = "général";
diff --git a/app/model/Classement.php b/app/model/Classement.php
index 9960d98..d9ac38d 100644
--- a/app/model/Classement.php
+++ b/app/model/Classement.php
@@ -19,18 +19,40 @@ class Classement extends Model { // classe de modèle pour l'affichage de classe
 							'classement' => $ligne['classement']);
 		}
 		return $res;
-		//return array(array("pseudo"=>"debug","rank"=>$slug), array("pseudo"=>"exemple","rank"=>1), array("pseudo"=>"nestor","rank"=>42));
-	}
+    }
 	
-	public static function getGlobal() { // méthode permettant de récupérer le classement génaral de la BDD
-		//$db = Database::getInstance(); // on récupère la connexion à la BDD
-		//$sql = "SELECT * FROM classements WHERE jeu = :slug"; // on définit la requête qu'on enverra (on considère que le slug contient jeu/nomDuJeu pour le classement par jeu. Donc il faudrait encore faire un explode() sur le slug.
-		//$req = $db->prepare($sql); // on prépare la requête (c'est là que la mémthode __call() est utile dans la classe Database d'ailleurs)
-		//$req->setFetchMode(PDO::FETCH_CLASS, "Classement"); // 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)
-		//$req->execute(array(":slug" => $slug)); // on remplace le "::slug" par sa valeur dans la requête
-		//return $req->fetch(); // on retourne le premier (et normalement unique) résultat en BDD
-		return array(array("pseudo"=>"debug","rank"=>"gen"), array("pseudo"=>"exemple","rank"=>1), array("pseudo"=>"gimli","rank"=>2), array("pseudo"=>"phoenix","rank"=>3), array("pseudo"=>"table","rank"=>4), array("pseudo"=>"nestor","rank"=>42));
-	}
+	public static function getGlobal() {
+        $db = Database::getInstance(); // on récupère la connexion à la BDD
+        $sql = "SELECT * FROM R_joueur_jeu ORDER BY joueur";
+        $req = $db->prepare($sql);
+        $req->setFetchMode(PDO::FETCH_CLASS, "Classement");
+        $req->execute();
+        $res = array();
+        $scores = array();
+        $perso = array();
+        $j = 0;
+        while($ligne = $req->fetch(PDO::FETCH_ASSOC)) {
+            $perso[$j] = Profil::getFromSlug($ligne['joueur']);
+            $scoresj = array();
+            while($ligne['joueur'] == $perso[$j]->slug){
+                array_push($scoresj, $ligne['score']);
+                $ligne = $req->fetch(PDO::FETCH_ASSOC);
+            }
+            $scores[$j] = array_sum($scoresj)/count($scoresj);
+            $j++;
+        }
+        arsort($scores);
+        $i = 1;
+        foreach ($scores as $j => $score){
+            array_push($res, array('slug' => $perso[$j]->slug,
+							'pseudo' => $perso[$j]->pseudo,
+							'avatar' => $perso[$j]->avatar ? BASE_URL."/images/avatar/".$perso[$j]->slug.".jpg": BASE_URL."/images/profil_42.jpg",
+							'score' => $score,
+							'classement' => $i));
+            $i++;
+        }
+        return $res;
+    }
 
 	public static function getClassementJoueur($slug) {
 		$db = Database::getInstance(); // on récupère la connexion à la BDD
diff --git a/app/view/Classement/display.html b/app/view/Classement/display.html
index 76d40da..fc1f21e 100644
--- a/app/view/Classement/display.html
+++ b/app/view/Classement/display.html
@@ -4,25 +4,22 @@
 ?>
 
 	<article>
-		<h1>Page permettant d'afficher un classement, global ou pour un jeu donné.</h1>
-		<h2>On mettra ici le nom du jeu</h2>
-		<p>Et ici le tableau contenant le classement.</p>
-		<p>Mais pour ça on a besoin de savoir quelle est la structure de la base de données... Et on ne la connait pas encore !</p>
-		
-		<h2>Classement <?php echo $this->lejeu; ?></h2>
-		
-            <table class="classement-table">
-                <tr><th>N°</th><th colspan="2">Joueur</th><th>Score</th></tr>
-				<?php foreach($this->classement as $courant) : ?>
-                <tr>
-					<td><?php echo $courant['rank'];?></td>
-					<td><a href="<?php echo BASE_URL; ?>/profil/<?php echo $courant['pseudo'];?>"><img src="<?php echo BASE_URL; ?>/images/dummy_web_page.jpg" alt="Image de profil de <?php echo $courant['pseudo'];?>" class="classement-profil-img"></a></td>
-					<td><a href="<?php echo BASE_URL; ?>/profil/<?php echo $courant['pseudo'];?>"><?php echo $courant['pseudo'];?></a></td>
-					<td>3000000</td>
+		<h1>Classement global sur <em>Classements ludiques</em></h1>
+
+			<table class="classement-table">
+				<tr><th>N°</th><th colspan="2">Joueur</th><th>Score</th></tr>
+				<?php foreach($this->classement as $ligne) { ?>
+				<tr>
+					<td>"<?php echo $ligne['classement']; ?>"</td>
+					<td><a href="../profil/<?php echo $ligne['slug'];?>"><img src="<?php echo $ligne['avatar'];?>" alt="Image de profil de <?php echo $ligne['pseudo'];?>" class="classement-profil-img"></a></td>
+					<td><a href="../profil/<?php echo $ligne['slug'];?>"> <?php echo $ligne['pseudo']; ?> </a></td>
+					<td><?php echo $ligne['score'] ; ?></td>
 				</tr>
-				<?php endforeach;?>
-            </table>
-		
+				<?php
+                }
+                ?>
+			</table>
+
 		
 	</article>
 	
-- 
GitLab