From 68c79bb56e73eb2782db0aa890842c6b288a18c0 Mon Sep 17 00:00:00 2001 From: johan Date: Tue, 6 Dec 2022 13:42:26 +0100 Subject: [PATCH 1/2] Quelues correction --- WEB/Config/Connection.php | 2 +- WEB/Controller/FrontController.php | 3 +- WEB/Controller/PartieGateway.php | 28 ++++++++------ WEB/Controller/UtilisateurGateway.php | 52 +++++++++++++++----------- WEB/Controller/VisitorController.php | 1 + WEB/Factory/PartieFactory.php | 2 + WEB/Metier/Partie.php | 16 ++++---- WEB/Model/UserModel.php | 13 ++++++- WEB/Model/scripted.db | Bin 53248 -> 53248 bytes WEB/bd.sql | 8 ++-- 10 files changed, 74 insertions(+), 51 deletions(-) diff --git a/WEB/Config/Connection.php b/WEB/Config/Connection.php index 6d049bdd..67c1de0f 100644 --- a/WEB/Config/Connection.php +++ b/WEB/Config/Connection.php @@ -48,7 +48,7 @@ class Connection extends SQLite3 $resultArray = $this->result->fetchArray(SQLITE3_ASSOC); $multiArray = array(); while($resultArray != false){ //read next row - array_push($multiArray, $resultArray); + $multiArray[]=$resultArray; $resultArray = $this->result->fetchArray(SQLITE3_ASSOC); //insert all rows to $multiArray } if ($multiArray == NULL) diff --git a/WEB/Controller/FrontController.php b/WEB/Controller/FrontController.php index 36691fae..48bf7884 100644 --- a/WEB/Controller/FrontController.php +++ b/WEB/Controller/FrontController.php @@ -3,7 +3,7 @@ class FrontController { function __construct() { - try { + try { global $error, $view, $rep; session_start(); // Check role permissions @@ -12,7 +12,6 @@ class FrontController } else { $role = "visitor"; } - // Check if action exists $action = $_REQUEST['action']; if ($role == "user") { diff --git a/WEB/Controller/PartieGateway.php b/WEB/Controller/PartieGateway.php index fd750a82..de3204af 100644 --- a/WEB/Controller/PartieGateway.php +++ b/WEB/Controller/PartieGateway.php @@ -19,13 +19,13 @@ class PartieGateway } /** - * @param array $listeJoueur + * @param array $listeUtilisateur */ public function partieInQueueExists() : bool{ $query = "SELECT count(*) FROM PARTICIPER WHERE etat = 0"; $this->con->executeQuery($query); $results = $this->con->getResults(); - if ($results[0]['count'] == 0) + if ($results[0]['count(*)'] == 0) return false; else return true; @@ -35,20 +35,24 @@ class PartieGateway $query = "SELECT max(id) FROM Partie"; $this->con->executeQuery($query); $results=$this->con->getResults(); - if (empty($results)) + if ($results[0]['max(id)']==NULL) return 0; else - return $results[0]['max']; + return $results[0]['max(id)']; } public function creerPartieMulti(int $max, array $tabEnigme) : Partie{ $partie=PartieFactory::createPartieMulti($max+1,$tabEnigme); - $query= "INSERT INTO Partie VALUES (:idPartie,:idEnigme)"; + $query= "INSERT INTO Partie VALUES (:idPartie,CURRENT_DATE)"; $this->con->executeQuery($query, array(':idPartie' => array($partie->getIdPartie(), SQLITE3_INTEGER))); - foreach($partie->getListeEnigme() as $Enigme){ - $query= "INSERT INTO Contenir VALUES (:idPartie, :idEnigme)"; - $this->con->executeQuery($query, array( - ':idPartie' => array($partie->getIdPartie(), SQLITE3_INTEGER), - ':idEnigme' => array($Enigme->getIdEnigme(), SQLITE3_INTEGER))); + if (count($partie->getListeEnigme()) != 0) { + foreach ($partie->getListeEnigme() as $Enigme) { + $query = "INSERT INTO Contenir VALUES (:idPartie, :idEnigme)"; + $this->con->executeQuery($query, array( + ':idPartie' => array($partie->getIdPartie(), SQLITE3_INTEGER), + ':idEnigme' => array($Enigme->getIdEnigme(), SQLITE3_INTEGER) + ) + ); + } } return $partie; } @@ -87,10 +91,10 @@ class PartieGateway ':idPartie' => array($partie->getIdPartie(), SQLITE3_INTEGER), ':idEnigme' => array($Enigme->getIdEnigme(), SQLITE3_INTEGER))); } - $query= "INSERT INTO Participer VALUES (:idPartie, :idJoueur, TRUE)"; + $query= "INSERT INTO Participer VALUES (:idPartie, :idUtilisateur, TRUE)"; $this->con->executeQuery($query, array( 'idPartie' => array($partie->getIdPartie(), SQLITE3_INTEGER), - 'idJoueur' => array($utilisateur->getEmail(), SQLITE3_INTEGER))); + 'idUtilisateur' => array($utilisateur->getEmail(), SQLITE3_INTEGER))); } public function delete(string $idPartie){ diff --git a/WEB/Controller/UtilisateurGateway.php b/WEB/Controller/UtilisateurGateway.php index 27a654d4..0482fc2b 100644 --- a/WEB/Controller/UtilisateurGateway.php +++ b/WEB/Controller/UtilisateurGateway.php @@ -79,17 +79,25 @@ class UtilisateurGateway } public function addToQueue(Utilisateur $utilisateur,Partie $partie){ - $query = "INSERT INTO Participer VALUES (:idUtilisateur,:idPartie)"; + $query = "INSERT INTO Participer VALUES (:idUtilisateur,:idPartie,0)"; $this->con->executeQuery($query,array( 'idUtilisateur' => array($utilisateur->getEmail(),SQLITE3_TEXT), 'idPartie' => array($partie->getIdPartie(), SQLITE3_INTEGER) )); } + public function isAlreadyInqueue(Utilisateur $utilisateur){ + $query="SELECT utilisateur FROM Participer WHERE utilisateur=:utilisateur"; + $this->con->executeQuery($query, array( + 'utilisateur' => array($utilisateur->getEmail()) + ) + ); + } + public function queueFilled(){ $query = "SELECT count(*) FROM Participer WHERE etat=0"; $this->con->executeQuery($query); - if ($this->con->getResults()[0]['count'] >= 4) + if ($this->con->getResults()[0]['count(*)'] >= 4) return True; else return False; @@ -98,7 +106,7 @@ class UtilisateurGateway /*public function resoudreEnigmeMulti(string $emailUtilisateur) { $query="SELECT c.partie FROM Contenir - WHERE c.joueur = :emailUtilisateur + WHERE c.utilisateur = :emailUtilisateur and c.enCours = TRUE"; $this->con->executeQuery($query, array( ':emailUtilisateur' => array($emailUtilisateur,SQLITE3_TEXT) @@ -107,7 +115,7 @@ class UtilisateurGateway $query="SELECT e.id, c2.indexEnigme FROM Resoudre r, Contenir c1,Contenir c2, Enigme e WHERE r.id = :idPartie - AND r.joueur=:idJoueur + AND r.utilisateur=:idutilisateur AND r.partie=:idPartie AND r.temps IS NOT NULL AND c1.partie = r.partie @@ -136,19 +144,19 @@ class UtilisateurGateway $classement=$results[0]["max"]+1; $query="SELECT * FROM Resoudre - WHERE r.joueur=:joueur + WHERE r.utilisateur=:utilisateur AND r.enigme=:idEnigme AND r.partie=:idPartie"; $this->con->executeQuery($query, array( - "joueur" => array($emailUtilisateur, SQLITE3_TEXT), + "utilisateur" => array($emailUtilisateur, SQLITE3_TEXT), "enigme" => array($idEnigme, SQLITE3_INTEGER), "partie" => array($idPartie, SQLITE3_INTEGER))); $results=$this->con->getResults(); if(empty($results)) { - $query="INSERT INTO Resoudre VALUES (:joueur, :enigme,:partie,:classement,:index,:temps,TRUE)"; + $query="INSERT INTO Resoudre VALUES (:utilisateur, :enigme,:partie,:classement,:index,:temps,TRUE)"; $this->con->executeQuery($query, array( - "joueur" => array($emailUtilisateur, SQLITE3_TEXT), + "utilisateur" => array($emailUtilisateur, SQLITE3_TEXT), "enigme" => array($idEnigme, SQLITE3_INTEGER), "partie" => array($idPartie, SQLITE3_INTEGER), "classement" => array($classement, SQLITE3_INTEGER), @@ -160,11 +168,11 @@ class UtilisateurGateway { $query="UPDATE Resoudre SET classement=:classement; - WHERE joueur=:joueur + WHERE utilisateur=:utilisateur AND enigme=:idEnigme AND partie=:idPartie"; $this->con->executeQuery($query, array( - "joueur" => array($emailUtilisateur, SQLITE3_TEXT), + "utilisateur" => array($emailUtilisateur, SQLITE3_TEXT), "enigme" => array($idEnigme, SQLITE3_INTEGER), "partie" => array($idPartie, SQLITE3_INTEGER), "classement" => array($classement, SQLITE3_INTEGER))); @@ -174,7 +182,7 @@ class UtilisateurGateway public function passerEnigmeMulti(string $emailUtilisateur){ $query="SELECT p.partie FROM Participer - WHERE p.joueur = :emailUtilisateur + WHERE p.utilisateur = :emailUtilisateur and p.enCours = TRUE"; $this->con->executeQuery($query, array( ':emailUtilisateur' => array($emailUtilisateur,SQLITE3_TEXT) @@ -183,7 +191,7 @@ class UtilisateurGateway $query="SELECT e.id, c2.indexEnigme FROM Resoudre r, Contenir c1,Contenir c2, Enigme e WHERE r.id = :idPartie - AND r.joueur=:idJoueur + AND r.utilisateur=:idUtilisateur AND r.partie=:idPartie AND r.temps IS NOT NULL AND r.enigme=c1.enigme @@ -201,9 +209,9 @@ class UtilisateurGateway $idEnigme=$results[0]["enigme"]; $index=$results[0]["indexEnigme"]; - $query="INSERT INTO Resoudre VALUES (:joueur, :enigme,:partie,:classement,:index,:temps,TRUE)"; + $query="INSERT INTO Resoudre VALUES (:utilisateur, :enigme,:partie,:classement,:index,:temps,TRUE)"; $this->con->executeQuery($query, array( - "joueur" => array($emailUtilisateur, SQLITE3_TEXT), + "utilisateur" => array($emailUtilisateur, SQLITE3_TEXT), "enigme" => array($idEnigme, SQLITE3_INTEGER), "partie" => array($idPartie, SQLITE3_INTEGER), "classement" => array(NULL, SQLITE3_NULL), @@ -214,7 +222,7 @@ class UtilisateurGateway public function resoudreEnigmeSolo(string $emailUtilisateur) { $query="SELECT c.partie FROM Contenir - WHERE c.joueur = :emailUtilisateur + WHERE c.utilisateur = :emailUtilisateur and c.enCours = TRUE"; $this->con->executeQuery($query, array( ':emailUtilisateur' => array($emailUtilisateur,SQLITE3_TEXT) @@ -223,7 +231,7 @@ class UtilisateurGateway $query="SELECT e.id, c2.indexEnigme FROM Resoudre r, Contenir c1,Contenir c2, Enigme e WHERE r.id = :idPartie - AND r.joueur=:idJoueur + AND r.utilisateur=:idUtilisateur AND r.partie=:idPartie AND r.enigme = c1.enigme AND c1.partie = r.partie @@ -253,19 +261,19 @@ class UtilisateurGateway $classement=$results[0]["max"]+1; $query="SELECT * FROM Resoudre - WHERE r.joueur=:joueur + WHERE r.utilisateur=:utilisateur AND r.enigme=:idEnigme AND r.partie=:idPartie"; $this->con->executeQuery($query, array( - "joueur" => array($emailUtilisateur, SQLITE3_TEXT), + "utilisateur" => array($emailUtilisateur, SQLITE3_TEXT), "enigme" => array($idEnigme, SQLITE3_INTEGER), "partie" => array($idPartie, SQLITE3_INTEGER))); $results=$this->con->getResults(); if(empty($results)) { - $query="INSERT INTO Resoudre VALUES (:joueur, :enigme,:partie,:classement,:index,:temps,TRUE)"; + $query="INSERT INTO Resoudre VALUES (:utilisateur, :enigme,:partie,:classement,:index,:temps,TRUE)"; $this->con->executeQuery($query, array( - "joueur" => array($emailUtilisateur, SQLITE3_TEXT), + "utilisateur" => array($emailUtilisateur, SQLITE3_TEXT), "enigme" => array($idEnigme, SQLITE3_INTEGER), "partie" => array($idPartie, SQLITE3_INTEGER), "classement" => array($classement, SQLITE3_INTEGER), @@ -276,11 +284,11 @@ class UtilisateurGateway { $query="UPDATE Resoudre SET classement=:classement; - WHERE joueur=:joueur + WHERE utilisateur=:utilisateur AND enigme=:idEnigme AND partie=:idPartie"; $this->con->executeQuery($query, array( - "joueur" => array($emailUtilisateur, SQLITE3_TEXT), + "utilisateur" => array($emailUtilisateur, SQLITE3_TEXT), "enigme" => array($idEnigme, SQLITE3_INTEGER), "partie" => array($idPartie, SQLITE3_INTEGER), "classement" => array($classement, SQLITE3_INTEGER))); diff --git a/WEB/Controller/VisitorController.php b/WEB/Controller/VisitorController.php index 03ab22dc..34e5fe0e 100644 --- a/WEB/Controller/VisitorController.php +++ b/WEB/Controller/VisitorController.php @@ -31,6 +31,7 @@ class VisitorController break; case "goToQueue": $model->goToLogin(); + break; default: $error = "Action non valide"; require($rep . $vues['erreur']); diff --git a/WEB/Factory/PartieFactory.php b/WEB/Factory/PartieFactory.php index 6e9ff6d7..ceaf1ef0 100644 --- a/WEB/Factory/PartieFactory.php +++ b/WEB/Factory/PartieFactory.php @@ -2,6 +2,8 @@ class PartieFactory{ public static function createPartieMulti($newId,$tabEnigme) : Partie { + if (count($tabEnigme)==0) + return new Partie($newId,array()); $tempsResolutionPartie=0; $tabIndex=range(0,count($tabEnigme)); $randomNumber=0; diff --git a/WEB/Metier/Partie.php b/WEB/Metier/Partie.php index f0899047..804f3250 100644 --- a/WEB/Metier/Partie.php +++ b/WEB/Metier/Partie.php @@ -4,33 +4,33 @@ include_once "Enigme.php"; class Partie { - private string $idPartie; + private int $idPartie; private DateTime $datePartie; private array $listeEnigme; /** - * @param string $idPartie + * @param int $idPartie * @param array $datePartie */ - public function __construct(string $idPartie, array $listeEnigme) + public function __construct(int $idPartie, array $listeEnigme) { $this->idPartie = $idPartie; $this->datePartie = new DateTime(); - $this->$listeEnigme = $listeEnigme; + $this->listeEnigme = $listeEnigme; } /** - * @return string + * @return int */ - public function getIdPartie(): string + public function getIdPartie(): int { return $this->idPartie; } /** - * @param string $idPartie + * @param int $idPartie */ - public function setIdPartie(string $idPartie): void + public function setIdPartie(int $idPartie): void { $this->idPartie = $idPartie; } diff --git a/WEB/Model/UserModel.php b/WEB/Model/UserModel.php index 5cc15853..c2ae4b1c 100644 --- a/WEB/Model/UserModel.php +++ b/WEB/Model/UserModel.php @@ -58,15 +58,23 @@ class UserModel //require($rep . $vues['Queue']); $this->addToQueue(); } catch (Exception $e) { - $error = "404"; + $error = $e->getMessage(); require($rep . $vues['erreur']); } } public function addToQueue(){ - if ($this->partie_gateway->partieInQueueExists()) { + if($this->utilisateur_gateway->isAlreadyInqueue($_SESSION['utilisateur'])) + { + return; + } + echo '1'; + if (!$this->partie_gateway->partieInQueueExists()) { + echo '2'; $tabEnigme = $this->enigme_gateway->findMultiEnigma(); + echo '3'; $idNewPartie = $this->partie_gateway->findPartieMaxId(); + echo '4'; $partie=$this->partie_gateway->creerPartieMulti($idNewPartie,$tabEnigme); } else{ @@ -74,6 +82,7 @@ class UserModel $tabEnigme = $this->enigme_gateway->findEnigmaFromPartie($idPartieInQueue); $partie = $this->partie_gateway->creerPartieMulti($idPartieInQueue, $tabEnigme); } + echo '6'; $this->utilisateur_gateway->addToQueue($_SESSION['utilisateur'],$partie); if ($this->utilisateur_gateway->queueFilled()) { diff --git a/WEB/Model/scripted.db b/WEB/Model/scripted.db index 82818c7e63122b0260f3f50ae2be2bbfdc184aa6..7a3e031eee019591e01a84939d79ddafbfc0b726 100644 GIT binary patch delta 619 zcmZvXF>ljA7>4ZzlH8p?TL>a2qAuqaEJt#i5EN8EsEw))2n9hUhDr=|n}Zr9j^&)o zNKzHCFc2LB9gsS(Fd^sp*)lq|}IO*Qud3DcsUw<#t-^;wdc+OK4 z1>`+BlSA*?6;GL4_y)!=MMIWiIK~(F4sXFBL+uD}ku_357H)hR?&k5fO>(Aft2-ce zQB4K$6*)R!Do?_LcF^;=_(A4mF^!!^bas|9?sHnDw3BdG^0TSqML`@84+B26hjjfF`!)@B0WMc^S#!w}5iW|$a2`cxb7rZe4sMA>I2OD5alV40%=hpR-N>Z< zPE$;z&8WYpPZa?BL5tBXKi=5%W4BhXmOT*9^@4o)MyFZ8ob|YPr<)QS>hm)5h7Ixy zgQA)7lDV=5)YqEQEUJOtuFP^pE`T3Ulf)_$j&!f5kpr!UVYjx-nTelK?HN5@-rMUCbnM z#h4S$<4bT82WSQvU%po0*SK>Qn*?`_?oUa(=5;8U?eM9Y4r4%0tM#@(mldTBIN6CE z_oNMSr1c)wDUC6O+5cFNyd@mC@WV&bmjuP;&pw~X^_@jNba&auW zW7#7k;#e3{MXo7~u^P3ejCND*>1l&a?GIADTw2P8YHfdxElWU+*4U7LKYdV-bPjjp zp;ReQ5HGowj}L{#g1ncXMb;+iirii76k17DbLXvKkWa>okrSq$>iR-8S9Pyn7ox|Z zXgL@c*?1XTCdH%OYO9~$8eGT$SJr^6SSH!NWlo9AjcRB zUYEKb?6S;BEFY}Kd5}{SfhlqEEqBzFn?W`vz*|wr)lZQf>8PD`%MI_o*ctFUt*xr! z&IHt*j+ltE>13*Omg9~Sr`cUKUFNELd|S?*ao|LcY>p(Ys0~GKKRg??%Ec>EbiALU zg@Y2?;!C?iuA-Deo(qN*-Jb`8ESuYiPPBEdmRHxe$U|0zxy(fiRo@zjq`>z?bO?b%uOTMgT=6M2cu~* kV>N7||F492p{M`deooWR>3MDaipKS3EsejaCkMv=0Ls;BssI20 diff --git a/WEB/bd.sql b/WEB/bd.sql index 3ad55da4..5969c98d 100644 --- a/WEB/bd.sql +++ b/WEB/bd.sql @@ -34,14 +34,14 @@ dateDebut date NOT NULL ); CREATE TABLE Resoudre( -joueur varchar(50) REFERENCES Utilisateur(email), +utilisateur varchar(50) REFERENCES Utilisateur(email), enigme int REFERENCES Enigme(id), partie int REFERENCES Partie(id), classement int CHECK (classement >0), indexEnigme int CHECK (indexEnigme >0), temps numeric CHECK (temps >0), enMulti boolean, -PRIMARY KEY(joueur, enigme, partie) +PRIMARY KEY(utilisateur, enigme, partie) ); CREATE TABLE Contenir( @@ -53,7 +53,7 @@ PRIMARY KEY(partie, enigme) CREATE TABLE Participer( partie int REFERENCES Partie(id), - joueur varchar(50) REFERENCES Joueur(email), + utilisateur varchar(50) REFERENCES Utilisateur(email), etat int CHECK (etat IN (0,1,2)), -- etat 0 = enAttente etat 1 = enCours etat 2 = fini - PRIMARY KEY(partie, joueur) + PRIMARY KEY(partie, utilisateur) ); \ No newline at end of file From 8a1f697aa8e2039815abab7b77b616264ece1ca9 Mon Sep 17 00:00:00 2001 From: johan Date: Tue, 6 Dec 2022 13:58:54 +0100 Subject: [PATCH 2/2] =?UTF-8?q?Premi=C3=A8res=20correction=20de=20la=20cr?= =?UTF-8?q?=C3=A9ation=20de=20partie=20multijoueur?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- WEB/Controller/UtilisateurGateway.php | 15 ++++++++++----- WEB/Model/scripted.db | Bin 53248 -> 53248 bytes 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/WEB/Controller/UtilisateurGateway.php b/WEB/Controller/UtilisateurGateway.php index 0482fc2b..3f34802a 100644 --- a/WEB/Controller/UtilisateurGateway.php +++ b/WEB/Controller/UtilisateurGateway.php @@ -74,24 +74,29 @@ class UtilisateurGateway ':email' => array($email,SQLITE3_TEXT) )); $results=$this->con->getResults(); - $estAdmin=$results['estAdmin']; + $estAdmin=$results[0]['estAdmin']; return $estAdmin; } public function addToQueue(Utilisateur $utilisateur,Partie $partie){ $query = "INSERT INTO Participer VALUES (:idUtilisateur,:idPartie,0)"; $this->con->executeQuery($query,array( - 'idUtilisateur' => array($utilisateur->getEmail(),SQLITE3_TEXT), - 'idPartie' => array($partie->getIdPartie(), SQLITE3_INTEGER) + ':idUtilisateur' => array($utilisateur->getEmail(),SQLITE3_TEXT), + ':idPartie' => array($partie->getIdPartie(), SQLITE3_INTEGER) )); } - public function isAlreadyInqueue(Utilisateur $utilisateur){ + public function isAlreadyInqueue(Utilisateur $utilisateur) : bool{ $query="SELECT utilisateur FROM Participer WHERE utilisateur=:utilisateur"; $this->con->executeQuery($query, array( - 'utilisateur' => array($utilisateur->getEmail()) + ':utilisateur' => array($utilisateur->getEmail(),SQLITE3_TEXT) ) ); + $results=$this->con->getResults(); + if ($results != array()) + return false; + else + return true; } public function queueFilled(){ diff --git a/WEB/Model/scripted.db b/WEB/Model/scripted.db index 7a3e031eee019591e01a84939d79ddafbfc0b726..8bad5f78a7b2a51b6852954d8ecd863b5ee63eaa 100644 GIT binary patch delta 287 zcmZozz}&Ead4e>f{zMsPM*WQmOZeFs`PVY=uiY#tu$VtKkdaMYu#uG`D?cMK&mlK4 zGey`<2)$f+{h*~g!Yfq{XM|2+f$d!Q9h`Go|S)j3g&=iSVxz$^fC##aXZuRt}g z`9(PynI$;`5{pVQQ+dJKKQi!t1WG;U=jUZ)W>7RTFf!6LG}1LNTO?qxNI_te0t?81 oHw^r5fT|wx%Ly^EsPm)x!Vuz+w+#GmfodM}3kw02pt{5m09z4H;Q#;t delta 42 scmZozz}&Ead4e>f&O{k!MxBibOZYdlB>d4|)F1#x3Y!{O3_v3C06!@YfB*mh