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

# Conflicts:
#	project/src/config/Validation.php
#	project/src/config/config.php
#	project/src/model/gateways/ScientifiqueGateway.php
#	project/src/model/mdl/MdlScientifique.php
pull/7/head
Tom 1 year ago
commit 5e376620e6

@ -91,6 +91,13 @@ class Validation
return $pendu;
}
public static function valPosInt($val) : int {
if(is_int($val) && $val > 0) {
return 0;
}
return $val;
}
public static function valMdlScienceQuizz($scienceQuizz, array &$dVueErreur): MdlScienceQuizz
{
if(! $scienceQuizz instanceof MdlScienceQuizz){

@ -1,5 +1,6 @@
<?php
namespace controller;
use config\Validation;
use Exception;
use PDOException;
use model\MdlDifficulte;
@ -10,95 +11,87 @@ use model\Scientifique;
//gerer la connexion des admins
class AdminController {
public function __construct(string $action){
global $twig;
//on initialise un tableau d'erreur pour être utilisé par la vue erreur
$dVueErreur = [];
//verifier si l'utilisateur est connecté et admin
if(isset($_SESSION["isAdmin"])){
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();
$scient=null;
if(!empty($_POST)){
$id=0;
if(isset($_GET["id"])){
$id=intval($_GET["id"]);
}
$sci = new Scientifique(
$id,
$_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"]))
);
$mdlsci=new MdlScientifique();
if(isset($_GET["id"])){
$mdlsci->editScientifique($sci);
} else {
$mdlsci->addScientifique($sci);
}
}
if(isset($_GET["id"])){
$scient=new MdlScientifique();
$scient=$scient->getScientifique($_GET["id"]);
}
public function defaultAction(array $params) {
global $twig;
echo $twig->render('admin/ajouterScientifiques.html',['sexe' => $sexe->getAll(), 'themes' => $theme->getAll(), 'difficultes' => $diff->getAll(), 'scientifique' => $scient]);
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]);
} catch (\Throwable $e2) {
$dVueErreur[] = 'Erreur !';
echo $twig->render('erreur.html', ['dVueErreur' => $dVueErreur]);
}
}
}
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 : Accès interdit !';
echo $twig->render('erreur.html', ['dVueErreur' => $dVueErreur]);
exit(0);
}
} else {
//renvoyer a la page de connexion pour les non connectés
echo '<meta http-equiv="refresh" content="0; url=login">';
}
exit(0);
}
echo $twig->render('admin/accueil.html');
}
public function notLogged(array $params) {
global $twig;
//dire acces interdit aux non admins
$dVueErreur[] = 'Erreur 403 : Accès interdit !';
echo $twig->render('erreur.html', ['dVueErreur' => $dVueErreur]);
}
public function stats(array $params) {
global $twig;
}
echo $twig->render('admin/stats.html');
}
public function ajouterScientifiques(array $params) {
global $twig;
$sexe = new MdlSexe();
$theme = new MdlThematique();
$diff = new MdlDifficulte();
$scient=null;
if(!empty($_POST)){
$id=0;
if(isset($_GET["id"])){
$id=intval($_GET["id"]);
}
$sci = new Scientifique(
$id,
$_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"]))
);
$mdlsci=new MdlScientifique();
if(isset($_GET["id"])){
$mdlsci->editScientifique($sci);
} else {
$mdlsci->addScientifique($sci);
}
}
if(isset($_GET["id"])){
$scient=new MdlScientifique();
$scient=$scient->getScientifique($_GET["id"]);
}
echo $twig->render('admin/ajouterScientifiques.html',['sexe' => $sexe->getAll(), 'themes' => $theme->getAll(), 'difficultes' => $diff->getAll(), 'scientifique' => $scient]);
}
public function listeScientifiques(array $params) {
global $twig;
$ms = new MdlScientifique();
if (!isset($params['id'])) {
$page = 1;
} else {
$page = Validation::valPosInt($params['id']);
}
$dVue['listeScientifiques'] = $ms->getScientifiquesParPage($page);
$dVue['pageMax'] = $ms->getMaxPages();
$dVue['page'] = $page;
if ($page - 1 <= 0) {
$dVue['pagePrec'] = 1;
} else {
$dVue['pagePrec'] = $page - 1;
}
if ($page + 1 >= $dVue['pageMax']) {
$dVue['pageSuiv'] = $dVue['pageMax'];
} else {
$dVue['pageSuiv'] = $page + 1;
}
echo $twig->render('admin/listeScientifiques.html',['dVue' => $dVue]);
}
}
?>

