acces cote par id (URL)

pull/21/head
kevin.modejar 5 months ago
commit 5dc66adab3

@ -0,0 +1,115 @@
<?php
use Twig\Environment;
use Twig\Error\LoaderError;
use Twig\Error\RuntimeError;
use Twig\Extension\CoreExtension;
use Twig\Extension\SandboxExtension;
use Twig\Markup;
use Twig\Sandbox\SecurityError;
use Twig\Sandbox\SecurityNotAllowedTagError;
use Twig\Sandbox\SecurityNotAllowedFilterError;
use Twig\Sandbox\SecurityNotAllowedFunctionError;
use Twig\Source;
use Twig\Template;
use Twig\TemplateWrapper;
/* signin.html */
class __TwigTemplate_d8d8ee303bb01e4f719db1d13398adc0 extends Template
{
private Source $source;
/**
* @var array<string, Template>
*/
private array $macros = [];
public function __construct(Environment $env)
{
parent::__construct($env);
$this->source = $this->getSourceContext();
$this->parent = false;
$this->blocks = [
];
}
protected function doDisplay(array $context, array $blocks = []): iterable
{
$macros = $this->macros;
// line 1
yield " <div class=\"container\">
<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()\">
<a href=\"quiz.html\"><img src=\"../images/quizz.svg\" alt=\"quizz\" width=\"51px\" height=\"82px\" onmousedown=\"return false\"></a>
</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>
<h1>▶ S'inscrire ◀</h1>
<form action=\"../script/signin.php\" method=\"post\">
<div class=\"signin\">
<div class=\"DivId\">
<p>Identifiant *</p>
<input type=\"text\" class=\"champ\" id=\"name\" name=\"name\" required/>
</div>
<div class=\"DivEmail\">
<p>Email *</p>
<input type=\"email\" class=\"champ\" id=\"email\" name=\"email\" required/>
</div>
<div class=\"mdp\">
<p>Mot de passe *</p>
<input type=\"password\" class=\"champ\" id=\"pswd\" name=\"pswd\" required/>
</div>
<div class=\"confmdp\">
<p>Confirmer mot de passe *</p>
<input type=\"password\" class=\"champ\" id=\"confpswd\" name=\"confpswd\" required/>
</div>
<div class=\"imgprof\">
<p>Image *</p>
</div>
<div class=\"confirmer\">
<input type=\"submit\" class=\"btn\" value=\"Inscription\" />
</div>
</div>
</form>
</body>
</html>";
yield from [];
}
/**
* @codeCoverageIgnore
*/
public function getTemplateName(): string
{
return "signin.html";
}
/**
* @codeCoverageIgnore
*/
public function getDebugInfo(): array
{
return array ( 42 => 1,);
}
public function getSourceContext(): Source
{
return new Source("", "signin.html", "/home/www/lebeaulato/public_html/WF-Website/vue/templates/signin.html");
}
}

@ -0,0 +1,102 @@
<?php
use Twig\Environment;
use Twig\Error\LoaderError;
use Twig\Error\RuntimeError;
use Twig\Extension\CoreExtension;
use Twig\Extension\SandboxExtension;
use Twig\Markup;
use Twig\Sandbox\SecurityError;
use Twig\Sandbox\SecurityNotAllowedTagError;
use Twig\Sandbox\SecurityNotAllowedFilterError;
use Twig\Sandbox\SecurityNotAllowedFunctionError;
use Twig\Source;
use Twig\Template;
use Twig\TemplateWrapper;
/* login.html */
class __TwigTemplate_2cd0c955593f8f6da78deaca6452905d extends Template
{
private Source $source;
/**
* @var array<string, Template>
*/
private array $macros = [];
public function __construct(Environment $env)
{
parent::__construct($env);
$this->source = $this->getSourceContext();
$this->parent = false;
$this->blocks = [
];
}
protected function doDisplay(array $context, array $blocks = []): iterable
{
$macros = $this->macros;
// line 1
yield " <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>
<h1>▶ Connexion ◀</h1>
<div class=\"login\">
<p> <strong>Identifiant *</strong></p>
<input type=\"text\" class=\"connexion\" name=\"name\" required />
<p> <strong> Mot de passe *</strong></p>
<input type=\"password\" class=\"connexion\" name=\"passwd\" required />
<div class=\"createAccount\">
<p class=\"createAccount\">Vous n'avez pas de compte?</p>
<a href=\"/signin\" class=\"createAccount\">S'incrire</a>
</div>
<div class=\"buttonSudmiteDiv\">
<button class=\"buttonSudmite\">Connexion</button>
</div>
</div>
</body>
</html>";
yield from [];
}
/**
* @codeCoverageIgnore
*/
public function getTemplateName(): string
{
return "login.html";
}
/**
* @codeCoverageIgnore
*/
public function getDebugInfo(): array
{
return array ( 42 => 1,);
}
public function getSourceContext(): Source
{
return new Source("", "login.html", "/home/www/lebeaulato/public_html/WF-Website/vue/templates/login.html");
}
}

