diff --git a/app/controller/PartieController.php b/app/controller/PartieController.php index f7456240287f4ef559c44fdd502c4052c5d0455c..44045d375a332e655a9e35516a14a47a13464289 100644 --- a/app/controller/PartieController.php +++ b/app/controller/PartieController.php @@ -43,6 +43,7 @@ class PartieController extends Controller $this->view->jeuactuel = $_SESSION['jeu_select']; $this->view->listej = Profil::getList(); + $this->view->equipes = $_SESSION['equipes']; $this->view->display(); } @@ -56,6 +57,7 @@ class PartieController extends Controller $this->view->jeuactuel = $_SESSION['jeu_select']; $this->view->listejactuel = $_SESSION['joueurs_select']; + $this->view->equipes = $_SESSION['equipes']; $this->view->display(); } @@ -182,6 +184,10 @@ class PartieController extends Controller } 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"); } @@ -202,20 +208,54 @@ class PartieController extends Controller session_start(); if(!isset($_SESSION['jeu_select'])) header("Location:../add_partie"); - if(!isset($_SESSION['joueurs_select'])) - header("Location:step1"); - $jeu_actuel = $_SESSION['jeu_select']; - $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 ($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"); } - if (count($joueurs) > $jeu_actuel->max_joueurs){ - echo "<h1>Erreur : il y a trop de joueurs.</h1>"; - die(); + 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'); } - header('Location:step2'); + + + } @@ -223,8 +263,16 @@ class PartieController extends Controller 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 @@ -239,8 +287,35 @@ class PartieController extends Controller die(); } } - $jeu = $_SESSION['jeu_select']; - $joueurs = $_SESSION['joueurs_select']; + 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){ @@ -264,5 +339,6 @@ class PartieController extends Controller die(); break; } + } } } \ No newline at end of file diff --git a/app/model/Partie.php b/app/model/Partie.php index 1b87a0f492cda73253824dadc0dfa2bfabb2ce75..610cebc52bac597034560a254deedf6d23a4a14a 100644 --- a/app/model/Partie.php +++ b/app/model/Partie.php @@ -107,47 +107,93 @@ class Partie extends Model $stmt2->execute(array(":id_jeu" => $jeu->slug, ":date" => $datestr)); $id_partie = $stmt2->fetch()['id']; - $m = count($joueurs); + $m = count($scores); $old_score = array_fill(0, $m, 0); - - for ($j = 0; $j < $m; $j++) { - // récupération du score actuel de chaque joueur - if ($stmt3->execute(array(":id_joueur" => $joueurs[$j]->slug, ":id_jeu" => $jeu->slug))) { + $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()) { + // 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" => $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{ + // 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[$j] = $row[0]; + $old_score[$k] = $row[0]; } else { // ou le joueur n'a jamais joué à ce jeu, on je rajoute à la relation. - $old_score[$j] = 1000; + $old_score[$k] = 1000; $stmtN = $db->prepare($sqlN); - if ($stmtN->execute(array(":id_joueur" => $joueurs[$j]->slug, ":id_jeu" => $jeu->slug, ":score" => 1000))) { + 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 nouveau classement de chacun + // 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); - for ($j = 0; $j < $m; $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" => $joueurs[$j]->slug, - ":classement" => $classement[$j], ":score" => $old_score[$j])) - ) { - $newS = $old_score[$j] + $diff_scores[$j]; - // 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" => $joueurs[$j]->slug)) + 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" => $jeu->slug, ":id_joueur" => $j->slug)) + ) { + } else + return 2; + } else + return 2; + } + } + 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 - return 2; + } } } else return 2; diff --git a/app/view/Partie/displayStepe1.html b/app/view/Partie/displayStepe1.html index c6ce500781889321576b9e2d664e8db2522dcda6..f133dc1ececaac7a67da0b61b330b8a24de976d6 100644 --- a/app/view/Partie/displayStepe1.html +++ b/app/view/Partie/displayStepe1.html @@ -10,7 +10,7 @@ Jeu : <?php echo $jeuactuel->nom; ?><br/> Équipes :<br/> - <?php foreach($_SESSION['equipes'] as $ke => $e) { ?> + <?php foreach($this->equipes as $ke => $e) { ?> <h4>Équipe <?php echo $ke+1; ?> </h4> <ul> <?php @@ -33,7 +33,7 @@ </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;?>"/> + <input type="submit" name="submit" value="Supprimer l'équipe <?php echo $ke+1;?>"/> </form> </ul> <?php } ?> diff --git a/app/view/Partie/displayStepe2.html b/app/view/Partie/displayStepe2.html index c63162b2667e78aed4ea9a9e21f620a174a88cb8..fdfd21d90b1e67bf10b4369906da695911810f4c 100644 --- a/app/view/Partie/displayStepe2.html +++ b/app/view/Partie/displayStepe2.html @@ -9,23 +9,28 @@ <div class="addjeu-form"> <form method="post" action="verifystep2"> Jeu : <?php echo $jeuactuel->nom; ?><br /> - Joueurs : + Équipes :<br/> + <?php foreach($this->equipes as $ke => $e) { ?> + <h4>Équipe <?php echo $ke+1; ?> </h4> <ul> - <?php foreach($this->listejactuel as $joueur){ ?> - <li><?php echo $joueur->pseudo; ?> Score obtenu : <input type="text" title="score" name="scores[]" /></li> + <?php + foreach($e as $k => $j){ ?> + <li> + <?php echo $j->pseudo; ?> + </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> + 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"); ?>