@ -27,6 +27,7 @@ class FrontController
global $twig, $router, $dVue;
global $basePath;
global $dVueErreur;
//altorouter
$router = new AltoRouter();
@ -36,7 +37,7 @@ class FrontController
$router->map('GET|POST','/index.php','UserController');
$router->map('GET|POST','/pseudo/[a:action]?','PseudoController');
$router->map('GET|POST','/admin/[a:action]','AdminController');
$router->map('GET|POST','/admin/[a:action]?/[i:id]?','AdminController');
$router->map('GET|POST','/[a:action]?','UserController');
try {
@ -62,11 +63,11 @@ class FrontController
break;
case 'AdminController':
$action = $match['params']['action'];
//if (!MdlAdmin::isAdmin()) {
// $action = 'login';
//}
new AdminController($action);
$action = $match['params']['action'] ?? '';
if (!MdlAdmin::isAdmin()) {
$match['params']['action'] = 'notLogged';
}
$this->callController('AdminController',$match);
break;
case 'PseudoController':
@ -78,15 +79,11 @@ class FrontController
echo $twig->render('accueil.html', ['dVueErreur' => $dVueErreur]);
break;
}
} catch (PDOException $e) {
$dVueErreur[] = 'Erreur avec la base de données !';
$dVueErreur[] = $e->getMessage();
echo $twig->render('erreur.html', ['dVueErreur' => $dVueErreur]);
} catch (LoginException $e) {
echo $twig->render('erreur.html', ['dVueErreur' => $dVueErreur]);
echo $twig->render('login.html');
} catch (Exception $e2) {
$dVueErreur[] = 'Erreur inattendue !'.$e2->getMessage();
$dVueErreur[] = 'Erreur inattendue !';
echo $twig->render('erreur.html', ['dVueErreur' => $dVueErreur]);
}

@ -16,7 +16,6 @@
// Tableau qui contient les messages d'erreur
$dVueErreur = [];
$dVue = [];
$dVue['basePath'] = $basePath;
$cont = new FrontController();

@ -7,8 +7,7 @@ use PDOStatement;
class AdminGateway
{
private PDO $con;
private PDOStatement $stmt;
private Connection $con;
public function __construct(Connection $con)
{
$this->con=$con;

@ -48,6 +48,23 @@ class ScientifiqueGateway
]);
}
public function getScientifiquesParPages(int $currentPage, int $nbElemByPage) : array {
$query = 'SELECT * FROM Scientifique LIMIT :nbElem OFFSET :ind ';
$index = ($currentPage-1)*$nbElemByPage;
$this->con->executeQuery($query,array(
':ind' => array($index,\PDO::PARAM_INT),
':nbElem' => array($nbElemByPage,\PDO::PARAM_INT)
));
return $this->con->getResults();
}
public function getNbScientifique() : int {
$query = 'SELECT DISTINCT count(*) as val FROM Scientifique';
$this->con->executeQuery($query);
return $this->con->getResults()[0]['val'];
}
/**
* @throws Exception
*/

@ -0,0 +1,25 @@
<?php
namespace model;
class UtilisateurConnecteGateway extends JoueurGateway {
function __construct(Connection $con) {
$this->con = $con;
}
public function login(string $email, string $password): bool
{
$sql = "SELECT * FROM Utilisateur WHERE email=:email";
$this->con->executeQuery($sql, array(
':email' => array($email, \PDO::PARAM_STR)
));
$result = $this->con->getOneResult();
if (!empty($result)) {
return password_verify($password,$result['password']);
}
return false;
}
}

