con = $con; } catch (Exception $e) { $error = $e->getMessage(); require($rep . $vues['erreur']); } } /** * @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) return false; else return true; } public function findPartieMaxId() : int{ $query = "SELECT max(id) FROM Partie"; $this->con->executeQuery($query); $results=$this->con->getResults(); if ($results[0]['max(id)']==NULL) return 0; else 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,CURRENT_DATE)"; $this->con->executeQuery($query, array(':idPartie' => array($partie->getIdPartie(), 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; } public function rejoindrePartieMulti(int $idPartieInQueue,array $tabEnigme) : Partie{ $partie = PartieFactory::createPartieMulti($idPartieInQueue,$tabEnigme); return $partie; } public function findPartieInQueue(){ $query = "SELECT p.id FROM Partie p, Participer pa WHERE pa.etat=0 AND pa.partie=p.id LIMIT 1"; $this->con->executeQuery($query); $results = $this->con->getResults(); return $results[0]['id']; } public function creerPartieSolo(Utilisateur $utilisateur){ $query = "SELECT * FROM Enigme WHERE points IS NULL OR points = 0"; $this->con->executeQuery($query); $results = $this->con->getResults(); $query= "SELECT max(p.id) FROM PARTIE p;"; $this->con->executeQuery($query); $max=$this->con->getResults()[0]["max"]; $partie=PartieFactory::createPartieSolo($max,$results); $query= "INSERT INTO Partie VALUES (:idPartie,:idEnigme)"; $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))); } 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))); } $query= "INSERT INTO Participer VALUES (:idPartie, :idUtilisateur, TRUE)"; $this->con->executeQuery($query, array( 'idPartie' => array($partie->getIdPartie(), SQLITE3_INTEGER), 'idUtilisateur' => array($utilisateur->getEmail(), SQLITE3_INTEGER))); } public function findLastPartie() : Partie { $query = "SELECT * FROM Partie ORDER BY id DESC LIMIT 1"; $this->con->executequery($query); $results = $this->con->getResults(); $row = $results[0]; $partie=new Partie($row['id'],array()); $date = new DateTime($row['dateDebut']); $partie->setDatePartie($date); return $partie; } public function createPartie(Enigme $enigme, Utilisateur $utilisateur){ $query="INSERT INTO Partie VALUES (NULL,:date)"; $currentDate = date('Y-m-d H:i:s'); $this->con->executeQuery($query, array( "date" => array($currentDate, SQLITE3_TEXT))); $partie = $this->findLastPartie(); $query="INSERT INTO Contenir VALUES (:partie,:idEnigme,NULL)"; $this->con->executeQuery($query, array( "partie" => array($partie->getIdPartie(), SQLITE3_INTEGER), "idEnigme" => array($enigme->getIdEnigme(), SQLITE3_INTEGER))); $query="INSERT INTO Participer VALUES (:partie,:utilisateur,NULL)"; $this->con->executeQuery($query, array( "partie" => array($partie->getIdPartie(), SQLITE3_INTEGER), "utilisateur" => array($utilisateur->getEmail(), SQLITE3_TEXT))); } public function delete(int $idPartie){ $query= "DELETE FROM Contenir WHERE partie = :enigmeId"; $this->con->executeQuery($query, array(':enigmeId' => array($idPartie, SQLITE3_INTEGER))); $query= "DELETE FROM Participer WHERE partie = :enigmeId"; $this->con->executeQuery($query, array(':enigmeId' => array($idPartie, SQLITE3_INTEGER))); $query= "DELETE FROM Partie WHERE id = :idPartie"; $this->con->executeQuery($query, array(':idPartie' => array($idPartie, SQLITE3_INTEGER))); } public function deleteByEnigme(int $enigmeId){ $query="SELECT partie FROM Contenir WHERE enigme = :enigmeId"; $this->con->executeQuery($query, array(':enigmeId' => array($enigmeId, SQLITE3_INTEGER))); $results = $this->con->getResults(); $query= "DELETE FROM Contenir WHERE enigme = :enigmeId"; $this->con->executeQuery($query, array(':enigmeId' => array($enigmeId, SQLITE3_INTEGER))); foreach($results as $row){ $query="DELETE FROM Participer WHERE partie = :partieId"; $this->con->executeQuery($query, array(':partieId' => array($row['partie'], SQLITE3_INTEGER))); $query= "DELETE FROM Partie WHERE id = :partieId"; $this->con->executeQuery($query, array(':partieId' => array($row['partie'], SQLITE3_INTEGER))); } } public function findPartieHistory() : array{ $query="SELECT * FROM Partie"; $this->con->executeQuery($query); $results = $this->con->getResults(); $query= "SELECT max(p.id) FROM PARTIE p;"; $this->con->executeQuery($query); $max=$this->con->getResults()[0]["max"]; $listePartieHistory=array(); foreach($results as $row) { $query = "SELECT e.* FROM Enigme e,Contenir c,Partie p WHERE p.id = c.partie AND c.enigme = e.id AND c.enCours = false; AND p.partie = :idPartie"; $this->con->executeQuery($query,array( "idPartie" => array($row["idPartie"],SQLITE3_INTEGER) )); $historiquePartie=$this->con->getResults(); $listePartieHistory[]=PartieFactory::createPartieHistory($row["idPartie"],$historiquePartie); } return $listePartieHistory; } public function findPartieByEnigmeId(int $enigmeId) : Partie{ $query = "SELECT * FROM Partie p, Resoudre r WHERE r.enigme = :enigmeId AND r.partie = p.id"; $this->con->executeQuery($query, array( ':enigmeId' => array($enigmeId, SQLITE3_INTEGER) )); $results = $this->con->getResults(); $row = $results[0]; $partie=new Partie($row['id'],array()); $date = new DateTime($row['dateDebut']); $partie->setDatePartie($date); return $partie; } public function showAll() : void{ $query= "SELECT * FROM Partie"; $this->con->executeQuery($query); $results=$this->con->getResults(); foreach ($results as $row) { echo $row['idPartie'] . '
'; } } }