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.
ScienceQuest/project/src/controller/FrontController.php

144 lines
4.2 KiB

<?php
namespace controller;
use AltoRouter;
use config\Validation;
use Exception;
use http\Params;
use model\ConfigurationJeu;
use model\Connection;
use model\LoginException;
use model\MdlAdmin;
use model\MdlDifficulte;
use model\MdlJeu;
use model\MdlUser;
use model\ValidationException;
use PDOException;
class FrontController
{
private Connection $con;
/**
* @throws Exception
*/
public function __construct()
{
global $twig, $router;
global $basePath;
//altorouter
$router = new AltoRouter();
$router->setBasePath($basePath);
$router->map('GET|POST','/[a:action]?','UserController');
$router->map('GET|POST','/admin/[a:action]','AdminController');
$router->map('GET|POST', '/validationFormulaire', 'validationFormulaire');
$router->map('GET|POST', '/logout', 'disconnect');
// Tableau qui contient les messages d'erreur
$dVueErreur = [];
$dVue = [];
$dVue['basePath'] = $basePath;
session_start();
if(isset($_SESSION['pseudo']))
$dVue['pseudo'] = $_SESSION['pseudo'];
try {
$match = $router->match();
if (!$match) {
throw new Exception('Wrong call');
}
switch($match['target']) {
case 'UserController':
$this->callController('UserController',$match);
break;
case 'AdminController':
$action = $match['params']['action'];
if (!MdlAdmin::isAdmin()) {
$action = 'login';
}
$this->callController('AdminController',$action);
break;
case 'PseudoController':
$this->callController('PseudoController',$match);
break;
case 'validationFormulaire':
$this->ValidationFormulaire($dVueErreur, $dVue);
break;
//mauvaise action
default:
$dVueErreur[] = "Erreur d'appel php";
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();
echo $twig->render('erreur.html', ['dVueErreur' => $dVueErreur]);
}
exit(0);
}
private function callController(string $cont, array $match) {
global $twig;
$controller = '\\controller\\'.$cont;
$controller = new $controller;
$action = $match['params']['action'] ?? 'accueil';
if (is_callable(array($controller,$action))) {
call_user_func_array(array($controller,$action),array($match['params']));
} else {
echo $twig->render('erreur.html', ['dVueErreur' => array('Page inconnue')]);
}
}
public function ValidationFormulaire(array &$dVueErreur, array &$dVue)
{
global $twig;
$id_jeu = $_POST['jeu'] ?? '';
$id_difficulte = $_POST['difficulte'] ?? '';
try{
Validation::val_form($id_jeu, $id_difficulte, $dVueErreur);
}catch (ValidationException|Exception $ex){
$this->CreateParty($dVueErreur);
}
if(count($dVueErreur) == 0){
$jeu = (new MdlJeu())->getFromId($id_jeu);
$difficulte = (new MdlDifficulte())->getFromId($id_difficulte);
$_SESSION['configuration'] = new ConfigurationJeu($jeu, $difficulte);
header("Location: /pseudo");
#echo $twig->render('accueil.html', ['dVue' => $dVue, 'dVueErreur' => $dVueErreur]);
}else{
$this->CreateParty($dVueErreur);
}
}
private function CreateParty(array $dVueErreur)
{
}
}