Browse Source

First

master
commit
bd8d7ed0a5
  1. 1
      .gitignore
  2. 88
      config.php
  3. 173
      controller.php
  4. 66
      dao/bdd.php
  5. 37
      dao/cat_dao.php
  6. 36
      dao/dao.php
  7. 121
      dao/game_dao.php
  8. 90
      dao/groupe_dao.php
  9. 221
      dao/point_manager.php
  10. 68
      dao/question_dao.php
  11. 111
      dao/reponse_user_dao.php
  12. 121
      dao/user_dao.php
  13. 13
      doc/index.php
  14. 43
      doc/java/_app_8java.html
  15. 43
      doc/java/_bdd_8java.html
  16. 43
      doc/java/_config_file_8java.html
  17. 43
      doc/java/_list_row_8java.html
  18. 43
      doc/java/_page_8java.html
  19. 43
      doc/java/_page_categorie_8java.html
  20. 43
      doc/java/_page_config_8java.html
  21. 43
      doc/java/_page_group_8java.html
  22. 43
      doc/java/_page_question_8java.html
  23. 43
      doc/java/_window_8java.html
  24. 50
      doc/java/annotated.html
  25. BIN
      doc/java/bc_s.png
  26. 40
      doc/java/class_app-members.html
  27. 77
      doc/java/class_app.html
  28. 62
      doc/java/class_bdd-members.html
  29. 711
      doc/java/class_bdd.html
  30. 46
      doc/java/class_config_file-members.html
  31. 230
      doc/java/class_config_file.html
  32. 43
      doc/java/class_list_row-members.html
  33. 155
      doc/java/class_list_row.html
  34. 50
      doc/java/class_page-members.html
  35. 317
      doc/java/class_page.html
  36. BIN
      doc/java/class_page.png
  37. 52
      doc/java/class_page_categorie-members.html
  38. 219
      doc/java/class_page_categorie.html
  39. BIN
      doc/java/class_page_categorie.png
  40. 42
      doc/java/class_page_config-members.html
  41. 119
      doc/java/class_page_config.html
  42. 59
      doc/java/class_page_group-members.html
  43. 255
      doc/java/class_page_group.html
  44. BIN
      doc/java/class_page_group.png
  45. 61
      doc/java/class_page_question-members.html
  46. 283
      doc/java/class_page_question.html
  47. BIN
      doc/java/class_page_question.png
  48. 42
      doc/java/class_page_theme.html
  49. 41
      doc/java/class_window-members.html
  50. 98
      doc/java/class_window.html
  51. 47
      doc/java/classes.html
  52. BIN
      doc/java/closed.png
  53. 656
      doc/java/doxygen.css
  54. BIN
      doc/java/doxygen.png
  55. 47
      doc/java/files.html
  56. BIN
      doc/java/ftv2blank.png
  57. BIN
      doc/java/ftv2doc.png
  58. BIN
      doc/java/ftv2folderclosed.png
  59. BIN
      doc/java/ftv2folderopen.png
  60. BIN
      doc/java/ftv2lastnode.png
  61. BIN
      doc/java/ftv2link.png
  62. BIN
      doc/java/ftv2mlastnode.png
  63. BIN
      doc/java/ftv2mnode.png
  64. BIN
      doc/java/ftv2node.png
  65. BIN
      doc/java/ftv2plastnode.png
  66. BIN
      doc/java/ftv2pnode.png
  67. BIN
      doc/java/ftv2vertline.png
  68. 306
      doc/java/functions.html
  69. 306
      doc/java/functions_func.html
  70. 52
      doc/java/hierarchy.html
  71. 16
      doc/java/index.html
  72. 117
      doc/java/installdox
  73. 30
      doc/java/main.html
  74. BIN
      doc/java/nav_f.png
  75. BIN
      doc/java/nav_h.png
  76. BIN
      doc/java/open.png
  77. 52
      doc/java/search/all_61.html
  78. 30
      doc/java/search/all_62.html
  79. 42
      doc/java/search/all_63.html
  80. 140
      doc/java/search/all_67.html
  81. 38
      doc/java/search/all_69.html
  82. 34
      doc/java/search/all_6c.html
  83. 37
      doc/java/search/all_6d.html
  84. 42
      doc/java/search/all_6f.html
  85. 90
      doc/java/search/all_70.html
  86. 55
      doc/java/search/all_72.html
  87. 38
      doc/java/search/all_73.html
  88. 26
      doc/java/search/all_74.html
  89. 75
      doc/java/search/all_75.html
  90. 26
      doc/java/search/all_76.html
  91. 40
      doc/java/search/all_77.html
  92. 25
      doc/java/search/classes_61.html
  93. 25
      doc/java/search/classes_62.html
  94. 25
      doc/java/search/classes_63.html
  95. 25
      doc/java/search/classes_6c.html
  96. 45
      doc/java/search/classes_70.html
  97. 25
      doc/java/search/classes_77.html
  98. BIN
      doc/java/search/close.png
  99. 25
      doc/java/search/files_61.html
  100. 25
      doc/java/search/files_62.html
  101. Some files were not shown because too many files have changed in this diff Show More

