Merge branch 'master' of https://codefirst.iut.uca.fr/git/jade.van_brabandt/3.01-QCM_MuscuMaths
continuous-integration/drone/push Build is passing Details

pull/37/head
Jeremy DUCOURTHIAL 1 year ago
commit 5689be418e

2
.gitignore vendored

@ -820,4 +820,4 @@ replay_pid*
# .nfs files are created when an open file is removed but is still being accessed # .nfs files are created when an open file is removed but is still being accessed
.nfs* .nfs*
# config ignore to not stock password on the git (: # config ignore to not stock password on the git (:
/Website/usages/Config.php /Website/usages/Config_DB.php

Binary file not shown.

@ -144,13 +144,14 @@ class ControllerUser
'numQuestion' => $numQuestion, 'numQuestion' => $numQuestion,
'answerss' => $_SESSION["Answers"], 'answerss' => $_SESSION["Answers"],
]); ]);
} else { } else {
$answerContent = $_SESSION["Answers"][$numQuestion][$answerNumber]->getContent(); $answerContent = $_SESSION["Answers"][$numQuestion][$answerNumber]->getContent();
$_SESSION["playerAnswersContent"][$numQuestion] = $answerContent; $_SESSION["playerAnswersContent"][$numQuestion] = $answerContent;
if ($_SESSION["Questions"][$numQuestion]->getIdAnswerGood() == $_SESSION["Answers"][$numQuestion][$answerNumber]->getId()) { if ($_SESSION["Questions"][$numQuestion]->getIdAnswerGood() == $_SESSION["Answers"][$numQuestion][$answerNumber]->getId()) {
$time = $_SESSION["PrevTime"]->diff($_SESSION["CurrTime"]); $time = $_SESSION["PrevTime"]->diff($_SESSION["CurrTime"]);
$_SESSION["Score"] = $_SESSION["Score"] + 80 + 40 * ((30 - $time->s) / 100 * 10 / 3); $_SESSION["Score"] = $_SESSION["Score"] + 80 + 40 * ((30 - $time->s) / 100 * 10 / 3);
} else {
$_SESSION["Questions"][$numQuestion]->setNbFails($_SESSION["Questions"][$numQuestion]->getNbFails() + 1);
} }
if ($numQuestion <= 8) { if ($numQuestion <= 8) {
@ -165,22 +166,21 @@ class ControllerUser
$Final[]["Question"] = array(); $Final[]["Question"] = array();
$Final[]["goodAnswer"] = array(); $Final[]["goodAnswer"] = array();
$Final[]["PlayerAnswer"] = array(); $Final[]["PlayerAnswer"] = array();
$c=0; $c = 0;
foreach ($_SESSION["Questions"] as &$question) { foreach ($_SESSION["Questions"] as &$question) {
$answer = $this->mdAnswer->getAnswerByID($question->getIdAnswerGood()); $answer = $this->mdAnswer->getAnswerByID($question->getIdAnswerGood());
$Final[$c]["goodAnswer"] = $answer->getContent(); $Final[$c]["goodAnswer"] = $answer->getContent();
$c=$c+1; $c = $c + 1;
} }
$c=0; $c = 0;
foreach ($_SESSION["Questions"] as $question) { foreach ($_SESSION["Questions"] as $question) {
$Final[$c]["Question"] = $question->getContent(); $Final[$c]["Question"] = $question->getContent();
$c=$c+1; $c = $c + 1;
} }
$c=0; $c = 0;
foreach ($_SESSION["playerAnswersContent"] as $answer) foreach ($_SESSION["playerAnswersContent"] as $answer) {
{
$Final[$c]["PlayerAnswer"] = $answer; $Final[$c]["PlayerAnswer"] = $answer;
$c=$c+1; $c = $c + 1;
} }
echo $this->twig->render($this->vues["viewScore"], [ echo $this->twig->render($this->vues["viewScore"], [
'score' => $_SESSION["Score"], 'score' => $_SESSION["Score"],
@ -193,6 +193,7 @@ class ControllerUser
{ {
$numQuestion = $_POST["numQuestion"]; $numQuestion = $_POST["numQuestion"];
$_SESSION["playerAnswersContent"][$numQuestion] = "Pas de réponse"; $_SESSION["playerAnswersContent"][$numQuestion] = "Pas de réponse";
$_SESSION["Questions"][$numQuestion]->setNbFails($_SESSION["Questions"][$numQuestion]->getNbFails() + 1);
if ($numQuestion <= 8) { if ($numQuestion <= 8) {
$_SESSION["PrevTime"] = $_SESSION["CurrTime"]; $_SESSION["PrevTime"] = $_SESSION["CurrTime"];
echo $this->twig->render($this->vues["singleplayer"], [ echo $this->twig->render($this->vues["singleplayer"], [
@ -205,22 +206,21 @@ class ControllerUser
$Final[]["Question"] = array(); $Final[]["Question"] = array();
$Final[]["goodAnswer"] = array(); $Final[]["goodAnswer"] = array();
$Final[]["PlayerAnswer"] = array(); $Final[]["PlayerAnswer"] = array();
$c=0; $c = 0;
foreach ($_SESSION["Questions"] as &$question) { foreach ($_SESSION["Questions"] as &$question) {
$answer = $this->mdAnswer->getAnswerByID($question->getIdAnswerGood()); $answer = $this->mdAnswer->getAnswerByID($question->getIdAnswerGood());
$Final[$c]["goodAnswer"] = $answer->getContent(); $Final[$c]["goodAnswer"] = $answer->getContent();
$c=$c+1; $c = $c + 1;
} }
$c=0; $c = 0;
foreach ($_SESSION["Questions"] as $question) { foreach ($_SESSION["Questions"] as $question) {
$Final[$c]["Question"] = $question->getContent(); $Final[$c]["Question"] = $question->getContent();
$c=$c+1; $c = $c + 1;
} }
$c=0; $c = 0;
foreach ($_SESSION["playerAnswersContent"] as $answer) foreach ($_SESSION["playerAnswersContent"] as $answer) {
{
$Final[$c]["PlayerAnswer"] = $answer; $Final[$c]["PlayerAnswer"] = $answer;
$c=$c+1; $c = $c + 1;
} }
echo $this->twig->render($this->vues["viewScore"], [ echo $this->twig->render($this->vues["viewScore"], [
'score' => $_SESSION["Score"], 'score' => $_SESSION["Score"],

@ -0,0 +1,33 @@
<?php
class ControllerUserLobby
{
private $mdLobby;
private $twig;
private $vues;
function __construct()
{
global $dns, $user, $pass, $vues, $twig;
session_start();
try {
$this->twig =$twig;
$this->vues = $vues;
$this->mdLobby = new ModelLobby();
$lobbies = $this->mdLobby->getlobbies();
echo $twig->render($vues["lobby"], [
'lobbies' => $lobbies,
]);
} catch (PDOException $e) {
// Gérez les erreurs PDO ici
} catch (Exception $e2) {
// Gérez d'autres erreurs ici
}
}
}

@ -39,19 +39,17 @@ class FrontController
if ($match) { if ($match) {
$controller = $match['target']; $controller = $match['target'];
if (strpos($controller, "#") !== false) { if (strpos($controller, "#") !== false) {
list($controller,$action)=explode("#",$controller); list($controller, $action) = explode("#", $controller);
} } else {
else { $action = $match['params']['action'];
$action=$match['params']['action']; $id = $match['params']['id'];
$id=$match['params']['id'];
} }
$controller = new $controller; $controller = new $controller;
if (is_callable(array($controller, $action))) { if (is_callable(array($controller, $action))) {
call_user_func_array(array($controller, $action), array($match['params'])); call_user_func_array(array($controller, $action), array($match['params']));
} }
} }
} } catch (Exception $e) {
catch (Exception $e) {
header("Location:" . $vues["erreur"]); header("Location:" . $vues["erreur"]);
} }
} }

@ -14,7 +14,7 @@
<h1>Liste des administrators</h1> <h1>Liste des administrators</h1>
<ul class="list-group"> <ul class="list-group">
{% for admin in administrators %} {% for admin in administrators %}
<li class="list-group-item d-flex ustify-content-between align-items-center"> <li class="list-group-item d-flex justify-content-between align-items-center">
{{ admin.username }} {{ admin.username }}
<div class="btn-group" role="group"> <div class="btn-group" role="group">
<a type="button" href="/admin/administrators/updatemodal/{{ admin.id }}" class="btn btn-primary">Modifier</a> <a type="button" href="/admin/administrators/updatemodal/{{ admin.id }}" class="btn btn-primary">Modifier</a>

@ -14,7 +14,7 @@
<h1>Liste des chapitres</h1> <h1>Liste des chapitres</h1>
<ul class="list-group"> <ul class="list-group">
{% for chapter in chapters %} {% for chapter in chapters %}
<li class="list-group-item d-flex ustify-content-between align-items-center"> <li class="list-group-item d-flex justify-content-between align-items-center">
{{ chapter.name }} {{ chapter.name }}
<div class="btn-group" role="group"> <div class="btn-group" role="group">
<a type="button" href="/admin/chapters/updatemodal/{{ chapter.id }}" class="btn btn-primary">Modifier</a> <a type="button" href="/admin/chapters/updatemodal/{{ chapter.id }}" class="btn btn-primary">Modifier</a>

@ -14,7 +14,7 @@
<h1>Liste des questions</h1> <h1>Liste des questions</h1>
<ul class="list-group"> <ul class="list-group">
{% for question in questions %} {% for question in questions %}
<li class="list-group-item d-flex ustify-content-between align-items-center"> <li class="list-group-item d-flex justify-content-between align-items-center">
{{ question.content }} {{ question.content }}
<div class="btn-group" role="group"> <div class="btn-group" role="group">
<a type="button" href="/admin/questions/updatemodal/{{ question.id }}" class="btn btn-primary">Modifier</a> <a type="button" href="/admin/questions/updatemodal/{{ question.id }}" class="btn btn-primary">Modifier</a>

@ -0,0 +1,76 @@
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset=utf-8>
<title>Math'Educ</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-T3c6CoIi6uLrA9TneNEoa7RxnatzjcDSCmG1MXxSR1GAsXEV/Dwwykc2MPK8M2HN" crossorigin="anonymous">
<link rel="stylesheet" href="/css/global.css">
</head>
<body id="bodyStyle">
<div class="container mt-5">
<div class="container d-flex justify-content-between">
<h1 style="color: white;">Liste des Lobbies</h1>
<div class="btn">
<a type="button" class="btn btn-primary" href="">ajouter un Lobby</a>
</div>
</div>
<ul class="list-group">
<li class="list-group-item d-flex justify-content-between align-items-center">
<h4>Lobby</h4>
<h4>Nombre de joueurs</h4>
<h4></h4>
</li>
{% for lobby in lobbies %}
<li class="list-group-item d-flex justify-content-between align-items-center">
<h6>{{lobby.name}}</h6>
<h6>{{lobby.nbPlayer}}/6</h6>
<div class="btn">
<a type="button" class="btn btn-primary" href="">Rejoindre</a>
</div>
</li>
{% endfor %}
</ul>
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
<div class="modal fade" id="modalquestions">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalLabel">Ajouter une question</h5>
</div>
<form method="POST" action="/admin/questions/add">
<div class="modal-body">
<div class="form-group">
<label for="name">Contenu de la question :</label>
<input type="text" class="form-control" id="content" name="content">
</div>
<div class="form-group">
<label for="name">Chapitre de la question :</label>
<select class="form-control" id="idChapter" name="idChapter">
{% for chapter in chapters %}
<option value="{{chapter.id}}" >{{chapter.name}}</option>
{% endfor %}
</select>
</div>
<div class="form-group">
<label for="name">Réponse 1 de la question :</label>
<input type="text" class="form-control" id="answer1" name="answer1">
<input type="radio" name="correctAnswer" checked="checked" value="0"> Correct
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Fermer</button>
<button type="submit" class="btn btn-primary">Enregistrer</button>
</div>
</form>
</div>
</div>
</div>
</body>
</html>

@ -1,28 +1,34 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="fr"> <html lang="fr">
<head> <head>
<meta charset=utf-8> <meta charset=utf-8>
<title>Math'Educ</title> <title>Math'Educ</title>
<link rel="stylesheet" href="css/global.css"> <link rel="stylesheet" href="css/global.css">
<link rel="stylesheet" href="css/chrono.css"> <link rel="stylesheet" href="css/chrono.css">
<link rel="stylesheet" href="css/progressBar.css"> <link rel="stylesheet" href="css/progressBar.css">
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-T3c6CoIi6uLrA9TneNEoa7RxnatzjcDSCmG1MXxSR1GAsXEV/Dwwykc2MPK8M2HN" crossorigin="anonymous"> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-T3c6CoIi6uLrA9TneNEoa7RxnatzjcDSCmG1MXxSR1GAsXEV/Dwwykc2MPK8M2HN" crossorigin="anonymous">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-C6RzsynM9kWDrMNeT87bh95OGNyZPhcTNXj1NW7RuBCsyN/o0jlpcV8Qyq46cDfL" crossorigin="anonymous"></script>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
</head> </head>
<body id="bodyStyle"> <body id="bodyStyle">
<div id="chrono" class="container mx-5 my-4 position-relative"> <div class="container">
<div class="row">
<div class="col-lg-3">
<div id="chrono" class="my-4 position-relative">
<div id="centre"></div> <div id="centre"></div>
<div id="aiguille-container"> <div id="aiguille-container">
<div id="aiguille" class="aiguille"></div> <div id="aiguille" class="aiguille"></div>
</div> </div>
<div id="fond"></div> <div id="fond"></div>
</div> </div>
</div>
<div class="container py-3"> <div class="col-lg-8">
<div class="container mt-3">
<div class="row my-2">
<div class="progress"> <div class="progress">
<div class="progress-bar progress-bar-striped active progress-bar-animated" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" id="load" style="width:0%"> <div class="progress-bar progress-bar-striped active progress-bar-animated" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" id="load" style="width:0%">
@ -30,60 +36,111 @@
<img src="Media/rocket.png" id="rocket" style="left: 0px;"> <img src="Media/rocket.png" id="rocket" style="left: 0px;">
</div> </div>
<button type="button" id="repondbien" class="btn btn-primary mt-2" autocomplete="off">OK</button> {# <button type="button" id="repondbien" class="btn btn-primary mt-2" autocomplete="off">OK</button>
<button type="button" id="repondmal" class="btn btn-danger mt-2" autocomplete="off">KO</button> <button type="button" id="repondmal" class="btn btn-danger mt-2" autocomplete="off">KO</button> #}
</div> </div>
<div class="row my-2">
<div class="progress">
<div class="progress-bar progress-bar-striped active progress-bar-animated" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" id="load" style="width:0%">
</div>
<img src="Media/rocket.png" id="rocket" style="left: 0px;">
</div>
</div>
<div class="row my-2">
<div class="progress">
<div class="progress-bar progress-bar-striped active progress-bar-animated" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" id="load" style="width:0%">
</div>
<img src="Media/rocket.png" id="rocket" style="left: 0px;">
</div>
</div>
<div class="row my-2">
<div class="progress">
<div class="progress-bar progress-bar-striped active progress-bar-animated" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" id="load" style="width:0%">
</div>
<img src="Media/rocket.png" id="rocket" style="left: 0px;">
</div>
</div>
<div class="row my-2">
<div class="progress">
<div class="progress-bar progress-bar-striped active progress-bar-animated" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" id="load" style="width:0%">
</div>
<img src="Media/rocket.png" id="rocket" style="left: 0px;">
</div>
</div>
<div class="row my-2">
<div class="progress">
<div class="progress-bar progress-bar-striped active progress-bar-animated" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" id="load" style="width:0%">
</div>
<img src="Media/rocket.png" id="rocket" style="left: 0px;">
</div>
</div>
</div>
</div>
</div>
</div>
<div class="container text-center text-white"> <div class="container text-center text-white">
<div class="container border border-white rounded mt-5"> <div class="container border border-white rounded mt-5">
<p class="fs-2"> <p class="fs-2">
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Provident fuga cum soluta iure libero! Ullam, expedita excepturi! Odio distinctio quos quasi commodi libero ratione corrupti, unde iste explicabo suscipit consequatur ipsum! Id beatae corrupti ipsa totam deserunt, vel tenetur, iusto quaerat asperiores veritatis quidem! Vel dolorem recusandae necessitatibus ullam laborum! {{ questions[numQuestion]['content'] }}
<br>
Question n° : {{ numQuestion+1 }}/10
</p> </p>
</div> </div>
<form id="FormQuestion" action="/verifQuestion" method="post">
{# Awfull Code but it's valided by the 6ème membre #}
<input type="hidden" name="numQuestion" value="{{ numQuestion }}">
{# End of Awfull Code #}
<div class="row g-5"> <div class="row g-5">
<div class="col pt-5"> <div class="col pt-5">
<input type="radio" class="btn-check" name="reponse" id="reponse1" autocomplete="off"> <input type="radio" class="btn-check" name="answer" value="0" id="answer1" autocomplete="off" required>
<label class="btn fs-2 container text-white" for="reponse1" style="background-color:blue;"> <label class="btn fs-2 container text-white" for="answer1" style="background-color:blue;">
Lorem, ipsum. {{ questions[numQuestion]['answers'][0]['content'] }}
</label> </label>
</div> </div>
<div class="col pt-5"> <div class="col pt-5">
<input type="radio" class="btn-check" name="reponse" id="reponse2" autocomplete="off"> <input type="radio" class="btn-check" name="answer" value="1" id="answer2" autocomplete="off">
<label class="btn fs-2 container text-white" for="reponse2" style="background-color:green;"> <label class="btn fs-2 container text-white" for="answer2" style="background-color:green;">
Lorem, ipsum. {{ questions[numQuestion]['answers'][1]['content'] }}
</label> </label>
</div> </div>
</div> </div>
<div class="row g-5"> <div class="row g-5">
<div class="col pt-5"> <div class="col pt-5">
<input type="radio" class="btn-check" name="reponse" id="reponse3" autocomplete="off"> <input type="radio" class="btn-check" name="answer" value="2" id="answer3" autocomplete="off">
<label class="btn fs-2 container text-white" for="reponse3" style="background-color:red;"> <label class="btn fs-2 container text-white" for="answer3" style="background-color:red;">
Lorem, ipsum. {{ questions[numQuestion]['answers'][2]['content'] }}
</label> </label>
</div> </div>
<div class="col pt-5"> <div class="col pt-5">
<input type="radio" class="btn-check" name="reponse" id="reponse4" autocomplete="off"> <input type="radio" class="btn-check" name="answer" value="3" id="answer4" autocomplete="off">
<label class="btn fs-2 container text-white" for="reponse4" style="background-color:orange;"> <label class="btn fs-2 container text-white" for="answer4" style="background-color:orange;">
Lorem, ipsum. {{ questions[numQuestion]['answers'][3]['content'] }}
</label> </label>
</div> </div>
</div> </div>
<div class="row justify-content-center"> <div class="row justify-content-center">
<div class="col-1 pt-5"> <div class="col-1 pt-5">
<button type="button" class="fs-2 btn btn-success btn-lg"> <button type="button" id="passerButton" class="fs-2 btn btn-danger btn-lg">
Valider Passer
</button> </button>
</div> </div>
<div class="col-1 pt-5"> <div class="col-1 pt-5">
<button type="button" class="fs-2 btn btn-danger btn-lg"> <button type="submit" class="fs-2 btn btn-success btn-lg">
Passer Valider
</button> </button>
</div> </div>
</div> </div>
</form>
</div> </div>
<script type="module" src="js/scriptChrono.js"></script> <script type="module" src="js/scriptChrono.js"></script>
{# <script type="module" src="js/passer.js"></script> #}
<script type="module" src="js/progressBar.js"></script> <script type="module" src="js/progressBar.js"></script>
</body> </body>
</html>
<html> <html>

@ -12,13 +12,13 @@
<body id="bodyStyle"> <body id="bodyStyle">
<form action="/verifySingleplayer" method="post"> <form action="/verifySingleplayer" method="post">
<div class="text-center" style="padding-top: 30vh"> <div class="text-center" style="padding-top: 6vh">
<h1 style="color: white; font-size: 50px">Difficulte :</h1> <h1 style="color: white; font-size: 50px">Difficulte :</h1>
<input type="radio" class="btn-check" name="difficulty" id="Facile" value="1"> <input type="radio" class="btn-check" name="difficulty" id="Facile" value="1">
<label class="btn btn-outline-success fs-1" for="Facile" style="margin-right: 20px">Facile</label> <label class="btn btn-outline-success fs-1" for="Facile" style="margin-right: 20px">Facile</label>
<input type="radio" class="btn-check" name="difficulty" id="Moyen" value="2"> <input type="radio" class="btn-check" name="difficulty" id="Toutes" value="2">
<label class="btn btn-outline-warning fs-1" for="Moyen" style="margin-right: 20px">Moyen</label> <label class="btn btn-outline-warning fs-1" for="Toutes" style="margin-right: 20px">Toutes</label>
<input type="radio" class="btn-check" name="difficulty" id="Difficile" value="3"> <input type="radio" class="btn-check" name="difficulty" id="Difficile" value="3">
<label class="btn btn-outline-danger fs-1" for="Difficile">Difficile</label> <label class="btn btn-outline-danger fs-1" for="Difficile">Difficile</label>

@ -0,0 +1,20 @@
<?php
//préfixe
$rep = __DIR__ . '/../';
//Vues
$vues["singleplayer"]="singleplayer.twig";
$vues["multiplayer"]="multiplayer.twig";
$vues["home"]="home.twig";
$vues["connexion"]="connexion.twig";
$vues["themeChoice"]="themeChoice.twig";
$vues["loginAdmin"]="loginAdmin.twig";
$vues["adminAdministrators"]="adminAdministrators.twig";
$vues["adminAdministratorsModal"]="adminAdministratorsModal.twig";
$vues["adminChapters"]="adminChapters.twig";
$vues["adminChaptersModal"]="adminChaptersModal.twig";
$vues["adminQuestions"]="adminQuestions.twig";
$vues["adminQuestionsModal"]="adminQuestionsModal.twig";
$vues["viewScore"]="viewScore.twig";
$vues["lobby"]="lobby.twig";
Loading…
Cancel
Save