You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
201 lines
5.1 KiB
201 lines
5.1 KiB
<?php
|
|
namespace Controleur;
|
|
|
|
use Model\QuoteModel;
|
|
use Model\CommentaryModel;
|
|
use Gateway\Connection;
|
|
use Gateway\QuoteGateway;
|
|
use Gateway\CommentaryGateway;
|
|
use Model\SearchModel;
|
|
use Gateway\UserGateway;
|
|
use Model\UserModel;
|
|
use Twig\Error\LoaderError;
|
|
use Twig\Error\RuntimeError;
|
|
use Twig\Error\SyntaxError;
|
|
|
|
use Verification\VerificationChar;
|
|
|
|
Class VisitorControler {
|
|
|
|
private QuoteModel $qMod;
|
|
private CommentaryModel $cMod;
|
|
|
|
private SearchModel $sMod;
|
|
|
|
private UserGateway $gw;
|
|
|
|
private UserModel $mdl;
|
|
|
|
private array $errors;
|
|
|
|
/**
|
|
* @throws SyntaxError
|
|
* @throws RuntimeError
|
|
* @throws LoaderError
|
|
*/
|
|
public function __construct() {
|
|
global $co;
|
|
$this->qMod = new QuoteModel(new QuoteGateway($co));
|
|
$this->cMod = new CommentaryModel(new CommentaryGateway($co));
|
|
$this->sMod = new SearchModel(new QuoteGateway($co));
|
|
$this->gw = new UserGateway($co);
|
|
$this->mdl = new UserModel($this->gw);
|
|
}
|
|
|
|
public function accueil(){
|
|
global $vues;
|
|
|
|
// Récupérer la citation du jour via AccueilGateway
|
|
$citationDuJour = $this->qMod->getQuoteOfTheDay('fr');
|
|
$suggestions = $this->qMod->getSuggest(0, 'fr');
|
|
|
|
// Passer les données à la vue
|
|
require_once $vues['accueil'];
|
|
}
|
|
|
|
public function quote(array $arg){
|
|
global $vues;
|
|
$id= $arg['idQuote'] ?? 1;
|
|
$q = $this->qMod->searchId($id);
|
|
$c = $this->cMod->getComment($id);
|
|
require_once $vues['quote'];
|
|
}
|
|
|
|
public function favorite() {
|
|
global $vues;
|
|
require_once $vues['favorite'];
|
|
}
|
|
|
|
public function search(array $arg){
|
|
global $vues;
|
|
|
|
$type = ($_POST['type'] ?? "");
|
|
$search = ( VerificationChar::verifChar( $_POST['search'] ) ?? NULL);
|
|
$filtre = ($arg['filtre'] ?? []);
|
|
|
|
|
|
$tq=$this->sMod->searchQuote($type,$search,$filtre);
|
|
|
|
require_once $vues['search'];
|
|
}
|
|
|
|
/**
|
|
* @throws SyntaxError
|
|
* @throws RuntimeError
|
|
* @throws LoaderError
|
|
*/
|
|
public function login()
|
|
{
|
|
global $vues;
|
|
require_once $vues['login'];
|
|
|
|
// global $twig;
|
|
|
|
// echo $twig->render("login.html.twig");
|
|
|
|
//$this -> toLogIn();
|
|
}
|
|
|
|
/**
|
|
* @throws SyntaxError
|
|
* @throws RuntimeError
|
|
* @throws LoaderError
|
|
*/
|
|
public function signin(): void
|
|
{
|
|
global $vues;
|
|
require_once $vues['signin'];
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public function validlogin() : void
|
|
{
|
|
global $vues,$racine;
|
|
if ($_POST)
|
|
{
|
|
$pseudo = $_POST['pseudo'] ?? null;
|
|
$mdp = $_POST['mdp'] ?? null;
|
|
|
|
$user = $this -> mdl -> getUsername($pseudo);
|
|
|
|
if ($user)
|
|
{
|
|
if (password_verify($mdp, $user->getPassword()))
|
|
{
|
|
$_SESSION['user'] = $pseudo;
|
|
$_SESSION['role'] = 'user';
|
|
header("Location: ". $racine);
|
|
exit();
|
|
}else
|
|
{
|
|
global $twig;
|
|
$errors = "Identifiant ou mot de passe incorrect";
|
|
require_once $vues['login'];
|
|
exit();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
global $twig;
|
|
$errors = "Identifiant ou mot de passe incorrect";
|
|
require_once $vues['login'];
|
|
exit();
|
|
}
|
|
}
|
|
|
|
}
|
|
/**
|
|
* @throws RuntimeError
|
|
* @throws SyntaxError
|
|
* @throws LoaderError
|
|
*/
|
|
public function validsignin() : void
|
|
{
|
|
global $vues,$racine;
|
|
|
|
if ($_POST) {
|
|
$pseudo = $_POST['pseudo'] ?? null;
|
|
$email = $_POST['email'] ?? null;
|
|
$mdp = $_POST['mdp'] ?? null;
|
|
$cmdp = $_POST['cmdp'] ?? null;
|
|
|
|
if ($mdp != $cmdp) {
|
|
$errors[2] = "Mots de passe incorrects";
|
|
|
|
require_once $vues['signin'];
|
|
exit();
|
|
}
|
|
$option = ['cost' => 12];
|
|
$hmdp = password_hash($mdp, PASSWORD_BCRYPT, $option);
|
|
|
|
$isUserAlreadyUsed = $this -> mdl -> getUsername($pseudo);
|
|
$isEmailAlreadyUsed = $this -> mdl -> getEmail($email);
|
|
|
|
if ($isUserAlreadyUsed and !$isEmailAlreadyUsed) {
|
|
$errors[0] = "Pseudo déjà utilisé";
|
|
require_once $vues['signin'];
|
|
exit();
|
|
}
|
|
else if ($isEmailAlreadyUsed and !$isUserAlreadyUsed) {
|
|
$errors[1] = "Email déjà utilisé";
|
|
require_once $vues['signin'];
|
|
exit();
|
|
}
|
|
else if ($isEmailAlreadyUsed and $isUserAlreadyUsed) {
|
|
$errors[0] = "Pseudo déjà utilisé";
|
|
$errors[1] = "Email déjà utilisé";
|
|
require_once $vues['signin'];
|
|
exit();
|
|
}
|
|
else echo $this->mdl->insertUser($pseudo, $email, $hmdp);
|
|
|
|
$_SESSION["role"] = 'user';
|
|
$_SESSION["user"] = $pseudo;
|
|
|
|
header("Location: ". $racine);
|
|
}
|
|
}
|
|
} |