1
.gitignore vendored

@ -0,0 +1 @@
.svn/

88
config.php

@ -0,0 +1,88 @@
<?php
/**
* @brief Configuration standard du site
*/
class config
{
/*
* =========================================================================
* ==> DEBUT CONFIGURATION
* Pour installer le site, vous devez paramètrer les lignes ci dessous :
* =========================================================================
*/
/**
* @brief Adresse de la BDD
* @example mysql:host=127.0.0.1; dbname=burgerquizz
* @var string
*/
public static $bdd_address = "mysql:host=127.0.0.1; dbname=burgerquizz";
/**
* @brief Login de l'utilisateur de la BDD
* @note Cet utilisater doit avoir tous les droits sur les tables du burger quizz
* @var string
*/
public static $bdd_user = "root";
/**
* @brief Mot de passe de l'utilisateur de la BDD
* @var string
*/
public static $bdd_password = "2684";
/*
* =========================================================================
* ==> FIN DE LA CONFIGURATION
* =========================================================================
*/
//Ne pas toucher aux lignes ci dessous :
/**
* @brief Variable pour le débugage
* @example TRUE ==> affiche toutes les erreures des TRY
* @example FALSE ==> usage standard
* @var boolean
*/
public static $debug = TRUE;
/**
* @brief Table de liaison Page-Titre-URL
* @var array[page code][titre=0/url=1]
*/
public static $pages = array(
'welcome' => array('Accueil', 'view/welcome/index.php'), //Page d'acceuil
'login' => array("Connexion", "view/welcome/login.php"), //Page de connexion
'signup' => array('Inscription', 'view/signup/index.php'), //Page d'inscription au site
'logout' => array('Déconnexion', 'view/logout/index.php'), //Page de déconnexion
'account' => array('Mon compte', 'view/account/index.php'), //Page du compte
'update' => array('Mise à jour', 'view/account/update.php'), //Page de mise à jour du compte
'game' => array('Jeu', 'view/game/index.php'), //Page du jeu
'finish' => array('Fin du jeu', 'view/game/finish.php'), //Page de fin de la partie
'error' => array('Erreur', 'view/game/error.php'), // Page d'erreur d'enregistrement de la partie
'result' => array('Résultats', 'view/result/index.php'), //Page des parties personnelles du joueur
'rank' => array('Rangs', 'view/rank/index.php'), //Page du classement principal
'rank_cat' => array("Classement par catégorie", "view/rank/bycat.php"),
'404' => array('Erreur 404', 'view/404.php'), //Page d'erreur NOT FOUND
'500' => array('Erreur 500', 'view/500.php') //Page d'erreur SERVER ERROR
);
}

173
controller.php