@ -18,8 +18,8 @@ $mdp = 'Ctvl-21122005';
$vues['erreur'] = 'vue/erreur.php';
$vues['accueil'] = 'vue/accueil.php';
$vues['quote'] = 'vue/quote.php';
$vues['login'] = 'vue/login.html';
$vues['signin'] = 'vue/signin.html';
$vues['login'] = 'vue/login.php';
$vues['signin'] = 'vue/signin.php';
$vues['quiz'] = 'vue/quiz.html';

@ -16,10 +16,12 @@ $co = new \Gateway\Connection("pgsql:host=localhost;dbname={$base};", $login, $m
//twig
$loader = new \Twig\Loader\FilesystemLoader('vue/templates');
$twig = new \Twig\Environment($loader, [
'cache' => 'cache',
'cache' => false,
]);
$cont = new Controleur\FrontControler();
$twig->addGlobal('racine','/~kekentin/WF/WF-Website');
$cont = new Controleur\FrontControler($co);
session_unset();
session_destroy();

@ -11,12 +11,12 @@ document.addEventListener("DOMContentLoaded", function() {
if (currentTheme === 'light') {
document.body.classList.remove('dark-mode');
document.body.classList.add('light-mode');
themeIcon.src = '../images/light.svg'; // Affiche l'icône pour basculer vers le mode sombre
favicon.href = '../images/iconeClaire.ico'; // Favicon pour le mode clair
themeIcon.src = 'images/light.svg'; // Affiche l'icône pour basculer vers le mode sombre
favicon.href = 'images/iconeClaire.ico'; // Favicon pour le mode clair
} else {
document.body.classList.add('dark-mode');
themeIcon.src = '../images/dark.svg'; // Affiche l'icône pour basculer vers le mode clair
favicon.href = '../images/iconeSombre.ico'; // Favicon pour le mode sombre
themeIcon.src = 'images/dark.svg'; // Affiche l'icône pour basculer vers le mode clair
favicon.href = 'images/iconeSombre.ico'; // Favicon pour le mode sombre
}
} else {
console.error("Élément(s) manquant(s) : icône du thème ou favicon.");
@ -34,15 +34,15 @@ function toggleTheme() {
// Si on est en mode sombre, on passe en mode clair
body.classList.remove('dark-mode');
body.classList.add('light-mode');
themeIcon.src = '../images/light.svg'; // Change vers le logo sombre
favicon.href = '../images/iconeClaire.ico'; // Favicon pour le mode clair
themeIcon.src = 'images/light.svg'; // Change vers le logo sombre
favicon.href = 'images/iconeClaire.ico'; // Favicon pour le mode clair
localStorage.setItem('theme', 'light'); // Enregistre le thème clair dans localStorage
} else {
// Sinon, on repasse en mode sombre
body.classList.remove('light-mode');
body.classList.add('dark-mode');
themeIcon.src = '../images/dark.svg'; // Change vers le logo clair
favicon.href = '../images/iconeSombre.ico'; // Favicon pour le mode sombre
themeIcon.src = 'images/dark.svg'; // Change vers le logo clair
favicon.href = 'images/iconeSombre.ico'; // Favicon pour le mode sombre
localStorage.setItem('theme', 'dark'); // Enregistre le thème sombre dans localStorage
}
} else {

@ -11,7 +11,7 @@ Class FrontControler{
private Connection $co;
public function __construct(/*$co*/){
public function __construct($co){
global $twig;
@ -24,7 +24,9 @@ Class FrontControler{
$router = new \AltoRouter();
$router->map('GET', '/', 'VisitorControler');
$router->setBasePath('/~kemondejar/WF-Website');
$router->map('GET', '/', 'VisitorControler','accueil');
/*
'i' => '[0-9]++'
@ -35,13 +37,11 @@ Class FrontControler{
'' => '[^/\.]++'
*/
$router->map('GET|POST', '/quote/[i:idQuote]?', 'VisitorControler');
$router->map('GET|POST', '/login', 'VisitorControler');
$router->map('GET|POST', '/signin', 'VisitorControler');
$router->map('GET|POST', '/quiz', 'UserControler');
$router->map('GET|POST', '/quote/[i:idQuote]?', 'VisitorControler','quote');
$router->map('GET|POST', '/login', 'VisitorControler','login');
$router->map('GET|POST', '/signin', 'VisitorControler','signin');
$router->map('GET|POST', '/quiz/[i:id]?', 'QuizControler');
$router->map('GET|POST', '/quiz/[i:id]?', 'QuizControler','quiz');
$match = $router->match();
@ -54,31 +54,27 @@ Class FrontControler{
else{
$controller=$match['target'] ?? null;
$action = explode('/',$_SERVER['PHP_SELF']);
if(count($action)>2){
$action=$action[2];
}
else{
$action='accueil';
}
$action = $match['name'];
//Si existe, on lappelle
if(!$this->ifExisteAction($action)){
$dVueEreur[] = "Action introuvable";
$this->vueErreur($dVueEreur);
}
if(!$this->verifDroit($action)){
else if(!$this->verifDroit($action)){
$action='login';
$controller='VisitorControler';
}
else {
$controller = '\\Controleur\\' . $controller;
$controller = new $controller;
$controller = new $controller($co);
if (is_callable(array($controller, $action))) {
call_user_func_array(array($controller, $action),
array($match['params']));
}
}
}

@ -16,7 +16,7 @@ use Twig\Error\RuntimeError;
use Twig\Error\SyntaxError;
use Twig\Loader\FilesystemLoader;
class QuizController
class QuizControler
{
private int $no_question = 0;

@ -2,6 +2,7 @@
namespace Controleur;
use Model\QuoteModel;
use Gateway\Connection;
use Gateway\QuoteGateway;
Class VisitorControler{
@ -20,9 +21,8 @@ Class VisitorControler{
public function quote(array $arg){
global $vues;
$id=$arg['idQuote'] ?? 1;
$q = $qMod->searchId($id);
$q = $this->qMod->searchId($id);
//echo "{$id}";
require_once $vues['quote'];
}

@ -1,7 +1,6 @@
<?php
namespace Gateway;
use Connection;
use PDO;
Class QuoteGateway{
private Connection $con;
@ -39,7 +38,7 @@ Class QuoteGateway{
public function searchId(string $id):array{
//recherche par id
$query="SELECT q.id_quote, q.content, c.caracter, c.img_path, s.title, s.date, q.like, q.language FROM Quote q JOIN Caracter c ON c.id_caracter = q.id_caracter JOIN Source s ON s.id_source = q.id_source WHERE q.id_quote = '%:id%' AND q.isValid = true;";
$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.id_quote = :id AND q.isvalide = true;";
$this->con->executeQuery($query,array(':id' => array($id,PDO::PARAM_STR)));
$result=$this->con->getResults();
return $result;

@ -0,0 +1,24 @@
<?php
namespace Model;
use Entity\Quote;
use Gateway\QuoteGateway;
class QuoteModel
{
private QuoteGateway $gateway;
public function __construct(QuoteGateway $gate){
$this->gateway = $gate;
}
public function searchId(int $id): Quote{
$res = $this->gateway->searchId($id);
var_dump($res);
if( count($res) == 0)
return new Quote(-1,"NULL","NULL","NULL","NULL","NULL",0,"Default");
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"]);
}
}
?>

@ -1,20 +0,0 @@
<?php
namespace Model;
use Entity\Quote;
use Gateway\QuoteGateway;
class QuoteModel
{
private QuoteGateway $gateway;
public function __construct(QuoteGateway $gate){
$this->gateway = $gate;
}
public function searchId(int $id): Quote{
$res = $this->gate->searchId($id)[0];
return new Quote($res["q.id_quote"],$res["q.content"],$res["c.caracter"],$res["c.img_path"],$res["s.title"],$res["s.date"],$res["q.like"],$res["q.language"]);
}
}
?>

@ -1,17 +1,9 @@
<?php
// appele avec index.php ne pas metre si controleur fonctionnel
require __DIR__ . '/../vendor/autoload.php';
$loader = new \Twig\Loader\FilesystemLoader('vue/templates');
$twig = new \Twig\Environment($loader, [
'cache' => false,
]);
//
global $twig;
echo $twig->render('head.html.twig', array(
'title' => "Accueil",
'style' => "../../public/styles/styleAccueil.css",
'style' => "public/styles/styleAccueil.css",
));
echo $twig->render('bandeau.html.twig');

@ -0,0 +1,12 @@
<?php
global $twig;
echo $twig->render('head.html.twig', array(
'title' => "Login",
'style' => "../public/styles/styleLogin.css",
));
echo $twig->render('bandeau.html.twig');
echo $twig->render('login.html');
?>

@ -1,20 +1,19 @@
<?php
global $twig, $q;
global $twig;
echo $twig->render('head.html.twig', array(
'title' => "Quote",
'style' => "public/styles/styleQuote.css",
));
echo $twig->render('bandeau.html.twig');
echo $twig->render('quote.html', array(
'srcImg' => $q->imgPath,
'nameCarac' => $q->carac,
'quoteContent' => $q->content,
'sourceName' => $q->titleSrc,
'dateSortie' => $q->dateSrc,
'nbLike' => $q->like,
'srcImg' => $q->getImgPath(),
'nameCarac' => $q->getCarac(),
'quoteContent' => $q->getContent(),
'sourceName' => $q->getTitleSrc(),
'dateSortie' => $q->getDateSrc(),
'nbLike' => $q->getLike(),
'timeCode' =>"1h45",
));

@ -0,0 +1,12 @@
<?php
global $twig;
echo $twig->render('head.html.twig', array(
'title' => "Sign in",
'style' => "../public/styles/styleSignin.css",
));
echo $twig->render('bandeau.html.twig');
echo $twig->render('signin.html');
?>

@ -1,14 +1,14 @@
<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()">
<a href="/quiz"><img src="../images/quizz.svg" alt="quizz" width="51px" height="82px" onmousedown="return false"></a>
<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/dark.svg" alt="toggle theme" width="72px" height="37px" onmousedown="return false" onclick="toggleTheme()">
<a href="{{ racine }}/quiz"><img src="images/quizz.svg" alt="quizz" width="51px" height="82px" onmousedown="return false"></a>
</div>
<div class="logo">
<a href="/"><img src="../images/WIKIFANTASY.png" alt="Logo" width="227px" height="106px" onmousedown="return false"></a>
<a href="{{ racine }}/"><img src="images/WIKIFANTASY.png" alt="Logo" width="227px" height="106px" onmousedown="return false"></a>
</div>
<div class="user">
<a href="/login"><img src="../images/user_dark.png" alt="user" width="70px" height="70px" onmousedown="return false"></a>
<a href="{{ racine }}/login"><img src="images/user_dark.png" alt="user" width="70px" height="70px" onmousedown="return false"></a>
</div>
</div>

@ -5,7 +5,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{{ title }}</title>
<link rel="stylesheet" href="{{ style }}">
<link id="favicon" rel="icon" href="../../public/images/iconeSombre.ico" />
<script src="../public/script/theme-toggle.js"></script>
<link id="favicon" rel="icon" href="public/images/iconeSombre.ico" />
<script src="public/script/theme-toggle.js"></script>
</head>

@ -1,15 +1,3 @@
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" type="text/css" href="../public/styles/styleLogin.css" media="screen">
<title>Wiki Fantasy : Connexion</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">
<script defer src="../public/script/theme-toggle.js"></script>
</head>
<body>
<div class="container">
<div class="header">
<div class="nav">

@ -1,15 +1,3 @@
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" type="text/css" href="../public/styles/styleSignin.css" media="screen">
<title>Wiki Fantasy : Inscription</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">
<script defer src="../public/script/theme-toggle.js"></script>
</head>
<body>
<div class="container">
<div class="header">
<div class="nav">
Loading…
Cancel
Save