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..3f34802a 100644 --- a/WEB/Controller/UtilisateurGateway.php +++ b/WEB/Controller/UtilisateurGateway.php @@ -74,22 +74,35 @@ 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)"; + $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) : bool{ + $query="SELECT utilisateur FROM Participer WHERE utilisateur=:utilisateur"; + $this->con->executeQuery($query, array( + ':utilisateur' => array($utilisateur->getEmail(),SQLITE3_TEXT) + ) + ); + $results=$this->con->getResults(); + if ($results != array()) + return false; + else + return true; + } + 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 +111,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 +120,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 +149,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 +173,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 +187,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 +196,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 +214,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 +227,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 +236,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 +266,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 +289,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 82818c7e..8bad5f78 100644 Binary files a/WEB/Model/scripted.db and b/WEB/Model/scripted.db differ 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