@ -0,0 +1,173 @@
<?php
/**
* @brief Gère l'affichage des pages en fonction de l'argument 'page' de la barre d'adresse
* @note définit également la structure de la page (<head>)
*/
class controller
{
///Instance de la classe
private static $Ctrl;
///Code de la page courante
private $currpage_code;
///Titre de la page courante
private $currpage_title;
///URL de la page courante
private $currpage_url;
/**
* @brief Instancie le contrôleur et charge les données de la barre d'adresse
* @note Si le contrôleur a déja été instancié, cette methode executera uniquement route()
*/
public static function init()
{
//Si l'instance de la classe est NULL
if (!isset(self::$Ctrl))
{
//On instancie un nouveau controlleur
self::$Ctrl = new controller();
}
//On lance le routage
self::$Ctrl->route();
}
/**
* @brief Récupère le contrôleur utilisé
* @return controller
* @warning Si le contrôleur n'a pas été instancié, renverra null
*/
public static function get()
{
return self::$Ctrl;
}
/**
* @brief Génère le code HTML de la page désirée, enfonction du terminal
* @note le contrôleur doit avoir été instancié et être routé
*/
public function render()
{
//Chargement du fichier user.php pour la session et de la classe DAO
require_once "metier/user.php";
//Dérrage de la sessions
session_start();
//Detection du type de terminal (smartphone ou normal)
$bSmartphone =
strstr($_SERVER['HTTP_USER_AGENT'], 'Android')
|| strstr($_SERVER['HTTP_USER_AGENT'], 'BlackBerry')
|| strstr($_SERVER['HTTP_USER_AGENT'], 'Windows')
|| strstr($_SERVER['HTTP_USER_AGENT'], 'Opera Mini')
|| strstr($_SERVER['HTTP_USER_AGENT'], 'Mobile')
|| strstr($_SERVER['HTTP_USER_AGENT'], 'iPad');
//Cette variable permettra par la suite de décider du placement de
// certains menus ainsi que de la feuille de style
?>
<!-- Structure globale du template -->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<?php
echo "<link href=\"style/global.css\" rel=\"stylesheet\" type=\"text/css\" />";
if ($bSmartphone)
{
echo "<link href=\"style/smartphone.css\" rel=\"stylesheet\" type=\"text/css\" />";
}
?>
<script type="text/javascript" src ="scripts/manager.js"></script>
<?php echo " <title>BurgerQuizz - $this->currpage_title</title>"; ?>
<link rel="icon" type="image/ico" href="favicon.ico" />
</head>
<body>
<?php
// Bandeau de haut de page
include 'view/template/header.php';
// Menu de GAUCHE
if ($bSmartphone)
{
include 'view/template/smartphone_menu_left.php';
}
else
{
include 'view/template/menu_left.php';
}
// Menu de DROITE
if ($bSmartphone)
{
include 'view/template/smartphone_menu_right.php';
}
else
{
include 'view/template/menu_right.php';
}
//Contenu principal de la page
echo "<div id=\"core\">";
echo " <div id=\"content\">";
include $this->currpage_url;
echo " </div>";
echo "</div>";
?>
</body>
</html>
<?php
}
/**
* @brief Charge les données de la barre d'adresse
* @brief Charge les vars $currpage_code, $currpage_title, $currpage_url correspondant à la page en cours grace au param 'page'
*/
function route()
{
//Récupération de la page actuelle
if (isset($_GET['page']))
{//si le code est inscrit {
if (!array_key_exists($_GET['page'], config::$pages))
{//si le code n'est pas dans la liste des pages
$this->currpage_code = '404';
} else
{
$this->currpage_code = $_GET['page'];
}
} else
{
$this->currpage_code = 'welcome';
}
//Récupération du template à utiliser (smartphone/normal)
if (isset($_GET['tmpl']) && $_GET['tmpl'] == "smartphone")
{
$this->currpage_template = "smartphone";
} else
{
$this->currpage_template = "global";
}
//Titre & URL
$this->currpage_title = config::$pages[$this->currpage_code][0];
$this->currpage_url = config::$pages[$this->currpage_code][1];
}
}
?>

66
dao/bdd.php

@ -0,0 +1,66 @@
<?php
/**
* @brief Classe gérant le comportement à la base de données
* @brief Sert d'intermédiaire entre la BDD et le PDO
*/
class bdd {
///Instance de la connexion à la base de données
private $instancePDO;
///Instance statique de la base de données
private static $bdd;
/**
* @brief Construit une nouvelle connexion à la base de données
*/
private function __construct() {
try {
//Mise en place des options
$options = array(
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',
);
//Création du PDO
$this->instancePDO = new PDO(config::$bdd_address, config::$bdd_user, config::$bdd_password, $options);
//On précise les options du PDO
$this->instancePDO->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
if (config::$debug) {
//En cas de bug et si le mode DEBUG est activé
//On affiche un message
echo 'Connexion échouée : ' . $e->getMessage();
header("Refresh: 0;URL=index.php?page=500");
}
}
}
/**
* @brief Accesseur de l'instance bdd
* @return instance BDD
* @note Création automatique d'une nouvelle instance si besoin
*/
public static function getInstance() {
if (!isset(self::$bdd)) {
//Si l'instance n'a pas encore été crée
//On en créer une nouvelle et on la stocke
self::$bdd = new bdd();
}
//On renvoie l'instance sauvegardée
return self::$bdd;
}
/**
* @brief Accesseur pour l'objet PDO de la classe
* @return PDO
*/
public function getPDO() {
return $this->instancePDO;
}
}
?>

