diff --git a/app/controller/PartieController.php b/app/controller/PartieController.php index 2955880a2248c30581e5207dc487d73ed8501996..35d4fbdf73dcb788abaf0b144cc3874e154d6d27 100644 --- a/app/controller/PartieController.php +++ b/app/controller/PartieController.php @@ -28,14 +28,34 @@ class PartieController extends Controller $data = $_POST; $scores = explode(";", $data["scores"]); - print_r($scores); if (count($scores) != count($data["joueurs"])){ //appeler une fonction d'erreur - echo "<h1>Erreur : variables pb</h1>"; + echo "<h1>Erreur : scores et joueurs incohérents</h1>"; die(); } - Partie::addPartie($data['joueurs'], $scores, $data['jeu']); + $pb = Partie::addPartie($data['joueurs'], $scores, $data['jeu']); + if(!$pb) + header('Location:valid'); // Redirection vers la page OK + switch ($pb) { + case 1: + echo "<h1>Erreur : Le jeu choisi n'existe pas.</h1>"; + die(); + break; + case 2: + echo "<h1>Erreur de connexion à la BD.</h1>"; + die(); + break; + case 3: + echo "<h1>Erreur : un des joueurs est entré est introuvable dans la BD.</h1>"; + die(); + break; + case 4: + echo "<h1>Erreur : le jeu entré est introuvable dans la BD.</h1>"; + die(); + break; + } + } } \ No newline at end of file diff --git a/app/model/Partie.php b/app/model/Partie.php index fe5a9c0e5f2d41f2d75dfa50d2dfd8df91044bac..3b9ea7b6f95befc914ee86c8f384ce7e9b7dec23 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,7 +21,8 @@ class Partie extends Model return $stmt->fetch(); } - public static function getList() { + public static function getList() + { $db = Database::getInstance(); $sql = "SELECT * FROM R_partie"; $stmt = $db->query($sql); @@ -28,7 +30,8 @@ class Partie extends Model 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,30 +41,31 @@ 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); $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){ + private static function classeur($score, $id_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))) { + if ($stmt->execute(array(":id_jeu" => $id_jeu))) { while ($tmp = $stmt->fetch()) { - if ($score <= $tmp['score']) - { + if ($score <= $tmp['score']) { return $tmp['classement'] + 1; } } @@ -70,13 +74,14 @@ class Partie extends Model } - public static function addPartie($joueurs, $scores, $nom_jeu) { + public static function addPartie($joueurs, $scores, $nom_jeu) + { $db = Database::getInstance(); $datestr = date("Y-m-d H:i:s"); - $sql0 = "SELECT id FROM R_jeu WHERE nom = :nom_jeu;"; + $sql0 = "SELECT slug 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;"; + $sql2 = "SELECT slug FROM R_joueur WHERE nom = :joueur;"; $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);"; @@ -91,89 +96,112 @@ class Partie extends Model $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()) { + if ($stmt0->execute(array(":nom_jeu" => $nom_jeu))) { + // lecture du slug du 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++){ + if (!Jeu::checkExists($id_jeu)){ + return 1; + } + + if ($stmt1->execute(array(":id_jeu" => $id_jeu, ":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 + $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++) { + // Parcours des joueurs $id_joueur[$j] = $row[0]; - if($stmt2->execute(array(":joueur" => $joueurs[$j]))) { + // lecture des slugs des joueur + if ($stmt2->execute(array(":joueur" => $joueurs[$j]))) { if ($row = $stmt2->fetch()) { $id_joueur[$j] = $row[0]; } + else + return 3; + } + else{ + echo "test"; + return 2; } - else - echo "stmt2, dc"; } + $old_score = array_fill(0, $m, 0); - for($j = 0; $j<$m; $j++) { + + for ($j = 0; $j < $m; $j++) { + // récupération du score actuel de chaque joueur if ($stmt3->execute(array(":id_joueur" => $id_joueur[$j], ":id_jeu" => $id_jeu))) { if ($row = $stmt3->fetch()) { + // Le joueur a déja joué à ce jeu $old_score[$j] = $row[0]; - } - else { + } else { + // ou le joueur n'a jamais joué à ce jeu, on je rajoute à la relation. $old_score[$j] = 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 />"; + if ($stmtN->execute(array(":id_joueur" => $id_joueur[$j], ":id_jeu" => $id_jeu, ":score" => 1000))) { + } else{ - echo "stmt n, dc <br />"; - print_r($id_joueur); - print($id_jeu); - die(); + echo test; + return 2; } } + } - else - echo "stmt3, dc<br />"; } + // Calcul de la nouvelle différence de scores et du nouveau classement de chacun $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, + for ($j = 0; $j < $m; $j++) { + // Insertion des infos de la partie (avec le score et le classement avant la partie) + // pour chaque joueur + if ($stmt4->execute(array(":id_partie" => $id_partie, ":id_joueur" => $id_joueur[$j], "id_jeu" => $id_jeu, - ":classement" => $classement[$j], ":score" => $old_score[$j]))) { + ":classement" => $classement[$j], ":score" => $old_score[$j])) + ) { $newS = $old_score[$j] + $diff_scores[$j]; - print($newS); $classement_jeu = Partie::classeur($newS, $id_jeu); + // On met à jour le score et le classement 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)) ) { - if ($stmt6->execute(array(":new_classement" => $classement_jeu))){ - //C'est dans la boite - echo "works well enough<br />"; + // on met à jour le classement des autres joueurs + if ($stmt6->execute(array(":new_classement" => $classement_jeu))) { + return 0; + } + else{ + echo "test"; + return 2; } - else - echo "stmt6, dc<br />"; } - else - echo "stmt5, dc<br />"; + else{ + echo "test"; + return 2; + } + } + else{ + echo "test"; + return 2; } - else - echo "stmt4, dc<br />"; } } - else - echo "stmt1, dc<br />"; + else{ + echo "test1"; + return 2; + } + } + else + return 4; } - else { - echo "Arise, ça marche pas...<br />"; die(); - } + else + return 2; + return 0; } - } \ No newline at end of file