diff --git a/app/controller/IndexController.php b/app/controller/IndexController.php index d921451640e49e2f6a4d8a62507956c9a5ec3859..b9d59a20defeed5495671f5392ca02558acafc1f 100644 --- a/app/controller/IndexController.php +++ b/app/controller/IndexController.php @@ -4,8 +4,9 @@ class IndexController extends Controller { // contrôleur pour la page d'index, public function display() { // là on peut faire un tas de trucs cool, genre déclarer et initialiser les variables d'affichage par exemple ! - $this->view->list = Jeu::getList(); - $this->view->listprofils = Profil::getList(); + $this->view->last_member = Profil::getLastMember(); + $this->view->nb_members = Profil::getNbMembers(); + $this->view->most_played = Jeu::getMostPlayed(); $this->view->display(); // et on appelle la méthode display() qui va afficher la page } } diff --git a/app/controller/JeuController.php b/app/controller/JeuController.php index b502d0172cf427ced07aa7e59d2f1f3b74f2ec86..84da026d732f7b9e551b238734f6981e35b2e29f 100644 --- a/app/controller/JeuController.php +++ b/app/controller/JeuController.php @@ -4,9 +4,15 @@ include(ROOT."/Image.php"); class JeuController extends Controller { public function display() { $slug = $this->route["params"]["slug"]; //cf. le commentaire dans ProfilController.php - $this->view->jeu = Jeu::getFromSlug($slug); $this->view->classement = Classement::getFromSlug($slug); - $this->view->display(); + + if(in_array($slug, Jeu::getSlugList())) { // si le nom du jeu cherché est dans notre BDD, on peut l'afficher + $this->view->jeu = Jeu::getFromSlug($slug); + $this->view->display(); + } + else { + header('Location:'.BASE_URL.'/404'); + } } public function displayListe() { @@ -14,6 +20,17 @@ class JeuController extends Controller { $this->view->display(); } + public function listeJson() { + $this->view->liste = Jeu::getList(); + $this->view->display(); + } + + public function redirect() { + $slug = $this->route["params"]["slug"]; + $slugjeu = self::slugify($slug); + header('Location:jeu/'.$slugjeu); + } + public function displayFormAdd() { $this->view->display(); } diff --git a/app/controller/PartieController.php b/app/controller/PartieController.php index 2955880a2248c30581e5207dc487d73ed8501996..61a4ba76ab3dcaecb22e1dc79d0b79741399c711 100644 --- a/app/controller/PartieController.php +++ b/app/controller/PartieController.php @@ -8,34 +8,346 @@ */ class PartieController extends Controller { - public function displayForm(){ + public function displayStep0(){ $this->view->liste = Jeu::getList(); + $this->view->display(); + } + + public function displayStep1(){ + session_start(); + if(!isset($_SESSION['jeu_select'])) + header("Location:../add_partie"); + + $this->view->jeuactuel = $_SESSION['jeu_select']; $this->view->listej = Profil::getList(); $this->view->display(); } + + public function displayStep2(){ + session_start(); + if(!isset($_SESSION['jeu_select'])) + header("Location:../add_partie"); + if(!isset($_SESSION['joueurs_select'])) + header("Location:../add_partie/step1"); + + + $this->view->jeuactuel = $_SESSION['jeu_select']; + $this->view->listejactuel = $_SESSION['joueurs_select']; + $this->view->display(); + } + + public function displayStepe1(){ + session_start(); + if(!isset($_SESSION['jeu_select']) || !isset($_SESSION['equipes'])) + header("Location:../add_partie"); + + $this->view->jeuactuel = $_SESSION['jeu_select']; + $this->view->listej = Profil::getList(); + $this->view->equipes = $_SESSION['equipes']; + $this->view->display(); + } + + public function displayStepe2(){ + session_start(); + if(!isset($_SESSION['jeu_select'])) + header("Location:../add_partie"); + if(!isset($_SESSION['equipes'])) + header("Location:../add_partie/stepe1"); + + + $this->view->jeuactuel = $_SESSION['jeu_select']; + $this->view->equipes = $_SESSION['equipes']; + $this->view->display(); + } public function displayValid(){ $this->view->display(); } - public function verify(){ + public static function verifyStep0(){ - if(!isset($_POST['jeu']) || !isset($_POST['joueurs']) || !isset($_POST['scores'])) { + if(!isset($_POST['jeu'])) { //appeler une fonction d'erreur echo "<h1>Erreur : variables absentes</h1>"; die(); } - $data = $_POST; + $jeu = $_POST['jeu']; - $scores = explode(";", $data["scores"]); - print_r($scores); - if (count($scores) != count($data["joueurs"])){ - //appeler une fonction d'erreur - echo "<h1>Erreur : variables pb</h1>"; + if(!Jeu::checkExistsNom($jeu)) { + echo "<h1>Erreur : le jeu entré est introuvable dans la BD.</h1>"; die(); } - - Partie::addPartie($data['joueurs'], $scores, $data['jeu']); + + $jeu = Jeu::getFromNom($jeu); + session_start(); + $_SESSION['jeu_select'] = $jeu; + if($jeu->type == 'equipes'){ + $_SESSION['equipes'] = array(array()); + header('Location:stepe1'); + } + else + header('Location:step1'); } + public static function addjoueurs1(){ + session_start(); + if(!isset($_SESSION['jeu_select'])) + header("Location:../add_partie"); + if(!isset($_POST["joueur"])){ + echo "<h1>Erreur : pas de joueur entré.</h1>"; + die(); + } + $jeu = $_SESSION['jeu_select']; + $joueur = $_POST["joueur"]; + + if(Profil::checkExists($joueur)){ + $joueur_objet = Profil::getFromSlug($joueur); + } + else{ + echo "<h1>Erreur : le joueur est introuvable dans la base de données.</h1>"; + die(); + } + + if($jeu->type == 'equipes'){ + $ke = $_POST['equipejadd']; + foreach ($_SESSION['equipes'] as $equipe){ + if(in_array($joueur_objet, $equipe)){ + echo "<h1>Erreur : le joueur a déjà été inscrit pour cette partie.</h1>"; + die(); + } + } + array_push($_SESSION['equipes'][$ke], $joueur_objet); + header("Location:stepe1"); + } + else{ + if (!isset($_SESSION['joueurs_select'])){ + $_SESSION['joueurs_select'] = array($joueur_objet); + echo "<h1>L'ajout s'est bien passé.</h1>"; + header("Location:step1"); + } + + if(!in_array($joueur_objet, $_SESSION['joueurs_select'])) + array_push($_SESSION['joueurs_select'], $joueur_objet); + else{ + echo "<h1>Erreur : le joueur a déjà été inscrit pour cette partie.</h1>"; + die(); + } + echo "<h1>L'ajout s'est bien passé.</h1>"; + header("Location:step1"); + } + } + + public static function deljoueurs1(){ + session_start(); + if(!isset($_SESSION['jeu_select'])) + header("Location:../add_partie"); + + if($_SESSION['jeu_select']->type == 'duels') { + if (!isset($_SESSION['joueurs_select'])) + header("Location:step1"); + } + if($_SESSION['jeu_select']->type == 'equipes') { + if (!isset($_SESSION['equipes'])) + header("Location:stepe1"); + } + + if(!isset($_POST['joueurdel'])) + { + echo "<h1>Erreur : variables manquantes.</h1>"; + die(); + } + + if($_SESSION['jeu_select']->type == 'equipes'){ + unset($_SESSION['equipes'][$_POST['equipejdel']][$_POST['joueurdel']]); + $equipe_tmp = array(); + foreach ($_SESSION['equipes'][$_POST['equipejdel']] as $j) + array_push($equipe_tmp, $j); + $_SESSION['equipes'][$_POST['equipejdel']] = $equipe_tmp; + header("Location:stepe1"); + } + else{ + unset($_SESSION['joueurs_select'][$_POST['joueurdel']]); + $joueurs_tmp = array(); + foreach ($_SESSION['joueurs_select'] as $j) + array_push($joueurs_tmp, $j); + $_SESSION['joueurs_select'] = $joueurs_tmp; + header("Location:step1"); + } + } + public static function delequipe(){ + session_start(); + if (!isset($_SESSION['jeu_select'])) + header("Location:../add_partie"); + if (!isset($_SESSION['equipes'])) + header("Location:stepe1"); + if (count($_SESSION['equipes']) <= 1){ + echo "<h1>Erreur : vous ne pouvez pas supprimer la seule équipe restante.</h1>"; + die(); + } + + if(!isset($_POST['equipe'])){ + echo "<h1>Erreur : variables manquantes.</h1>"; + die(); + } + + unset($_SESSION['equipes'][$_POST['equipe']]); + $equipe_tmp = array(); + foreach ($_SESSION['equipes'] as $e) + array_push($equipe_tmp, $e); + $_SESSION['equipes'] = $equipe_tmp; + header("Location:stepe1"); + } + + public static function addequipe(){ + session_start(); + if (!isset($_SESSION['jeu_select'])) + header("Location:../add_partie"); + if (count($_SESSION['equipes']) == $_SESSION['jeu_select']->max_equipes){ + echo "<h1>Erreur : vous ne pouvez pas créer d'équipe supplémentaire.</h1>"; + die(); + } + + array_push($_SESSION['equipes'], array()); + header("Location:stepe1"); + } + + public static function verifyStep1(){ + session_start(); + if(!isset($_SESSION['jeu_select'])) + header("Location:../add_partie"); + $jeu_actuel = $_SESSION['jeu_select']; + if ($jeu_actuel->type == 'equipes'){ + if(!isset($_SESSION['equipes'])) + header("Location:stepe1"); + $equipes = $_SESSION['equipes']; + if (count($equipes) < $jeu_actuel->min_equipes){ + echo "<h1>Erreur : il n'y a pas assez d'équipes.</h1>"; + die(); + } + if (count($equipes) > $jeu_actuel->max_equipes){ + echo "<h1>Erreur : il y a trop d'équipes.</h1>"; + die(); + } + + foreach ($equipes as $ke => $e){ + if (count($e) < $jeu_actuel->min_joueurs){ + $ke = $ke+1; + echo "<h1>Erreur : il n'y a pas assez de joueurs dans l'équipe $ke.</h1>"; + die(); + } + if (!is_null($jeu_actuel->max_joueurs)){ + if (count($e) > $jeu_actuel->max_joueurs){ + $ke = $ke+1; + echo "<h1>Erreur : il y a trop de joueurs dans l'équipe $ke.</h1>"; + die(); + } + } + } + + header("Location:stepe2"); + } + else{ + if(!isset($_SESSION['joueurs_select'])) + header("Location:step1"); + $joueurs = $_SESSION['joueurs_select']; + if (count($joueurs) < $jeu_actuel->min_joueurs){ + echo "<h1>Erreur : il n'y a pas assez de joueurs.</h1>"; + die(); + } + if (count($joueurs) > $jeu_actuel->max_joueurs){ + echo "<h1>Erreur : il y a trop de joueurs.</h1>"; + die(); + } + header('Location:step2'); + } + + + + } + + + public function verifyStep2(){ + session_start(); + if(!isset($_SESSION['jeu_select'])) + header("Location:../add_partie"); + + $jeu = $_SESSION['jeu_select']; + if ($jeu->type == 'equipes') { + if (!isset($_SESSION['equipes'])) + header("Location:stepe1"); + } + else{ + if(!isset($_SESSION['joueurs_select'])) + header("Location:../add_partie/step1"); + } + + if(!isset($_POST['scores'])) { + //appeler une fonction d'erreur + echo "<h1>Erreur : variables absentes</h1>"; + die(); + } + + + $scores = $_POST["scores"]; + foreach ($scores as $s){ + if(!is_numeric($s)) { + echo "<h1>Erreur : les scores doivent être des nombres.</h1>"; + die(); + } + } + if ($jeu->type == 'equipes') { + $equipes = $_SESSION['equipes']; + $ns = count($scores); + $nj = count($equipes); + if ($ns != $nj){ + //appeler une fonction d'erreur + echo "<h1>Erreur : scores et joueurs incohérents</h1>"; + die(); + } + + $pb = Partie::addPartie($equipes, $scores, $jeu); + if(!$pb) { + unset($_SESSION['equipes']); + unset($_SESSION['jeu_select']); + header('Location:valid'); // Redirection vers la page OK + } + switch ($pb) { + case 2: + echo "<h1>Erreur de connexion à la BD.</h1>"; + die(); + break; + default: + echo "<h1>Erreur non gérée.</h1>"; + die(); + break; + } + } + else{ + $joueurs = $_SESSION['joueurs_select']; + $ns = count($scores); + $nj = count($joueurs); + if ($ns != $nj){ + //appeler une fonction d'erreur + print_r($scores); + echo "<h1>Erreur : scores et joueurs incohérents</h1>"; + die(); + } + $pb = Partie::addPartie($joueurs, $scores, $jeu); + if(!$pb) { + unset($_SESSION['jeu_select']); + unset($_SESSION['joueurs_select']); + header('Location:valid'); // Redirection vers la page OK + } + switch ($pb) { + case 2: + echo "<h1>Erreur de connexion à la BD.</h1>"; + die(); + break; + default: + echo "<h1>Erreur non gérée.</h1>"; + die(); + break; + } + } + } } \ No newline at end of file diff --git a/app/kernel/Router.php b/app/kernel/Router.php index b91874d5e842e0a0d755ab56b46ac5106ef9223e..f0850bed8cf678cb0645a69b1e849cf85eae4f54 100644 --- a/app/kernel/Router.php +++ b/app/kernel/Router.php @@ -1,13 +1,15 @@ <?php -class Router { // classe PHP permettant l'analyse de l'URL des requêtes - public static function analyze($query) { // méthode d'analyse de la requête - // on définit une variable, par défaut initialisée sur les paramètres de page d'erreur 404 (page non trouvée) - $result = array( - "controller" => "Error", // le nom du contrôleur à instancier - "action" => "error404", // le nom de l'action à effectuer, autrement dit de la méthode à appeler dans ce contrôleur - "params" => array() // les paramètres de la requête (dans un tableau), par défaut aucun - ); +class Router +{ // classe PHP permettant l'analyse de l'URL des requêtes + public static function analyze($query) + { // méthode d'analyse de la requête + // on définit une variable, par défaut initialisée sur les paramètres de page d'erreur 404 (page non trouvée) + $result = array( + "controller" => "Error", // le nom du contrôleur à instancier + "action" => "error404", // le nom de l'action à effectuer, autrement dit de la méthode à appeler dans ce contrôleur + "params" => array() // les paramètres de la requête (dans un tableau), par défaut aucun + ); if($query === "" || $query === "/") { // on regarde si la requête est identique (===) à la chaîne vide ou "/", et si oui, c'est qu'on voulait accéder à la page d'accueil $result["controller"] = "Index"; // le contrôleur est donc Index @@ -23,11 +25,21 @@ class Router { // classe PHP permettant l'analyse de l'URL des requêtes $result["action"] = "display"; // on veut afficher les informations d'un jeu, donc on donne l'action "display" $result["params"]["slug"] = $parts[1]; //on a des paramètres dans l'URL (normalement le nom/id du jeu), on le stocke aussi } + else if($parts[0] == "jeu" && count($parts) == 1 && isset($_POST['rechercheJeu'])) { // on veut consulter la fiche d'un jeu via la barre de recherche du header + $result["controller"] = "Jeu"; // le contrôleur à instancier sera "JeuController", on met donc "Jeu" dans la variable de résultat + $result["action"] = "redirect"; // on veut rediriger vers la page d'un jeu, donc on donne l'action "redirect" + $result["params"]["slug"] = $_POST['rechercheJeu']; //on a un paramètre (le nom du jeu), on le stocke aussi + } else if($parts[0] == "listejeux") { // on veut consulter la liste des jeux (listejeux/, avec n'importe quoi derrière) $result["controller"] = "Jeu"; // le contrôleur à instancier sera "JeuController", on met donc "Jeu" dans la variable de résultat $result["action"] = "displayListe"; // on veut afficher la liste des jeux, donc on donne l'action "displayListe" // il n'y a pas de paramètres attendus, on n'affecte pas $result["params"] } + else if($parts[0] == "jeux") { // on veut récupérer la liste des jeux au format JSON + $result["controller"] = "Jeu"; // le contrôleur à instancier sera "JeuController", on met donc "Jeu" dans la variable de résultat + $result["action"] = "listeJson"; // on veut générer une sortie au format json, on donne donc l'action "listeJson" + // il n'y a pas de paramètres attendus, on n'affecte pas $result["params"] + } else if($parts[0] == "addjeu" && count($parts) == 1) { // on veut afficher le formulaire d'ajout(url/addjeu) $result["controller"] = "Jeu"; $result["action"] = "displayFormAdd"; // on veut afficher le formulaire @@ -50,19 +62,16 @@ class Router { // classe PHP permettant l'analyse de l'URL des requêtes $result["action"] = "display"; $result["params"]["slug"] = $parts[1]; } - else if($parts[0] == "profil" && count($parts) == 3 && $parts[2] == "edit") { $result["controller"] = "Profil"; $result["action"] = "displayEdit"; $result["params"]["slug"] = $parts[1]; } - else if($parts[0] == "profil" && count($parts) == 4 && $parts[2] == "edit" && $parts[3] == "verify") { $result["controller"] = "Profil"; $result["action"] = "verifyEdit"; $result["params"]["slug"] = $parts[1]; } - else if($parts[0] == "profil" && count($parts) == 4 && $parts[2] == "edit" && $parts[3] == "valid") { $result["controller"] = "Profil"; $result["action"] = "displayValid"; @@ -86,7 +95,7 @@ class Router { // classe PHP permettant l'analyse de l'URL des requêtes } else if($parts[0] == "deconnexion" && count($parts) == 1) { // page de déconnexion $result["controller"] = "Connexion"; - $result["action"] = "displayDisconnect"; // "displayForm" pour afficher le formulaire + $result["action"] = "displayDisconnect"; // "displayDisconnect" pour afficher la page de déconnexion réussie } else if($parts[0] == "connexion" && count($parts) == 2 && $parts[1] == "valid") { // connexion réussie $result["controller"] = "Connexion"; @@ -115,18 +124,42 @@ class Router { // classe PHP permettant l'analyse de l'URL des requêtes $result["action"] = "save"; // "save" pour appeler la méthode d'enregistrement dans la BDD } - /*** Ajout de partie ***/ - else if($parts[0] == "add_partie" && count($parts) == 1){ // formulaire d'ajout de partie - $result["controller"] = "Partie"; - $result["action"] = "displayForm"; // "displayForm" pour afficher le formulaire - } - else if($parts[0] == "add_partie" && count($parts) == 2 && $parts[1] == "valid"){ // Page d'ajout réussie + /*** Ajout de partie ***/ + else if ($parts[0] == "add_partie" && count($parts) == 1) { + $result["controller"] = "Partie"; + $result["action"] = "displayStep0"; + } + else if ($parts[0] == "add_partie" && count($parts) == 2 && $parts[1] == "valid") { + $result["controller"] = "Partie"; + $result["action"] = "displayValid"; + } + else if ($parts[0] == "add_partie" && count($parts) == 2 && $parts[1] == "step1") { $result["controller"] = "Partie"; - $result["action"] = "displayValid"; // "displayForm" pour afficher le formulaire + $result["action"] = "displayStep1"; + } + else if ($parts[0] == "add_partie" && count($parts) == 2 && $parts[1] == "step2") { + $result["controller"] = "Partie"; + $result["action"] = "displayStep2"; } - else if($parts[0] == "add_partie" && count($parts) == 2 && $parts[1] == "verify"){ // Page d'ajout réussie + else if ($parts[0] == "add_partie" && count($parts) == 2 && $parts[1] == "stepe1") { + $result["controller"] = "Partie"; + $result["action"] = "displayStepe1"; + } + else if ($parts[0] == "add_partie" && count($parts) == 2 && $parts[1] == "stepe2") { + $result["controller"] = "Partie"; + $result["action"] = "displayStepe2"; + } + else if ($parts[0] == "add_partie" && count($parts) == 2 && $parts[1] == "verifystep0") { + $result["controller"] = "Partie"; + $result["action"] = "verifyStep0"; + } + else if ($parts[0] == "add_partie" && count($parts) == 2 && $parts[1] == "verifystep1") { $result["controller"] = "Partie"; - $result["action"] = "verify"; // "displayForm" pour afficher le formulaire + $result["action"] = "verifyStep1"; + } + else if ($parts[0] == "add_partie" && count($parts) == 2 && $parts[1] == "verifystep2") { + $result["controller"] = "Partie"; + $result["action"] = "verifyStep2"; } /*** Ajout de l'administration ***/ @@ -139,11 +172,29 @@ class Router { // classe PHP permettant l'analyse de l'URL des requêtes $result["controller"] = 'Admin'; $result['action'] = "displayJeu"; } - - // à chaque fois qu'on crée une nouvelle page, il faut rajouter un cas à cet endroit ! - - // si on n'a rien trouvé que l'on connaissait, alors la page demandée n'existe pas => erreur 404. Ça tombe bien, c'est comme ça qu'on a initialisé la variable ! :-D - } - return $result; // on renvoie le tableau avec les informations nécessaires pour savoir quoi faire - } + + else if ($parts[0] == "add_partie" && count($parts) == 2 && $parts[1] == "addjoueurs1") { + $result["controller"] = "Partie"; + $result["action"] = "addjoueurs1"; + } + else if ($parts[0] == "add_partie" && count($parts) == 2 && $parts[1] == "deljoueurs1") { + $result["controller"] = "Partie"; + $result["action"] = "deljoueurs1"; + } + else if ($parts[0] == "add_partie" && count($parts) == 2 && $parts[1] == "addequipe") { + $result["controller"] = "Partie"; + $result["action"] = "addequipe"; + } + else if ($parts[0] == "add_partie" && count($parts) == 2 && $parts[1] == "delequipe") { + $result["controller"] = "Partie"; + $result["action"] = "delequipe"; + } + + + // à chaque fois qu'on crée une nouvelle page, il faut rajouter un cas à cet endroit ! + + // si on n'a rien trouvé que l'on connaissait, alors la page demandée n'existe pas => erreur 404. Ça tombe bien, c'est comme ça qu'on a initialisé la variable ! :-D + } + return $result; // on renvoie le tableau avec les informations nécessaires pour savoir quoi faire + } } diff --git a/app/model/ELO_function.php b/app/model/ELO_function.php index 92e428d9e7949f0730fc441405bc1590b7d6ce03..6aa37837158ec5e18b43668fbec09b4c620a19be 100644 --- a/app/model/ELO_function.php +++ b/app/model/ELO_function.php @@ -97,7 +97,7 @@ function ELO_classement($S, $R, $K) } -/** Fonction qui calcules les différentiels de scores obtenus après une à count($S) joueurs +/** Fonction qui calcule les différentiels de scores obtenus après une à count($S) joueurs * en considérant que $R correspond au score des joueurs à cette partie. * Ne prend pas en compte les écarts de scores entre les joueurs, la fonction ne construisant qu'un classement * entre les joueurs. @@ -117,7 +117,7 @@ function ELO_scores($S, $R, $K){ throw new DomainException; $R_classement = array_fill(0, $m, 0); - asort($R); + arsort($R); $i = 1; foreach ($R as $k => $val){ $R_classement[$k] = $i; diff --git a/app/model/Jeu.php b/app/model/Jeu.php index 40f8af576e0c09b68db600963235cb1193ab181b..f873c0355e543749ab6e61aef73c25f3e11c95f4 100644 --- a/app/model/Jeu.php +++ b/app/model/Jeu.php @@ -1,5 +1,6 @@ <?php + class Jeu extends Model { public $id, $nom, $description, $slug; @@ -21,6 +22,22 @@ class Jeu extends Model { } + + public static function getMostPlayed() { + $db = Database::getInstance(); + $sql = 'SELECT nom, slug, COUNT(*) as "parties" FROM R_partie JOIN R_jeu ON slug = jeu GROUP BY nom ORDER BY parties DESC'; + $stmt = $db->query($sql); + $ret = array(); + $k = 0; + while($k<3 && ($elt = $stmt->fetch())) { + echo $elt['nom'].'<br>'; + $k++; + array_push($ret, $elt); + } + return $ret; + + } + public static function getSlugList() { $db = Database::getInstance(); $sql = "SELECT slug FROM R_jeu"; @@ -70,6 +87,32 @@ class Jeu extends Model { } } + + public static function getFromNom($nom_jeu) + { + $db = Database::getInstance(); + $sql = "SELECT * FROM R_jeu WHERE nom = :nom"; + $stmt = $db->prepare($sql); + $stmt->setFetchMode(PDO::FETCH_CLASS, "Jeu"); // règle le type dans lequel on doit mettre les données (PDO va chercher les attributs de la classe de même nom que ses colonnes de BDD et mettre dedans les valeurs correspondantes) + $stmt->execute(array(":nom" => $nom_jeu)); + return $stmt->fetch(); + } + + + public static function checkExistsNom($nom) + { // méthode permettant de vérifier si un jeu existe dans la BDD + $db = Database::getInstance(); // on récupère la connexion à la BDD + $sql = "SELECT * FROM R_jeu WHERE nom = :nom"; + $req = $db->prepare($sql); // on prépare la requête + $req->execute(array(":nom" => $nom)); // 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; // on aurait pu mettre deux return (un dans le if et un ici), mais bon... + } + } diff --git a/app/model/Partie.php b/app/model/Partie.php index fe5a9c0e5f2d41f2d75dfa50d2dfd8df91044bac..6ec08a224ac58c088001b63ab912d161b3b56466 100644 --- a/app/model/Partie.php +++ b/app/model/Partie.php @@ -11,7 +11,8 @@ class Partie extends Model { public $joueurs, $scores, $lejeu, $date, $slug; - public static function getFromSlug($slug_partie) { + public static function getFromSlug($slug_partie) + { $db = Database::getInstance(); $sql = "SELECT * FROM R_partie WHERE slug = :slug"; $stmt = $db->prepare($sql); @@ -20,15 +21,17 @@ class Partie extends Model return $stmt->fetch(); } - public static function getList() { - $db = Database::getInstance(); + public static function getList() + { + $db = Database::getInstance() ; $sql = "SELECT * FROM R_partie"; $stmt = $db->query($sql); $stmt->setFetchMode(PDO::FETCH_CLASS, "Partie"); return $stmt->fetchAll(); } - public static function checkExists($slug_partie) { // méthode permettant de vérifier si une partie existe dans la BDD + public static function checkExists($slug_partie) + { // méthode permettant de vérifier si une partie existe dans la BDD $db = Database::getInstance(); // on récupère la connexion à la BDD $sql = "SELECT * FROM R_partie WHERE slug = :slug"; $req = $db->prepare($sql); // on prépare la requête @@ -38,142 +41,164 @@ class Partie extends Model return true; } - return false; // on aurait pu mettre deux return (un dans le if et un ici), mais bon... + return false; // on aurait pu mettre deux return (un dans le if et un ici), mais bon... } - private static function calcul_classement($R){ + private static function calcul_classement($R) + { $m = count($R); $R_classement = array_fill(0, $m, 0); - asort($R); + arsort($R); $i = 1; - foreach ($R as $k => $val){ + foreach ($R as $k => $val) { $R_classement[$k] = $i; $i++; } return $R_classement; } - private static function classeur($score, $id_jeu){ + + public static function updateClassement($jeu) + { $db = Database::getInstance(); - $sql = "SELECT classement, score FROM R_joueur_jeu WHERE jeu = :id_jeu SORT BY classement DESC;"; - $stmt = $db->prepare($sql); - if($stmt->execute(array(":id_jeu" => $id_jeu))) { - while ($tmp = $stmt->fetch()) { - if ($score <= $tmp['score']) - { - return $tmp['classement'] + 1; + $sql1 = "SELECT joueur FROM R_joueur_jeu ORDER BY score DESC"; + $sql2 = "UPDATE R_joueur_jeu SET classement = :classement WHERE joueur = :joueur AND jeu = :jeu;"; + $stmt1 = $db->prepare($sql1); + $stmt2 = $db->prepare($sql2); + if ($stmt1->execute()) { + $i = 1; + while ($row = $stmt1->fetch()) { + if ($stmt2->execute(array(":classement" => $i, ":joueur" => $row['joueur'], ":jeu" => $jeu->slug))) { + + } else { + echo "pb updateClassement"; + die(); } + $i++; } + } else { + echo "pb updateClassement"; + die(); } - return 1; - } + } - public static function addPartie($joueurs, $scores, $nom_jeu) { + public static function addPartie($joueurs, $scores, $jeu) + { $db = Database::getInstance(); $datestr = date("Y-m-d H:i:s"); - $sql0 = "SELECT id FROM R_jeu WHERE nom = :nom_jeu;"; - $sql1 = "INSERT INTO R_partie (id_jeu, date) VALUES (:id_jeu, :date);"; - $sqlp = "SELECT id FROM R_partie WHERE id_jeu = :id_jeu AND date = :date;"; - $sql2 = "SELECT id FROM R_joueur WHERE nom = :joueur;"; + $sql1 = "INSERT INTO R_partie (jeu, date) VALUES (:id_jeu, :date);"; + $sql2 = "SELECT id FROM R_partie WHERE jeu = :id_jeu AND date = :date;"; $sql3 = "SELECT score FROM R_joueur_jeu WHERE joueur = :id_joueur AND jeu = :id_jeu;"; - $sql4 = "INSERT INTO R_joueur_partie (partie, joueur, classement, score, id_jeu) - VALUES (:id_partie, :id_joueur,:classement, :score, :id_jeu);"; - $sql5 = "UPDATE R_joueur_jeu SET score = :new_score, classement = :new_classement WHERE joueur = :id_joueur AND jeu = :id_jeu;"; + $sql4 = "INSERT INTO R_joueur_partie (partie, joueur, classement, score) + VALUES (:partie, :joueur,:classement, :score);"; + $sql5 = "UPDATE R_joueur_jeu SET score = :new_score WHERE joueur = :id_joueur AND jeu = :id_jeu;"; $sqlN = "INSERT INTO R_joueur_jeu (joueur, jeu, score) VALUES (:id_joueur, :id_jeu, :score);"; - $sql6 = "UPDATE R_joueur_jeu SET classement = classement + 1 WHERE classement > :new_classement;"; - $stmt0 = $db->prepare($sql0); $stmt1 = $db->prepare($sql1); - $stmtp = $db->prepare($sqlp); $stmt2 = $db->prepare($sql2); $stmt3 = $db->prepare($sql3); $stmt4 = $db->prepare($sql4); $stmt5 = $db->prepare($sql5); - $stmt6 = $db->prepare($sql6); - print($nom_jeu); - - if($stmt0->execute(array(":nom_jeu" => $nom_jeu))) { - if($row = $stmt0->fetch()) { - $id_jeu = $row[0]; - if(!Jeu::checkExistsId($id_jeu)) - throw new UnexpectedValueException; - - if($stmt1->execute(array(":id_jeu" => $id_jeu, ":date" => $datestr))) - { - $stmtp->execute(array(":id_jeu" => $id_jeu, ":date" => $datestr)); - $id_partie = $stmtp->fetch()['id']; - $m = count($joueurs); - $id_joueur = array_fill(0, $m, 0); - for ($j = 0; $j<$m; $j++){ - $id_joueur[$j] = $row[0]; - if($stmt2->execute(array(":joueur" => $joueurs[$j]))) { - if ($row = $stmt2->fetch()) { - $id_joueur[$j] = $row[0]; - } - } - else - echo "stmt2, dc"; - } - $old_score = array_fill(0, $m, 0); - for($j = 0; $j<$m; $j++) { - if ($stmt3->execute(array(":id_joueur" => $id_joueur[$j], ":id_jeu" => $id_jeu))) { + + if ($stmt1->execute(array(":id_jeu" => $jeu->slug, ":date" => $datestr))) { + // insertion d'une nouvelle partie + // on suppose que si l'insertion fonctionne, la lecture aussi, donc que les droits d'accés sont bons + $stmt2->execute(array(":id_jeu" => $jeu->slug, ":date" => $datestr)); + $id_partie = $stmt2->fetch()['id']; + + $m = count($scores); + + $old_score = array_fill(0, $m, 0); + $old_score_e = array(); + foreach ($joueurs as $k => $joueur){ + // version avec équipes + if ($jeu->type == 'equipes'){ + $old_score_e[$k] = array(); + foreach ($joueur as $kj => $j){ + if ($stmt3->execute(array(":id_joueur" => $j->slug, ":id_jeu" => $jeu->slug))) { if ($row = $stmt3->fetch()) { - $old_score[$j] = $row[0]; - } - else { - $old_score[$j] = 1000; + // Le joueur a déja joué à ce jeu + $old_score_e[$k][$kj]= $row[0]; + } else { + // ou le joueur n'a jamais joué à ce jeu, on je rajoute à la relation. + $old_score_e[$k][$kj]= 1000; $stmtN = $db->prepare($sqlN); - if($stmtN->execute(array(":id_joueur" => $id_joueur[$j], ":id_jeu" => $id_jeu, ":score" => 1000))){ - echo "insertion joueur $j<br />"; - } - else{ - echo "stmt n, dc <br />"; - print_r($id_joueur); - print($id_jeu); - die(); - } + if ($stmtN->execute(array(":id_joueur" => $j->slug, ":id_jeu" => $jeu->slug, ":score" => 1000))) { + + } else + return 2; } + $old_score[$k] = array_sum($old_score_e[$k])/count($old_score_e[$k]); } - else - echo "stmt3, dc<br />"; } - $diff_scores = ELO_scores($scores, $scores, 32); - $classement = self::calcul_classement($diff_scores); - print_r($old_score); - print_r($diff_scores); - - for($j = 0; $j<$m; $j++) { - if($stmt4->execute(array(":id_partie" => $id_partie, - ":id_joueur" => $id_joueur[$j], "id_jeu" => $id_jeu, - ":classement" => $classement[$j], ":score" => $old_score[$j]))) { - $newS = $old_score[$j] + $diff_scores[$j]; - print($newS); - $classement_jeu = Partie::classeur($newS, $id_jeu); + } + else{ + // récupération du score actuel de chaque joueur + if ($stmt3->execute(array(":id_joueur" => $joueur->slug, ":id_jeu" => $jeu->slug))) { + if ($row = $stmt3->fetch()) { + // Le joueur a déja joué à ce jeu + $old_score[$k] = $row[0]; + } else { + // ou le joueur n'a jamais joué à ce jeu, on je rajoute à la relation. + $old_score[$k] = 1000; + $stmtN = $db->prepare($sqlN); + if ($stmtN->execute(array(":id_joueur" => $joueur->slug, ":id_jeu" => $jeu->slug, ":score" => 1000))) { + + } else + return 2; + } + + } + } + } + // Calcul de la nouvelle différence de scores et du classement de chacun dans la partie + $diff_scores = ELO_scores($old_score, $scores, 32); + $classement = self::calcul_classement($diff_scores); + print_r($joueurs); + print_r($old_score_e); + foreach ($joueurs as $k => $joueur) { + if ($jeu->type == 'equipes') { + foreach ($joueur as $kj => $j){ + // Insertion des infos de la partie (avec le score avant la partie et le classement interne à la partie) + // pour chaque joueur + if ($stmt4->execute(array(":partie" => $id_partie, + ":joueur" => $j->slug, + ":classement" => $classement[$k], ":score" => $old_score_e[$k][$kj])) + ) { + $newS = $old_score[$k][$kj] + $diff_scores[$k]; + // On met à jour le score du joueur actuel dans sa relation avec le jeu if ($stmt5->execute(array(":new_score" => $newS, - ":id_jeu" => $id_jeu, ":id_joueur" => $id_joueur[$j], ":new_classement" => $classement_jeu)) + ":id_jeu" => $jeu->slug, ":id_joueur" => $j->slug)) ) { - if ($stmt6->execute(array(":new_classement" => $classement_jeu))){ - //C'est dans la boite - echo "works well enough<br />"; - } - else - echo "stmt6, dc<br />"; - } - else - echo "stmt5, dc<br />"; - } - else - echo "stmt4, dc<br />"; + } else + return 2; + } else + return 2; } } - else - echo "stmt1, dc<br />"; + else { + // Insertion des infos de la partie (avec le score avant la partie et le classement interne à la partie) + // pour chaque joueur + if ($stmt4->execute(array(":partie" => $id_partie, + ":joueur" => $joueur->slug, + ":classement" => $classement[$k], ":score" => $old_score[$k])) + ) { + $newS = $old_score[$k] + $diff_scores[$k]; + // On met à jour le score du joueur actuel dans sa relation avec le jeu + if ($stmt5->execute(array(":new_score" => $newS, + ":id_jeu" => $jeu->slug, ":id_joueur" => $joueur->slug)) + ) { + } else + return 2; + } else + return 2; + } } - } - else { - echo "Arise, ça marche pas...<br />"; die(); - } + } else + return 2; + // met à jour le classement de tous les joueurs + self::updateClassement($jeu); + return 0; } - -} \ No newline at end of file +} diff --git a/app/model/Profil.php b/app/model/Profil.php index e3b1beeaf0895e444c1efcac72e076af37868303..1a05985e74ce4d0b2e9570af6bc36b4be492f29a 100644 --- a/app/model/Profil.php +++ b/app/model/Profil.php @@ -19,7 +19,7 @@ class Profil extends Model { // classe de modèle pour l'affichage de profils $req->setFetchMode(PDO::FETCH_CLASS, "Profil"); return $req->fetchAll(); } - + public static function setPassword($slug, $password) { $db = Database::getInstance(); // idem à au-dessus $sql = "UPDATE R_joueur SET password = :password WHERE slug = :slug"; @@ -27,15 +27,49 @@ class Profil extends Model { // classe de modèle pour l'affichage de profils $req->execute(array(':password' => $password, ':slug' => $slug)); } - public static function setAutre($slug, $data) { + public static function setAutre($slug, $data) + { $db = Database::getInstance(); // idem à au-dessus $sql = "UPDATE R_joueur SET nom = :nom, prenom = :prenom, email = :email, avatar = :avatar WHERE slug = :slug"; $req = $db->prepare($sql); $req->execute(array(':nom' => $data['nom'], - ':prenom' => $data['prenom'], - ':email' => $data['email'], - ':avatar' => $data['avatar'], - ':slug' => $slug)); + ':prenom' => $data['prenom'], + ':email' => $data['email'], + ':avatar' => $data['avatar'], + ':slug' => $slug)); + } + + public static function getLastMember() { // méthode permettant de récupérer les informations relatives au dernier membre inscrit en BDD + $db = Database::getInstance(); // on récupère la connexion à la BDD + $sql = "SELECT * FROM R_joueur"; // on définit la requête qu'on enverra + $req = $db->query($sql); // on exécute la requête + $req->setFetchMode(PDO::FETCH_CLASS, "Profil"); // règle le type dans lequel on doit mettre les données (PDO va chercher les attributs de la classe de même nom que ses colonnes de BDD et mettre dedans les valeurs correspondantes) + $ret = null; + while ($elt = $req->fetch()) { // on parcourt tous les résultats et on les stocke au fur et à mesure dans la même variable, jusqu'au dernier. C'est lui qui restera à la fin + $ret = $elt; + } + return $ret; // on retourne les données du membre + } + + public static function getNbMembers() + { // méthode permettant de récupérer les informations relatives au dernier membre inscrit en BDD + $db = Database::getInstance(); // on récupère la connexion à la BDD + $sql = "SELECT COUNT(*) FROM R_joueur"; // on définit la requête qu'on enverra + $req = $db->query($sql); // on exécute la requête + return $req->fetch()[0]; // on retourne le nombre + } + + public static function checkExists($slug_profil) { // méthode permettant de vérifier si un profil existe dans la BDD + $db = Database::getInstance(); // on récupère la connexion à la BDD + $sql = "SELECT * FROM R_joueur WHERE slug = :slug"; + $req = $db->prepare($sql); // on prépare la requête + $req->execute(array(":slug" => $slug_profil)); // 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; // on aurait pu mettre deux return (un dans le if et un ici), mais bon... } } diff --git a/app/view/Classement/display.html b/app/view/Classement/display.html index be911641f85dd565e5dcb270e60c9503c2661d49..76d40da206ccd60f2e18527477e48232f02e4be5 100644 --- a/app/view/Classement/display.html +++ b/app/view/Classement/display.html @@ -1,5 +1,5 @@ <?php - $page_title = "Classement"; + $page_title = "Classement ".$this->lejeu; include(ROOT."/app/view/Includes/header.include.html"); ?> diff --git a/app/view/Includes/header.include.html b/app/view/Includes/header.include.html index ecf38f00d622c2b5775d9054ec0042b4d5df12f7..eaeec7f768c66a812a7eb26e533af310a57aa012 100644 --- a/app/view/Includes/header.include.html +++ b/app/view/Includes/header.include.html @@ -10,49 +10,57 @@ if(!isset($_SESSION)) { // si <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title><?php echo $page_title; ?></title> <link rel="stylesheet" href="<?php echo BASE_URL; ?>/css/style.css"> + <link rel="stylesheet" href="<?php echo BASE_URL; ?>/css/jquery.auto-complete.css"> + <link rel="stylesheet" href="<?php echo BASE_URL; ?>/css/pure.min.css"> <link href='https://fonts.googleapis.com/css?family=Work+Sans' rel='stylesheet' type='text/css'> + + + <script>var BASE_URL = 'http://localhost/projet-web-2016/www';</script> + <script src="<?php echo BASE_URL; ?>/js/jquery.min.js"></script> + <script src="<?php echo BASE_URL; ?>/js/jquery.auto-complete.min.js"></script> + <script src="<?php echo BASE_URL; ?>/js/autocompletion_form_jeux.js"></script> </head> -<body> +<body onload="loadJsonJeux();"> <div class="wrapper"> <header class="row"> - <div class="col-2 col-m-2"> - <a href="<?php echo BASE_URL; ?>"> - <img class="logo-image" src="<?php echo BASE_URL; ?>/images/logo.png" alt="logo du site web"/> - </a> - </div> - - <div class="search-bar-conteneur col-3 col-m-3"> - <!-- <form method="post" name="truc" class="search-bar-form"> - <div class="search-bar-input-conteneur"> - <input class="search-bar" type="text" name="machin" title="machin" /> - </div> + <div class="header row"> + <div class="col-2 col-m-2"> + <a href="<?php echo BASE_URL; ?>"> + <img class="logo-image" src="<?php echo BASE_URL; ?>/images/logo.png" alt="logo du site web"/> + </a> + </div> - <button type="submit" class="glass"><img src="<?php echo BASE_URL; ?>/images/find.png" alt="icône de recherche" height="30px"/> </button> - </form> - --> - </div> - - <div class="col-4 space col-m-1"> - - </div> - <?php - if(isset($_SESSION['connected']) && $_SESSION['connected'] == true) { - ?> - <div class="connexion col-3 col-m-6"> - <?php echo $_SESSION['user']->prenom.' '.$_SESSION['user']->nom; ?> - </div> - <?php - } - else { - ?> - <div class="connexion col-3 col-m-6"> - <div class="signin"><a class="connexion-link" href="<?php echo BASE_URL; ?>/inscription">Inscription</a></div> - <div class="login"><a class="connexion-link" href="<?php echo BASE_URL; ?>/connexion">Connexion</a></div> - </div> - <?php - } - ?> + <div class="search-bar-conteneur col-3 col-m-3"> + <form method="post" action="<?php echo BASE_URL; ?>/jeu" name="nomJeu" class="pure-form"> + <input type="text" class="search-bar" id="rechercheJeu" name="rechercheJeu" placeholder="Rechercher un jeu..." /><input type="submit" class="search-button" value=""/> + </form> + + </div> + <?php + if(isset($_SESSION['connected']) && $_SESSION['connected'] == true) { + ?> + <div class="col-3 space col-m-1"></div> + <div class="connexion col-4 col-m-6"> + <div class="signin"><a class="connexion-link" href="<?php echo BASE_URL; ?>/profil/<?php echo $_SESSION['user']->slug; ?>"><?php echo $_SESSION['user']->pseudo; ?></a></div> + <div class="login"><a class="connexion-link" href="<?php echo BASE_URL; ?>/deconnexion">Déconnexion</a></div> + </div> + <?php + } + else { + ?> + <div class="col-4 space col-m-1"></div> + <div class="connexion col-3 col-m-6"> + <div class="signin"><a class="connexion-link" href="<?php echo BASE_URL; ?>/inscription">Inscription</a></div> + <div class="login"><a class="connexion-link" href="<?php echo BASE_URL; ?>/connexion">Connexion</a></div> + </div> + <?php + } + ?> + </div> + + <?php include(ROOT."/app/view/Includes/menu.include.html"); ?> </header> + <div class="main" id="top"> diff --git a/app/view/Includes/menu.include.html b/app/view/Includes/menu.include.html new file mode 100644 index 0000000000000000000000000000000000000000..24239666bc44d0fa1c8538acce022018dd0c0c3b --- /dev/null +++ b/app/view/Includes/menu.include.html @@ -0,0 +1,15 @@ + <nav class="row"> + <ul class="row"> + <div class="space col-1 col-m-1"></div> + <a href="<?php echo BASE_URL."/listejeux";?>"> + <li class="<?php if($page_title == "Liste des jeux") echo "actif "; ?>col-3 col-m-3">La liste de nos jeux</li> + </a> + <a href="<?php echo BASE_URL."/classement/global";?>"> + <li class="<?php if($page_title == "Classement général") echo "actif "; ?>col-3 col-m-3">Le classement général</li> + </a> + <a href="<?php echo BASE_URL."/contact";?>"> + <li class="<?php if($page_title == "Contact") echo "actif "; ?>col-3 col-m-3">Nous contacter</li> + </a> + <div class="space col-1 col-m-1"></div> + </ul> + </nav> diff --git a/app/view/Index/display.html b/app/view/Index/display.html index 99dc981b272fc5fc32c2bf013e6c861ae8d23e68..18fb5ee849ff2a5decb705fa5b1702f1294c0760 100644 --- a/app/view/Index/display.html +++ b/app/view/Index/display.html @@ -1,33 +1,65 @@ <?php - $page_title = "Titre de la page d'index du site de classement de jeux de plateaux pour le projet web ENSIIE 2016, et ce titre est beaucoup trop long !"; + $page_title = "Classements ludiques"; include(ROOT."/app/view/Includes/header.include.html"); ?> - <article> - <h1>Exemple de page d'accueil</h1> - - <h3 style="margin-bottom:-2px;">Liste de jeux</h3> - <ul> - <?php foreach($this->list as $jeu) : ?> - <li><a href="jeu/<?php echo $jeu->slug;?>"><?php echo $jeu->nom;?></a></li> - <?php endforeach;?> - </ul> - - <h3 style="margin-bottom:-4px;">Liste de profils</h3> - <ul> - <?php foreach($this->listprofils as $profil) : ?> - <li><a href="profil/<?php echo $profil->slug;?>">Voir le profil de <?php echo $profil->pseudo;?></a></li> - <?php endforeach;?> - </ul> - - <h3 style="margin-bottom:-4px;">Classements</h3> - <ul> - <li><a href="classement/global/">Classement global</a></li> - <li><a href="classement/jeu/random">Classement pour un jeu spécifique</a></li> - </ul> - - <a href="deconnexion">Se déconnecter</a> - + + <article class="surtitre"><h2><em>Classements ludiques</em>, pour vous affronter sur vos jeux préférés !</h2></article> + <article> + <div class="col-6 stat-block"> + <h3 class="stat-title">Jeux les plus joués sur <em>Classements ludiques</em></h3> + <table class="jeux-preferes"> + <?php + foreach($this->most_played as $jeu) { + ?> + <tr><td><img src="<?php echo BASE_URL; ?>/images/jeu/<?php echo $jeu['slug']; ?>.jpg" alt="logo jeu <?php echo $jeu['nom']; ?>" /></td><td><?php echo $jeu['nom']; ?></td><td><?php echo $jeu['parties']; ?>x</td></tr> + <?php + } + ?> + <tr><td colspan=3><a href="<?php echo BASE_URL; ?>/listejeux">Voir plus de jeux</a></td></tr> + </table> + </div> + + <div class="col-6"> + <h3 class="stat-title">Dernier inscrit :</h3> + <aside class="profil-image"> + <img src="<?php echo BASE_URL; ?>/images/profil_42.jpg" alt="Photo de profil de phoenix" /> + </aside> + <ul class="col-4 pref"> + <li><?php echo $this->last_member->prenom.' '.$this->last_member->nom; ?></li> + </ul> + + </div> + + <div class="col-6"> + <h3 class="stat-title">Nombre d'inscrit sur <em>Classements ludiques</em></h3> + <blockquote class="stat-title"><?php echo $this->nb_members; ?></blockquote> + </div> + + + + <div class="row"> + <?php + if(isset($_SESSION['connected']) && $_SESSION['connected'] == true) { + ?> + <h2 class="stat-title">Vous êtes connecté</h2> + <div class="inscription-btn-container"> + <a class="inscription-btn" href="<?php echo BASE_URL; ?>/add_partie">Ajouter une partie !</a> + </div> + <?php + } + else { + ?> + <h2 class="stat-title">Pas encore inscrit ?</h2> + <div class="inscription-btn-container"> + <a class="inscription-btn" href="<?php echo BASE_URL; ?>/inscription">Inscrivez-vous !</a> + </div> + <?php + } + ?> + </div> + </article> + <?php include(ROOT."/app/view/Includes/footer.include.html"); ?> diff --git a/app/view/Jeu/display.html b/app/view/Jeu/display.html index 6e510eb4e7ceebb2e6378f1a5d6b93563fd0cb40..6d7cb413d9c5444b913eb7da7896740cfde7c692 100644 --- a/app/view/Jeu/display.html +++ b/app/view/Jeu/display.html @@ -5,7 +5,7 @@ <article> <h2><?php echo $this->jeu->nom; ?></h2> - <aside class="jeu-image"><img src="<?php echo BASE_URL."/images/jeu/".$this->jeu->slug.".jpg" ?>" alt="Logo du jeu <?php echo $this->jeu->nom; ?>" /> + <aside class="jeu-image"><img src="<?php echo BASE_URL ."/images/jeu/".$this->jeu->slug.".jpg" ?>" alt="Logo du jeu <?php echo $this->jeu->nom; ?>" /> </aside> <div class="row"> <p class="col-7"> @@ -16,15 +16,14 @@ <div class="classement-card"> <table class="classement-table"> <tr><th>N°</th><th colspan="2">Joueur</th><th>Score</th></tr> - <? foreach($this->classement as $ligne) { - echo " + <?php foreach($this->classement as $ligne) { ?> <tr> - <td>".$ligne['classement']."</td> - <td><a href=\"../profil/".$ligne['slug']."\"><img src=\"".$ligne['avatar']."\" alt=\"Image de profil de ".$ligne['pseudo']."\" class=\"classement-profil-img\"></a></td> - <td><a href=\"../profil/".$ligne['slug']."\">".$ligne['pseudo']."</a></td> - <td>".$ligne['score']."</td> - </tr>"; - + <td>"<?php echo $ligne['classement']; ?>"</td> + <td><a href="../profil/<?php echo $ligne['slug'];?>"><img src="<?php echo $ligne['avatar'];?>" alt="Image de profil de <?php echo $ligne['pseudo'];?>" class="classement-profil-img"></a></td> + <td><a href="../profil/<?php echo $ligne['slug'];?>"> <?php echo $ligne['pseudo']; ?> </a></td> + <td><?php echo $ligne['score'] ; ?></td> + </tr> + <?php } ?> </table> diff --git a/app/view/Jeu/displayListe.html b/app/view/Jeu/displayListe.html index 9734082c3eb403cca2dd80dfadf488e74af392e5..da247c500bfb7d5e92b042dbe0e302866a778d7e 100644 --- a/app/view/Jeu/displayListe.html +++ b/app/view/Jeu/displayListe.html @@ -14,7 +14,7 @@ <div class="col-3 col-m-6"> <div class="game"> <a href="jeu/<?php echo $jeu->slug;?>"> - <img class="game-image" alt="logo du jeu <?php echo $jeu->nom;?>" src="<?php echo BASE_URL; ?>/images/Cosmic_Encounter_(FFG).jpg"> + <img class="game-image" alt="logo du jeu <?php echo $jeu->nom;?>" src="<?php echo BASE_URL; ?>/images/jeu/<?php echo $jeu->slug;?>.jpg"> <div class="game-caption"><?php echo $jeu->nom;?></div> </a> </div> diff --git a/app/view/Jeu/listeJson.html b/app/view/Jeu/listeJson.html new file mode 100644 index 0000000000000000000000000000000000000000..7977fda2af8934d05d5592111a5bd854f0060f7a --- /dev/null +++ b/app/view/Jeu/listeJson.html @@ -0,0 +1,12 @@ +[ +<?php +$cpt = 1; +foreach($this->liste as $jeu) { + echo '{"value": "'.htmlspecialchars($jeu->nom).'"}'; + if($cpt != count($this->liste)) { + echo ','; + } + $cpt++; +} +?> +] \ No newline at end of file diff --git a/app/view/Partie/displayForm.html b/app/view/Partie/displayStep0.html similarity index 55% rename from app/view/Partie/displayForm.html rename to app/view/Partie/displayStep0.html index 0121eea886f083e04c82037f93f1a10f305dae04..8d5b6d4ba4fe77296da1aaeed1aa9b838a213f44 100644 --- a/app/view/Partie/displayForm.html +++ b/app/view/Partie/displayStep0.html @@ -11,25 +11,18 @@ <article> <h2>Formulaire d'ajout de partie</h2> + <h3>Sélection d'un jeu</h3> <div class="addjeu-form"> - <form method="post" action="add_partie/verify"> + <form method="post" action="add_partie/verifystep0"> <label for="jeu">Jeu : </label> <select name="jeu" id="jeu"> <?php foreach($this->liste as $jeu){ ?> <option><?php echo $jeu->nom; ?></option> <?php } ?> </select><br /> - <label for="joueurs">Joueurs :</label> - <select name="joueurs[]" id="joueurs" multiple="multiple" size="5"> - <?php foreach($this->listej as $joueur){ ?> - <option><?php echo $joueur->nom; ?></option> - <?php } ?> - </select> - <br/> - <label for="scores">Scores :</label><input type="text" name="scores" id="scores" /><br/> <div class="submit"> - <input type="reset" name="reset" value="Réinitialiser" /> - <input type="submit" name="submit" value="Demander l'ajout" /> + <input type="reset" name="reset" value="Réinitialiser" /> + <input type="submit" name="submit" value="Étape suivante" /> </div> </form> </div> diff --git a/app/view/Partie/displayStep1.html b/app/view/Partie/displayStep1.html new file mode 100644 index 0000000000000000000000000000000000000000..ebeeaae4c80ec459cb8be67129a795455553aa9f --- /dev/null +++ b/app/view/Partie/displayStep1.html @@ -0,0 +1,45 @@ +<?php + $page_title = "Formulaire d'ajout de partie"; + include(ROOT."/app/view/Includes/header.include.html"); +?> +<?php $jeuactuel = $this->jeuactuel ?> + <article> + <h2>Formulaire d'ajout de partie</h2> + <h3>Sélection des joueurs</h3> + <div class="addjeu-form"> + + Jeu : <?php echo $jeuactuel->nom; ?><br /> + Joueurs :<br /> + <form method="post" action="addjoueurs1"> + <label for="joueur">Ajouter un joueur (pseudo) :</label> + <input type="text" id="joueur" name="joueur" /> + <input type="submit" name="submit" value="ajouter un joueur" /> + </form> + <?php if (isset($_SESSION['joueurs_select'])) { ?> + Joueurs actuellement sélectionnés : + <ul> + <?php foreach($_SESSION['joueurs_select'] as $k => $j){ ?> + <li> + <?php echo $j->pseudo; ?> + <form method="post" action="deljoueurs1"> + <input type="hidden" value="<?php echo $k;?>" name="joueurdel"> + <input type="submit" name="submit" value="supprimer ce joueur" /> + </form> + </li> + <?php } ?> + </ul> + + <form method="post" action="verifystep1"> + <div class="submit"> + <input type="reset" name="reset" value="Réinitialiser" /> + <input type="submit" name="submit" value="Étape suivante" /> + </div> + </form> + <?php } ?> + <form action="../add_partie"> + <input type="submit" name="submit" value="Étape précédente" /> + </form> + </div> + </article> + +<?php include(ROOT."/app/view/Includes/footer.include.html"); ?> diff --git a/app/view/Partie/displayStep2.html b/app/view/Partie/displayStep2.html new file mode 100644 index 0000000000000000000000000000000000000000..c63162b2667e78aed4ea9a9e21f620a174a88cb8 --- /dev/null +++ b/app/view/Partie/displayStep2.html @@ -0,0 +1,31 @@ +<?php + $page_title = "Formulaire d'ajout de partie"; + include(ROOT."/app/view/Includes/header.include.html"); +?> +<?php $jeuactuel = $this->jeuactuel ?> + <article> + <h2>Formulaire d'ajout de partie</h2> + <h3>Entrée des scores</h3> + <div class="addjeu-form"> + <form method="post" action="verifystep2"> + Jeu : <?php echo $jeuactuel->nom; ?><br /> + Joueurs : + <ul> + <?php foreach($this->listejactuel as $joueur){ ?> + <li><?php echo $joueur->pseudo; ?> Score obtenu : <input type="text" title="score" name="scores[]" /></li> + <?php } ?> + </ul> + <br /> + <div class="submit"> + + <input type="reset" name="reset" value="Réinitialiser" /> + <input type="submit" name="submit" value="Demander l'ajout" /> + </div> + </form> + <form action="step1"> + <input type="submit" name="submit" value="Étape précédente" /> + </form> + </div> + </article> + +<?php include(ROOT."/app/view/Includes/footer.include.html"); ?> diff --git a/app/view/Partie/displayStepe1.html b/app/view/Partie/displayStepe1.html new file mode 100644 index 0000000000000000000000000000000000000000..f133dc1ececaac7a67da0b61b330b8a24de976d6 --- /dev/null +++ b/app/view/Partie/displayStepe1.html @@ -0,0 +1,56 @@ +<?php + $page_title = "Formulaire d'ajout de partie"; + include(ROOT."/app/view/Includes/header.include.html"); +?> +<?php $jeuactuel = $this->jeuactuel ?> +<article> + <h2>Formulaire d'ajout de partie</h2> + <h3>Sélection des joueurs</h3> + <div class="addjeu-form"> + + Jeu : <?php echo $jeuactuel->nom; ?><br/> + Équipes :<br/> + <?php foreach($this->equipes as $ke => $e) { ?> + <h4>Équipe <?php echo $ke+1; ?> </h4> + <ul> + <?php + foreach($e as $k => $j){ ?> + <li> + <?php echo $j->pseudo; ?> + <form method="post" action="deljoueurs1"> + <input type="hidden" value="<?php echo $k;?>" name="joueurdel"/> + <input type="hidden" value="<?php echo $ke;?>" name="equipejdel"/> + <input type="submit" name="submit" value="supprimer ce joueur"/> + </form> + + </li> + <?php } ?> + <form method="post" action="addjoueurs1"> + <label for="joueur">Ajouter un joueur à l'équipe <?php echo $ke+1;?> :</label> + <input type="text" id="joueur" name="joueur" /> + <input type="hidden" value="<?php echo $ke;?>" name="equipejadd" id="equipejadd"/> + <input type="submit" name="submit" value="Ajouter un joueur"/> + </form> + <form method="post" action="delequipe"> + <input type="hidden" value="<?php echo $ke;?>" name="equipe"/> + <input type="submit" name="submit" value="Supprimer l'équipe <?php echo $ke+1;?>"/> + </form> + </ul> + <?php } ?> + <form method="post" action="addequipe"> + <input type="submit" name="submit" value="Ajouter une équipe"/> + </form> + + <form method="post" action="verifystep1"> + <div class="submit"> + <input type="reset" name="reset" value="Réinitialiser"/> + <input type="submit" name="submit" value="Étape suivante"/> + </div> + </form> + <form action="../add_partie"> + <input type="submit" name="submit" value="Étape précédente"/> + </form> + </div> +</article> + +<?php include(ROOT."/app/view/Includes/footer.include.html"); ?> diff --git a/app/view/Partie/displayStepe2.html b/app/view/Partie/displayStepe2.html new file mode 100644 index 0000000000000000000000000000000000000000..fdfd21d90b1e67bf10b4369906da695911810f4c --- /dev/null +++ b/app/view/Partie/displayStepe2.html @@ -0,0 +1,36 @@ +<?php + $page_title = "Formulaire d'ajout de partie"; + include(ROOT."/app/view/Includes/header.include.html"); +?> +<?php $jeuactuel = $this->jeuactuel ?> + <article> + <h2>Formulaire d'ajout de partie</h2> + <h3>Entrée des scores</h3> + <div class="addjeu-form"> + <form method="post" action="verifystep2"> + Jeu : <?php echo $jeuactuel->nom; ?><br /> + Équipes :<br/> + <?php foreach($this->equipes as $ke => $e) { ?> + <h4>Équipe <?php echo $ke+1; ?> </h4> + <ul> + <?php + foreach($e as $k => $j){ ?> + <li> + <?php echo $j->pseudo; ?> + </li> + <?php } ?> + </ul> + Score obtenu : <input type="text" title="score" name="scores[]" /> + <?php } ?> + <div class="submit"> + <input type="reset" name="reset" value="Réinitialiser"/> + <input type="submit" name="submit" value="Demander l'ajout"/> + </div> + </form> + <form action="../add_partie/stepe1"> + <input type="submit" name="submit" value="Étape précédente"/> + </form> + </div> + </article> + +<?php include(ROOT."/app/view/Includes/footer.include.html"); ?> diff --git a/app/view/Profil/displayEdit.html b/app/view/Profil/displayEdit.html index e0075d9e61a9c02aa3c73987d9000828c54608bc..7c6cfe2269915be4fead8c30fd9029962adb6e63 100644 --- a/app/view/Profil/displayEdit.html +++ b/app/view/Profil/displayEdit.html @@ -13,7 +13,7 @@ } elseif($errCode == 3) { $errMsg = '<h3>Adresse e-mail déjà utilisée !</h3>'; } elseif($errCode == 4) { -$errMsg = '<h3>Mots de passe différants</h3>'; +$errMsg = '<h3>Mots de passe différents</h3>'; } elseif($errCode == 5) { $errMsg = '<h3>Problème sur l\'avatar</h3>'; } elseif($errCode == 6) { diff --git a/app/view/Profil/displayValid.html b/app/view/Profil/displayValid.html index 3e111d3883ebeb0ae1ae0587f6ac51f73d30f036..d8a4bc7b30c54925e6e94aba30e0775faf89c423 100644 --- a/app/view/Profil/displayValid.html +++ b/app/view/Profil/displayValid.html @@ -3,6 +3,9 @@ include(ROOT."/app/view/Includes/header.include.html"); ?> - <article class="msg-valide"><h2>Modifiction Réussi</h2></article> + <article class="msg-valide"><h2>Modification enregistrée !</h2></article> + <article> + <p>:)</p> + </article> <?php include(ROOT."/app/view/Includes/footer.include.html"); ?> diff --git a/app/view/Register/displayForm.html b/app/view/Register/displayForm.html index e2448fc9ef480383ae04a198ce6c1eafbf826b6e..458932d5606631e701896893731beb5e2eec6a01 100644 --- a/app/view/Register/displayForm.html +++ b/app/view/Register/displayForm.html @@ -18,7 +18,7 @@ } elseif($errCode == 3) { $errMsg = '<h3>Adresse e-mail déjà utilisée !</h3>'; } elseif($errCode == 4) { - $errMsg = '<h3>Mots de passe différants</h3>'; + $errMsg = '<h3>Mots de passe différents</h3>'; } elseif($errCode == 5) { $errMsg = '<h3>Problème sur l\'avatar</h3>'; } elseif($errCode == 6) { diff --git a/generate_base.sql b/generate_base.sql new file mode 100644 index 0000000000000000000000000000000000000000..22770ab4d3dbd7f8f9653e4a2636d134bad76cd6 --- /dev/null +++ b/generate_base.sql @@ -0,0 +1,56 @@ +DROP TABLE IF EXISTS R_jeu; +CREATE TABLE R_jeu ( + nom VARCHAR(255) NOT NULL, + description TEXT NOT NULL, + slug VARCHAR(255) PRIMARY KEY, + est_valide TINYINT(1) NOT NULL, + max_joueurs INT(11), + min_joueurs INT(11), + min_equipes INT(11), + max_equipes INT(11), + type ENUM ('duels', 'equipes') NOT NULL +); + +DROP TABLE IF EXISTS R_joueur; +CREATE TABLE R_joueur ( + slug VARCHAR(255) PRIMARY KEY, + pseudo VARCHAR(100) NOT NULL, + password TEXT NOT NULL, + nom VARCHAR(150) NOT NULL, + prenom VARCHAR(150) NOT NULL, + email VARCHAR(255) UNIQUE NOT NULL, + description TEXT NOT NULL +); + +DROP TABLE IF EXISTS R_admin; +CREATE TABLE R_admin ( + identite varchar(255) REFERENCES R_joueur(slug), + PRIMARY KEY (identite) + ); + +DROP TABLE IF EXISTS R_partie; +CREATE TABLE R_partie ( + id INT(11) PRIMARY KEY AUTO_INCREMENT, + jeu VARCHAR(255) REFERENCES R_jeu(slug), + date TIMESTAMP NOT NULL +); + +DROP TABLE IF EXISTS R_joueur_partie; +CREATE TABLE R_joueur_partie ( + partie INT(11) REFERENCES R_partie(id), + joueur VARCHAR(255) REFERENCES R_joueur(slug), + classement INT(11) NOT NULL, + score INT(11) NOT NULL, + PRIMARY KEY (joueur, partie) +); + +DROP TABLE IF EXISTS R_joueur_jeu; +CREATE TABLE R_joueur_jeu ( + joueur varchar(255) REFERENCES R_joueur(slug), + jeu VARCHAR(255) REFERENCES R_jeu(slug), + score INT(11), + classement INT(11), + est_jeu_favoris tinyint(1), + PRIMARY KEY (joueur, jeu) +); + diff --git a/projweb.sql b/projweb.sql deleted file mode 100644 index a55af8bea6004a6e307052eb6966e4e5d6d6c9d2..0000000000000000000000000000000000000000 --- a/projweb.sql +++ /dev/null @@ -1,188 +0,0 @@ --- phpMyAdmin SQL Dump --- version 4.5.2 --- http://www.phpmyadmin.net --- --- Client : localhost --- Généré le : Mar 03 Mai 2016 à 23:23 --- Version du serveur : 10.1.13-MariaDB --- Version de PHP : 7.0.5 - -SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; -SET time_zone = "+00:00"; - - -/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; -/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; -/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; -/*!40101 SET NAMES utf8mb4 */; - --- --- Base de données : `projweb` --- - --- -------------------------------------------------------- - --- --- Structure de la table `R_admin` --- - -CREATE TABLE `R_admin` ( - `identite` varchar(255) CHARACTER SET utf8 NOT NULL -) ENGINE=MyISAM DEFAULT CHARSET=latin1; - --- --- Contenu de la table `R_admin` --- - -INSERT INTO `R_admin` (`identite`) VALUES -('nestor'); - --- -------------------------------------------------------- - --- --- Structure de la table `R_jeu` --- - -CREATE TABLE `R_jeu` ( - `id` int(11) NOT NULL, - `nom` varchar(255) NOT NULL, - `description` text NOT NULL, - `slug` varchar(255) NOT NULL, - `est_valide` tinyint(1) NOT NULL -) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='Table des jeux enregistrés sur le site'; - --- --- Contenu de la table `R_jeu` --- - -INSERT INTO `R_jeu` (`id`, `nom`, `description`, `slug`, `est_valide`) VALUES -(1, 'Rencontres Cosmiques', 'Jeu de plateau de 3 à 6 joueurs dont le but consiste à remporter cinq planètes adverses.', 'rencontres-cosmiques', 1), -(2, 'Nom dE jeu de tèst~', 'blablabal', 'nom-de-jeu-de-test', 0); - --- -------------------------------------------------------- - --- --- Structure de la table `R_joueur` --- - -CREATE TABLE `R_joueur` ( - `id` int(11) NOT NULL, - `slug` varchar(255) NOT NULL, - `pseudo` varchar(100) NOT NULL, - `password` text NOT NULL, - `nom` varchar(150) NOT NULL, - `prenom` varchar(150) NOT NULL, - `email` varchar(255) NOT NULL, - `description` text NOT NULL, - `admin` BOOLEAN NOT NULL DEFAULT FALSE -) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='Liste des joueurs inscrits sur le site'; - --- --- Contenu de la table `R_joueur` --- - -INSERT INTO `R_joueur` (`id`, `slug`, `pseudo`, `password`, `nom`, `prenom`, `email`, `description`) VALUES -(1, 'nestor', 'Nestor', '', 'Bochet', 'Vincent', 'vbochet@gmail.com', 'L''un des quatre membres du groupe, le moins joueur des quatre. :)'), -(2, 'nestor1', 'Nestor1', '', 'Bochet1', 'Vincent', 'vbochet@gmail.com', 'L''un des quatre membres du groupe, le moins joueur des quatre. :)'), -(3, 'nestor2', 'Nestor2', '', 'Bochet2', 'Vincent', 'vbochet@gmail.com', 'L''un des quatre membres du groupe, le moins joueur des quatre. :)'), -(4, 'nestor3', 'Nestor3', '', 'Bochet3', 'Vincent', 'vbochet@gmail.com', 'L''un des quatre membres du groupe, le moins joueur des quatre. :)'), -(5, 'nestor4', 'Nestor4', '', 'Bochet4', 'Vincent', 'vbochet@gmail.com', 'L''un des quatre membres du groupe, le moins joueur des quatre. :)'); - --- -------------------------------------------------------- - --- --- Structure de la table `R_joueur_jeu` --- - -CREATE TABLE `R_joueur_jeu` ( - `joueur` varchar(255) NOT NULL, - `jeu` varchar(255) NOT NULL, - `score` int(11) DEFAULT NULL, - `classement` int(11) DEFAULT NULL, - `est_jeu_favoris` tinyint(1) DEFAULT NULL -) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='Table des résultats des joueurs à des parties de jeu'; - --- --- Contenu de la table `R_joueur_jeu` --- - -INSERT INTO `R_joueur_jeu` (`joueur`, `jeu`, `score`, `classement`, `est_jeu_favoris`) VALUES -('nestor', 'rencontres-cosmiques', 25, 1, 1); - --- -------------------------------------------------------- - --- --- Structure de la table `R_joueur_partie` --- - -CREATE TABLE `R_joueur_partie` ( - `partie` int(11) NOT NULL, - `joueur` int(11) NOT NULL, - `id_jeu` int(11) NOT NULL, - `classement` int(11) NOT NULL, - `score` int(11) NOT NULL -) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='Liste des résultats de chaque joueur pour chaque partie'; - --- -------------------------------------------------------- - --- --- Structure de la table `R_partie` --- - -CREATE TABLE `R_partie` ( - `id` int(11) NOT NULL, - `id_jeu` int(11) NOT NULL, - `date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP -) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='Liste des parties jouées'; - --- --- Index pour les tables exportées --- - --- --- Index pour la table `R_admin` --- -ALTER TABLE `R_admin` - ADD KEY `admin_id` (`identite`); - --- --- Index pour la table `R_jeu` --- -ALTER TABLE `R_jeu` - ADD PRIMARY KEY (`id`), - ADD KEY `jeu_slug` (`slug`); - --- --- Index pour la table `R_joueur` --- -ALTER TABLE `R_joueur` - ADD PRIMARY KEY (`id`); - --- --- Index pour la table `R_partie` --- -ALTER TABLE `R_partie` - ADD PRIMARY KEY (`id`); - --- --- AUTO_INCREMENT pour les tables exportées --- - --- --- AUTO_INCREMENT pour la table `R_jeu` --- -ALTER TABLE `R_jeu` - MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=3; --- --- AUTO_INCREMENT pour la table `R_joueur` --- -ALTER TABLE `R_joueur` - MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=6; --- --- AUTO_INCREMENT pour la table `R_partie` --- -ALTER TABLE `R_partie` - MODIFY `id` int(11) NOT NULL AUTO_INCREMENT; -/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; -/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; -/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; diff --git a/valeurs.sql b/valeurs.sql new file mode 100644 index 0000000000000000000000000000000000000000..fbb392c4674fad9c75242ff440039f02870ac6e3 --- /dev/null +++ b/valeurs.sql @@ -0,0 +1,14 @@ +INSERT INTO R_jeu (nom, description, slug, est_valide, min_joueurs, max_joueurs, min_equipes, max_equipes, type) VALUES +('Rencontres Cosmiques', 'Jeu de plateau de 3 à 6 joueurs dont le but consiste à remporter cinq planètes adverses.', 'rencontres-cosmiques', 1, 3, 5, NULL, NULL, 'duels'), +('Jeu Équipes', 'cats', 'jeu-equipes', 0, 0, NULL, 0, 4, 'equipes'); + +INSERT INTO R_joueur (slug, pseudo, password, nom, prenom, email, description) VALUES +('nestor', 'Nestor', '', 'Bochet', 'Vincent', 'vbochet@gmail.com', 'L''un des quatre membres du groupe, le moins joueur des quatre. :)'), +('nestor1', 'Nestor1', '', 'Bochet1', 'Vincent', 'vbochet1@gmail.com', 'L''un des quatre membres du groupe, le moins joueur des quatre. :)'), +('nestor2', 'Nestor2', '', 'Bochet2', 'Vincent', 'vbochet2@gmail.com', 'L''un des quatre membres du groupe, le moins joueur des quatre. :)'), +('nestor3', 'Nestor3', '', 'Bochet3', 'Vincent', 'vbochet3@gmail.com', 'L''un des quatre membres du groupe, le moins joueur des quatre. :)'), +('nestor4', 'Nestor4', '', 'Bochet4', 'Vincent', 'vbochet4@gmail.com', 'L''un des quatre membres du groupe, le moins joueur des quatre. :)'); + + +INSERT INTO R_admin (identite) VALUES +('nestor'); diff --git a/www/.htaccess b/www/.htaccess index 26e064463a21f0d355f9140ea082535cf244fc70..3e5388f895f5f816992b8f288cb50a4f519950d5 100644 --- a/www/.htaccess +++ b/www/.htaccess @@ -2,7 +2,7 @@ RewriteEngine On # Adresse de base de réécriture, dépendante de l'architecture, et donc à modifier à chaque installation du site... -RewriteBase /dev/projet-web-2016/www +RewriteBase /projet-web-2016/www # Règles de réécriture des URL RewriteCond %{SCRIPT_FILENAME} !-f diff --git a/www/css/jquery.auto-complete.css b/www/css/jquery.auto-complete.css new file mode 100644 index 0000000000000000000000000000000000000000..4261b1d033e28b55dfc43df39f5410a11823a15c --- /dev/null +++ b/www/css/jquery.auto-complete.css @@ -0,0 +1,9 @@ +.autocomplete-suggestions { + text-align: left; cursor: default; border: 1px solid #ccc; border-top: 0; background: #fff; box-shadow: -1px 1px 3px rgba(0,0,0,.1); + + /* core styles should not be changed */ + position: absolute; display: none; z-index: 9999; max-height: 254px; overflow: hidden; overflow-y: auto; box-sizing: border-box; +} +.autocomplete-suggestion { position: relative; padding: 0 .6em; line-height: 23px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; font-size: 1.02em; color: #333; } +.autocomplete-suggestion b { font-weight: normal; color: #1f8dd6; } +.autocomplete-suggestion.selected { background: #f0f0f0; } diff --git a/www/css/pure.min.css b/www/css/pure.min.css new file mode 100644 index 0000000000000000000000000000000000000000..29eae96a708643cd327d7f96700d6802d9cfc53d --- /dev/null +++ b/www/css/pure.min.css @@ -0,0 +1,75 @@ +.pure-form input[type="text"], +.pure-form textarea { + padding:.5em .6em; + display:inline-block; + border:1px solid #ccc; + box-shadow:inset 0 1px 3px #ddd; + border-radius:4px 0 0 4px; + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + border-right:0; + margin:0; +} + +.pure-form input[type="submit"] { + display:inline-block; + border:1px solid #ccc; + box-shadow:inset 0 1px 3px #ddd; + border-radius:0 4px 4px 0; + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + border-left:0; + margin:0; +} + +.pure-form input:focus, +.pure-form textarea:focus { + outline:0; +} + +.pure-form input[disabled], +.pure-form textarea[disabled] { + cursor:not-allowed; + background-color:#eaeded; + color:#cad2d3; +} + +.pure-form input[readonly], +.pure-form textarea[readonly] { + background-color:#eee; + color:#777; + border-color:#ccc; +} + +.pure-form input:focus:invalid, +.pure-form select:focus:invalid { + color:#b94a48; + border-color:#e9322d; +} + +.pure-form select { + height:2.25em; + border:1px solid #ccc; + background-color:#fff; +} + +.pure-form select[multiple] { + height:auto; +} + +.pure-form label { + margin:.5em 0 .2em; +} + +@media only screen and (max-width :480px) { + .pure-form button[type=submit] { + margin:.7em 0 0; + } + + .pure-form label { + margin-bottom:.3em; + display:block; + } +} \ No newline at end of file diff --git a/www/css/style.css b/www/css/style.css index 388ddaa39b91f2542c10db317f3c80f3e257def6..043379c681a498e72f5d63e66d7a66c013a83b97 100644 --- a/www/css/style.css +++ b/www/css/style.css @@ -12,14 +12,29 @@ body { header { - padding:5px; + padding:0; position: fixed; top: 0; right: 0; left: 0; - background:#26346D; height: 120px; z-index:100; + margin-bottom: 15px; +} + +.header { + padding:5px; + min-height:44px; + background:#26346D; +} + +nav +{ + padding:5px; + background:#26346D; + min-height: 40px; + z-index:100; + margin:0; } footer{ @@ -35,7 +50,7 @@ footer{ } .main{ - margin-top:140px; + margin-top:235px; padding-bottom:100px; } @@ -49,12 +64,12 @@ article{ -header a, footer a{ +header a, footer a { color:navajowhite; text-decoration: none; } -header a:hover, footer a:hover{ +header a:hover, footer a:hover { color:cadetblue; text-decoration: none; } @@ -72,17 +87,28 @@ header a:hover, footer a:hover{ margin-left:20px; } -.search-bar-conteneur{ +.search-bar-conteneur { vertical-align: middle; margin-top:5px; - background-color:white; height: 32px; border-radius: 2px; position: static; +} +.search-bar { + margin-right:32px; + width: calc(100% - 32px); } -.connexion -{ + +.search-button { + width:32px; + height: 32px; + float:right; + background-image:url(../images/find.png); + background-size: 31px; +} + +.connexion { text-align: center; border-radius: 2px; background: #02071E; @@ -93,7 +119,7 @@ header a:hover, footer a:hover{ } -.signin{ +.signin { width:48%; text-align: center; padding: 2px; @@ -106,12 +132,12 @@ header a:hover, footer a:hover{ margin-right:-4px; } -.signin:hover{ +.signin:hover { background: red linear-gradient(to bottom, #02071E, #02071E, rgba(255, 255, 255, 0)); } -.login{ +.login { width:48%; text-align: center; padding: 2px; @@ -130,6 +156,67 @@ header a:hover, footer a:hover{ +.inscription-btn-container { + text-align: center; + background: #02071E; + line-height: 30px; + height:34px; + border-radius:10px; +} + + +.inscription-btn { + color:blanchedalmond; + font-weight : bold; + text-decoration:none; + width:100%; + padding: 2px; + border-radius:10px; + background: #02071E linear-gradient(to bottom, #02071E, #02071E, rgba(255, 255, 255, 0)); + -webkit-transition: background 500ms; /* Safari */ + transition: background 500ms ; + display: inline-block; + height:30px; +} + +.inscription-btn:hover { + background: red linear-gradient(to bottom, #02071E, #02071E, rgba(255, 255, 255, 0)); + +} + + +nav ul { + text-align:center; + margin:0; + padding:0; +} + +nav ul li { + display: inline-block; + text-align: center; + line-height: 28px; + height:28px; + margin-bottom:2px; + border-radius: 2px; + color:blanchedalmond; + background: #02071E linear-gradient(to bottom, #02071E, #02071E, rgba(255, 255, 255, 0)); + -webkit-transition: background 500ms; /* Safari */ + transition: background 500ms ; +} + +nav ul li.actif { + color:blanchedalmond; + background: #0f0 linear-gradient(to bottom, #02071E, #02071E, rgba(255, 255, 255, 0)); +} + +nav ul li:hover{ + background: magenta linear-gradient(to bottom, #02071E, #02071E, rgba(255, 255, 255, 0)); +} + + + + + .logo-image{ height:40px; @@ -242,7 +329,7 @@ div.submit input[type=submit], div.submit input[type=reset] { } -.inscription-form textarea { +.inscription-form textarea, .addjeu-form textarea { width: 160px; } @@ -345,6 +432,11 @@ article h2{ background-color: green; } +.surtitre { + color: white; + background-color: #4A588F; +} + .classement-card{ width:100%; background:white; @@ -405,13 +497,17 @@ article h2{ float: left; } + nav ul li{ + margin:0 5px 2px 5px; + padding: 2px 8px 0 8px; + } header{ - height: 40px; + min-height: 40px; } .main{ - margin-top:60px; + margin-top:120px; } .space{ @@ -440,6 +536,9 @@ article h2{ margin-bottom:0; } + .stat-block{ + min-height: 200px; + } article{ margin:auto; width:768px; diff --git a/www/js/autocompletion_form_jeux.js b/www/js/autocompletion_form_jeux.js new file mode 100644 index 0000000000000000000000000000000000000000..b51f6a7238f10c56bd53ceff191b409bd74b5599 --- /dev/null +++ b/www/js/autocompletion_form_jeux.js @@ -0,0 +1,37 @@ +var choices = []; + +function loadJsonJeux(value) { + var params = {}; + + $.ajax({ + dataType: 'json', + type: 'POST', + url: BASE_URL+'/jeux', + data: params, + success: function(resp) { + for (var x = 0; x < resp.length; x++) { + choices.push(resp[x].value); + } + }, + error: function() { + choices = []; + console.log('there was a problem checking the fields'); + } + }); +} + +$(function(){ + $('#rechercheJeu').autoComplete({ + minChars: 1, + source: function(term, suggest){ + term = term.toLowerCase(); + var suggestions = []; + for (i=0;i<choices.length;i++) { + if(~choices[i].toLowerCase().indexOf(term)) { + suggestions.push(choices[i]); + } + } + suggest(suggestions); + } + }); +}); \ No newline at end of file diff --git a/www/js/jquery.auto-complete.min.js b/www/js/jquery.auto-complete.min.js new file mode 100644 index 0000000000000000000000000000000000000000..c6deb2f25b5ecacffef3451315b2016e4f440956 --- /dev/null +++ b/www/js/jquery.auto-complete.min.js @@ -0,0 +1,3 @@ +// jQuery autoComplete v1.0.7 +// https://github.com/Pixabay/jQuery-autoComplete +!function(e){e.fn.autoComplete=function(t){var o=e.extend({},e.fn.autoComplete.defaults,t);return"string"==typeof t?(this.each(function(){var o=e(this);"destroy"==t&&(e(window).off("resize.autocomplete",o.updateSC),o.off("blur.autocomplete focus.autocomplete keydown.autocomplete keyup.autocomplete"),o.data("autocomplete")?o.attr("autocomplete",o.data("autocomplete")):o.removeAttr("autocomplete"),e(o.data("sc")).remove(),o.removeData("sc").removeData("autocomplete"))}),this):this.each(function(){function t(e){var t=s.val();if(s.cache[t]=e,e.length&&t.length>=o.minChars){for(var a="",c=0;c<e.length;c++)a+=o.renderItem(e[c],t);s.sc.html(a),s.updateSC(0)}else s.sc.hide()}var s=e(this);s.sc=e('<div class="autocomplete-suggestions '+o.menuClass+'"></div>'),s.data("sc",s.sc).data("autocomplete",s.attr("autocomplete")),s.attr("autocomplete","off"),s.cache={},s.last_val="",s.updateSC=function(t,o){if(s.sc.css({top:s.offset().top+s.outerHeight(),left:s.offset().left,width:s.outerWidth()}),!t&&(s.sc.show(),s.sc.maxHeight||(s.sc.maxHeight=parseInt(s.sc.css("max-height"))),s.sc.suggestionHeight||(s.sc.suggestionHeight=e(".autocomplete-suggestion",s.sc).first().outerHeight()),s.sc.suggestionHeight))if(o){var a=s.sc.scrollTop(),c=o.offset().top-s.sc.offset().top;c+s.sc.suggestionHeight-s.sc.maxHeight>0?s.sc.scrollTop(c+s.sc.suggestionHeight+a-s.sc.maxHeight):0>c&&s.sc.scrollTop(c+a)}else s.sc.scrollTop(0)},e(window).on("resize.autocomplete",s.updateSC),s.sc.appendTo("body"),s.sc.on("mouseleave",".autocomplete-suggestion",function(){e(".autocomplete-suggestion.selected").removeClass("selected")}),s.sc.on("mouseenter",".autocomplete-suggestion",function(){e(".autocomplete-suggestion.selected").removeClass("selected"),e(this).addClass("selected")}),s.sc.on("mousedown click",".autocomplete-suggestion",function(t){var a=e(this),c=a.data("val");return(c||a.hasClass("autocomplete-suggestion"))&&(s.val(c),o.onSelect(t,c,a),s.sc.hide()),!1}),s.on("blur.autocomplete",function(){try{over_sb=e(".autocomplete-suggestions:hover").length}catch(t){over_sb=0}over_sb?s.is(":focus")||setTimeout(function(){s.focus()},20):(s.last_val=s.val(),s.sc.hide(),setTimeout(function(){s.sc.hide()},350))}),o.minChars||s.on("focus.autocomplete",function(){s.last_val="\n",s.trigger("keyup.autocomplete")}),s.on("keydown.autocomplete",function(t){if((40==t.which||38==t.which)&&s.sc.html()){var a,c=e(".autocomplete-suggestion.selected",s.sc);return c.length?(a=40==t.which?c.next(".autocomplete-suggestion"):c.prev(".autocomplete-suggestion"),a.length?(c.removeClass("selected"),s.val(a.addClass("selected").data("val"))):(c.removeClass("selected"),s.val(s.last_val),a=0)):(a=40==t.which?e(".autocomplete-suggestion",s.sc).first():e(".autocomplete-suggestion",s.sc).last(),s.val(a.addClass("selected").data("val"))),s.updateSC(0,a),!1}if(27==t.which)s.val(s.last_val).sc.hide();else if(13==t.which||9==t.which){var c=e(".autocomplete-suggestion.selected",s.sc);c.length&&s.sc.is(":visible")&&(o.onSelect(t,c.data("val"),c),setTimeout(function(){s.sc.hide()},20))}}),s.on("keyup.autocomplete",function(a){if(!~e.inArray(a.which,[13,27,35,36,37,38,39,40])){var c=s.val();if(c.length>=o.minChars){if(c!=s.last_val){if(s.last_val=c,clearTimeout(s.timer),o.cache){if(c in s.cache)return void t(s.cache[c]);for(var l=1;l<c.length-o.minChars;l++){var i=c.slice(0,c.length-l);if(i in s.cache&&!s.cache[i].length)return void t([])}}s.timer=setTimeout(function(){o.source(c,t)},o.delay)}}else s.last_val=c,s.sc.hide()}})})},e.fn.autoComplete.defaults={source:0,minChars:3,delay:150,cache:1,menuClass:"",renderItem:function(e,t){t=t.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&");var o=new RegExp("("+t.split(" ").join("|")+")","gi");return'<div class="autocomplete-suggestion" data-val="'+e+'">'+e.replace(o,"<b>$1</b>")+"</div>"},onSelect:function(e,t,o){}}}(jQuery);