dernier finition

pull/21/head
brongniart 5 months ago
parent e6808dd19c
commit ba8eb05b5d

@ -19,10 +19,12 @@ $vues['quote'] = 'vue/quote.php';
$vues['profil'] = 'vue/profil.php';
$vues['login'] = 'vue/login.php';
$vues['signin'] = 'vue/signin.php';
$vues['quiz'] = 'vue/quiz.html';
$vues['search'] = 'vue/search.php';
$vues['favorite'] = 'vue/favorits.php';
$vues['quiz'] = 'vue/quiz.php';
$vues['endQuiz'] = 'vue/endQuiz.php';
//Style css
$style['accueil'] = 'public/styles/styleAccueil.css';

@ -35,11 +35,12 @@ Class FrontControler{
$router->map('GET|POST', '/quote/[i:idQuote]', 'VisitorControler','quote');
$router->map('GET|POST', '/addComment', 'UserControler','addComment');
$router->map('GET|POST', '/quiz/[i:id]?', 'QuizControler','quiz');
$router->map('GET|POST', '/quiz/[i:id]', 'UserControler','quiz');
$router->map('GET|POST', '/favorite', 'UserControler','favorite');
$router->map('GET|POST', '/search', 'VisitorControler','search');
$router->map('GET|POST', '/profil', 'UserControler','profil');
$router->map('GET|POST', '/login', 'VisitorControler','login');
$router->map('GET|POST', '/unlog', 'UserControler','unlog');
$router->map('GET|POST', '/signin', 'VisitorControler','signin');
$router->map('GET|POST', '/validlogin', 'VisitorControler','validlogin');
$router->map('GET|POST', '/validsignin', 'VisitorControler','validsignin');

@ -41,6 +41,7 @@ class QuizControler
$action = $_REQUEST['action'] ?? null;
$id = (int) explode('/', $_SERVER['REQUEST_URI'])[2] ?? null;
echo $id;
$nb_questions = $this->getNumberOfQuestion($id);
switch ($action) {
@ -64,95 +65,6 @@ class QuizControler
}
/**
* @throws SyntaxError
* @throws RuntimeError
* @throws LoaderError
*/
public function continueQuiz(int $id_quiz, int $total_questions) : void
{
$score = $_SESSION['score'];
$_SESSION['no_question'] = isset($_SESSION['no_question']) ? ($_SESSION['no_question'] + 1) : 1;
if ($_SESSION['no_question'] >= $total_questions) {
session_destroy();
$this->endQuiz($id_quiz, $score);
}
else header("Location: http://localhost:8000/quiz/$id_quiz");
}
/**
* @throws SyntaxError
* @throws RuntimeError
* @throws LoaderError
*/
public function endQuiz(int $id_quiz, int $score) : void
{
global $twig;
$gw = new QuizGateway($this->co);
$mdl = new QuizModel($gw);
if ($mdl->getQuiz($id_quiz + 1))
echo $twig->render('endQuiz.html.twig', ['score' => $score, 'nextquiz' => $id_quiz + 1]);
echo $twig->render('endQuiz.html.twig', ['score' => $score]);
}
public function CorrectAnswer() : bool
{
$answera = $_POST['answera'] ?? null;
$answerb = $_POST['answerb'] ?? null;
$answerc = $_POST['answerc'] ?? null;
$answerd = $_POST['answerd'] ?? null;
$id= null;
$answer = null;
if ($answera) {
$answer = explode('-', $answera)[0];
$id = (int) explode('-', $answera)[1];
} elseif ($answerb) {
$answer = explode('-', $answerb)[0];
$id = (int) explode('-', $answerb)[1];
} elseif ($answerc) {
$answer = explode('-', $answerc)[0];
$id = (int) explode('-', $answerc)[1];
} elseif ($answerd) {
$answer = explode('-', $answerd)[0];
$id = (int) explode('-', $answerd)[1];
}
$res = $this->mdl->getQuestion($id);
return $answer == $res->getCanswer();
}
public function GetQuestion(int $id): array
{
$gw = new QuizQuestionGateway($this->co);
$mdl = new QuizQuestionModel($gw);
return $mdl->getAllQuestionByQuiz($id, $this->co);
}
/**
* @throws RuntimeError
* @throws SyntaxError
* @throws LoaderError
*/
public function showQuestion(int $id, int $num) : void
{
global $twig;
$q = $this->GetQuestion($id);
$question = $q[$num] ?? $q[0];
$idquestion = $question->getIdQuestion();
echo $twig->render('quiz.html.twig', ['question' => $question,'id'=>$idquestion]);
}
public function getNumberOfQuestion(int $id) : int
{
$gw = new QuizGateway($this->co);
$mdl = new QuizModel($gw);
return $mdl->getQuiz($id)->getNbQuestions();
}
}

