diff --git a/app/controller/JeuController.php b/app/controller/JeuController.php index e3ceeea5afd591244fc43291649f4784461b6219..1b10c85ab47e37c35ce13c600c83f5c76b1d5031 100644 --- a/app/controller/JeuController.php +++ b/app/controller/JeuController.php @@ -181,4 +181,36 @@ class JeuController extends Controller { public function displayRequestValid() { // la fonction d'affichage de réussite $this->view->display(); // on affiche la page avec le message de réussite } + + public function displayFavorisValid() { // la fonction d'affichage de réussite + session_start(); // on démarre une session pour avoir accès aux variables superglobales de session + $slug_jeu = $this->route["params"]["slug"]; + if(!isset($_SESSION['connected'])) { // vérification que membre connecté + $this->view->msg_error = "Vous n'êtes pas connecté !"; + $this->view->sous_msg = "Connectez-vous, puis revenez ajouter ce jeu. :)"; + $this->view->display(); // on affiche la page avec le message d'erreur + } + else if(!(Jeu::checkExists($slug_jeu))) { // vérification que jeu existe + $this->view->msg_error = "Ce jeu n'existe pas !"; + $this->view->sous_msg = "Vous pouvez peut-être demander son ajout via le formulaire de demande d'ajout de jeu. :)"; + $this->view->display(); // on affiche la page avec le message d'erreur + } + else if(Profil::checkJeuFavoris($_SESSION['user']->slug, $slug_jeu)) { // si jeu déjà dans favoris => on le retire + Profil::upadteJeuFavoris($_SESSION['user']->slug, $slug_jeu, 0); + $this->view->msg_success = "Ce jeu a été retiré de vos favoris !"; + $this->view->sous_msg = "Il en faut pour tous les goûts ! :)"; + $this->view->display(); // on affiche la page avec le message de réussite + } + else { // sinon, on le met en favoris + if(Profil::checkADejaJoue($_SESSION['user']->slug, $slug_jeu)) { // si une ligne joueur-jeu existe déjà => UPDATE + Profil::upadteJeuFavoris($_SESSION['user']->slug, $slug_jeu, 1); + } + else { // sinon => INSERT avec des null pour le classement et le score + Profil::insertJeuFavoris($_SESSION['user']->slug, $slug_jeu, 1); + } + $this->view->msg_success = "Ce jeu a été ajouté à vos favoris !"; + $this->view->sous_msg = ":)"; + $this->view->display(); // on affiche la page avec le message de réussite + } + } } diff --git a/app/kernel/Router.php b/app/kernel/Router.php index 81c9f6e02c3826e05260f5c018ed726dd9298717..00fc88f638856a6910eadbdc0d05477d064e2644 100644 --- a/app/kernel/Router.php +++ b/app/kernel/Router.php @@ -55,8 +55,13 @@ class Router $result["action"] = "displayRequestValid"; // il n'y a pas de paramètres attendus, on n'affecte pas $result["params"] } - - /*** consultation des profils ***/ + else if($parts[0] == "add_favoris" && count($parts) == 2) { // pour ajouter un jeu à ses favoris (add_favoris/nomdujeu) + $result["controller"] = "Jeu"; + $result["action"] = "displayFavorisValid"; + $result["params"]["slug"] = $parts[1]; //on a des paramètres dans l'URL (normalement le slug du jeu), on le stocke aussi + } + + /*** consultation des profils ***/ else if($parts[0] == "profil" && count($parts) == 2) { // consultation d'un profil : 2 morceaux (profil/pseudoDeLaPersonne) $result["controller"] = "Profil"; $result["action"] = "display"; diff --git a/app/model/Profil.php b/app/model/Profil.php index 1a05985e74ce4d0b2e9570af6bc36b4be492f29a..0fd63f1e87755f958a7b108051bedae35f55b361 100644 --- a/app/model/Profil.php +++ b/app/model/Profil.php @@ -71,6 +71,44 @@ class Profil extends Model { // classe de modèle pour l'affichage de profils return 0; // on aurait pu mettre deux return (un dans le if et un ici), mais bon... } + + public static function checkJeuFavoris($slug_joueur, $slug_jeu) { // méthode permettant de vérifier si un jeu est jeu favoris d'un joueur + $db = Database::getInstance(); // on récupère la connexion à la BDD + $sql = "SELECT * FROM R_joueur_jeu WHERE joueur = :slug_j AND jeu = :slug_jeu AND est_jeu_favoris"; + $req = $db->prepare($sql); // on prépare la requête + $req->execute(array(":slug_j" => $slug_joueur, ":slug_jeu" => $slug_jeu)); // on remplace les variables dans la requête + + if($result = $req->fetch()) { // on récupère l'enregistrement, s'il existe + return 1; + } + return 0; + } + + public static function checkADejaJoue($slug_joueur, $slug_jeu) { // méthode permettant de vérifier si un joueur a déjà joué à un jeu + $db = Database::getInstance(); // on récupère la connexion à la BDD + $sql = "SELECT * FROM R_joueur_jeu WHERE joueur = :slug_j AND jeu = :slug_jeu"; + $req = $db->prepare($sql); // on prépare la requête + $req->execute(array(":slug_j" => $slug_joueur, ":slug_jeu" => $slug_jeu)); // on remplace les variables dans la requête + + if($result = $req->fetch()) { // on récupère l'enregistrement, s'il existe + return 1; + } + return 0; + } + + public static function upadteJeuFavoris($slug_joueur, $slug_jeu, $favoris) { // méthode permettant de définir un jeu comme étant jeu favoris d'un joueur, ou l'inverse + $db = Database::getInstance(); // on récupère la connexion à la BDD + $sql = "UPDATE R_joueur_jeu SET est_jeu_favoris = :favoris WHERE joueur = :slug_j AND jeu = :slug_jeu"; + $req = $db->prepare($sql); // on prépare la requête + $req->execute(array(":favoris" => $favoris, ":slug_j" => $slug_joueur, ":slug_jeu" => $slug_jeu)); // on remplace les variables dans la requête + } + + public static function insertJeuFavoris($slug_joueur, $slug_jeu, $favoris) { // méthode permettant de définir un jeu comme étant jeu favoris d'un joueur, ou l'inverse + $db = Database::getInstance(); // on récupère la connexion à la BDD + $sql = "INSERT INTO R_joueur_jeu VALUES (:slug_joueur, :slug_jeu, null, null, :favoris) "; + $req = $db->prepare($sql); // on prépare la requête + $req->execute(array(":slug_joueur" => $slug_joueur, ":slug_jeu" => $slug_jeu, ":favoris" => $favoris)); // on remplace les variables dans la requête + } } diff --git a/app/view/Jeu/display.html b/app/view/Jeu/display.html index 6d7cb413d9c5444b913eb7da7896740cfde7c692..0e5d6151c38a44aeaad3d3d04c4316176cff1768 100644 --- a/app/view/Jeu/display.html +++ b/app/view/Jeu/display.html @@ -12,6 +12,26 @@ <?php echo $this->jeu->description; ?> </p> </div> + <?php + if(isset($_SESSION['connected']) && $_SESSION['connected'] == true) { + if(Profil::checkJeuFavoris($_SESSION['user']->slug, $this->jeu->slug)) { + ?> + <h2 class="stat-title">Vous n'aimez plus ce jeu ?</h2> + <div class="inscription-btn-container"> + <a class="inscription-btn" href="<?php echo BASE_URL; ?>/add_favoris/<?php echo $this->jeu->slug; ?>">Retirez-le de vos favoris !</a> + </div> + <?php + } + else { + ?> + <h2 class="stat-title">Vous aimez ce jeu ?</h2> + <div class="inscription-btn-container"> + <a class="inscription-btn" href="<?php echo BASE_URL; ?>/add_favoris/<?php echo $this->jeu->slug; ?>">Ajoutez-le à vos favoris !</a> + </div> + <?php + } + } + ?> </article> <div class="classement-card"> <table class="classement-table"> diff --git a/app/view/Jeu/displayFavorisValid.html b/app/view/Jeu/displayFavorisValid.html new file mode 100644 index 0000000000000000000000000000000000000000..c73d7cb1fc2f16e97ea081d643265fb429b563e4 --- /dev/null +++ b/app/view/Jeu/displayFavorisValid.html @@ -0,0 +1,23 @@ +<?php + // session déjà démarrée dans le contrôleur, pas besoin de le faire ici + + $page_title = "Ajout du jeu à ses favoris"; + include(ROOT."/app/view/Includes/header.include.html"); + + if(!is_null($this->msg_success)) { +?> + <article class="msg-valide"><h2><?php echo $this->msg_success; ?></h2></article> +<?php + } + else if(!is_null($this->msg_error)) { +?> + <article class="msg-erreur"><h2><?php echo $this->msg_error; ?></h2></article> +<?php + } +?> + + <article> + <p><?php echo $this->sous_msg; ?></p> + </article> + +<?php include(ROOT."/app/view/Includes/footer.include.html"); ?>