37
dao/cat_dao.php

@ -0,0 +1,37 @@
<?php
/**
* @brief Classe DAO relative à la table catégorie de la base de données
*/
class cat_dao extends dao {
public function delete($id) {
//On ne fait rien
}
public function insert(&$objet) {
//On ne fait rien
}
public function select($id) {
//On ne fait rien
}
public function update(&$objet) {
//On ne fait rien
}
public function getAllCat() {
//Mise en place de la requête
$query = "SELECT nom FROM categorie ORDER BY nom ASC";
//On envoie la requête
$result = $this->db->query($query)->fetchAll();
//On renvoie les données
return $result;
}
}
?>

36
dao/dao.php

@ -0,0 +1,36 @@
<?php
/**
* @brief Classe mère contenant les fonctions standards de requête à la base de données
* @note Ne peut être instanciée
*/
abstract class dao {
///Variable contenant l'objet de connexion à la BDD
public $db;
/**
*@brief Récupère le PDO via la classe bdd
*/
public function __construct() {
//En cas de construction, on récupère l'objet connexion de la BDD
$this->db = bdd::getInstance()->getPDO();
}
/**
* @brief Fonction gérant la récupération d'infos
* @note l'id est soit l'id (int) soit le login pour user
*/
abstract function select($id);
/// @brief Fonction gérant l'insertion d'un nouvel objet dans la BDD
abstract function insert(&$objet);
/// @brief Fonction gérant la suppression d'un objet dans la BDD
abstract function delete($id);
/// @brief Fonction gérant la mise de jour des données
abstract function update(&$objet);
}
?>

121
dao/game_dao.php

@ -0,0 +1,121 @@
<?php
/**
* @brief Représente un objet d'accès à la base de données relatif à l'objet game
*/
class game_dao extends dao {
/**
* @brief Récupère un objet de game
* @arg $id identifiant de la partie à récupérer
*/
public function select($id) {
//Mise en place de la requête
$query = "SELECT * FROM `game` WHERE `id`='$id'";
//On récupère les données
$result = $this->db->query($query)->fetch();
//On retourne l'objet frâichement crée
return $result;
}
/**
* @brief Récupère toutes les partie relatives à un joueur
* @arg $login login du joueur permettant de récupérer les partie qui lui sont associée
* @return tableau de lignes de la base de données ou FALSE
*/
public function selectByLogin($login) {
//Mise en place de la requête
$query = "SELECT * FROM `game` WHERE `user_login`='$login' ORDER BY date DESC";
//On récupère les données
$result = $this->db->query($query)->fetchAll();
//On retourne les données
return $result;
}
/**
* @brief Compte le nombre de jeux effectués par chaque joueurs
*/
public function countGame() {
//Création de la requête
$query = "SELECT COUNT(*) AS nb, user_login FROM game GROUP BY user_login ORDER BY user_login ASC";
//Récupération des données
$result = $this->db->query($query)->fetchAll();
//On retourne les données
return $result;
}
/**
* @brief Insert une occurence game relative à l'objet passé
* @arg $objet objet game à ajouter dans la base de données
*/
public function insert(&$objet) {
//On stocke les données à ajouter
$user = $objet->getUserLogin();
$length = $objet->getLength();
//On met en place la requête
$query = "INSERT INTO `game`(`user_login`,`length`, `date`) VALUES ('$user','$length', NOW())";
//On envoie la requête
try {
$this->db->query($query);
return TRUE;
} catch (Exception $ex) {
if (config::$debug) {
echo $ex->getMessage();
}
return FALSE;
}
}
/**
* @brief Fonction obsolète
* @note il est impossible de faire une mise à jour d'une partie via le site
*/
public function update(&$objet) {
//On ne fait rien
}
/**
* @brief Supprime une occurence game de la base de données
* @arg $id identifiant de la partie à supprimer
* @note on utilise le ON DELETE CASCADE pour supprimer les réponses associées. La BDD reste donc cohérente
*/
public function delete($id) {
//Mise en place de la requête SQL
$query = "DELETE FROM `game` WHERE `id`='$id'";
//On envoie la requête SQL
$result = $this->db->query($query);
//On renvoie si oui ou non on a réussi la requête
if ($result->rowCount() == 0) {
return FALSE;
} else {
return TRUE;
}
}
public function getLastId() {
//Mise en place de la requête SQL
$query = "SELECT MAX(id) FROM game LIMIT 1";
//On envoie la requête SQL
$result = $this->db->query($query)->fetch();
//On retourne le résultat
return $result;
}
}
?>

90
dao/groupe_dao.php

@ -0,0 +1,90 @@
<?php
/**
* @brief Classe DAO relatif à l'objet group
*/
class groupe_dao extends dao {
/**
* @brief Récupère un objet de type groupe relatif à une occurence de la table group
* @arg $id identifiant du groupe à retourner
* @return tableau d'information ou false
*/
public function select($id) {
//Préparation de la requête
$query = "SELECT * FROM `group` WHERE id = '" . $id . "'";
//On envoie la requête
$result = $this->db->query($query)->fetch();
//On renvoie les données
return $result;
}
public function selectByCat($cat) {
//Préparation de la requête
$query = "SELECT * FROM `group` WHERE categorie_nom = '" . $cat . "'";
//On envoie la requête
$result = $this->db->query($query)->fetchAll();
//On renvoie les données
return $result;
}
/**
* @brief Fonction obsolète
* @note on ne fait pas d'insertion via le site, seulement via l'application JAVA
*/
public function insert(&$objet) {
//On ne fait rien
}
/**
* @brief Fonction obsolète
* @note il est impossible de supprimer un groupe sur le site. C'est possible via l'application JAVA uniquement
*/
public function delete($id) {
//On ne fait rien
}
/**
* @brief Fonction obsolète
* @note il est impossible de mettre à jour un groupe via le site. Seul l'application JAVA pourra le faire
*/
public function update(&$objet) {
//On ne fait rien
}
/**
* @brief Compte le nombre de groupe de question par catégories
*/
public function count($cat) {
//Préparation de la requête
$query = "SELECT COUNT(*) FROM `group` WHERE `categorie_nom` = '" . $cat . "'";
//On envoie la requête
$result = $this->db->query($query)->fetch();
//On renvoie les données
return $result;
}
/**
* @brief Compte le nombre total de groupe de question
*/
public function countAll() {
//Préparation de la requête
$query = "SELECT COUNT(*) FROM `group`";
//On envoie la requête
$result = $this->db->query($query)->fetch();
//On renvoie les données
return $result;
}
}
?>

221
dao/point_manager.php

@ -0,0 +1,221 @@
<?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;
}
}
?>

68
dao/question_dao.php

@ -0,0 +1,68 @@
<?php
/**
* @brief Classe DAO relatif à la classe question
*/
class question_dao extends dao
{
/**
* @brief Retourne un tableau contenant les informations de l'occurence ayant l'ID spécifié
* @arg $id identifiant de l'occurence à retourner
* @return tableau de données ou FALSE
*/
public function select($id)
{
//Mise en place de la requête SQL
$query = "SELECT * FROM `question` WHERE `id`='$id'";
//On récupère les données
$return = $this->db->query($query)->fetch();
//On retourne les données
return $return;
}
public function selectByGroup($id_group)
{
//Mise en place de la requête SQL
$query = "SELECT * FROM `question` WHERE `group_id`='$id_group' ORDER BY RAND()";
//On récupère les données
$return = $this->db->query($query)->fetchAll();
//On retourne les données
return $return;
}
/**
* @brief Fonction obsolète
* @note il est impossible d'ajouter des question via le site. Seule l'application JAVA y sera autorisée
*/
public function insert(&$objet)
{
//On ne fait rien
}
/**
* @brief Fonction obsolète
* @note il est impossible de mettre à jour une question via le site. L'application JAVA pourra le faire
*/
public function update(&$objet)
{
//On ne fait rien
}
/**
* @brief Fonction obsolète
* @note il est impossible de supprimer une question via la site. Seule l'application JAVA sera autorisée à le faire
*/
public function delete($id)
{
//On ne fait rien
}
}
?>

111
dao/reponse_user_dao.php

