burger-quizz/dao/point_manager.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;
}
}
?>