Commit 35c36e05 authored by Johann Bournazel's avatar Johann Bournazel
Browse files

Page de statistiques

parent c8937986
......@@ -40,10 +40,10 @@ class Routeur {
$_SESSION["Auth"] = true;
}
//Si l'utilisateur c'est déjà connecté sur le site
//Si l'utilisateur s'est déjà connecté sur le site
if (isset($_SESSION['Auth'])) {
if (isset($_POST['stats'])) {
$this->ControleurStatistiques->statistiques();
if (isset($_GET['statistiques'])) {
$this->ControleurStatistiques->afficheStatistiques();
} else if (isset($_GET["annulerCoup"])) {
$this->ControleurJeu->annulerCoup();
} else if (isset($_GET["actX"]) && isset($_GET["actY"]) && isset($_GET["actLierX"]) && isset($_GET["actLierY"])) {
......
<?php
require_once PATH_VUES . "/VueAuthentification.php";
require_once PATH_MODELES . "/ModeleAuthentification.php";
require_once PATH_MODELES . "/ModeleStatistiques.php";
require_once PATH_VUES . "/VueStatistiques.php";
class ControleurStatistiques
{
......@@ -9,17 +9,21 @@ class ControleurStatistiques
function __construct()
{
$this->vue = new VueAuthentification();
$this->vue = new VueStatistiques();
try{
$this->modele = new ModeleAuthentification();
$this->modele = new ModeleStatistiques();
}catch(MonException $e){
$e->afficher();
echo $e->afficher();
}
}
function statistiques()
function afficheStatistiques()
{
$ratioJoueurActuel = $this->modele->getRatioParties($_SESSION['pseudo']);
$leaderboardRatios = $this->modele->getLeaderboardRatio();
$leaderboardPartiesGagnees = $this->modele->getLeaderboardPartiesGagnees();
$this->vue->afficheStatistiques($ratioJoueurActuel, $leaderboardRatios, $leaderboardPartiesGagnees);
}
......
<?php
// Classe Modele qui permet de gérer les données liés à l'authentification et l'in,scription d'un utilisateur.
class ModeleStatistiques {
//On déclare une variable allant définir notre connexion à la base de données.
private $connexion;
// Constructeur de la classe
public function __construct() {
try {
//On définit les attributs permettant la connexion à notre base de données.
$chaine = "mysql:host=" . HOST . ";dbname=" . BD;
//On déclare un nouvel objet qui représente une connexion entre PHP et un serveur de base de données.
$this->connexion = new PDO($chaine, LOGIN, PASSWORD);
//On configure un attribut du gestionnaire de base de données. Ici on souhaite que lorsque l'on rencontre une erreur, ça soit une exception qui soit levée.
$this->connexion->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
throw new ConnexionException("Problème de connexion à la base de donnée. Veuillez vérifier votre configuration.");
}
}
//Méthode qui permet de se deconnecter de la base de données.
public function deconnexion() {
//On donne la valeur null à l'attibut connexion afin de se déconnecter.
$this->connexion = null;
}
//Méthode qui permet de récupérer le ratio des parties gagnées sur le nombre de parties jouées concernant le joueur actuel
public function getRatioParties($pseudo) {
try {
//On regarde d'abord si ce pseudo existe.
$statement = $this->connexion->prepare("select partieGagnee from parties where pseudo=?;");
$statement->bindParam(1, $pseudo);
$statement->execute();
$result = $statement->fetchAll(PDO::FETCH_ASSOC);
//Si le joueur a fais au moins une partie
if (count($result) > 1) {
$nbPartiesGagnees = 0;
foreach($result as $valeur){
$nbPartiesGagnees += $valeur['partieGagnee'];
}
return array("nbTotalParties"=>sizeof($result), "nbTotalPartiesGagnees"=>$nbPartiesGagnees);
} else {
return array("nbTotalParties"=>0, "nbTotalPartiesGagnees"=>0);
}
} catch (PDOException $e) {
$this->deconnexion();
throw new TableAccesException("Problème avec la table joueurs.");
}
}
public function getLeaderboardRatio() {
try {
//On regarde d'abord si ce pseudo existe.
$statement = $this->connexion->prepare("SELECT pseudo,sum(partieGagnee) as totalPartiesGagnees, count(pseudo) as totalPartiesJouees, sum(partieGagnee)/count(pseudo) as ratio FROM parties group by pseudo order by ratio desc LIMIT 3;");
$statement->execute();
$result = $statement->fetchAll(PDO::FETCH_ASSOC);
//Si des parties ont étés jouées.
if (count($result) > 1) {
if (count($result) > 1) {
for($i=0;$i<=3;$i++){
if($result[$i]['pseudo']===NULL){
$result[$i]['pseudo'] = "Personne à cette position";
$result[$i]['totalPartiesGagnees'] = "Inconnu";
$result[$i]['ratio'] = "Inconnu";
}
}
return $result;
} else {
echo "aucune partie jouée";
return false;
}
return $result;
} else {
echo "aucune partie jouée";
return false;
}
} catch (PDOException $e) {
$this->deconnexion();
throw new TableAccesException("Problème avec la table joueurs.");
}
}
public function getLeaderboardPartiesGagnees() {
try {
//On regarde d'abord si ce pseudo existe.
$statement = $this->connexion->prepare("SELECT pseudo,sum(partieGagnee) as totalPartiesGagnees, count(pseudo) as totalPartiesJouees, sum(partieGagnee)/count(pseudo) as ratio FROM parties group by pseudo order by totalPartiesGagnees desc LIMIT 3;");
$statement->execute();
$result = $statement->fetchAll(PDO::FETCH_ASSOC);
//Si des parties ont étés jouées.
if (count($result) > 1) {
for($i=0;$i<=3;$i++){
if($result[$i]['pseudo']===NULL){
$result[$i]['pseudo'] = "Personne à cette position";
$result[$i]['totalPartiesGagnees'] = "Inconnu";
$result[$i]['ratio'] = "Inconnu";
}
}
return $result;
} else {
echo "aucune partie jouée";
return false;
}
} catch (PDOException $e) {
$this->deconnexion();
throw new TableAccesException("Problème avec la table joueurs.");
}
}
}
?>
......@@ -18,7 +18,7 @@ class VueJeu {
<ul class="bg-blue">
<li><a href="index.php">Accueil</a></li>
<li><a href="index.php?page=profil">Mon profil</a></li>
<li><a href="index.php?page=leaderboard">Leaderboard</a></li>
<li><a href="index.php?statistiques">Statistiques</a></li>
<li style="float:right"><a href="index.php?deco">Déconnexion</a></li>
</ul>
</nav>
......@@ -33,11 +33,11 @@ class VueJeu {
echo '</br>';
echo "<div class='flex-container actions-container'>";
echo "<a href='index.php?annulerCoup' class='link-button mg-top-10'><img src='vues/css/back.png' alt='BackImage' class='icon'> Annuler le dernier coup</a>";
echo "<a href='index.php?replay' class='link-button mg-top-10'><img src='vues/css/restart.png' alt='BackImage' class='icon'> Reprendre cette partie</a>";
echo "<a href='index.php?replay' class='link-button mg-top-10'><img src='vues/css/restart.png' alt='BackImage' class='icon'> Recommencer cette partie</a>";
echo "</div>";
echo "<div class='flex-container actions-container'>";
echo "<a href='index.php?annulerCoup' class='link-button mg-top-10'><img src='vues/css/tick.png' alt='BackImage' class='icon'> Résoudre le jeu</a>";
echo "<a href='index.php?replay' class='link-button mg-top-10'><img src='vues/css/restart.png' alt='BackImage' class='icon'> Relancer une partie</a>";
echo "<a href='index.php?annulerCoup' class='link-button mg-top-10'><img src='vues/css/tick.png' alt='BackImage' class='icon'> Vérifier</a>";
echo "<a href='index.php?replay' class='link-button mg-top-10'><img src='vues/css/restart.png' alt='BackImage' class='icon'> Relancer une nouvelle partie</a>";
echo "</div>"
?>
<br>
......
<?php
//Classe Vue permettant d'afficher les pages.
class VueStatistiques{
//Affiche une page d'authentification.
function afficheStatistiques($ratioJoueurActuel, $leaderboard, $leaderboardPartiesGagnees) {
header("Content-type: text/html; charset=utf-8");
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Jeu du Bridges</title>
<link href="vues/css/master.css" rel="stylesheet" type="text/css">
</head>
<body>
<nav>
<ul class="bg-blue">
<li><a href="index.php">Accueil</a></li>
<li><a href="index.php?page=profil">Mon profil</a></li>
<li><a href="index.php?statistiques">Statistiques</a></li>
<li style="float:right"><a href="index.php?deco">Déconnexion</a></li>
</ul>
</nav>
<br>
<h1>Statistiques</h1><br>
<?php
echo "Vous avez gagnées ".$ratioJoueurActuel['nbTotalPartiesGagnees']." parties sur un total de ".$ratioJoueurActuel["nbTotalParties"]." parties jouées.";
echo '<br/><br/>';
echo "Leaderbord des Ratios:".'<br/>';
echo '<div class="flex-container leaderboard">';
echo '<table><tr><th>Rang</th><th>Pseudo</th><th>Ratio</th></tr>';
echo '<tr><td>1</td><td>'.$leaderboard[0]['pseudo'].'</td><td>'.$leaderboard[0]['ratio'].'</td></tr>';
echo '<tr><td>2</td><td>'.$leaderboard[1]['pseudo'].'</td><td>'.$leaderboard[1]['ratio'].'</td></tr>';
echo '<tr><td>3</td><td>'.$leaderboard[2]['pseudo'].'</td><td>'.$leaderboard[2]['ratio'].'</td></tr>';
echo '</table></div>';
echo '<br/>';
echo "Leaderbord des Parties gagnées:".'<br/>';
echo '<div class="flex-container leaderboard"><table>';
echo '<tr><th>Rang</th><th>Pseudo</th><th>Total Parties gagnées</th><th>Total Parties perdues</th><th>Ratio</th></tr>';
if(is_numeric($leaderboardPartiesGagnees[0]['totalPartiesGagnees'])){
}else{
"Inconnu";
}
echo '<tr><td>1</td><td>'.$leaderboardPartiesGagnees[0]['pseudo'].'</td><td>'.$leaderboardPartiesGagnees[0]['totalPartiesGagnees'].'</td><td>'.(($leaderboardPartiesGagnees[0]['totalPartiesJouees'])-($leaderboardPartiesGagnees[0]['totalPartiesGagnees'])).'</td><td>'.$leaderboardPartiesGagnees[0]['ratio'].'</td></tr>';
echo '<tr><td>2</td><td>'.$leaderboardPartiesGagnees[1]['pseudo'].'</td><td>'.$leaderboardPartiesGagnees[1]['totalPartiesGagnees'].'</td><td>'.(($leaderboardPartiesGagnees[1]['totalPartiesJouees'])-($leaderboardPartiesGagnees[1]['totalPartiesGagnees'])).'</td><td>'.$leaderboardPartiesGagnees[1]['ratio'].'</td></tr>';
echo '<tr><td>3</td><td>'.$leaderboardPartiesGagnees[2]['pseudo'].'</td><td>'.$leaderboardPartiesGagnees[2]['totalPartiesGagnees'].'</td><td>'.(($leaderboardPartiesGagnees[2]['totalPartiesJouees'])-($leaderboardPartiesGagnees[2]['totalPartiesGagnees'])).'</td><td>'.$leaderboardPartiesGagnees[2]['ratio'].'</td></tr>';
echo '</table></div>';
?>
<footer>
<p>Créé par Johann BOURNAZEL et Étienne LÉVICRAIN</p>
</footer>
</body>
</html>
<?php
}
}
?>
\ No newline at end of file
......@@ -169,7 +169,7 @@ input[type='submit']:hover{
footer {
height: 50px;
width: 100%;
background: lightslategrey;
background: #7499bf;
position: fixed;
bottom:0;
padding-top: 15px;
......@@ -302,3 +302,26 @@ body {
.actions-container > a{
width: 48%;
}
.leaderboard{
max-width: 700px;
color: #474f57;
}
.leaderboard table{
border-collapse:collapse;
}
.leaderboard tr:nth-child(2) {
background-color: #bdb629;
}
.leaderboard tr:nth-child(3){
background-color: #afbcc4;
}
.leaderboard tr:nth-child(4){
background-color: rgba(163, 120, 27, 0.74);
}
.leaderboard th{
}
.leaderboard tr:first-of-type{
background-color: #727cf533;
}
\ No newline at end of file
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment