diff --git a/.idea/deployment.xml b/.idea/deployment.xml old mode 100644 new mode 100755 diff --git a/project/src/composer.json b/project/src/composer.json index d505363..9e1c6da 100755 --- a/project/src/composer.json +++ b/project/src/composer.json @@ -11,8 +11,7 @@ "twig/twig": "^3.7", "twbs/bootstrap": "^5.3", "ext-iconv": "*", - "ext-pdo": "*", - "ext-http": "*" + "ext-pdo": "*" }, "scripts": { "post-update-cmd": [ diff --git a/project/src/config/config.php b/project/src/config/config.php index cd6acdd..4194993 100755 --- a/project/src/config/config.php +++ b/project/src/config/config.php @@ -6,5 +6,10 @@ $config = [ "db" => ["dsn" => 'pgsql:host=localhost;dbname=dbrebeuret', "login" => 'rebeuret', - "mdp" => 'achanger'] + "mdp" => 'achanger'], + "templates" => ["index" => 'vues/index.php', + "pseudo" => 'pseudo.html', + "jouer" => "jouer.html", + "pendu" => "pendu.html", + "penduScore" => 'penduScore.html'] ]; \ No newline at end of file diff --git a/project/src/controller/AdminController.php b/project/src/controller/AdminController.php index d9e6c07..9cc7486 100755 --- a/project/src/controller/AdminController.php +++ b/project/src/controller/AdminController.php @@ -2,6 +2,11 @@ namespace controller; use Exception; use PDOException; +use model\MdlDifficulte; +use model\MdlScientifique; +use model\MdlSexe; +use model\MdlThematique; +use model\Scientifique; //gerer la connexion des admins class AdminController { @@ -12,47 +17,69 @@ class AdminController { //verifier si l'utilisateur est connecté et admin if(isset($_SESSION["isAdmin"])){ - if($_SESSION["isAdmin"]) { - try { - switch ($action) { - case '': - echo "accueil admin"; - exit; - // echo $twig->render('admin/accueil.html'); - case 'stats': - echo "stats admin"; - exit; - // echo $twig->render('admin/stats.html'); - case 'ajouterScientifiques': - echo "page ajout scientifiques admin"; - exit; - // echo $twig->render('admin/ajouter.html'); - //mauvaise action - default: - $dVueErreur[] = "Erreur d'appel php"; - echo $twig->render('accueil.html', ['dVueErreur' => $dVueErreur]); - break; - } - } catch (PDOException $e) { - $dVueErreur[] = 'Erreur avec la base de données !'; - echo $twig->render('erreur.html', ['dVueErreur' => $dVueErreur]); - } catch (Exception $e2) { - $dVueErreur[] = 'Erreur inattendue !'; - echo $twig->render('erreur.html', ['dVueErreur' => $dVueErreur]); - } - } + if($_SESSION["isAdmin"]==true){ + //donner la page admin a l'admin + try { + switch($action) { + case '': + echo $twig->render('admin/accueil.html'); + break; + case 'stats': + echo $twig->render('admin/stats.html'); + break; + case 'ajouterScientifiques': + $sexe = new MdlSexe(); + $theme = new MdlThematique(); + $diff = new MdlDifficulte(); + if(!empty($_POST)){ + $sci=new MdlScientifique(); + $sci->addScientifique(new Scientifique(0, + $_POST["name"], + $_POST["prenom"], + $_POST["url"], + \DateTime::createFromFormat("Y-m-d",$_POST["date"]), + $_POST["description"], + 0, + $theme->getFromId(intval($_POST["theme"])), + $diff->getFromId(intval($_POST["difficulte"])), + $sexe->getFromId(intval($_POST["sexe"])) + )); + } + echo $twig->render('admin/ajouterScientifiques.html',['sexe' => $sexe->getAll(), 'themes' => $theme->getAll(), 'difficultes' => $diff->getAll()]); + break; + //mauvaise action + default: + $dVueErreur[] = "Erreur d'appel php"; + echo $twig->render('erreur.html', ['dVueErreur' => $dVueErreur]); + break; + } + } catch (\PDOException $e) { + $dVueErreur[] = 'Erreur avec la base de données !'; + echo $twig->render('erreur.html', ['dVueErreur' => $dVueErreur]); + } catch (\Exception $e2) { + $dVueErreur[] = 'Erreur inattendue !'; + echo $twig->render('erreur.html', ['dVueErreur' => $dVueErreur]); + } + } } - //verifier si l'utilisateur est connecté mais pas admin - if(isset($_SESSION["isLogged"])){ - if($_SESSION["isLogged"]) { + else if(isset($_SESSION["isLogged"])){ + //verifier si l'utilisateur est connecté mais pas admin + if($_SESSION["isLogged"]==true) { //dire acces interdit aux non admins - $dVueErreur[] = "Erreur 403 : Acces interdit"; + $dVueErreur[] = 'Erreur 403 : Accès interdit !'; echo $twig->render('erreur.html', ['dVueErreur' => $dVueErreur]); exit(0); } - } - //renvoyer a la page de connexion pour les non connectés - echo $twig->render('login.html'); + } else { + //renvoyer a la page de connexion pour les non connectés + echo ''; + } exit(0); } + } + + + + +?> \ No newline at end of file diff --git a/project/src/controller/FrontController.php b/project/src/controller/FrontController.php index 959e608..4ea36d4 100755 --- a/project/src/controller/FrontController.php +++ b/project/src/controller/FrontController.php @@ -25,24 +25,19 @@ class FrontController public function __construct() { - global $twig, $router; + global $twig, $router, $dVue; global $basePath; //altorouter $router = new AltoRouter(); $router->setBasePath($basePath); + + // Correspond à action = null et permet d'éviter une erreur sur la page /index.php + $router->map('GET|POST','/index.php','UserController'); - $router->map('GET|POST','/[a:action]?','UserController'); + $router->map('GET|POST','/pseudo/[a:action]?','PseudoController'); $router->map('GET|POST','/admin/[a:action]','AdminController'); - - $router->map('GET|POST', '/validationFormulaire', 'validationFormulaire'); - $router->map('GET|POST', '/logout', 'disconnect'); - - - // Tableau qui contient les messages d'erreur - $dVueErreur = []; - $dVue = []; - $dVue['basePath'] = $basePath; + $router->map('GET|POST','/[a:action]?','UserController'); session_start(); @@ -64,20 +59,15 @@ class FrontController case 'AdminController': $action = $match['params']['action']; - if (!MdlAdmin::isAdmin()) { - $action = 'login'; - } - $this->callController('AdminController',$action); + //if (!MdlAdmin::isAdmin()) { + // $action = 'login'; + //} + new AdminController($action); break; case 'PseudoController': $this->callController('PseudoController',$match); break; - - case 'validationFormulaire': - $this->ValidationFormulaire($dVueErreur, $dVue); - break; - //mauvaise action default: $dVueErreur[] = "Erreur d'appel php"; @@ -104,7 +94,7 @@ class FrontController $controller = '\\controller\\'.$cont; $controller = new $controller; - $action = $match['params']['action'] ?? 'accueil'; + $action = $match['params']['action'] ?? 'defaultAction'; if (is_callable(array($controller,$action))) { call_user_func_array(array($controller,$action),array($match['params'])); @@ -112,32 +102,4 @@ class FrontController echo $twig->render('erreur.html', ['dVueErreur' => array('Page inconnue')]); } } - - public function ValidationFormulaire(array &$dVueErreur, array &$dVue) - { - global $twig; - - $id_jeu = $_POST['jeu'] ?? ''; - $id_difficulte = $_POST['difficulte'] ?? ''; - try{ - Validation::val_form($id_jeu, $id_difficulte, $dVueErreur); - }catch (ValidationException|Exception $ex){ - $this->CreateParty($dVueErreur); - } - - if(count($dVueErreur) == 0){ - $jeu = (new MdlJeu())->getFromId($id_jeu); - $difficulte = (new MdlDifficulte())->getFromId($id_difficulte); - $_SESSION['configuration'] = new ConfigurationJeu($jeu, $difficulte); - - header("Location: /pseudo"); - #echo $twig->render('accueil.html', ['dVue' => $dVue, 'dVueErreur' => $dVueErreur]); - }else{ - $this->CreateParty($dVueErreur); - } - } - - private function CreateParty(array $dVueErreur) - { - } } diff --git a/project/src/controller/JouerController.php b/project/src/controller/JouerController.php old mode 100644 new mode 100755 index bb55cb2..22922f3 --- a/project/src/controller/JouerController.php +++ b/project/src/controller/JouerController.php @@ -12,8 +12,9 @@ class JouerController{ */ public function __construct(){ global $twig, $config; - $dVue = []; - $dVueErreur = []; + global $dVue; + global $dVueErreur; + global $basePath; if(isset($_SESSION["configuration"]) && isset($_SESSION['role'])){ try{ @@ -22,7 +23,7 @@ class JouerController{ $configurationJeu = $_SESSION['configuration']; $configurationJeu = Validation::valConfigurationJeu($configurationJeu, $dVueErreur); }catch(ValidationException $e){ - header('Location: .'); + header('Location: '.$basePath); } if(count($dVueErreur) == 0){ @@ -36,7 +37,7 @@ class JouerController{ } } }else{ - header("Location: ."); + header("Location: ".$basePath); } } } \ No newline at end of file diff --git a/project/src/controller/PseudoController.php b/project/src/controller/PseudoController.php index 9b3c4cf..2b8c68f 100755 --- a/project/src/controller/PseudoController.php +++ b/project/src/controller/PseudoController.php @@ -9,8 +9,9 @@ use model\MdlInvite; class PseudoController{ - public function __construct(){ + public function defaultAction(){ global $twig, $config; + global $basePath; $dVue = []; $dVueErreur = []; @@ -35,7 +36,7 @@ class PseudoController{ if(isset($role)){ $_SESSION['role'] = $role; - header('Location: jouer'); + header('Location: '.$basePath.'/jouer'); } } echo $twig->render($config['templates']['pseudo'], ["dVue" => $dVue, "dVueErreur" => $dVueErreur]); diff --git a/project/src/controller/UserController.php b/project/src/controller/UserController.php index a5ec0e4..d314d5e 100755 --- a/project/src/controller/UserController.php +++ b/project/src/controller/UserController.php @@ -4,18 +4,22 @@ namespace controller; use config\Validation; use Exception; +use model\ConfigurationJeu; use model\Connection; use model\GameGateway; use model\MdlDifficulte; use model\MdlJeu; use model\ValidationException; +use model\MdlUser; +use model\MdlAdmin; +use model\LoginException; class UserController { - public function accueil(array $params) { - global $twig; + public function defaultAction(array $params) { + global $twig, $dVue; - echo $twig->render('accueil.html'); + echo $twig->render('accueil.html', ["dVue"=>$dVue]); } public function joinParty(array $params) { @@ -61,6 +65,33 @@ class UserController { } } + public function login() { + global $twig; + if($_SERVER['REQUEST_METHOD'] === 'POST'){ + Validation::valUserLogin($_REQUEST['login'], $dVueErreur); + $ug = new MdlUser(); + if($ug->login($_REQUEST['login'], $_REQUEST['password'])) { + $_SESSION['pseudo'] = $_REQUEST['login']; + $_SESSION['isLogged'] = true; + header("Location: ."); + } else { + //voir si c'est un admin + $ug = new MdlAdmin(); + if($ug->login($_REQUEST['login'], $_REQUEST['password'])) { + $_SESSION['pseudo'] = $_REQUEST['login']; + $_SESSION['isAdmin'] = true; + $_SESSION['isLogged'] = true; + header("Location: ."); + } else { + $dVueErreur[] = "Connexion échouée"; + throw new LoginException("Connexion err"); + } + } + } else { + echo $twig->render('login.html'); + } + } + public function createParty(array $params) : void { global $twig; @@ -81,4 +112,31 @@ class UserController { echo $twig->render('create.html', ["dVueErreur" => $dVueErreur, 'dVueCreate' => ["jeux" => $dVueCreateJeu, "difficultes" => $dVueCreateDifficulte]]); } + + public function ValidationFormulaire(array $params) + { + global $twig; + global $dVue; + global $dVueErreur; + global $basePath; + + $id_jeu = $_POST['jeu'] ?? ''; + $id_difficulte = $_POST['difficulte'] ?? ''; + try{ + Validation::val_form($id_jeu, $id_difficulte, $dVueErreur); + }catch (ValidationException|Exception $ex){ + $this->CreateParty($dVueErreur); + } + + if(count($dVueErreur) == 0){ + $jeu = (new MdlJeu())->getFromId($id_jeu); + $difficulte = (new MdlDifficulte())->getFromId($id_difficulte); + $_SESSION['configuration'] = new ConfigurationJeu($jeu, $difficulte); + + header("Location: ".$basePath."/pseudo"); + #echo $twig->render('accueil.html', ['dVue' => $dVue, 'dVueErreur' => $dVueErreur]); + }else{ + $this->CreateParty($dVueErreur); + } + } } \ No newline at end of file diff --git a/project/src/index.php b/project/src/index.php index 06d9e3c..f88cb65 100755 --- a/project/src/index.php +++ b/project/src/index.php @@ -12,8 +12,12 @@ 'cache' => false, ]); - $dVueErreur = array(); $basePath = preg_replace('/\/index.php/i', '', $_SERVER['PHP_SELF']); + // Tableau qui contient les messages d'erreur + $dVueErreur = []; + $dVue = []; + $dVue['basePath'] = $basePath; + $cont = new FrontController(); \ No newline at end of file diff --git a/project/src/model/gateways/ScientifiqueGateway.php b/project/src/model/gateways/ScientifiqueGateway.php index 9de8cc1..b48c8d9 100755 --- a/project/src/model/gateways/ScientifiqueGateway.php +++ b/project/src/model/gateways/ScientifiqueGateway.php @@ -25,4 +25,20 @@ class ScientifiqueGateway ); return $this->con->getOneResult(); } + + public function addScientifique(Scientifique $sci): bool{ + return $this->con->executeQuery( + "INSERT INTO Scientifique(nom, prenom, photo, dateNaissance, descriptif, ratioTrouvee, idThematique, idDifficulte, idSexe) VALUES (:nom, :prenom, :photo, :dateNaissance, :descriptif, :ratioTrouvee, :idThematique, :idDifficulte, :idSexe);" + ,[ + ":nom"=>[$sci->getNom(),$this->con::PARAM_STR], + ":prenom"=>[$sci->getPrenom(),$this->con::PARAM_STR], + ":photo"=>[$sci->getPhoto(),$this->con::PARAM_STR], + ":dateNaissance"=>[date("Y-m-d H:i:s", $sci->getDateNaiss()->getTimestamp()),$this->con::PARAM_STR], + ":descriptif"=>[$sci->getDescriptif(),$this->con::PARAM_STR], + ":ratioTrouvee"=>[$sci->getRatioTrouvee(),$this->con::PARAM_STR], + ":idThematique"=>[$sci->getThematique()->getId(),$this->con::PARAM_STR], + ":idDifficulte"=>[$sci->getDifficulte()->getId(),$this->con::PARAM_STR], + ":idSexe"=>[$sci->getSexe()->getId(),$this->con::PARAM_STR] + ]); + } } \ No newline at end of file diff --git a/project/src/model/gateways/SexeGateway.php b/project/src/model/gateways/SexeGateway.php index 49ceedd..6902a5f 100755 --- a/project/src/model/gateways/SexeGateway.php +++ b/project/src/model/gateways/SexeGateway.php @@ -16,4 +16,10 @@ class SexeGateway [':id' => [$id, $this->con::PARAM_INT]]); return $this->con->getOneResult(); } + + public function getAll(): array + { + $this->con->executeQuery("SELECT id, libelle FROM Sexe;"); + return $this->con->getResults(); + } } \ No newline at end of file diff --git a/project/src/model/gateways/ThematiqueGateway.php b/project/src/model/gateways/ThematiqueGateway.php index 5f60426..5220c69 100755 --- a/project/src/model/gateways/ThematiqueGateway.php +++ b/project/src/model/gateways/ThematiqueGateway.php @@ -16,4 +16,9 @@ class ThematiqueGateway [':id' => [$id, $this->con::PARAM_INT]]); return $this->con->getOneResult(); } + public function getAll(): array + { + $this->con->executeQuery("SELECT id, libelle FROM Thematique;"); + return $this->con->getResults(); + } } \ No newline at end of file diff --git a/project/src/model/mdl/MdlScientifique.php b/project/src/model/mdl/MdlScientifique.php index fa12ff6..bcac636 100755 --- a/project/src/model/mdl/MdlScientifique.php +++ b/project/src/model/mdl/MdlScientifique.php @@ -41,4 +41,7 @@ class MdlScientifique extends MdlBase{ $difficulte, $sexe); } + public function addScientifique(Scientifique $s){ + return $this->gw->addScientifique($s); + } } \ No newline at end of file diff --git a/project/src/model/mdl/MdlSexe.php b/project/src/model/mdl/MdlSexe.php index bc9cf40..beaf9d8 100755 --- a/project/src/model/mdl/MdlSexe.php +++ b/project/src/model/mdl/MdlSexe.php @@ -14,4 +14,12 @@ class MdlSexe extends MdlBase{ $row = $this->gw->getFromId($id); return new Sexe($row['id'], $row['libelle']); } + public function getAll(): array { + $ret=array(); + $row = $this->gw->getAll(); + for($i=0; $i< count($row); $i++){ + array_push($ret, new Sexe($row[$i]['id'], $row[$i]['libelle'])); + } + return $ret; + } } \ No newline at end of file diff --git a/project/src/model/mdl/MdlThematique.php b/project/src/model/mdl/MdlThematique.php index d09f2ca..e477104 100755 --- a/project/src/model/mdl/MdlThematique.php +++ b/project/src/model/mdl/MdlThematique.php @@ -14,4 +14,13 @@ class MdlThematique extends MdlBase{ $row = $this->gw->getFromId($id); return new Thematique($row['id'], $row['libelle']); } + + public function getAll(): array { + $ret=array(); + $row = $this->gw->getAll(); + for($i=0; $i< count($row); $i++){ + array_push($ret, new Thematique($row[$i]['id'], $row[$i]['libelle'])); + } + return $ret; + } } \ No newline at end of file diff --git a/project/src/templates/admin/accueil.html b/project/src/templates/admin/accueil.html new file mode 100644 index 0000000..71ebfb5 --- /dev/null +++ b/project/src/templates/admin/accueil.html @@ -0,0 +1,26 @@ + + + + + + + + Accueil + + + +

Bienvenue sur Mini-Console Admin

+

{{dVue.pseudo}}

+



+
+ Ajouter Scientifiques +
+ + + + + diff --git a/project/src/templates/admin/ajouterScientifiques.html b/project/src/templates/admin/ajouterScientifiques.html new file mode 100644 index 0000000..82e80d9 --- /dev/null +++ b/project/src/templates/admin/ajouterScientifiques.html @@ -0,0 +1,83 @@ + + + + + Créer une partie + + + + +

ajouterScientifiques

+ +


+ +
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ Sexe : + {% for se in sexe %} +
+ + +
+ {% endfor %} +
+
+ Thematique : + {% for se in themes %} +
+ + +
+ {% endfor %} +
+
+ Difficulté : + {% for se in difficultes %} +
+ + +
+ {% endfor %} +
+ + + + +
+
+ + + + \ No newline at end of file diff --git a/project/src/templates/login.html b/project/src/templates/login.html index 15f4080..c52d4f0 100755 --- a/project/src/templates/login.html +++ b/project/src/templates/login.html @@ -19,7 +19,7 @@

- { % for error in dErreur % } + {% for error in dErreur %}

{{error}}