Commit b506ea66 authored by Johann Bournazel's avatar Johann Bournazel
Browse files

Ajout de documentation

Correction du nombre de parties perdues lorsque personne n'est à cette position
Correction mineure du css
parent 79ee6bf9
......@@ -26,18 +26,27 @@ class Routeur {
//Si l'utilisateur s'est déjà connecté sur le site
if (isset($_SESSION['Auth'])) {
/* ----- Gestion de ***** ----- */
/* ----- Gestion de la déconnexion ----- */
if (isset($_GET["replay"])) {
if(isset($_GET["deco"])) {
//On supprime la session
session_destroy();
//On actualise la page.
header('Location: index.php');
}
/* ----- Gestion de reset d'une partie et de l'abandon d'une partie ----- */
//Si l'utilisateur veut remettre à zéro ces ponts
if (isset($_GET["replay"])) {
unset($_SESSION["villes"]);
unset($_SESSION["villes_old"]);
header('Location: index.php');
} else if (isset($_GET["deco"])) {
session_destroy();
header('Location: index.php');
} else if (isset($_GET["newGame"])) {
//Sinon, si il abandonne
} else if (isset($_GET["abandonne"])) {
unset($_SESSION["villes"]);
unset($_SESSION["villes_old"]);
//On définit que l'état de la dernière partie est "abandonné".
$_SESSION["etatDernierePartie"] = "abandonne";
header('Location: index.php?statistiques');
}
......@@ -56,10 +65,14 @@ class Routeur {
/* ----- Gestion des pages ----- */
//Si la page statistiques est demandé
if (isset($_GET['statistiques'])) {
//On regarde si c'est parcequ'il a terminé une partie
if (isset($_SESSION["etatDernierePartie"])) {
//On affiche les statistiques avec l'état de sa dernière partie.
$this->ControleurStatistiques->afficheStatistiques($_SESSION["etatDernierePartie"]);
} else {
//On affiche les statistiques sans afficher l'état de sa dernière partie car l'utilisateur a cliqué manuellement sur le bouton statistiques.
$this->ControleurStatistiques->afficheStatistiques(null);
}
}
......@@ -75,25 +88,36 @@ class Routeur {
$this->ControleurJeu->jeu($_GET["actX"], $_GET["actY"], $_GET["actMauvX"], $_GET["actMauvY"]);
}
/* ----- Gestion des authentifications ----- */
} else {
//Si l'utilisateur soumet un formulaire de connexion complet
if (isset($_POST['pseudoConnexion']) && isset($_POST['motDePasseConnexion'])) {
//Si les identifiants indiqués sont corrects
if ($this->ControleurAuthentification->verifieIdentifiantsConnexion($_POST['pseudoConnexion'], $_POST['motDePasseConnexion'])) {
//On actualise la page
header('Location: index.php');
} else {
//On lui indique que les identifiants indiqués sont incorrects
$this->ControleurAuthentification->mauvaisIdentifiantsConnexion();
}
} else {
if (isset($_POST['pseudoInscription']) && isset($_POST['motDePasseInscription'])) {
if ($this->ControleurAuthentification->verifieIdentifiantsInscription($_POST['pseudoInscription'], $_POST['motDePasseInscription']) == true) {
//Si l'utilisateur soumet un formulaire de d'inscription complet
if (isset($_POST['pseudoInscription']) && isset($_POST['motDePasseInscription'])) {
//Si les identifiants indiqués sont corrects
if ($this->ControleurAuthentification->verifieIdentifiantsInscription($_POST['pseudoInscription'], $_POST['motDePasseInscription'])) {
header('Location: index.php');
} else {
$this->ControleurAuthentification->mauvaisIdentifiantsInscription();
//On lui indique que les identifiants indiqués sont incorrects
$this->ControleurAuthentification->mauvaisIdentifiantsInscription();
}
} else {
if (!isset($_GET['inscription'])) {
//Si l'utilisateur ne demande pas une inscrption
if (isset($_GET['inscription'])) {
//On lui affiche la page de connexion
$this->ControleurAuthentification->demandeAuthentification();
} else {
//Sinon on lui affiche la page d'inscription
$this->ControleurAuthentification->demandeInscription();
}
}
......
......@@ -76,8 +76,6 @@ class ControleurAuthentification{
$_SESSION['Auth'] = true;
//On garde en session son pseudo.
$_SESSION['pseudo'] = $pseudo;
//On recharge la page.
header('Location: index.php');
//La vérification a réussie.
return true;
} else {
......@@ -103,8 +101,6 @@ class ControleurAuthentification{
//On le connecte et on stocke en session ces infos.
$_SESSION['Auth'] = true;
$_SESSION['pseudo'] = $pseudo;
//On recharge la page.
header('Location: index.php');
//L'inscription a réussie.
return true;
} else {
......
......@@ -2,40 +2,55 @@
require_once PATH_MODELES . "/ModeleStatistiques.php";
require_once PATH_VUES . "/VueStatistiques.php";
/**
* Classe ControleurStatistiques permettant de gérer tout ce qui concerne les statistiques
*
*/
class ControleurStatistiques
{
private $vue;
//On définit les variable qui vont correspondre à la vue et au modèle.
private $vue;
private $modele;
/**
* Contructeur de ControleurStatistiques
*/
function __construct()
{
//On instancie notre vue et notre modèle.
$this->vue = new VueStatistiques();
try{
$this->modele = new ModeleStatistiques();
}catch(MonException $e){
echo $e->afficher();
}
}
/**
* Cette méthode permet d'afficher la page de statistiques
*
* @param $etatDernierePartie String qui indique l'état de la dernière partie. (null si le joueur s'est rendu sur la page manuellement)
*/
function afficheStatistiques($etatDernierePartie)
{
//Si la personne a perdu ou a abandonnée
if($etatDernierePartie=="perdu" || $etatDernierePartie=="abandonne"){
//Alors on ajoute sa défaite dans la table parties de la base de données.
$this->modele->ajouteNouvellePartiePerdue($_SESSION['pseudo']);
}else if($etatDernierePartie=="gagne"){
//Si on a gagné
//Alors on ajoute sa victoire dans la table parties de la base de données.
$this->modele->ajouteNouvellePartieGagne($_SESSION['pseudo']);
}
//On récupère les statistiques du joueur actuel.
$ratioJoueurActuel = $this->modele->getRatioParties($_SESSION['pseudo']);
//On récupère les statistiques des 3 meilleurs joueurs par ratio.
$leaderboardRatios = $this->modele->getLeaderboardRatio();
//On récupère les statistiques des 3 meilleurs joueurs par nombre de parties gagnées.
$leaderboardPartiesGagnees = $this->modele->getLeaderboardPartiesGagnees();
//On affiche la page de statistiques avec les informations que l'on vient de récupérer.
$this->vue->afficheStatistiques($etatDernierePartie, $ratioJoueurActuel, $leaderboardRatios, $leaderboardPartiesGagnees);
//On supprime la session qui contient l'état de la dernière partie et demande une mise à jour à la base de données si elle n'est pas vide.
unset($_SESSION["etatDernierePartie"]);
}
}
?>
<?php
// il faut que la fonction crypt() connaisse la méthode de cryptage et le "sel" à utiliser.
// Il faut que ce soit les mêmes que ce qui a été utilisé lors du cryptage.
// ces 2 informations sont stockées au début de la chaîne de caractères résultant du cryptage
// C'est pour cette raison que l'on passe $toto comme 2ème paramètre.
// voir documentation php
if(CRYPT_SHA512 == 1){
$mdp = "johann";
$mdp_crypté = crypt($mdp, '$6$rounds=5000$passeleseldetablestp$');
}
$mdp_a_tester = crypt("johann", '$6$rounds=5000$passeleseldetablestp$');
echo $mdp_crypté;
if(hash_equals($mdp_crypté, $mdp_a_tester)){
echo "Le mdp1 est valide";
}else{
echo "Le mdp1 est invalide";
}
//echo "titi:";
//echo "<br/>";
//echo crypt("titi", '$6$VsDCW/kqInRv$/bkDT4rmkNLGo704srZE1riI4u7IUUcSuuEqrdkeBJ.3RcsnEO.ihAnWvIWJ0fSoP3hVa/OpWTbhi50xQhzEk1');
?>
<?php
//On démarre le système de gestion de sessions.
session_start();
require_once "config.php";
require_once "Routeur.php";
//On créer une instance de notre routeur.
$routeur = new Routeur();
//On redirige l'utilisateur.
$routeur->redirige();
?>
......@@ -2,51 +2,64 @@
// Classe generale de definition d'exception
class MonException extends Exception {
protected $message;
protected $message;
public function __construct($message) {
$this->message = $message;
}
public function afficher() {
return $this->message;
}
public function __construct($message) {
$this->message = $message;
}
public function afficher() {
return $this->message;
}
}
// Exception relative à un probleme de connexion
class ConnexionException extends MonException {
}
// Exception relative à un probleme d'accès à une table
class TableAccesException extends MonException {
}
// Classe Modele qui permet de gérer les données liés à l'authentification et l'in,scription d'un utilisateur.
/**
* Classe ModeleAuthentification qui permet de gérer les données liés à l'authentification et l'inscription d'un utilisateur.
*
*/
class ModeleAuthentification {
//On déclare une variable allant définir notre connexion à la base de données.
private $connexion;
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;
}
/**
* Constructeur de ModeleAuthentification
*
*/
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 vérifier si des identifiants fournit par un utilisateur correspondent à ceux présents dans la base de données.
/**
* Méthode qui permet de vérifier si des identifiants fournit par un utilisateur correspondent à ceux présents dans la base de données.
*
* @param $pseudo String le pseudo que l'utilisateur a indiqué
* @param $motDePasse String le mot de passe que l'utilisateur a indiqué
* @return bool l'état de la vérification
*/
public function verifieIdentifiantsConnexion($pseudo, $motDePasse) {
try {
//On regarde d'abord si ce pseudo existe.
......@@ -79,10 +92,16 @@ class ModeleAuthentification {
}
}
//Méthode qui permet de vérifier si des identifiants fournit par un utilisateur permettent une inscription.
/**
* Méthode qui permet de vérifier si des identifiants fournit par un utilisateur permettent une inscription.
*
* @param $pseudo String le pseudo que l'utilisateur a indiqué
* @param $motDePasse String le mot de passe que l'utilisateur a indiqué
* @return bool l'état de la vérification
*/
public function verifieIdentifiantsInscription($pseudo, $motDePasse) {
try {
//On regarde d'abord si le pseudo est libre
//On regarde d'abord si le pseudo est libre
$statement = $this->connexion->prepare("select * from joueurs where pseudo=?;");
$statement->bindParam(1, $pseudo);
$statement->execute();
......@@ -113,5 +132,4 @@ class ModeleAuthentification {
}
}
?>
<?php
//Classe Vue permettant d'afficher les pages.
/**
* Classe VueAuthentification permettant d'afficher les pages d'authentification et d'inscription.
*
*/
class VueAuthentification{
//Affiche une page d'authentification.
/**
* Méthode qui permet d'afficher une page d'authentification
*
*/
function afficheDemandeAuthentification(){
//On affichhe le fichiers HTML lié à cette page.
readfile(PATH_VUES."/html/htmlAuthentification.html");
}
//Affiche une page indiquant la saisie de mauvais identifiants de connexion.
/**
* Méthode qui permet d'afficher une page indiquant la saisie de mauvais identifiants de connexion
*
*/
function afficheMauvaisIdentifiantsConnexion(){
//On affichhe le fichiers HTML lié à cette page.
readfile(PATH_VUES."/html/htmlAuthentificationEchoue.html");
}
//Affiche une page d'inscription.
/**
* Méthode qui permet d'afficher une page d'inscription
*
*/
function afficheDemandeInscription(){
//On affichhe le fichiers HTML lié à cette page.
readfile(PATH_VUES."/html/htmlInscription.html");
......@@ -22,7 +34,10 @@ class VueAuthentification{
}
//Affiche une page indiquant la saisie de mauvais identifiants d'inscription.
/**
* Méthode qui permet d'afficher une page indiquant la saisie de mauvais identifiants d'inscription.
*
*/
function afficheMauvaisIdentifiantsInscription(){
//On affichhe le fichiers HTML lié à cette page.
readfile(PATH_VUES."/html/htmlInscriptionEchoue.html");
......
......@@ -25,7 +25,6 @@ class VueJeu {
<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>
......@@ -42,14 +41,11 @@ class VueJeu {
<a href='index.php?annulerCoup' class='link-button mg-top-10'><img src='vues/img/back.png' alt='BackImage'
class='icon'> Annuler le dernier coup</a>
<a href='index.php?replay' class='link-button mg-top-10'><img src='vues/img/restart.png' alt='BackImage'
class='icon'> Recommencer cette partie</a>
class='icon'> Effacer les ponts</a>
</div>
<div class='flex-container actions-container'>
<a href='index.php?annulerCoup' class='link-button mg-top-10'><img src='vues/img/tick.png' alt='BackImage'
class='icon'> Vérifier</a>
<a href='index.php?newGame' class='link-button mg-top-10'><img src='vues/img/restart.png' alt='BackImage'
class='icon'> Relancer une nouvelle
partie</a>
<a href='index.php?abandonne' class='link-button mg-top-10'><img src='vues/img/restart.png' alt='BackImage'
class='icon'> Abandonner cette partie</a>
</div>
<br>
......
<?php
//Classe Vue permettant d'afficher les pages.
/**
* Classe VueStatistiques permettant d'afficher la page de statistiques.
*
*/
class VueStatistiques{
//Affiche une page d'authentification.
/**
* Méthode qui permet d'afficher la page de statistiques.
*
* @param $etatDernierePartie String l'état de la dernière partie.
* @param $ratioJoueurActuel Floats le ratio du joueur actuel.
* @param $leaderboard array le leaderboard contenant les statistiques des 3 meilleurs joueurs par ratio
* @param $leaderboardPartiesGagnees array le leaderboard contenant les statistiques des 3 meilleurs joueurs par nombre de parties gagnées.
*/
function afficheStatistiques($etatDernierePartie, $ratioJoueurActuel, $leaderboard, $leaderboardPartiesGagnees) {
header("Content-type: text/html; charset=utf-8");
?>
......@@ -17,7 +27,6 @@ class VueStatistiques{
<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>
......@@ -28,6 +37,7 @@ class VueStatistiques{
<h1>Statistiques</h1><br>
<?php
//On affiche le message correspondant en fonction de l'état de la dernière partie.
if($etatDernierePartie=="gagne"){
echo "Bravo, cette partie est gagnée !";
}else if($etatDernierePartie=="perdu"){
......@@ -36,10 +46,10 @@ class VueStatistiques{
echo "La dernière partie a été abandonné !";
}else{
//Le joueur n'as pas soumis sa partie ou n'as pas recommencé.
//Le joueur n'as pas soumis sa partie ou n'as pas recommencé(Il a cliqué manuellement sur le bouton Statistiques).
}
echo '<br/><br/>';
//On affiche à l'utilisateur ses statistiques
echo "Vous avez gagnées ".$ratioJoueurActuel['nbTotalPartiesGagnees']." parties sur un total de ".$ratioJoueurActuel["nbTotalParties"]." parties jouées.";
echo '<br/><br/>';
echo '<div class="flex-container leaderboard">';
......@@ -48,6 +58,7 @@ class VueStatistiques{
echo '</div>';
echo '<div class="flex-container leaderboard">';
echo '<table><tr><th>Rang</th><th>Pseudo</th><th>Ratio</th></tr>';
//On affiche à l'utilisateur le leaderboard des ratios.
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>';
......@@ -55,28 +66,22 @@ class VueStatistiques{
echo '<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>';
//Si il n'y a personne à cette position alors on indique que le nombre de parties perdues est inconnu.(On le fait ici car le nombre de parties perdues ets directement calculé ici car il ne s'agit que d'une soustraction et donc un affichage)
$nbPartiesPerdues1 = ($leaderboard[0]['pseudo'] != "Personne à cette position") ? ($leaderboardPartiesGagnees[0]['totalPartiesJouees'])-($leaderboardPartiesGagnees[0]['totalPartiesGagnees']): "Inconnu";
$nbPartiesPerdues2 = ($leaderboard[1]['pseudo']!= "Personne à cette position") ? ($leaderboardPartiesGagnees[1]['totalPartiesJouees'])-($leaderboardPartiesGagnees[1]['totalPartiesGagnees']): "Inconnu";
$nbPartiesPerdues3 = ($leaderboard[2]['pseudo']!= "Personne à cette position") ? ($leaderboardPartiesGagnees[2]['totalPartiesJouees'])-($leaderboardPartiesGagnees[2]['totalPartiesGagnees']): "Inconnu";
//On affiche à l'utilisateur le leaderboard des parties gagnées.
echo '<tr><td>1</td><td>'.$leaderboardPartiesGagnees[0]['pseudo'].'</td><td>'.$leaderboardPartiesGagnees[0]['totalPartiesGagnees'].'</td><td>'.$nbPartiesPerdues1.'</td><td>'.$leaderboardPartiesGagnees[0]['ratio'].'</td></tr>';
echo '<tr><td>2</td><td>'.$leaderboardPartiesGagnees[1]['pseudo'].'</td><td>'.$leaderboardPartiesGagnees[1]['totalPartiesGagnees'].'</td><td>'.$nbPartiesPerdues2.'</td><td>'.$leaderboardPartiesGagnees[1]['ratio'].'</td></tr>';
echo '<tr><td>3</td><td>'.$leaderboardPartiesGagnees[2]['pseudo'].'</td><td>'.$leaderboardPartiesGagnees[2]['totalPartiesGagnees'].'</td><td>'.$nbPartiesPerdues3.'</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
......@@ -339,6 +339,7 @@ body {
.leaderboard table {
border-collapse: collapse;
width: 35%;
text-align: center;
}
......
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