diff --git a/project/src/controller/PenduController.php b/project/src/controller/PenduController.php index f881d34..3b9ef19 100755 --- a/project/src/controller/PenduController.php +++ b/project/src/controller/PenduController.php @@ -7,14 +7,18 @@ use model\Joueur; use model\MdlPendu; use model\MdlScientifique; use config\Validation; +use model\MdlUser; +use model\Utilisateur; use model\ValidationException; class PenduController{ private array $dVue; + private Joueur $role; private array $dVueErreur; private MdlPendu $pendu; public function __construct(Joueur $role, ConfigurationJeu $configJeu) { + $this->role=$role; $this->dVue = []; $this->dVueErreur = []; if(isset($_SESSION['pendu']) && Validation::valMdlPendu($_SESSION['pendu'], $this->dVueErreur)){ @@ -57,8 +61,15 @@ class PenduController{ echo $twig->render($config['templates']['pendu'], ['dVue' => $this->dVue, 'dVueErreur'=>$this->dVueErreur]); } + private function ajouterScientifiqueDecouvert(){ + if($this->role instanceof Utilisateur){ + (new MdlUser())->addScientifiqueDecouvert($this->role->getId(), $this->pendu->getScientifique()->getId()); + } + } + private function renderAgagne(){ $this->dVue['messageScore'] = "Vous avez gagné !"; + $this->ajouterScientifiqueDecouvert(); $this->renderScore(); } diff --git a/project/src/controller/UserController.php b/project/src/controller/UserController.php index f266216..d55a5eb 100755 --- a/project/src/controller/UserController.php +++ b/project/src/controller/UserController.php @@ -7,6 +7,7 @@ use Exception; use model\ConfigurationJeu; use model\Connection; use model\GameGateway; +use model\Joueur; use model\MdlDifficulte; use model\MdlJeu; use model\MdlScientifique; @@ -15,6 +16,7 @@ use model\ValidationException; use model\MdlUser; use model\MdlAdmin; use model\LoginException; +use model\Utilisateur; class UserController { @@ -112,6 +114,7 @@ class UserController { $_SESSION['pseudo'] = $_REQUEST['login']; $_SESSION['idUser'] = true; $_SESSION['isLogged'] = true; + $_SESSION['role'] = $ug->getFromEmail($_REQUEST['login']); header("Location: ."); } else { //voir si c'est un admin @@ -120,6 +123,7 @@ class UserController { $_SESSION['pseudo'] = $_REQUEST['login']; $_SESSION['isAdmin'] = true; $_SESSION['isLogged'] = true; + unset($_SESSION['role']); header("Location: ."); } else { $dVueErreur[] = "Connexion échouée"; @@ -161,6 +165,7 @@ class UserController { } public function logout(){ + session_destroy(); $_SESSION=[]; header("Location: ."); } @@ -206,7 +211,11 @@ class UserController { $difficulte = (new MdlDifficulte())->getFromId($id_difficulte); $_SESSION['configuration'] = new ConfigurationJeu($jeu, $difficulte); - header("Location: ".$basePath."/pseudo"); + if(isset($_SESSION['role'])){ + header('Location: '.$basePath.'/jouer'); + }else{ + header("Location: ".$basePath."/pseudo"); + } #echo $twig->render('accueil.html', ['dVue' => $dVue, 'dVueErreur' => $dVueErreur]); }else{ $this->CreateParty($dVueErreur); diff --git a/project/src/model/gateways/AdminGateway.php b/project/src/model/gateways/AdminGateway.php index e1b2a97..b566ae4 100755 --- a/project/src/model/gateways/AdminGateway.php +++ b/project/src/model/gateways/AdminGateway.php @@ -51,14 +51,14 @@ class AdminGateway $stmt->bindValue(':password', password_hash($password, PASSWORD_DEFAULT)); $stmt->execute(); } - public function getUser(int $id): User + public function getUser(int $id): Admin { $sql = "SELECT * FROM Admin WHERE id=:id"; $stmt = $this->con->prepare($sql); $stmt->bindValue(':id', $id); $stmt->execute(); $result = $stmt->fetch(); - return new User($result['id'], $result['email'], $result['password']); + return new Admin($result['id'], $result['email'], $result['password']); } public function getUsers(): array { @@ -68,7 +68,7 @@ class AdminGateway $result = $stmt->fetchAll(); $users = []; foreach ($result as $user) { - $users[] = new User($user['id'], $user['email'], $user['password']); + $users[] = new Admin($user['id'], $user['email'], $user['password']); } return $users; } @@ -100,7 +100,7 @@ class AdminGateway $result = $stmt->fetch(); return $result['id']; } - public function getUserByEmailAndPassword(string $email, string $password): User + public function getUserByEmailAndPassword(string $email, string $password): Admin { $sql = "SELECT * FROM Admin WHERE email=:email AND password=:password"; $stmt = $this->con->prepare($sql); @@ -108,6 +108,15 @@ class AdminGateway $stmt->bindValue(':password', password_hash($password, PASSWORD_DEFAULT)); $stmt->execute(); $result = $stmt->fetch(); - return new User($result['id'], $result['email'], $result['password']); + return new Admin($result['id'], $result['email'], $result['password']); + } + + public function getFromEmail(string $email): array + { + $this->con->executeQuery( + "SELECT id, email, password FROM Admin WHERE email = :email;", + [":pseudo" => [$email, $this->con::PARAM_STR]] + ); + return $this->con->getOneResult(); } } diff --git a/project/src/model/gateways/GameGateway.php b/project/src/model/gateways/GameGateway.php deleted file mode 100755 index 1b37f85..0000000 --- a/project/src/model/gateways/GameGateway.php +++ /dev/null @@ -1,29 +0,0 @@ -con = $con; - } - public static function getGames() : array - { - // TODO: implémenter requête SQL - return array( - 0 => ["Qui-est-ce ?", "Le qui est-ce...."], - 1 => ["Kahoot", "Le Kahoot permet..."] - ); - } - - public function getGameByCode(int $code) : array { - $query = 'SELECT * FROM Partie WHERE codeInvitation=:id'; - $this->con->executeQuery($query,array( - ':id' => [$code, PDO::PARAM_INT] - )); - return $this->con->getResults(); - } -} \ No newline at end of file diff --git a/project/src/model/gateways/UtilisateurConnecteGateway.php b/project/src/model/gateways/UtilisateurConnecteGateway.php index b70a1d8..8a72ab8 100644 --- a/project/src/model/gateways/UtilisateurConnecteGateway.php +++ b/project/src/model/gateways/UtilisateurConnecteGateway.php @@ -32,4 +32,28 @@ class UtilisateurConnecteGateway extends JoueurGateway { ] ); } + + public function getFromId(int $id){ + $this->con->executeQuery( + "SELECT idJoueur, pseudo, email, password FROM Utilisateur JOIN Joueur ON id=idJoueur WHERE id = :id;", + [":id" => [$id, $this->con::PARAM_INT]] + ); + return $this->con->getOneResult(); + } + + public function getFromEmail(string $email){ + $this->con->executeQuery( + "SELECT idJoueur, pseudo, email, password FROM Utilisateur JOIN Joueur ON id=idJoueur WHERE email = :email;", + [":email" => [$email, $this->con::PARAM_STR]] + ); + return $this->con->getOneResult(); + } + + public function addScientifiqueDecouvert(int $idUtilisateur, int $idScientifique){ + $this->con->executeQuery( + "INSERT INTO Decouvrir(idUtilisateur, idScientifique) VALUES (:idUtilisateur, :idScientifique);", + [":idUtilisateur" => [$idUtilisateur, $this->con::PARAM_INT], + ":idScientifique" => [$idScientifique, $this->con::PARAM_INT]] + ); + } } \ No newline at end of file diff --git a/project/src/model/mdl/MdlAdmin.php b/project/src/model/mdl/MdlAdmin.php index ea3a10f..e92adb3 100755 --- a/project/src/model/mdl/MdlAdmin.php +++ b/project/src/model/mdl/MdlAdmin.php @@ -38,19 +38,9 @@ class MdlAdmin extends MdlBase{ $_SESSION = array(); header("Location: ."); } -/* - public function setPseudo(int $id, string $pseudo): User{ - $this->gw->setPseudo($id, $pseudo); - return $this->getFromId($id); - } - public function insertInvite(string $pseudo, string $idSession): User{ - $id = $this->gw->insertInvite($pseudo, $idSession); - return $this->getFromId($id); + public function getFromEmail(string $email): Admin{ + $row = $this->gw->getFromEmail($email); + return new Admin($row['id'], $row['email'], $row['password']); } - - public function getFromId(int $id): User{ - $row = $this->gw->getFromId($id); - return new Invite($row['idjoueur'], $row['pseudo'], $row['idsession']); - }*/ } \ No newline at end of file diff --git a/project/src/model/mdl/MdlUser.php b/project/src/model/mdl/MdlUser.php index 68a23c1..ab9aca5 100755 --- a/project/src/model/mdl/MdlUser.php +++ b/project/src/model/mdl/MdlUser.php @@ -3,7 +3,7 @@ namespace model; class MdlUser extends MdlBase{ - private JoueurGateway $gw; + private UtilisateurConnecteGateway $gw; public function __construct(){ parent::__construct(); @@ -17,19 +17,23 @@ class MdlUser extends MdlBase{ $temp->insertJoueur($username); return $this->gw->register($username, $password, $temp->getFromPseudo($username)["id"]); } -/* - public function setPseudo(int $id, string $pseudo): User{ + + public function setPseudo(int $id, string $pseudo): Utilisateur{ $this->gw->setPseudo($id, $pseudo); return $this->getFromId($id); } - public function insertInvite(string $pseudo, string $idSession): User{ - $id = $this->gw->insertInvite($pseudo, $idSession); - return $this->getFromId($id); + public function getFromId(int $id): Utilisateur{ + $row = $this->gw->getFromId($id); + return new Utilisateur($row['idjoueur'], $row['pseudo'], $row['email'], $row['password']); } - public function getFromId(int $id): User{ - $row = $this->gw->getFromId($id); - return new Invite($row['idjoueur'], $row['pseudo'], $row['idsession']); - }*/ + public function getFromEmail(string $email): Utilisateur{ + $row = $this->gw->getFromEmail($email); + return new Utilisateur($row['idjoueur'], $row['pseudo'], $row['email'], $row['password']); + } + + public function addScientifiqueDecouvert(int $idUtilisateur, int $idScientifique){ + $this->gw->addScientifiqueDecouvert($idUtilisateur, $idScientifique); + } } \ No newline at end of file diff --git a/project/src/model/metier/Admin.php b/project/src/model/metier/Admin.php index 30a40cb..0029aa2 100755 --- a/project/src/model/metier/Admin.php +++ b/project/src/model/metier/Admin.php @@ -2,19 +2,21 @@ namespace model; -class Admin extends User +class Admin { + private int $id; private string $email; + private string $password; /** * @param int $id - * @param string $username * @param string $password * @param string $email */ - public function __construct(int $id, string $username, string $password, string $email) + public function __construct(int $id, string $email, string $password) { - parent::__construct($id, $username, $password); + $this->id=$id; + $this->password=$password; $this->email = $email; } @@ -23,14 +25,23 @@ class Admin extends User */ public function getEmail(): string { - return parent::getUsername(); + return $this->email; } /** - * @param string $email + * @return int */ - public function setEmail(string $email): void + public function getId(): int { - parent::setUsername($email); - } + return $this->id; + } + + /** + * @return string + */ + public function getPassword(): string + { + return $this->password; + } + } \ No newline at end of file