Merge remote-tracking branch 'origin/php' into php

php
Tom 1 year ago
commit 65a6115155

@ -11,8 +11,7 @@
"twig/twig": "^3.7",
"twbs/bootstrap": "^5.3",
"ext-iconv": "*",
"ext-pdo": "*",
"ext-http": "*"
"ext-pdo": "*"
},
"scripts": {
"post-update-cmd": [

@ -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']
];

@ -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 '<meta http-equiv="refresh" content="0; url=login">';
}
exit(0);
}
}
?>

@ -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)
{
}
}

@ -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);
}
}
}

@ -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]);

@ -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);
}
}
}

@ -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();

@ -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]
]);
}
}

@ -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();
}
}

@ -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();
}
}

@ -41,4 +41,7 @@ class MdlScientifique extends MdlBase{
$difficulte,
$sexe);
}
public function addScientifique(Scientifique $s){
return $this->gw->addScientifique($s);
}
}

@ -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;
}
}

@ -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;
}
}

@ -0,0 +1,26 @@
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" href="css/bootstrap.min.css">
<style>
body {
margin: 10px;
}
</style>
<title>Accueil</title>
</head>
<body>
<h1>Bienvenue sur Mini-Console Admin</h1>
<p align="right"><a href="logout">{{dVue.pseudo}}</a></p>
<br><br><br><br>
<center>
<a href="ajouterScientifiques">Ajouter Scientifiques</a>
</center>
<script src="js/bootstrap.min.js"></script>
</body>
</html>

@ -0,0 +1,83 @@
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>Créer une partie</title>
<link rel="stylesheet" href="css/bootstrap.min.css">
<style>
p,
label {
font:
1rem 'Fira Sans',
sans-serif;
}
input {
margin: 0.4rem;
}
</style>
</head>
<body>
<h1>ajouterScientifiques</h1>
<br><br><br>
<center>
<form action="" method="post">
<div>
<label for="name">Nom :</label>
<input type="text" id="name" name="name" required minlength="1" maxlength="128"/>
</div>
<div>
<label for="name">Prénom :</label>
<input type="text" id="prenom" name="prenom" required minlength="1" maxlength="128"/>
</div>
<div>
<label for="name">URL de la photo :</label>
<input type="text" id="url" name="url" required minlength="1" maxlength="512"/>
</div>
<div>
<label for="name">Date de naissance :</label>
<input type="date" id="date" name="date" required/>
</div>
<div>
<label for="name">Description (histoire, accomplissements...) :</label>
<textarea name="description" cols="40" rows="5"></textarea>
</div>
<fieldset>
<legend>Sexe :</legend>
{% for se in sexe %}
<div>
<input type="radio" id="sexe{{se.id}}" name="sexe" value="{{se.id}}" />
<label for="{{se.id}}">{{se.libelle}}</label>
</div>
{% endfor %}
</fieldset>
<fieldset>
<legend>Thematique :</legend>
{% for se in themes %}
<div>
<input type="radio" id="theme{{se.id}}" name="theme" value="{{se.id}}" />
<label for="{{se.id}}">{{se.libelle}}</label>
</div>
{% endfor %}
</fieldset>
<fieldset>
<legend>Difficulté :</legend>
{% for se in difficultes %}
<div>
<input type="radio" id="diff{{se.id}}" name="difficulte" value="{{se.id}}" />
<label for="{{se.id}}">{{se.libelle}}</label>
</div>
{% endfor %}
</fieldset>
<input type="submit" value="Envoyer" />
</form>
</center>
<script src="js/bootstrap.min.js"></script>
</body>
</html>

@ -19,7 +19,7 @@
</label>
<br><br>
<input type="submit" value="Valider">
{ % for error in dErreur % }
{% for error in dErreur %}
<br>
<p style="color: red">
{{error}}

Loading…
Cancel
Save