@ -0,0 +1,111 @@
<?php
/**
* @brief Classe DAO relatif à la classe reponse_user
*/
class reponse_user_dao extends dao {
/**
* @brief Fonction gérant la récupération des réponses, de la table link_game_question
* @arg $idgame identifiant de la partie (% pour tout)
* @arg $idquest identifiant de la question (% pour tout)
* @return tableau d'objet reponse_user ou un objet reponse_user
*/
public function select($idgame, $idquest = NULL) {
//Inclusion de l'objet reponse_user
include_once 'metier/reponse_user.php';
//Mise en place de la première condition
$cond1 = "`game_id`='$idgame'";
//Si on a mis un %, on charge toutes les partie => la condition devient TRUE
if ($idgame == "%") {
$cond1 = "TRUE";
}
//Mise en place de la seconde condition
$cond2 = "`question_id`='$idquest'";
//Si on a mis un %, on charge toutes les questions => la condition devient TRUE
if ($idquest == "%") {
$cond2 = "TRUE";
}
//On met en place la requête
$query = "SELECT * FROM `link_game_question` WHERE $cond1 AND $cond2";
//On récupère les données
$result = $this->db->query($query);
//Si on a pas de données, inutilise d'aller plus loin
if (!$result) {
return FALSE;
}
//On parse les résultats en fonction de chaque cas
if ($idquest == "%") {
//On demande toutes les questions du jeu spécifié
$return = array();
$i = 0;
//On boucle pour chaque occurence
foreach ($result as $row) {
$return[$i] = new reponse_user($row["game_id"], $row["question_id"], $row["reponse"]);
$i++;
}
} else {
//On demande une seule partie
$return = $result->fetch();
}
//On retourne les résultats
return $return;
}
/**
* @brief Insert un objet reponse_user dans la base de données
* @arg $objet objet reponse_user à inserer
*/
public function insert(&$objet) {
//Récupération des données
$game_id = $objet->getGame();
$question_id = $objet->getQuestion();
$reponse = $objet->getReponse();
//Mise en place de la requête
$query = "INSERT INTO `link_game_question`
(`game_id`,`question_id`,`reponse`)
VALUES ('$game_id','$question_id','$reponse')";
//Envoie de la requête
try {
$this->db->query($query);
return TRUE;
} catch (Exception $ex) {
if (config::$debug) {
echo $ex->getMessage();
}
return FALSE;
}
}
/**
* @brief Fonction obsolète mais nécessaire pour l'héritage de DAO
* @note on ne peut pas mettre à jour les réponses de l'utilisateur
*/
public function update(&$objet) {
//On ne fait rien
}
/**
* @brief Fonction obsolète mais nécessaire pour l'héritage de DAO
* @note la réponse de l'utilisateur est automatiquement supprimée par la suppression de la partie elle-même, via un ON DELETE CASCADE
*/
public function delete($idgame) {
//One ne fait rien
}
}
?>

121
dao/user_dao.php

@ -0,0 +1,121 @@
<?php
/**
* @brief Classe DAO relatif à la classe user
*/
class user_dao extends dao {
/**
* @brief Récupère les informations d'un utilisateur
* @arg $id login de l'utilisateur à récupérer
* @return tableau clé valeur contenant les informations ou FALSE
*/
public function select($id) {
//Mise en place de la requête
$query = "SELECT * FROM `user` WHERE `login`='$id'";
// On récupère les informations suite à la requête
$return = $this->db->query($query)->fetch();
//On retourne les infos
return $return;
}
/**
* @brief Insert un nouvel utilisateur dans la base de données
* @arg $objet information de l'utilisateur à ajouter
*/
public function insert(&$objet) {
//On récupère les informations à ajouter
$login = $objet->getLogin();
$passwd = $objet->getPassword();
$nom = $objet->getNom();
$prenom = $objet->getPrenom();
$mail = $objet->getMail();
//On prépare la requête SQL
$query = "INSERT INTO `user`(`login`,`pwd`,`nom`,`prenom`,`dateinscription`, `email`)
VALUES ('$login','$passwd','$nom','$prenom',NOW(), '" . $mail . "')";
//On exécute la requête
try {
$this->db->query($query);
return TRUE;
} catch (Exception $ex) {
$ex = NULL;
return FALSE;
}
}
/**
* @brief Met à jour un utilisateur avec les nouvelles données spécifiée
* @arg $objet objet user contenant les nouvelles données
* @note le login est le seul élément inchangeable. On se sert de ce dernier pour mettre à jour la base de données
*/
public function update(&$object) {
//On récupère les données de l'utilisateur
$login = $object->getLogin();
$passwd = $object->getPassword();
$nom = $object->getNom();
$prenom = $object->getPrenom();
$mail = $object->getMail();
//On prépare la requête
$query = "UPDATE `user`
SET `pwd`='$passwd', `nom`='$nom', `prenom`='$prenom', `email`='$mail'
WHERE login='$login'";
//On envoie la requête
$result = $this->db->query($query);
//On renvoie le résultat
if ($result->rowCount() == 0) {
return FALSE;
} else {
return TRUE;
}
}
public function updateNoPassword($object) {
$login = $object->getLogin();
$nom = $object->getNom();
$prenom = $object->getPrenom();
$mail = $object->getMail();
//On prépare la requête
$query = "UPDATE `user`
SET `nom`='$nom', `prenom`='$prenom', `email`='$mail'
WHERE login='$login'";
//On envoie la requête
$result = $this->db->query($query);
//On renvoie le résultat
if ($result->rowCount() == 0) {
return FALSE;
} else {
return TRUE;
}
}
/**
* @brief Supprime un utilisateur de la base
* @arg $id login de l'utilisateur à supprimer
* @note la suppression d'un utilisateur entraine la suppression de ses parties et de ses réponses avec le ON DELETE CASCADE
*/
public function delete($id) {
//On prépare la requête SQL
$query = "DELETE FROM `user` WHERE `login`='$id'";
//On envoie la requête SQL
$result = $this->db->query($query);
if ($result->rowCount() == 0) {
return FALSE;
} else {
return TRUE;
}
}
}
?>

