Merge branch 'master' of https://codefirst.iut.uca.fr/git/nathan.boileau/Scripted
continuous-integration/drone/push Build is passing Details

ServeurDeTest
Noé GARNIER 2 years ago
commit 87af713bc8

@ -68,6 +68,16 @@ class EnigmeGateway
return $tabEnigme; return $tabEnigme;
} }
public function findEnigmaFromPartie(string $idPartie){
$query = "SELECT * FROM Enigme e, Contenir c
WHERE c.partie=:idPartie";
$this->con->executeQuery($query, array(
'idPartie' => array($idPartie, SQLITE3_TEXT)
));
$tabEnigme=EnigmeFactory::create($this->con->getResults());
return $tabEnigme;
}
/*
public function findById(string $idEnigme) : array public function findById(string $idEnigme) : array
{ {
$query="SELECT * FROM Enigme WHERE idEnigme =:idEnigme"; $query="SELECT * FROM Enigme WHERE idEnigme =:idEnigme";
@ -86,7 +96,7 @@ class EnigmeGateway
$results = $this->con->getResults(); $results = $this->con->getResults();
$tabEnigme=EnigmeFactory::create($results); $tabEnigme=EnigmeFactory::create($results);
return $tabEnigme; return $tabEnigme;
} }*/
public function showAll(): void public function showAll(): void
{ {

@ -21,17 +21,27 @@ class PartieGateway
/** /**
* @param array $listeJoueur * @param array $listeJoueur
*/ */
public function partieInQueueExists() : bool{
public function creerPartieMulti(array $listeJoueur){ $query = "SELECT count(*) FROM PARTICIPER WHERE etat = 0";
$query = "SELECT * FROM Enigme
WHERE points IS NOT NULL OR points != 0";
$this->con->executeQuery($query); $this->con->executeQuery($query);
$results = $this->con->getResults(); $results = $this->con->getResults();
$query= "SELECT max(p.id) if ($results[0]['count'] == 0)
FROM PARTIE p;"; return false;
else
return true;
}
public function findPartieMaxId() : int{
$query = "SELECT max(id) FROM Partie";
$this->con->executeQuery($query); $this->con->executeQuery($query);
$max=$this->con->getResults()[0]["max"]; $results=$this->con->getResults();
$partie=PartieFactory::createPartieMulti($max,$results); if (empty($results))
return 0;
else
return $results[0]['max'];
}
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,:idEnigme)";
$this->con->executeQuery($query, array(':idPartie' => array($partie->getIdPartie(), SQLITE3_INTEGER))); $this->con->executeQuery($query, array(':idPartie' => array($partie->getIdPartie(), SQLITE3_INTEGER)));
foreach($partie->getListeEnigme() as $Enigme){ foreach($partie->getListeEnigme() as $Enigme){
@ -40,12 +50,17 @@ class PartieGateway
':idPartie' => array($partie->getIdPartie(), SQLITE3_INTEGER), ':idPartie' => array($partie->getIdPartie(), SQLITE3_INTEGER),
':idEnigme' => array($Enigme->getIdEnigme(), SQLITE3_INTEGER))); ':idEnigme' => array($Enigme->getIdEnigme(), SQLITE3_INTEGER)));
} }
foreach($listeJoueur as $Joueur){ return $partie;
$query= "INSERT INTO Participer VALUES (:idPartie, :idJoueur, TRUE)";
$this->con->executeQuery($query, array(
':idPartie' => array($partie->getIdPartie(), SQLITE3_INTEGER),
':idEnigme' => array($Enigme->getIdEnigme(), SQLITE3_INTEGER)));
} }
public function findPartieInQueue(){
$query = "SELECT id
FROM Partie p, Participer pa
WHERE pa.etat=0
AND pa.partie=p.id";
$this->con->executeQuery($query);
$results = $this->con->getResults();
return $results[0]['id'];
} }
public function creerPartieSolo(Utilisateur $utilisateur){ public function creerPartieSolo(Utilisateur $utilisateur){

@ -78,6 +78,23 @@ class UtilisateurGateway
return $estAdmin; return $estAdmin;
} }
public function addToQueue(Utilisateur $utilisateur,Partie $partie){
$query = "INSERT INTO Participer VALUES (:idUtilisateur,:idPartie)";
$this->con->executeQuery($query,array(
'idUtilisateur' => array($utilisateur->getEmail(),SQLITE3_TEXT),
'idPartie' => array($partie->getIdPartie(), SQLITE3_INTEGER)
));
}
public function queueFilled(){
$query = "SELECT count(*) FROM Participer WHERE etat=0";
$this->con->executeQuery($query);
if ($this->con->getResults()[0]['count'] >= 4)
return True;
else
return False;
}
/*public function resoudreEnigmeMulti(string $emailUtilisateur) /*public function resoudreEnigmeMulti(string $emailUtilisateur)
{ {
$query="SELECT c.partie FROM Contenir $query="SELECT c.partie FROM Contenir

@ -1,19 +1,19 @@
<?php <?php
class PartieFactory{ class PartieFactory{
public static function createPartieMulti($idMax,$resultsEnigme) : Partie public static function createPartieMulti($newId,$tabEnigme) : Partie
{ {
$tempsResolutionPartie=0; $tempsResolutionPartie=0;
$tabEnigme=array(); $tabIndex=range(0,count($tabEnigme));
$tabIndex=range(0,strlen($resultsEnigme)-1);
$randomNumber=0; $randomNumber=0;
$tabEnigmePartie = array();
while($tempsResolutionPartie <= 30) while($tempsResolutionPartie <= 30)
{ {
$randomNumber=$tabIndex[array_rand($tabIndex)]; $randomNumber=$tabIndex[array_rand($tabIndex)];
$tabEnigme[]=EnigmeFactory::create($resultsEnigme[$randomNumber]); $tabEnigmePartie[]=$tabEnigme[$randomNumber];
$TempsResolutionPartie+=$resultsEnigme[$randomNumber]['tempsDeResolution']; $TempsResolutionPartie+=$tabEnigme[$randomNumber]->getTempsDeResolution();
unset($tabIndex[$randomNumber]); unset($tabIndex[$randomNumber]);
} }
$partie=new Partie($idMax+1,$tabEnigme); $partie=new Partie($newId,$tabEnigme);
return $partie; return $partie;
} }

@ -60,6 +60,20 @@ class UserModel
$error = "404"; $error = "404";
require($rep . $vues['erreur']); require($rep . $vues['erreur']);
} }
if ($this->partie_gateway->partieInQueueExists()) {
$tabEnigme = $this->enigme_gateway->findMultiEnigma();
$idNewPartie = $this->partie_gateway->findPartieMaxId();
$partie=$this->partie_gateway->creerPartieMulti($idNewPartie,$tabEnigme);
}
else{
$IdPartieInQueue = $this->partie_gateway->findPartieInQueue();
$tabEnigme = $this->enigme_gateway->findEnigmaFromPartie($Idpartie);
$partie = $this->partie_gateway->creerPartieMulti($IdPartieInQueue, $tabEnigme);
}
$this->utilisateur_gateway->addToQueue($_SESSION['utilisateur'],$partie);
if ($this->utilisateur_gateway->queueFilled())
echo "Partie is launched"
// $this->launchGame();
} }
public function logout() public function logout()

@ -42,9 +42,10 @@ class VisitorModel
throw (new Exception("Email déjà utilisé")); throw (new Exception("Email déjà utilisé"));
} }
$password = password_hash($_REQUEST['password'] . $sel, PASSWORD_DEFAULT); $password = password_hash($_REQUEST['password'] . $sel, PASSWORD_DEFAULT);
$Utilisateur = new Utilisateur($_REQUEST['email'], $_REQUEST['username'], $password, false); $utilisateur = new Utilisateur($_REQUEST['email'], $_REQUEST['username'], $password, false);
$this->utilisateur_gateway->insert($Utilisateur); $this->utilisateur_gateway->insert($utilisateur);
$_SESSION['role'] = 'user'; $_SESSION['role'] = 'user';
$_SESSION['utilisateur'] = $utilisateur;
require($rep . $vues['main']); require($rep . $vues['main']);
} catch (PDOException $e) { } catch (PDOException $e) {
$error = "Erreur de connexion à la base de données."; $error = "Erreur de connexion à la base de données.";
@ -58,8 +59,8 @@ class VisitorModel
{ {
global $rep, $vues, $sel, $error; global $rep, $vues, $sel, $error;
try { try {
$Utilisateur = $this->utilisateur_gateway->getUtilisateurByEmail($_REQUEST['email']); $utilisateur = $this->utilisateur_gateway->getUtilisateurByEmail($_REQUEST['email']);
if ($Utilisateur->getEmail() == "null") { if ($utilisateur->getEmail() == "null") {
$error = "Utilisateur non trouvé."; $error = "Utilisateur non trouvé.";
throw new Exception("Utilisateur introuvable"); throw new Exception("Utilisateur introuvable");
} }
@ -74,7 +75,7 @@ class VisitorModel
} else { } else {
$_SESSION['role'] = "user"; $_SESSION['role'] = "user";
} }
$_SESSION['utilisateur'] = $utilisateur;
$_SESSION['connected'] = 'true'; $_SESSION['connected'] = 'true';
require($rep . $vues['main']); require($rep . $vues['main']);
} catch (Exception $e) { } catch (Exception $e) {

@ -54,6 +54,6 @@ PRIMARY KEY(partie, enigme)
CREATE TABLE Participer( CREATE TABLE Participer(
partie int REFERENCES Partie(id), partie int REFERENCES Partie(id),
joueur varchar(50) REFERENCES Joueur(email), joueur varchar(50) REFERENCES Joueur(email),
etat int CHECK (etat IN (0,1,2)), etat int CHECK (etat IN (0,1,2)), -- etat 0 = enAttente etat 1 = enCours etat 2 = fini
PRIMARY KEY(partie, joueur) PRIMARY KEY(partie, joueur)
); );
Loading…
Cancel
Save