@ -10,15 +10,20 @@ class MdlAdmin extends MdlBase{
$this->gw = new AdminGateway($this->con);
}
public function login(string $username, string $password): bool{
return $this->gw->login($username, $password);
if ($this->gw->login($username, $password)) {
$_SESSION['pseudo'] = $username;
$_SESSION['admin'] = true;
return true;
}
return false;
}
public static function isAdmin(): bool
{
if(!isset($_SESSION['admin'])
|| !$_SESSION['admin']
|| !isset($_SESSION['email'])
|| $_SESSION['email'] == null) {
|| !isset($_SESSION['pseudo'])
|| $_SESSION['pseudo'] == null) {
return false;
}

@ -50,11 +50,40 @@ class MdlScientifique extends MdlBase{
return $this->gw->addScientifique($s);
}
/**
* @throws Exception
*/
public function editScientifique(Scientifique $s): bool
{
public function getScientifiquesParPage(int $page) : array {
$nbElemParPage = 20;
$pageMax = ceil($this->gw->getNbScientifique()/$nbElemParPage);
if ($page <= 0) {
$page = 1;
} elseif ($page > $pageMax) {
$page = $pageMax;
}
$result = $this->gw->getScientifiquesParPages($page,$nbElemParPage);
$scientifiques = array();
foreach ($result as $scientifique) {
$sexe = $this->mdlSexe->getFromId($scientifique['idsexe']);
$difficulte = $this->mdlDifficulte->getFromId($scientifique['iddifficulte']);
$thematique = $this->mdlThematique->getFromId($scientifique['idthematique']);
$scientifiques[] = new Scientifique($scientifique['id'],
$scientifique['nom'],
$scientifique['prenom'],
$scientifique['photo'],
new DateTime($scientifique['datenaissance']),
$scientifique['descriptif'],
$scientifique['ratiotrouvee'],
$thematique,
$difficulte,
$sexe);
}
return $scientifiques;
}
public function getMaxPages() : int {
$nbElemParPage = 20;
return ceil($this->gw->getNbScientifique()/$nbElemParPage);
}
public function editScientifique(Scientifique $s){
return $this->gw->editScientifique($s);
}

@ -3,11 +3,11 @@
namespace model;
class MdlUser extends MdlBase{
private UserGateway $gw;
private JoueurGateway $gw;
public function __construct(){
parent::__construct();
$this->gw = new UserGateway($this->con);
$this->gw = new UtilisateurConnecteGateway($this->con);
}
public function login(string $username, string $password): bool{
return $this->gw->login($username, $password);

@ -30,4 +30,8 @@ class Difficulte
public function getLibelle(): string{
return $this->libelle;
}
public function __toString() {
return $this->libelle;
}
}

@ -22,4 +22,9 @@ class Sexe
{
return $this->libelle;
}
public function __toString()
{
return $this->libelle;
}
}

@ -22,4 +22,9 @@ class Thematique
{
return $this->libelle;
}
public function __toString()
{
return $this->libelle;
}
}

@ -17,7 +17,9 @@
<p align="right"><a href="logout">{{dVue.pseudo}}</a></p>
<br><br><br><br>
<center>
<a href="ajouterScientifiques">Ajouter Scientifiques</a>
<a href="admin/ajouterScientifiques">Ajouter Scientifiques</a>
<br>
<a href="admin/listeScientifiques">Lister les scientifiques</a>
</center>

@ -2,7 +2,7 @@
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>Créer un.e scientifique</title>
<title>Ajouter un(e) scientifique</title>
<link rel="stylesheet" href="css/bootstrap.min.css">
<style>
p,

@ -0,0 +1,46 @@
<!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>Liste des scientifiques</title>
</head>
<body>
<h1>Voici la liste des scientifiques dans la base de données :</h1>
<p align="right"><a href="logout">{{dVue.pseudo}}</a></p>
<br><br><br><br>
<center>
<a href="../ajouterScientifiques">Ajouter un(e) scientifique</a>
{% for scientifique in dVue.listeScientifiques %}
<div>
<h2>{{ scientifique.getNom() }} {{ scientifique.getPrenom() }}</h2>
<p>Sexe : {{ scientifique.getSexe() }}</p>
<p>Né(e) le {{ scientifique.getDateNess() }}</p>
<p>Thematique : {{ scientifique.getThematique() }}</p>
<p>Difficulté à trouver : {{ scientifique.getDifficulte() }}</p>
<a href='../ajouterScientifiques?id={{scientifique.getId()}}'>Modifier</a>
</div>
<br>
<br>
{% endfor %}
<div>
<a href="{{ dVue.pagePrec }}"><</a>
<a href="1">1</a>
<p>{{ dVue.page }}</p>
<a href="{{ dVue.pageMax }}">1</a>
<a href="{{ dVue.pageSuiv }}">></a>
</div>
</center>
<script src="js/bootstrap.min.js"></script>
</body>
</html>
Loading…
Cancel
Save