13
doc/index.php

@ -0,0 +1,13 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>BurgerQuizz - Documentation</title>
<link rel="icon" type="image/ico" href="../favicon.ico" />
</head>
<body style="text-align: center;">
<br/>
<br/>
<h1><a href="./java/index.html">Documentation du Java</a></h1><br/>
<h1><a href="./web/index.html">Documentation du PHP</a></h1><br/>
</body>
</html>

43
doc/java/_app_8java.html

@ -0,0 +1,43 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>BurgerQuizz: /media/data/ProjWeb/Java/App.java File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<!-- Generated by Doxygen 1.7.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul class="tablist">
<li><a href="main.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div class="tabs2">
<ul class="tablist">
<li><a href="files.html"><span>File&nbsp;List</span></a></li>
</ul>
</div>
</div>
<div class="header">
<div class="summary">
<a href="#nested-classes">Classes</a> </div>
<div class="headertitle">
<h1>/media/data/ProjWeb/Java/App.java File Reference</h1> </div>
</div>
<div class="contents">
<table class="memberdecls">
<tr><td colspan="2"><h2><a name="nested-classes"></a>
Classes</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_app.html">App</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Application contenant la méthode main. <a href="class_app.html#_details">More...</a><br/></td></tr>
</table>
</div>
<hr class="footer"/><address class="footer"><small>Generated on Tue May 29 2012 09:05:38 for BurgerQuizz by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.1 </small></address>
</body>
</html>

43
doc/java/_bdd_8java.html

@ -0,0 +1,43 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>BurgerQuizz: /media/data/ProjWeb/Java/Bdd.java File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<!-- Generated by Doxygen 1.7.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul class="tablist">
<li><a href="main.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div class="tabs2">
<ul class="tablist">
<li><a href="files.html"><span>File&nbsp;List</span></a></li>
</ul>
</div>
</div>
<div class="header">
<div class="summary">
<a href="#nested-classes">Classes</a> </div>
<div class="headertitle">
<h1>/media/data/ProjWeb/Java/Bdd.java File Reference</h1> </div>
</div>
<div class="contents">
<table class="memberdecls">
<tr><td colspan="2"><h2><a name="nested-classes"></a>
Classes</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_bdd.html">Bdd</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Classe principalement statique servant d'intermédiaire avec la BDD. <a href="class_bdd.html#_details">More...</a><br/></td></tr>
</table>
</div>
<hr class="footer"/><address class="footer"><small>Generated on Tue May 29 2012 09:05:38 for BurgerQuizz by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.1 </small></address>
</body>
</html>

43
doc/java/_config_file_8java.html

@ -0,0 +1,43 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>BurgerQuizz: /media/data/ProjWeb/Java/ConfigFile.java File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<!-- Generated by Doxygen 1.7.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul class="tablist">
<li><a href="main.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div class="tabs2">
<ul class="tablist">
<li><a href="files.html"><span>File&nbsp;List</span></a></li>
</ul>
</div>
</div>
<div class="header">
<div class="summary">
<a href="#nested-classes">Classes</a> </div>
<div class="headertitle">
<h1>/media/data/ProjWeb/Java/ConfigFile.java File Reference</h1> </div>
</div>
<div class="contents">
<table class="memberdecls">
<tr><td colspan="2"><h2><a name="nested-classes"></a>
Classes</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_config_file.html">ConfigFile</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Classe statique servant à charger/récupérer/écrire les différents paramètres du fichier de configuration. <a href="class_config_file.html#_details">More...</a><br/></td></tr>
</table>
</div>
<hr class="footer"/><address class="footer"><small>Generated on Tue May 29 2012 09:05:38 for BurgerQuizz by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.1 </small></address>
</body>
</html>

