diff --git a/README.md b/README.md index d9c08df..be9fcb9 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,9 @@ -# Jeu de pistes Sarreguemines +# Chasse au trésor Lycée Pange **Auteur :** Antoine WAEHREN +Sur cette version, la liste des énigmes n'affiche pas immédiatement toutes les énigmes, uniquement celles qui ont été résolues. L'énigme suivante est choisie aléatoirement. + ## Crédits Ce projet utilise le module QR Scanner de NIMIQ : https://github.com/nimiq/qr-scanner diff --git a/answer.php b/answer.php index 2d328bc..6b2a2a2 100644 --- a/answer.php +++ b/answer.php @@ -1,30 +1,17 @@ getArticleNb(); // L'énigme bonus est la dernière if (isset($_GET["code"]) && isset($_GET["team"]) && isset($_GET["id"])) { $team_id = htmlspecialchars($_GET["team"]); - // Recherche du groupe : - $stmt = $database->pdo_teams->prepare("SELECT * FROM teams WHERE id == :id"); - $stmt->bindValue(":id", $team_id); - $stmt->execute(); - // Vérification de l'existence du groupe : - if (!empty($stmt->fetch())) { + if ($database->checkTeamExists($team_id)) { $art_id = htmlspecialchars($_GET["id"]); - - // Recherche de l'énigme avec son code : - $stmt = $database->pdo_article->prepare("SELECT * FROM puzzles WHERE (id == :id AND code == :code)"); - $stmt->bindValue(":id", $art_id); - $stmt->bindValue(":code", htmlspecialchars($_GET["code"])); - $stmt->execute(); - $article = $stmt->fetch(); + $code = htmlspecialchars($_GET["code"]); + $article = $database->getArticle($art_id); // Données renvoyées : $data = [ @@ -33,27 +20,25 @@ ]; // Vérification de la combinaison ID énigme + code : - if (empty($article)) { - // Si la combinaison ne fonctionne pas, affichage de l'indice : - $stmt = $database->pdo_article->prepare("SELECT * FROM puzzles WHERE id == :id"); - $stmt->bindValue(":id", $art_id); - $stmt->execute(); - $article = $stmt->fetch(); + if (!$database->checkPuzzle($art_id, $code)) { $data["hint"] = $article["hint"]; } else { // On enregistre la réussite dans la table : - // Vérification que ce n'est pas déjà enregistré : - $stmt = $database->pdo_teams->prepare("SELECT * FROM solved WHERE (puzzle_id == :puzzle_id AND team_id == :team_id)"); - $stmt->bindValue(":puzzle_id", $art_id); + // Vérification que ce n'est pas déjà enregistré + // Si ce n'est pas le cas, on enregistre : + if (!$database->isPuzzleSolved($art_id, $team_id)) { + $database->solvePuzzle($art_id, $team_id); + } + + // On ajoute l'énigme bonus si toutes les autres sont résolues : + $stmt = $database->pdo_teams->prepare("SELECT COUNT(*) FROM solved WHERE team_id == :team_id"); $stmt->bindValue(":team_id", $team_id); $stmt->execute(); - // Si ce n'est pas le cas, on enregistre : - if (empty($stmt->fetch())) { - $stmt = $database->pdo_teams->prepare("INSERT INTO solved VALUES (:puzzle_id, :team_id)"); - $stmt->bindValue(":puzzle_id", $art_id); + if ($stmt->fetchAll()[0]["COUNT(*)"] == $bonus - 1) { + $stmt = $database->pdo_teams->prepare("UPDATE teams SET bonus = 1 WHERE id = :team_id"); $stmt->bindValue(":team_id", $team_id); $stmt->execute(); } diff --git a/article.php b/article.php index fb73093..abe506d 100644 --- a/article.php +++ b/article.php @@ -1,63 +1,42 @@ getArticleNb(); + $bonus = $database->getArticleNb(); // L'énigme bonus est la dernière if (isset($_GET["id"]) && isset($_GET["team"])) { $art_id = htmlspecialchars($_GET["id"]); $team_id = htmlspecialchars($_GET["team"]); - // Recherche de l'énigme indiquée dans la base : - $stmt = $database->pdo_article->prepare("SELECT * FROM puzzles WHERE id == :id"); - $stmt->bindValue(":id", $art_id); - $stmt->execute(); - $article = $stmt->fetch(); - // Vérification de l'existence du groupe et de l'énigme : - if (empty($article) || !$database->checkTeamExists($team_id)) { - header("Location: index.php"); - die(); + if (!$database->checkArticleExists($art_id)) { + if (!$database->checkTeamExists($team_id)) { + header("Location: index.php"); + die(); + } + else if ($art_id == -1) { + header("Location: puzzles.php?team=" . $team_id); + die(); + } + else { + header("Location: index.php"); + die(); + } } else { - // On cherche l'index de l'article dans la liste pzorder assignée à l'équipe : - $stmt = $database->pdo_teams->prepare("SELECT pzorder FROM teams WHERE id == :id"); - $stmt->bindValue(":id", $team_id); - $stmt->execute(); - $result = $stmt->fetch(); - $order = $result["pzorder"]; - - // Si un ordre d'énigmes n'a pas été défini au préalable pour cette équipe, on en choisit un au hasard : - if (is_null($order)) { - $order = rand(0, sizeof($pzorder)); - $stmt = $database->pdo_teams->prepare("UPDATE teams SET pzorder = :order WHERE id == :id"); - $stmt->bindValue(":id", $team_id); - $stmt->bindValue(":order", $order); - $stmt->execute(); + // On vérifie si l'énigme bonus n'est pas débloquée : + if (!$database->checkTeamBonus($team_id)) { + // Si c'est celle qui est sélectionnée, on retourne à la page d'accueil : + if ($art_id == $bonus) { + header("Location: index.php"); + die(); + } } - $pzo_arr = $pzorder[$order]; - $art_index = array_search($art_id, $pzo_arr); - $prev_art = $pzo_arr[$art_index - 1]; - if ($art_index == 0) { - $prev_art = $pzo_arr[$max_art - 1]; - } - $next_art = $pzo_arr[($art_index + 1) % $max_art]; - - // On indique si l'énigme est résolue : - $stmt = $database->pdo_teams->prepare("SELECT * FROM solved WHERE (team_id == :team_id AND puzzle_id == :puzzle_id)"); - $stmt->bindValue(":team_id", $team_id); - $stmt->bindValue(":puzzle_id", $art_id); - $stmt->execute(); - $solved = !empty($stmt->fetch()); + $article = $database->getArticle($art_id); + $next_art = $database->getNextPuzzle($team_id); + $solved = $database->isPuzzleSolved($art_id, $team_id); } } @@ -84,20 +63,12 @@
-