@ -4,34 +4,46 @@ use Model\CommentaryModel;
use Gateway\CommentaryGateway;
use Model\UserModel;
use Gateway\UserGateway;
use Model\QuoteModel;
use Gateway\QuoteGateway;
use Entity\QuestionEntity;
use Gateway\Connection;
use Gateway\QuestionGateway;
use Gateway\QuizGateway;
use Gateway\QuizQuestionGateway;
use Model\QuestionModel;
use Model\QuizModel;
use Model\QuizQuestionModel;
use Twig\Environment;
use Twig\Error\LoaderError;
use Twig\Error\RuntimeError;
use Twig\Error\SyntaxError;
use Twig\Loader\FilesystemLoader;
class UserControler {
private QuoteGateway $quoteGateway;
private CommentaryModel $cMod;
private UserModel $uMod;
private QuoteModel $qMod;
private QuestionModel $mdl;
public function __construct() {
global $co;
$this->quoteGateway = new QuoteGateway($co);
$this->cMod = new CommentaryModel(new CommentaryGateway($co));
$this->uMod = new UserModel(new UserGateway($co));
$this->qMod = new QuoteModel(new QuoteGateway($co));
$this -> mdl = new QuestionModel(new QuestionGateway($co));
}
public function profil() {
global $vues;
$p = $this->uMod->getUsername($_SESSION["user"]);
require_once $vues['profil'];
}
public function quiz() {
global $vues;
require_once $vues['quiz'];
}
public function addComment(){
@ -46,8 +58,137 @@ class UserControler {
$userId = $this->uMod->getIdByUsername($_SESSION["user"]);
$favorites = $this->quoteGateway->getFavorites($userId);
$favorites = $this->qMod->getFavorites($userId);
require_once $vues['favorite'];
}
public function unlog(){
session_unset();
session_destroy();
$_SESSION = array();
header("Location: /~kekentin/WF/WF-Website/");
}
public function quiz(array $args){
global $vues;
$id=$args['id'];
$nb_questions = $this->getNumberOfQuestion($id);
$action = $_REQUEST['action'] ?? null;
switch ($action) {
case 'canswer':
if ($this->CorrectAnswer())
$_SESSION['score'] = isset($_SESSION['score']) ? ($_SESSION['score'] + 1) : 1;
$this->continueQuiz($id, $nb_questions);
break;
default:
switch($id)
{
case null:
// page erreur
break;
default:
$_SESSION['score'] = $_SESSION['score'] ?? 0;
$this->showQuestion($id, $_SESSION['no_question'] ?? 0);
break;
}
}
}
/**
* @throws SyntaxError
* @throws RuntimeError
* @throws LoaderError
*/
public function continueQuiz(int $id_quiz, int $total_questions) : void
{
$score = $_SESSION['score'];
$_SESSION['no_question'] = isset($_SESSION['no_question']) ? ($_SESSION['no_question'] + 1) : 1;
if ($_SESSION['no_question'] >= $total_questions) {
session_destroy();
$this->endQuiz($id_quiz, $score);
}
else header("Location: /~kekentin/WF/WF-Website/quiz/$id_quiz");
}
/**
* @throws SyntaxError
* @throws RuntimeError
* @throws LoaderError
*/
public function endQuiz(int $id_quiz, int $score) : void
{
global $vues,$co;
$gw = new QuizGateway($co);
$mdl = new QuizModel($gw);
if ($mdl->getQuiz($id_quiz + 1)){
require_once $vues['endQuiz'];
}
require_once $vues['endQuiz'];
}
public function CorrectAnswer() : bool
{
$answera = $_POST['answera'] ?? null;
$answerb = $_POST['answerb'] ?? null;
$answerc = $_POST['answerc'] ?? null;
$answerd = $_POST['answerd'] ?? null;
$id= null;
$answer = null;
if ($answera) {
$answer = explode('-', $answera)[0];
$id = (int) explode('-', $answera)[1];
} elseif ($answerb) {
$answer = explode('-', $answerb)[0];
$id = (int) explode('-', $answerb)[1];
} elseif ($answerc) {
$answer = explode('-', $answerc)[0];
$id = (int) explode('-', $answerc)[1];
} elseif ($answerd) {
$answer = explode('-', $answerd)[0];
$id = (int) explode('-', $answerd)[1];
}
$res = $this->mdl->getQuestion($id);
return $answer == $res->getCanswer();
}
public function GetQuestion(int $id): array
{
global $co;
$gw = new QuizQuestionGateway($co);
$mdl = new QuizQuestionModel($gw);
return $mdl->getAllQuestionByQuiz($id, $co);
}
/**
* @throws RuntimeError
* @throws SyntaxError
* @throws LoaderError
*/
public function showQuestion(int $id, int $num) : void
{
global $vues;
$q = $this->GetQuestion($id);
$question = $q[$num] ?? $q[0];
$idquestion = $question->getIdQuestion();
require_once $vues['quiz'];
//echo $twig->render('quiz.html.twig', ['question' => $question,'id'=>$idquestion]);
}
public function getNumberOfQuestion(int $id) : int
{
global $co;
$gw = new QuizGateway($co);
$mdl = new QuizModel($gw);
return $mdl->getQuiz($id)->getNbQuestions();
}
}

@ -12,13 +12,11 @@ use Model\UserModel;
use Twig\Error\LoaderError;
use Twig\Error\RuntimeError;
use Twig\Error\SyntaxError;
use Gateway\AccueilGateway;
Class VisitorControler {
private QuoteModel $qMod;
private CommentaryModel $cMod;
private AccueilGateway $accueilGateway;
private SearchModel $sMod;
@ -38,8 +36,6 @@ Class VisitorControler {
$this->qMod = new QuoteModel(new QuoteGateway($co));
$this->cMod = new CommentaryModel(new CommentaryGateway($co));
$this->sMod = new SearchModel(new QuoteGateway($co));
$this->accueilGateway = new AccueilGateway($co);
$this->gw = new UserGateway($co);
$this->mdl = new UserModel($this->gw);
}
@ -48,8 +44,8 @@ Class VisitorControler {
global $vues;
// Récupérer la citation du jour via AccueilGateway
$citationDuJour = $this->accueilGateway->getQuoteOfTheDay('fr');
$suggestions = $this->accueilGateway->getSuggestions(0, 'fr');
$citationDuJour = $this->qMod->getQuoteOfTheDay('fr');
$suggestions = $this->qMod->getSuggest(0, 'fr');
// Passer les données à la vue
require_once $vues['accueil'];

@ -0,0 +1,156 @@
<?php
namespace Entity;
class UserEntity {
private int $id;
private string $pseudo;
private string $password;
private string $email;
private string $date;
private string $imgPrfl;
public function getId(): int
{
return $this->id;
}
public function setId(int $id): void
{
$this->id = $id;
}
public function getPseudo(): string
{
return $this->pseudo;
}
public function setPseudo(string $pseudo): void
{
$this->pseudo = $pseudo;
}
public function getPassword(): string
{
return $this->password;
}
public function setPassword(string $password): void
{
$this->password = $password;
}
public function getEmail(): string
{
return $this->email;
}
public function setEmail(string $email): void
{
$this->email = $email;
}
public function getDate(): string
{
return $this->date;
}
public function setDate(string $date): void
{
$this->date = $date;
}
public function isAdmin(): bool
{
return $this->isAdmin;
}
public function setIsAdmin(bool $isAdmin): void
{
$this->isAdmin = $isAdmin;
}
public function getImgPrfl(): string
{
return $this->imgPrfl;
}
public function setImgPrfl(string $imgPrfl): void
{
$this->imgPrfl = $imgPrfl;
}
/**
* @param int $id
* @param string $pseudo
* @param string $password
* @param string $email
* @param int $imgPrfl
* @param bool $isAdmin
* @param string $date
*/
public function __construct(int $id, string $pseudo, string $password, string $email, string $imgPrfl, string $date)
{
$this->id = $id;
$this->pseudo = $pseudo;
$this->password = $password;
$this->email = $email;
$this->imgPrfl = $imgPrfl;
$this->date = $date;
}
}
// ============================================ En attente du Model ============================================
/*$dsn = "pgsql:host=londres;dbname=dblebeaulato";
$username = "lebeaulato";
$password = "";
$con = new Connection($dsn,$username,$password);
$query = 'SELECT * FROM Users WHERE id_user=:idUser';
$con->executeQuery($query, array(':idUser'=>array('U003', PDO::PARAM_STR)));
$result = $con->getResults();
$u = new User($result[0]['id_user'],$result[0]['username'], $result[0]['pssword'], '../images/imageProfil.png', $result[0]['email']);
//UPDATE username User
$query = 'UPDATE Users SET username=:newUsername WHERE id_user=:idUser';
$con->executeQuery($query, array(':idUser'=>array('U003', PDO::PARAM_STR), ':newUsername'=> array('Hello', PDO::PARAM_STR)));
$queryReponse = 'SELECT username FROM Users WHERE id_user=:idUser';
$con->executeQuery($queryReponse, array(':idUser'=>array('U003', PDO::PARAM_STR)));
$result = $con->getResults();
$u->setUsername($result[0]['username']);
//UPDATE email User
$query = 'UPDATE Users SET email=:newEmail WHERE id_user=:idUser';
$con->executeQuery($query, array(':idUser'=>array('U003', PDO::PARAM_STR), ':newEmail'=> array('hello@gmail.com', PDO::PARAM_STR)));
$queryReponse = 'SELECT email FROM Users WHERE id_user=:idUser';
$con->executeQuery($queryReponse, array(':idUser'=>array('U003', PDO::PARAM_STR)));
$result = $con->getResults();
$u->setEmail($result[0]['email']);
//UPDATE passwd User
$query = 'UPDATE Users SET pssword=:newPassWd WHERE id_user=:idUser';
$con->executeQuery($query, array(':idUser'=>array('U003', PDO::PARAM_STR), ':newPassWd'=> array('TestMotDePasssse', PDO::PARAM_STR)));
$queryReponse = 'SELECT pssword FROM Users WHERE id_user=:idUser';
$con->executeQuery($queryReponse, array(':idUser'=>array('U003', PDO::PARAM_STR)));
$result = $con->getResults();
$u->setPasswd($result[0]['pssword']); /*Test*/
// ================================================================================================================
function hidenPassWd(string $passwd){
if(strlen($passwd) >= 16) return str_repeat('*', 16);
return str_repeat('*', strlen($passwd));
}
?>

@ -1,148 +0,0 @@
<?php
namespace Entity;
class QuestionEntity
{
private int $id_question;
private string $question;
private string $answerA;
private string $answerB;
private string $answerC;
private string $answerD;
private string $cAnswer;
/**
* @param int $id_question
* @param string $question
* @param string $answerA
* @param string $answerB
* @param string $answerC
* @param string $answerD
* @param string $cAnswer
*/
public function __construct(int $id_question, string $question, string $answerA, string $answerB, string $answerC, string $answerD, string $cAnswer)
{
$this->id_question = $id_question;
$this->question = $question;
$this->answerA = $answerA;
$this->answerB = $answerB;
$this->answerC = $answerC;
$this->answerD = $answerD;
$this->cAnswer = $cAnswer;
}
/**
* @return int
*/
public function getIdQuestion(): int
{
return $this->id_question;
}
/**
* @param int $id_question
*/
public function setIdQuestion(int $id_question): void
{
$this->id_question = $id_question;
}
/**
* @return string
*/
public function getQuestion(): string
{
return $this->question;
}
/**
* @param string $question
*/
public function setQuestion(string $question): void
{
$this->question = $question;
}
/**
* @return string
*/
public function getAnswerA(): string
{
return $this->answerA;
}
/**
* @param string $answerA
*/
public function setAnswerA(string $answerA): void
{
$this->answerA = $answerA;
}
/**
* @return string
*/
public function getAnswerB(): string
{
return $this->answerB;
}
/**
* @param string $answerB
*/
public function setAnswerB(string $answerB): void
{
$this->answerB = $answerB;
}
/**
* @return string
*/
public function getAnswerC(): string
{
return $this->answerC;
}
/**
* @param string $answerC
*/
public function setAnswerC(string $answerC): void
{
$this->answerC = $answerC;
}
/**
* @return string
*/
public function getAnswerD(): string
{
return $this->answerD;
}
/**
* @param string $answerD
*/
public function setAnswerD(string $answerD): void
{
$this->answerD = $answerD;
}
/**
* @return string
*/
public function getCAnswer(): string
{
return $this->cAnswer;
}
/**
* @param string $cAnswer
*/
public function setCAnswer(string $cAnswer): void
{
$this->cAnswer = $cAnswer;
}
}

@ -11,39 +11,5 @@ class AccueilGateway {
$this->con = $con;
}
public function getQuoteOfTheDay(string $language): array {
$query = "SELECT q.id_quote, q.content, c.caracter, i.imgPath, s.title, s.dateS, q.likes, q.langue
FROM Quote q
JOIN Caracter c ON c.id_caracter = q.id_caracter
JOIN Source s ON s.id_source = q.id_source
JOIN Image i ON c.id_img = i.id_img
WHERE q.isValide = true AND q.isCitationDuJour = true AND q.langue = :language
ORDER BY id_quote DESC LIMIT 1;";
try {
$this->con->executeQuery($query, [':language' => [$language, PDO::PARAM_STR]]);
$result = $this->con->getResults();
return $result[0] ?? [];
} catch (PDOException $e) {
echo "Erreur dans getQuoteOfTheDay: " . $e->getMessage();
return [];
}
}
public function getSuggestions(int $numpage, string $language): array {
$query = "SELECT q.id_quote, q.content, c.caracter, i.imgPath, s.title, s.dateS, q.likes, q.langue
FROM Quote q
JOIN Caracter c ON c.id_caracter = q.id_caracter
JOIN Source s ON s.id_source = q.id_source
JOIN Image i ON c.id_img = i.id_img
WHERE q.isValide = true AND q.langue = :language
ORDER BY RANDOM()
LIMIT 20 OFFSET :offset;";
$this->con->executeQuery($query, [
':language' => [$language, PDO::PARAM_STR],
':offset' => [$numpage * 20, PDO::PARAM_INT]
]);
return $this->con->getResults();
}
}

@ -15,7 +15,7 @@ class QuizQuestionGateway
public function createQuizQuestionGateway(int $idQuiz, int $idQuestion): bool
{
$query = "
INSERT INTO QuizQuestions
INSERT INTO Quiz_Question
VALUES (:id_quiz, :id_question)
";
@ -28,8 +28,8 @@ class QuizQuestionGateway
public function findQuizQuestionById(int $idQuiz, int $idQuestion) : array
{
$query = "
SELECT * FROM QuizQuestions
WHERE quiz_qq = :id_quiz AND question_qq = :id_question
SELECT * FROM Quiz_Question
WHERE quiz = :id_quiz AND question_qq = :id_question
";
$this -> co -> executeQuery($query, [
@ -43,8 +43,8 @@ class QuizQuestionGateway
public function findQuestionsFromQuiz(int $idQuiz) : array
{
$query = "
SELECT * FROM QuizQuestions
WHERE quiz_qq = :id_quiz
SELECT * FROM Quiz_Question
WHERE quiz = :id_quiz
";
$this -> co -> executeQuery($query, ['id_quiz' => array($idQuiz, PDO::PARAM_INT)]);
@ -55,8 +55,8 @@ class QuizQuestionGateway
public function deleteQuizQuestionGateway(int $idQuiz, int $idQuestion) : bool
{
$query = "
DELETE FROM QuizQuestions
WHERE quiz_qq = :id_quiz AND question_qq = :id_question
DELETE FROM Quiz_Question
WHERE quiz = :id_quiz AND question_qq = :id_question
";
return $this -> co -> executeQuery($query, [

@ -72,6 +72,62 @@ Class QuoteGateway{
return $result;
}
public function getQuoteOfTheDay(string $language): array {
$query = "SELECT q.id_quote, q.content, c.caracter, i.imgPath, s.title, s.dateS, q.likes, q.langue
FROM Quote q
JOIN Caracter c ON c.id_caracter = q.id_caracter
JOIN Source s ON s.id_source = q.id_source
JOIN Image i ON c.id_img = i.id_img
WHERE q.isValide = true AND q.isCitationDuJour = true AND q.langue = :language
ORDER BY id_quote DESC LIMIT 1;";
try {
$this->con->executeQuery($query, [':language' => [$language, PDO::PARAM_STR]]);
$result = $this->con->getResults();
return $result[0] ?? [];
} catch (PDOException $e) {
echo "Erreur dans getQuoteOfTheDay: " . $e->getMessage();
return [];
}
}
public function getSuggestions(int $numpage, string $language): array {
$query = "SELECT q.id_quote, q.content, c.caracter, i.imgPath, s.title, s.dateS, q.likes, q.langue
FROM Quote q
JOIN Caracter c ON c.id_caracter = q.id_caracter
JOIN Source s ON s.id_source = q.id_source
JOIN Image i ON c.id_img = i.id_img
WHERE q.isValide = true AND q.langue = :language
ORDER BY RANDOM()
LIMIT 20 OFFSET :offset;";
$this->con->executeQuery($query, [
':language' => [$language, PDO::PARAM_STR],
':offset' => [$numpage * 20, PDO::PARAM_INT]
]);
return $this->con->getResults();
}
public function getFavorites(string $userId): array {
$query = "SELECT q.id_quote, q.content, c.caracter, i.imgPath, s.title, s.dateS, q.likes, q.langue
FROM Favorite f
JOIN Quote q ON f.quote = q.id_quote
JOIN Caracter c ON c.id_caracter = q.id_caracter
JOIN Source s ON s.id_source = q.id_source
JOIN Image i ON c.id_img = i.id_img
WHERE f.users = :userId";
try {
$this->con->executeQuery($query, [
':userId' => [$userId, PDO::PARAM_STR]
]);
return $this->con->getResults();
} catch (PDOException $e) {
echo "Erreur dans getFavorites: " . $e->getMessage();
return [];
}
}
//======================== PARTI ADMIN ========================
//Probablement à déplacer dans un autre fichier
@ -154,28 +210,6 @@ Class QuoteGateway{
$result = $con->getResults();
return $result;
}
public function getFavorites(string $userId): array {
$query = "SELECT q.id_quote, q.content, c.caracter, i.imgPath, s.title, s.dateS, q.likes, q.langue
FROM Favorite f
JOIN Quote q ON f.quote = q.id_quote
JOIN Caracter c ON c.id_caracter = q.id_caracter
JOIN Source s ON s.id_source = q.id_source
JOIN Image i ON c.id_img = i.id_img
WHERE f.users = :userId";
try {
$this->con->executeQuery($query, [
':userId' => [$userId, PDO::PARAM_STR]
]);
return $this->con->getResults();
} catch (PDOException $e) {
echo "Erreur dans getFavorites: " . $e->getMessage();
return [];
}
}
}
?>

@ -74,7 +74,7 @@ Class UserGateway{
// obtenir les informations d'un user selon son pseudo
public function findUsername(string $username):array{
$query = 'SELECT * FROM Users WHERE username= :username';
$query = 'SELECT u.id_user , u.username , u.email , u.password , i.imgPath , u.creation FROM Users u Join Image i on i.id_img=u.img WHERE username= :username';
$this->con->executeQuery($query, array(':username'=>array($username, PDO::PARAM_STR)));
return $this->con->getResults();
}

@ -1,15 +0,0 @@
<?php
namespace Gateway;
use PDO;
class AccueilGateway {
private Connection $con;
public function __construct(Connection $con) {
$this->con = $con;
}
}

@ -25,7 +25,7 @@ class QuestionModel
if ($q)
return new QuestionEntity(
$q[0]['id_question'],
$q[0]['question'],
$q[0]['texte'],
$q[0]['answera'],
$q[0]['answerb'],
$q[0]['answerc'],

@ -18,6 +18,34 @@
else
return new Quote($res[0]["id_quote"],$res[0]["content"],$res[0]["caracter"],$res[0]["imgpath"],$res[0]["title"],$res[0]["dates"],$res[0]["likes"],$res[0]["langue"]);
}
public function getSuggest(int $numpage, string $language):array{
$res = $this->gateway->getSuggestions($numpage,$language);
$tabQ=[];
foreach($res as $q ){
$tabQ[]= new Quote($q["id_quote"],$q["content"],$q["caracter"],$q["imgpath"],$q["title"],$q["dates"],$q["likes"],$q["langue"]) ;
}
return $tabQ;
}
public function getQuoteOfTheDay(string $language):Quote{
$res = $this->gateway->getQuoteOfTheDay($language);
if( count($res) == 0)
return new Quote(-1,"NULL","NULL","NULL","NULL","NULL",0,"Default");
else
return new Quote($res["id_quote"],$res["content"],$res["caracter"],$res["imgpath"],$res["title"],$res["dates"],$res["likes"],$res["langue"]) ;
}
public function getFavorites(string $userId): array {
$res = $this->gateway->getFavorites($userId);
$tabQ=[];
foreach($res as $q ){
$tabQ[]= new Quote($q["id_quote"],$q["content"],$q["caracter"],$q["imgpath"],$q["title"],$q["dates"],$q["likes"],$q["langue"]) ;
}
return $tabQ;
}
}
?>

@ -22,5 +22,4 @@
return $tabQ;
}
}
?>

@ -59,7 +59,7 @@
$res[0]['username'],
$res[0]['password'],
$res[0]['email'],
$res[0]['img'],
$res[0]['imgpath'],
$res[0]['creation']
);
return null;

@ -15,12 +15,12 @@ echo $twig->render('bandeau.html.twig');
// Vérification de la présence de la "Citation du jour"
if (!empty($citationDuJour)) {
echo $twig->render('citation_du_jour.html.twig', [
'quote' => $citationDuJour['content'],
'movie' => $citationDuJour['title'],
'character' => $citationDuJour['caracter'],
'year' => $citationDuJour['dates'],
'imagePath' => $citationDuJour['imgpath'],
'id' => $citationDuJour['id_quote'],
'quote' => $citationDuJour->getContent(),
'movie' => $citationDuJour->getTitleSrc(),
'character' => $citationDuJour->getCarac(),
'year' => $citationDuJour->getDateSrc(),
'imagePath' => $citationDuJour->getImgPath(),
'id' => $citationDuJour->getId(),
]);
} else {
echo "<p class='error'>Aucune citation du jour n'a été trouvée.</p>";
@ -28,7 +28,7 @@ if (!empty($citationDuJour)) {
// Affichage des suggestions de citations
echo $twig->render('quote.html.twig', [
echo $twig->render('quoteLittle.html.twig', [
'quotes' => $suggestions,
'titre' => "Suggestions"
]);

@ -0,0 +1,18 @@
<?php
global $twig;
echo $twig->render('head.html.twig', [
'title' => "Quiz",
'style' => "public/styles/styleQuiz.css",
'scripts' => array("public/script/theme-toggle.js")
]);
// Rendu du bandeau
echo $twig->render('bandeau.html.twig');
echo $twig->render('endQuiz.html.twig', ['score' => $score, 'nextquiz' => $id_quiz + 1])
?>

@ -9,7 +9,7 @@ echo $twig->render('head.html.twig', [
echo $twig->render('bandeau.html.twig');
echo $twig->render('quote.html.twig', [
echo $twig->render('quoteLittle.html.twig', [
'quotes' => $favorites,
'titre' => "Favoris"
]);

@ -3,7 +3,7 @@
echo $twig->render('head.html.twig', [
'title' => "Accueil",
'title' => "Profil",
'style' => "public/styles/styleProfil.css",
'scripts' => array("public/script/theme-toggle.js")
]);
@ -13,9 +13,8 @@
echo $twig->render('bandeau.html.twig');
echo $twig->render('profil.html.twig', array(
'srcUsername' => "Test User",
'srcEmail' => "test@gmail.com",
'srcPasswd' => "*****",
'srcImg' => "images/imageProfil.png",
'srcUsername' => $p->getPseudo(),
'srcEmail' => $p->getEmail(),
'srcImg' => $p->getImgPrfl(),
));
?>

@ -1,61 +0,0 @@
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Wiki Fantasy : Quiz</title>
<link id="favicon" rel="icon" href="../images/iconeSombre.ico"> <!-- Par défaut sombre -->
<link rel="stylesheet" href="../public/styles/styleQuiz.css">
<script defer src="../public/script/theme-toggle.js"></script>
<script>
// Timer pour 5 minutes
var timeLeft = 300;
function countdown() {
var timerDisplay = document.getElementById("timer");
if (timeLeft <= 0) {
document.getElementById("quizForm").submit();
} else {
timerDisplay.innerHTML = timeLeft + " seconds left";
timeLeft -= 1;
setTimeout(countdown, 1000);
}
}
window.onload = countdown;
</script>
</head>
<body>
<div class="header">
<div class="nav">
<a href="favorite.html"><img src="../images/coeur.svg" alt="coeur" width="67px" height="67px" onmousedown="return false"></a>
<img id="theme-icon" src="../images/light.svg" alt="toggle theme" width="72px" height="37px" onmousedown="return false" onclick="toggleTheme()">
<img src="../images/quizz.svg" alt="quizz" width="51px" height="82px" onmousedown="return false">
</div>
<div class="logo">
<a href="accueil.html"><img src="../images/WIKIFANTASY.png" alt="Logo" width="227px" height="106px" onmousedown="return false"></a>
</div>
<div class="user">
<img src="../images/user_dark.png" alt="user" width="70px" height="70px" onmousedown="return false">
</div>
</div>
<h1>▶ Quiz ◀</h1>
<div class="quiz">
<h2>Question 1</h2>
<p>“Tu es un sorcier Harry”</p>
<!-- Grille de réponses (2 par ligne) -->
<div class="answers">
<button class="answer">Fight Club</button>
<button class="answer">Jurassic World</button>
<button class="answer">La 7ème compagnie</button>
<button class="answer">Harry Potter à l'école des sorciers</button>
</div>
<div class="submit-button">
<button class="buttonSudmite" type="submit">Confirmer</button>
</div>
</div>
</body>
</html>

@ -0,0 +1,17 @@
<?php
global $twig;
echo $twig->render('head.html.twig', [
'title' => "Quiz",
'style' => "../public/styles/styleQuiz.css",
'scripts' => array("../public/script/theme-toggle-double-param.js")
]);
// Rendu du bandeau
echo $twig->render('bandeau.html.twig');
echo $twig->render('quiz.html.twig', ['idQuiz'=>$id , 'question' => $question,'id'=>$idquestion]);
?>

@ -1,211 +0,0 @@
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Wiki Fantasy : Quizz</title>
<link id="favicon" rel="icon" href="../images/iconeSombre.ico"> <!-- Par défaut sombre -->
<link href="https://fonts.googleapis.com/css2?family=Lemon&display=swap" rel="stylesheet">
<style>
@import url('https://fonts.googleapis.com/css2?family=Lemon&display=swap');
/* ====== DARK MODE ====== */
body.dark-mode h1, body.dark-mode h2, body.dark-mode p {
color: white;
font-family: "Lemon", serif;
text-align: center;
}
body.dark-mode .quizz {
background-color: black;
width: 50%;
margin: 3% auto;
padding: 2%;
border-radius: 25px;
border: 2px solid transparent;
}
body.dark-mode .answers {
display: flex;
flex-wrap: wrap;
justify-content: space-around;
gap: 10px;
}
body.dark-mode .answer {
background-color: #1b0048;
color: white;
border: none;
border-radius: 25px;
width: 45%;
padding: 10px;
font-size: 18px;
text-align: center;
cursor: pointer;
}
body.dark-mode .answer:hover {
background-color: #6100ff;
}
body.dark-mode .submit-button {
text-align: center;
margin-top: 20px;
}
body.dark-mode .buttonSudmite {
background: linear-gradient(90deg, #6100ff 0%, #1b0048 100%);
font-family: "Lemon", serif;
border: none;
color: white;
padding: 10px 20px;
border-radius: 25px;
font-size: 20px;
cursor: pointer;
}
/* ====== LIGHT MODE ====== */
body.light-mode h1, body.light-mode h2, body.light-mode p {
color: black;
font-family: "Lemon", serif;
text-align: center;
}
body.light-mode .quizz {
background-color: white;
width: 50%;
margin: 3% auto;
padding: 2%;
border-radius: 25px;
border: 2px solid black;
}
body.light-mode .answers {
display: flex;
flex-wrap: wrap;
justify-content: space-around;
gap: 10px;
}
body.light-mode .answer {
background-color: #fff1f1;
color: black;
border: 1px solid black;
border-radius: 25px;
width: 45%;
padding: 10px;
font-size: 18px;
text-align: center;
cursor: pointer;
}
body.light-mode .answer:hover {
background-color: #c7f6c4;
}
body.light-mode .submit-button {
text-align: center;
margin-top: 20px;
}
body.light-mode .buttonSudmite {
background: linear-gradient(180deg, rgba(187,211,249,1) 0%, rgba(199,246,196,1) 100%);
font-family: "Lemon", serif;
border: none;
color: black;
padding: 10px 20px;
border-radius: 25px;
font-size: 20px;
cursor: pointer;
}
/* ====== OTHER ====== */
.container {
width: 100%;
height: 100px;
background-color: transparent;
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 50px;
}
.header {
display: flex;
width: 100%;
justify-content: space-between;
align-items: center;
}
.nav img {
margin-right: 10px;
}
.logo img {
display: block;
margin: 0 auto;
}
.user img {
margin-left: 10px;
}
</style>
</head>
<body class="dark-mode"> <!-- Ajouter ici la classe pour le mode sombre ou clair -->
<!-- Bandeau du haut avec les images -->
<div class="container">
<div class="header">
<div class="nav">
<img src="../images/coeur.svg" alt="coeur" width="67px" height="67px" onmousedown="return false">
<img id="theme-icon" src="../images/light.svg" alt="toggle theme" width="72px" height="37px" onmousedown="return false" onclick="toggleTheme()">
<img src="../images/quizz.svg" alt="quizz" width="51px" height="82px" onmousedown="return false">
</div>
<div class="logo">
<a href="accueil.html"><img src="../images/WIKIFANTASY.png" alt="Logo" width="227px" height="106px" onmousedown="return false"></a>
</div>
<div class="user">
<img src="../images/user_dark.png" alt="user" width="70px" height="70px" onmousedown="return false">
</div>
</div>
</div>
<!-- Section du quizz -->
<h1>▶ Quizz ◀</h1>
<div class="quizz">
<h2>Question 1</h2>
<p>“Tu es un sorcier Harry”</p>
<!-- Grille de réponses (2 par ligne) -->
<div class="answers">
<button class="answer">Fight Club</button>
<button class="answer">Jurassic World</button>
<button class="answer">La 7ème compagnie</button>
<button class="answer">Harry Potter à l'école des sorciers</button>
</div>
<div class="submit-button">
<button class="buttonSudmite">Confirmer</button>
</div>
</div>
<script>
function toggleTheme() {
const body = document.body;
body.classList.toggle("dark-mode");
body.classList.toggle("light-mode");
const themeIcon = document.getElementById("theme-icon");
if (body.classList.contains("dark-mode")) {
themeIcon.src = "../images/light.svg";
} else {
themeIcon.src = "../images/dark.svg";
}
}
</script>
</body>
</html>

@ -15,18 +15,10 @@
));
echo "<h2>Résultats</h2>";
echo "<div class='quotes-container'>";
foreach($tq as $q){
echo $twig->render('quoteLittle.html.twig', array(
'srcImg' => $q->getImgPath(),
'quoteContent' => $q->getContent(),
'sourceName' => $q->getTitleSrc(),
'nameCarac' => $q->getCarac(),
'dateSortie' => $q->getDateSrc(),
));
}
echo $twig->render('quoteLittle.html.twig', [
'quotes' => $tq,
'titre' => "Résultats"
]);
echo "</div>";
//echo $twig->render('resultat.html.twig');

@ -2,7 +2,7 @@
<div class="nav">
<a href="{{ racine }}/favorite"><img src="{{ racine }}/images/coeur.svg" alt="coeur" width="67px" height="67px" onmousedown="return false"></a>
<img id="theme-icon" src="{{ racine }}/images/dark.svg" alt="toggle theme" width="72px" height="37px" onmousedown="return false" onclick="toggleTheme()">
<a href="{{ racine }}/quiz"><img src="{{ racine }}/images/quizz.svg" alt="quizz" width="51px" height="82px" onmousedown="return false"></a>
<a href="{{ racine }}/quiz/1"><img src="{{ racine }}/images/quizz.svg" alt="quizz" width="51px" height="82px" onmousedown="return false"></a>
</div>
<div class="logo">

@ -1,19 +1,6 @@
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Wiki Fantasy : Quiz</title>
<link id="favicon" rel="icon" href="../../images/iconeSombre.ico"> <!-- Par défaut sombre -->
<link rel="stylesheet" href="../../public/styles/styleQuiz.css">
<script defer src="../../public/script/theme-toggle.js"></script>
</head>
<body>
<h1 style="color: #b7c8ff"> {{ score }} </h1>
<h1> {{ nextquiz }} </h1>
zeze
</body>
</html>

@ -3,7 +3,7 @@
<h1>▶ Profil ◀</h1>
<img src="{{ racine }}/{{ srcImg }}" class="imageProfil" onmousedown="return false"/>
<img src="{{ srcImg }}" class="imageProfil" onmousedown="return false"/>
<p class="infoProfil"> <strong>{{ srcUsername }}</strong><img class='imgModify' src='../images/modify.svg'/></p>
@ -11,7 +11,7 @@
<p class="infoProfil"> <strong> {{ srcEmail }}</strong><img class='imgModify' src='../images/modify.svg'/></p>
<p class="infoProfil"> <strong>{{ srcPasswd }}</strong><img class='imgModify' src='../images/modify.svg'/></p>
<p class="infoProfil"> <strong>mot de passe</strong><img class='imgModify' src='../images/modify.svg'/></p>
<div class="languageDiv">
@ -20,12 +20,14 @@
<img class="languageImage" src="{{ racine }}/images/drapeauFrance.png" onmousedown="return false"/>
<div class="createQuote">
<a href="rien" class="createQuote">Ajouter une citation</a>
<a href="" class="createQuote">Ajouter une citation</a>
</div>
<div class="buttonSudmiteDiv">
<button class="buttonSudmite">Se déconnecter</button>
<a href="{{ racine }}/unlog" class="createQuote">
<button class="buttonSudmite">Se déconnecter</button>
</a>
</div>
</div>

@ -1,37 +1,9 @@
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Wiki Fantasy : Quiz</title>
<link id="favicon" rel="icon" href="../../images/iconeSombre.ico"> <!-- Par défaut sombre -->
<link rel="stylesheet" href="../../public/styles/styleQuiz.css">
<script defer src="../../public/script/theme-toggle.js"></script>
<script>
// Timer pour 5 minutes
var timeLeft = 10;
function countdown() {
var timerDisplay = document.getElementById("timer");
if (timeLeft <= 0) {
document.getElementById("quizForm").submit();
} else {
timerDisplay.innerHTML = timeLeft + " seconds left";
timeLeft -= 1;
setTimeout(countdown, 1000);
}
}
window.onload = countdown;
</script>
</head>
<body>
{{ include "bandeau.html.twig" }}
<h1>▶ Quiz ◀</h1>
<div class="quiz">
<h2> {{ question.question }} </h2>
<a id="timer"> 10 seconds left .. </a>
<form id="quizForm" method="POST">
<form id="quizForm" method="POST" >
<div class="answers">
<button class="answer" name="answera" value="A-{{ id }}">
{{ question.answera }}
@ -46,7 +18,7 @@
{{ question.answerd }}
</button>
</div>
<input type="hidden" name="action" value="">
<input type="hidden" name="action" value="canswer">
</form>
</div>
</body>

@ -2,14 +2,14 @@
{% if quotes|length > 0 %}
<div class='suggestions-container'>
{% for quote in quotes %}
<a href="{{ racine }}/quote/{{ quote.id_quote }}" class="link-citation">
<a href="{{ racine }}/quote/{{ quote.id }}" class="link-citation">
<div class="citation-container suggestion">
<img src="{{ quote.imgpath }}" alt="{{ quote.caracter }}" class="citation-image">
<img src="{{ quote.imgPath }}" alt="{{ quote.carac }}" class="citation-image">
<div class="text-content">
<p class="quote">"{{ quote.content }}"</p>
<p class="movie">- {{ quote.title }}</p>
<p class="character">Personnage : {{ quote.caracter }}</p>
<p class="year">Année : {{ quote.dates }}</p>
<p class="movie">- {{ quote.titleSrc }}</p>
<p class="character">Personnage : {{ quote.carac }}</p>
<p class="year">Année : {{ quote.dateSrc }}</p>
</div>
</div>
</a>

Loading…
Cancel
Save