diff --git a/app/controller/ClassementController.php b/app/controller/ClassementController.php index 87478040acc6e1a95f35fb2d2d7675359f42ddda..91d88fb26752cb01339b1e91da86672db353acc0 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 9960d987746d5b46bd7aebb7474db9838533e54f..d9ac38d6a2da4102579405b25cdffa6406ec03ed 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/model/Partie.php b/app/model/Partie.php index 044bdb113b730ed5a86ea6d75904a050f9c1387f..8401ccbcbba1a243abe272d504b91af81b1c5f0d 100644 --- a/app/model/Partie.php +++ b/app/model/Partie.php @@ -89,8 +89,8 @@ class Partie extends Model $sql1 = "INSERT INTO R_partie (jeu, date) VALUES (:id_jeu, :date);"; $sql2 = "SELECT id FROM R_partie WHERE jeu = :id_jeu AND date = :date;"; $sql3 = "SELECT score FROM R_joueur_jeu WHERE joueur = :id_joueur AND jeu = :id_jeu;"; - $sql4 = "INSERT INTO R_joueur_partie (partie, joueur, classement, score) - VALUES (:partie, :joueur,:classement, :score);"; + $sql4 = "INSERT INTO R_joueur_partie (partie, joueur, classement, score, score_partie) + VALUES (:partie, :joueur,:classement, :score, :score_partie);"; $sql5 = "UPDATE R_joueur_jeu SET score = :new_score WHERE joueur = :id_joueur AND jeu = :id_jeu;"; $sqlN = "INSERT INTO R_joueur_jeu (joueur, jeu, score) VALUES (:id_joueur, :id_jeu, :score);"; $stmt1 = $db->prepare($sql1); @@ -153,13 +153,19 @@ class Partie extends Model $diff_scores = ELO_scores($old_score, $scores, 32); $classement = self::calcul_classement($diff_scores); foreach ($joueurs as $k => $joueur) { + if ($jeu->type_scores == 'classement'){ + $score = null; + } + else{ + $score = $scores[$k]; + } if ($jeu->type == 'equipes') { foreach ($joueur as $kj => $j) { - // Insertion des infos de la partie (avec le score avant la partie et le classement interne à la partie) - // pour chaque joueur + // Insertion des infos de la partie (avec le score avant la partie et le classement interne à la partie + // et le score de la partie) pour chaque joueur par équipe if ($stmt4->execute(array(":partie" => $id_partie, ":joueur" => $j->slug, - ":classement" => $classement[$k], ":score" => $old_score_e[$k][$kj])) + ":classement" => $classement[$k], ":score" => $old_score_e[$k][$kj], ":score_partie" => $score)) ) { $newS = $old_score_e[$k][$kj] + $diff_scores[$k]; // On met à jour le score du joueur actuel dans sa relation avec le jeu @@ -172,11 +178,12 @@ class Partie extends Model return 2; } } else { - // Insertion des infos de la partie (avec le score avant la partie et le classement interne à la partie) - // pour chaque joueur + // Insertion des infos de la partie (avec le score avant la partie et le classement interne à la partie + // et le score de la partie) pour chaque joueur + if ($stmt4->execute(array(":partie" => $id_partie, ":joueur" => $joueur->slug, - ":classement" => $classement[$k], ":score" => $old_score[$k])) + ":classement" => $classement[$k], ":score" => $old_score[$k], ":score_partie" => $score)) ) { $newS = $old_score[$k] + $diff_scores[$k]; // On met à jour le score du joueur actuel dans sa relation avec le jeu diff --git a/app/view/Classement/display.html b/app/view/Classement/display.html index 76d40da206ccd60f2e18527477e48232f02e4be5..fc1f21e4858dd4b530c46fea313739529543ed7f 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> diff --git a/app/view/Partie/displayStep2.html b/app/view/Partie/displayStep2.html index 83f9e07cdf6d5b2297d5815754c338f4581bcd7a..43d5038d016a6f478d28b2b825a3d819c6ef5dee 100644 --- a/app/view/Partie/displayStep2.html +++ b/app/view/Partie/displayStep2.html @@ -11,8 +11,8 @@ <h3>Entrée des scores</h3> <div class="addjeu-form"> <form method="post" action="verifystep2"> - Jeu : <?php echo $jeuactuel->nom; ?><br/> - Joueurs : + <h4>Jeu : <?php echo $jeuactuel->nom; ?></h4> + <h4>Joueurs</h4> <ul> <?php foreach($this->listejactuel as $joueur){ ?> <li><?php echo $joueur->pseudo; ?> diff --git a/app/view/Partie/displayStepe2.html b/app/view/Partie/displayStepe2.html index ecf8b2a6d88efa9ee1c5fa265a6a67bd179f1686..2fa4968a6a2a57d927a8b15e83f6b61d1f067084 100644 --- a/app/view/Partie/displayStepe2.html +++ b/app/view/Partie/displayStepe2.html @@ -11,8 +11,7 @@ <h3>Entrée des scores</h3> <div class="addjeu-form"> <form method="post" action="verifystep2"> - Jeu : <?php echo $jeuactuel->nom; ?><br/> - Équipes :<br/> + <h4>Jeu : <?php echo $jeuactuel->nom; ?></h4> <?php foreach($this->equipes as $ke => $e) { ?> <h4>Équipe <?php echo $ke+1; ?> </h4> <ul> diff --git a/generate_base.sql b/generate_base.sql index 54a7b5ebcffe1da5a1f885fd36dbfb57ecddab2e..922979461979a6b26ca73bf8eaffd28210dd7626 100644 --- a/generate_base.sql +++ b/generate_base.sql @@ -43,6 +43,7 @@ CREATE TABLE R_joueur_partie ( joueur VARCHAR(255) REFERENCES R_joueur(slug), classement INT(11) NOT NULL, score INT(11) NOT NULL, + score_partie INT(11), PRIMARY KEY (joueur, partie) );