+

-
- - - - - - + -
-

@@ -106,7 +77,7 @@

-

+ .png"/>

diff --git a/data/article.db b/data/article.db index 507c973..26d8877 100644 Binary files a/data/article.db and b/data/article.db differ diff --git a/data/teams.db b/data/teams.db index c819427..c65365b 100644 Binary files a/data/teams.db and b/data/teams.db differ diff --git a/index.php b/index.php index 99338af..0ab8c67 100644 --- a/index.php +++ b/index.php @@ -2,8 +2,9 @@ require_once "require/base.php"; $database = new Database(); + $teams = $database->getTeams(); - // Si l'appareil a déjà choisi une équipe, on le redirige vers la bonne page : + // Si l'appareil a déjà choisi une équipe, on le redirige vers une énigme : if (isset($_COOKIE["team"])) { $team_id = htmlspecialchars($_COOKIE["team"]); @@ -11,19 +12,6 @@ header("Location: puzzles.php?team=" . $team_id); die(); } - - else { - $stmt = $database->pdo_teams->prepare("SELECT * FROM teams"); - $stmt->execute(); - $teams = $stmt->fetchAll(); - } - } - - // Sinon, on affiche la liste des équipes : - else { - $stmt = $database->pdo_teams->prepare("SELECT * FROM teams"); - $stmt->execute(); - $teams = $stmt->fetchAll(); } ?> diff --git a/puzzles.php b/puzzles.php index d7f0cbd..c341573 100644 --- a/puzzles.php +++ b/puzzles.php @@ -1,57 +1,36 @@ pdo_teams->prepare("SELECT * FROM teams WHERE id == :id"); - $stmt->bindValue(":id", $team_id); - $stmt->execute(); - - if (empty($stmt->fetch())) { + if (!$database->checkTeamExists($team_id)) { header("Location: index.php"); die(); } else { - // On crée un cookie pour enregistrer l'équipe sélectionnée : - setcookie( - "team", - $team_id, - time() + (365 * 24 * 60 * 60), - "/", - "", - false, - false - ); - - $stmt = $database->pdo_article->prepare("SELECT * FROM puzzles"); - - $stmt->execute(); - $puzzles = $stmt->fetchAll(); - - // Recherche de l'ordre des énigmes : - $stmt = $database->pdo_teams->prepare("SELECT pzorder FROM teams WHERE id == :id"); - $stmt->bindValue(":id", $team_id); - $stmt->execute(); - $result = $stmt->fetch(); - $order = $result["pzorder"]; - - // Si un ordre d'énigmes n'a pas été défini au préalable pour cette équipe, on en choisit un au hasard : - if (is_null($order)) { - $order = rand(0, sizeof($pzorder)); - $stmt = $database->pdo_teams->prepare("UPDATE teams SET pzorder = :order WHERE id == :id"); - $stmt->bindValue(":id", $team_id); - $stmt->bindValue(":order", $order); - $stmt->execute(); + if (!isset($_COOKIE["team"])) { + // On crée un cookie pour enregistrer l'équipe sélectionnée : + setcookie( + "team", + $team_id, + time() + (365 * 24 * 60 * 60), + "/", + "", + false, + false + ); } + + $solved = $database->getSolvedPuzzles($team_id); + $puzzles = []; + foreach ($solved as $p) { + array_push($puzzles, $database->getArticle($p)); + } + $next_art = $database->getNextPuzzle($team_id); } } @@ -80,16 +59,23 @@

-

- +