222 lines
6.6 KiB
PHP
222 lines
6.6 KiB
PHP
|
<?php
|
||
|
|
||
|
|
||
|
//Les données sont directement chargées depuis la base de données
|
||
|
require_once 'dao/bdd.php';
|
||
|
|
||
|
/**
|
||
|
* @brief Classe DAO retournant des informations relatives au classement
|
||
|
*/
|
||
|
class point_manager
|
||
|
{
|
||
|
/**
|
||
|
* @brief Retourne le nombre de point pour une partie spécifié
|
||
|
* @return int : nb de points
|
||
|
*/
|
||
|
public static function getGamePoint($game_id)
|
||
|
{
|
||
|
//Pour obtenir le nombre de point, il faut :
|
||
|
// la durée de la partie => table GAME
|
||
|
// le nombre de réponses => table QUESTION
|
||
|
// le nombre de bonne réponses => table LINK_GAME_QUESTION
|
||
|
|
||
|
//Récupération de la durée
|
||
|
$length = self::getLengthByGame($game_id);
|
||
|
|
||
|
//Récupération du nombre de questions
|
||
|
$nb_question = self::getNbQuestion($game_id);
|
||
|
|
||
|
//Récupération du nombre de bonne réponses
|
||
|
$nb_br = self::getGoodAnswer($game_id);
|
||
|
|
||
|
|
||
|
//Calcul du score final
|
||
|
$points = ($nb_br[0] / $nb_question[0]) * 100 - ($length[0] / 1000);
|
||
|
|
||
|
if ($points < 0)
|
||
|
{
|
||
|
return 0;
|
||
|
} else
|
||
|
{
|
||
|
return $points;
|
||
|
}
|
||
|
|
||
|
|
||
|
//On retourne le résultat
|
||
|
return $points;
|
||
|
}
|
||
|
|
||
|
|
||
|
/**
|
||
|
* @brief Obtient le nombre de bonnes réponses dans une partie
|
||
|
* @arg $game_id identifiant de la partie
|
||
|
* @return int
|
||
|
*/
|
||
|
public static function getGoodAnswer($game_id)
|
||
|
{
|
||
|
|
||
|
//Récupération de la base de données
|
||
|
$bdd = bdd::getInstance()->getPDO();
|
||
|
|
||
|
//Mise en place de la requête
|
||
|
$query = "SELECT SUM(lnk.reponse = question.bonnereponse) AS sum
|
||
|
FROM link_game_question AS lnk INNER JOIN question
|
||
|
ON lnk.question_id = question.id
|
||
|
WHERE lnk.game_id = '" . $game_id . "'";
|
||
|
|
||
|
//Récupération des résultat
|
||
|
$data = $bdd->query($query)->fetch();
|
||
|
|
||
|
//On renvoie les données
|
||
|
return $data;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @brief Obtient le nombre de questions associées à une partie
|
||
|
* @arg $game_id identifiant de la partie
|
||
|
* @return int
|
||
|
*/
|
||
|
public static function getNbQuestion($game_id)
|
||
|
{
|
||
|
//Récupération de la BDD
|
||
|
$bdd = bdd::getInstance()->getPDO();
|
||
|
|
||
|
//Création de la requête
|
||
|
$query = "SELECT COUNT(*) AS nb
|
||
|
FROM link_game_question AS lnk INNER JOIN question
|
||
|
ON lnk.question_id = question.id
|
||
|
WHERE lnk.game_id = '" . $game_id . "'";
|
||
|
|
||
|
//Récupération des résultats
|
||
|
$data = $bdd->query($query)->fetch();
|
||
|
|
||
|
//On renvoie les infos
|
||
|
return $data;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @brief Obtient les identifiants des parties jouées par un joueur
|
||
|
* @arg $login login du joueur
|
||
|
* @return tableau d'entier
|
||
|
*/
|
||
|
public static function getGamesByLogin($login)
|
||
|
{
|
||
|
//Mise en place de la connexion à la base de données
|
||
|
$bdd = bdd::getInstance()->getPDO();
|
||
|
|
||
|
//Mise en place de la requête
|
||
|
$query = "SELECT id FROM game WHERE user_login = '$login'";
|
||
|
|
||
|
//Récupération des résultats
|
||
|
$result = $bdd->query($query)->fetchAll();
|
||
|
|
||
|
//On renvoi les résultats
|
||
|
return $result;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @brief Obtient la durée d'une partie
|
||
|
* @arg $game_id identifiant de la partie
|
||
|
* @return int (temps en milliseconde)
|
||
|
*/
|
||
|
public static function getLengthByGame($game_id)
|
||
|
{
|
||
|
//Mise en place de la connexion à la base de données
|
||
|
$bdd = bdd::getInstance()->getPDO();
|
||
|
|
||
|
//Mise en place de la requête
|
||
|
$query = "SELECT length FROM game ORDER BY id = '$game_id'";
|
||
|
|
||
|
//Récupération du résultat
|
||
|
$result = $bdd->query($query)->fetch();
|
||
|
|
||
|
//On renvoie les résultats
|
||
|
return $result;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @brief Obtient la liste de toutes les personnes inscrites
|
||
|
* @return tableau de login
|
||
|
*/
|
||
|
public static function getAllPlayer()
|
||
|
{
|
||
|
//Mise en place de la connexion à la base de données
|
||
|
$bdd = bdd::getInstance()->getPDO();
|
||
|
|
||
|
//Mise en place de la requête
|
||
|
$query = "SELECT login FROM user ORDER BY login ASC";
|
||
|
|
||
|
//Récupération des résultats
|
||
|
$result = $bdd->query($query)->fetchAll();
|
||
|
|
||
|
//On renvoie les résultats
|
||
|
return $result;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @brief Obtient le nom de la catégorie et les 2 réponses du groupe de question associé à l'identifiant de la partie
|
||
|
* @arg $game_id identifiant de la partie
|
||
|
* @return array[categorie, reponse0, reponse1]
|
||
|
*/
|
||
|
public static function getInfoByGroupId($game_id)
|
||
|
{
|
||
|
//Récupếration de la connexion à la base de données
|
||
|
$bdd = bdd::getInstance()->getPDO();
|
||
|
|
||
|
//Création de la requête
|
||
|
$query = "SELECT categorie_nom AS categorie, reponse0, reponse1 FROM `group` WHERE `id`=
|
||
|
(SELECT group_id FROM question WHERE `id` =
|
||
|
(SELECT question_id FROM link_game_question WHERE game_id = '$game_id' LIMIT 1)
|
||
|
LIMIT 1)
|
||
|
LIMIT 1";
|
||
|
|
||
|
//Récupération des résultats
|
||
|
$result = $bdd->query($query)->fetch();
|
||
|
|
||
|
//On renvoie les données
|
||
|
return $result;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @brief Obtient les parties jouée par un joueur dans une catégorie
|
||
|
* @arg $login login du joueur
|
||
|
* @arg $cat catégorie désirée
|
||
|
* @return tableau contenant l'id, le temps et le login de la partie
|
||
|
*/
|
||
|
public static function getGameByLoginByCat($login, $cat)
|
||
|
{
|
||
|
//Mise en place de la BDD
|
||
|
$bdd = bdd::getInstance()->getPDO();
|
||
|
|
||
|
//Mise en place de la requête
|
||
|
$query = "SELECT * FROM game
|
||
|
WHERE game.user_login = '$login'
|
||
|
AND game.id =
|
||
|
ANY(
|
||
|
SELECT lnk.game_id
|
||
|
FROM link_game_question AS lnk
|
||
|
INNER JOIN question
|
||
|
ON lnk.question_id = question.id
|
||
|
|
||
|
INNER JOIN `group`
|
||
|
ON question.group_id = group.id
|
||
|
|
||
|
INNER JOIN categorie
|
||
|
ON `group`.categorie_nom = categorie.nom
|
||
|
|
||
|
WHERE categorie.nom = '$cat'
|
||
|
|
||
|
GROUP BY lnk.game_id
|
||
|
)";
|
||
|
|
||
|
//Récupération des résultats
|
||
|
$result = $bdd->query($query)->fetchAll();
|
||
|
|
||
|
//On renvoie les résultats
|
||
|
return $result;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
?>
|