43
doc/java/_list_row_8java.html

@ -0,0 +1,43 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>BurgerQuizz: /media/data/ProjWeb/Java/ListRow.java File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<!-- Generated by Doxygen 1.7.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul class="tablist">
<li><a href="main.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div class="tabs2">
<ul class="tablist">
<li><a href="files.html"><span>File&nbsp;List</span></a></li>
</ul>
</div>
</div>
<div class="header">
<div class="summary">
<a href="#nested-classes">Classes</a> </div>
<div class="headertitle">
<h1>/media/data/ProjWeb/Java/ListRow.java File Reference</h1> </div>
</div>
<div class="contents">
<table class="memberdecls">
<tr><td colspan="2"><h2><a name="nested-classes"></a>
Classes</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_list_row.html">ListRow</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Ligne pour les jComboBox ou les jList. <a href="class_list_row.html#_details">More...</a><br/></td></tr>
</table>
</div>
<hr class="footer"/><address class="footer"><small>Generated on Tue May 29 2012 09:05:38 for BurgerQuizz by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.1 </small></address>
</body>
</html>

43
doc/java/_page_8java.html

@ -0,0 +1,43 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>BurgerQuizz: /media/data/ProjWeb/Java/Page.java File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<!-- Generated by Doxygen 1.7.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul class="tablist">
<li><a href="main.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div class="tabs2">
<ul class="tablist">
<li><a href="files.html"><span>File&nbsp;List</span></a></li>
</ul>
</div>
</div>
<div class="header">
<div class="summary">
<a href="#nested-classes">Classes</a> </div>
<div class="headertitle">
<h1>/media/data/ProjWeb/Java/Page.java File Reference</h1> </div>
</div>
<div class="contents">
<table class="memberdecls">
<tr><td colspan="2"><h2><a name="nested-classes"></a>
Classes</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_page.html">Page</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Classe abstraite représentant la partie fixe des pages de catégorie, groupe et question. <a href="class_page.html#_details">More...</a><br/></td></tr>
</table>
</div>
<hr class="footer"/><address class="footer"><small>Generated on Tue May 29 2012 09:05:38 for BurgerQuizz by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.1 </small></address>
</body>
</html>

43
doc/java/_page_categorie_8java.html

@ -0,0 +1,43 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>BurgerQuizz: /media/data/ProjWeb/Java/PageCategorie.java File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<!-- Generated by Doxygen 1.7.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul class="tablist">
<li><a href="main.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div class="tabs2">
<ul class="tablist">
<li><a href="files.html"><span>File&nbsp;List</span></a></li>
</ul>
</div>
</div>
<div class="header">
<div class="summary">
<a href="#nested-classes">Classes</a> </div>
<div class="headertitle">
<h1>/media/data/ProjWeb/Java/PageCategorie.java File Reference</h1> </div>
</div>
<div class="contents">
<table class="memberdecls">
<tr><td colspan="2"><h2><a name="nested-classes"></a>
Classes</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_page_categorie.html">PageCategorie</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight"><a class="el" href="class_page.html" title="Classe abstraite représentant la partie fixe des pages de catégorie, groupe et question.">Page</a> d'administration des catégories. <a href="class_page_categorie.html#_details">More...</a><br/></td></tr>
</table>
</div>
<hr class="footer"/><address class="footer"><small>Generated on Tue May 29 2012 09:05:38 for BurgerQuizz by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.1 </small></address>
</body>
</html>

43
doc/java/_page_config_8java.html

@ -0,0 +1,43 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>BurgerQuizz: /media/data/ProjWeb/Java/PageConfig.java File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<!-- Generated by Doxygen 1.7.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul class="tablist">
<li><a href="main.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div class="tabs2">
<ul class="tablist">
<li><a href="files.html"><span>File&nbsp;List</span></a></li>
</ul>
</div>
</div>
<div class="header">
<div class="summary">
<a href="#nested-classes">Classes</a> </div>
<div class="headertitle">
<h1>/media/data/ProjWeb/Java/PageConfig.java File Reference</h1> </div><