33 private \Twig\Loader\FilesystemLoader
$loader;
38 private \Twig\Environment
$twig;
43 private ?array
$get =
null;
64 if (!empty($_SESSION[
'user_logged_in']) && isset($_SESSION[
'user_role'])) {
65 $sessionRole = $_SESSION[
'user_role'];
66 $userRoleValue = $sessionRole instanceof
RoleEnum ? $sessionRole->value : $sessionRole;
67 if ($userRoleValue === RoleEnum::Admin->value) {
71 $this->pdo = $db->getConnexion($role);
76 if (isset($_GET) && !empty($_GET)) {
79 if (isset($_POST) && !empty($_POST)) {
85 if (!empty($_SESSION[
'user_logged_in']) && !empty($_SESSION[
'user_email'])) {
88 $unreadCount = $messageDAO->getUnreadCountForUser($_SESSION[
'user_email']);
89 $this->twig->addGlobal(
'unreadMessagesCount', $unreadCount);
90 }
catch (\Throwable $e) {
104 public function call(
string $method): mixed
106 if (!method_exists($this, $method)) {
108 http_response_code(404);
109 $template = $this->
getTwig()->load(
'errors/404.html.twig');
110 echo $template->render([
112 'title' =>
"Page non trouvée",
113 'name' =>
"error_404",
114 'description' =>
"La page ou la méthode demandée n'existe pas."
119 return $this->$method();
146 public function getLoader(): ?\Twig\Loader\FilesystemLoader
229 protected function requireAuth(
string $controller =
'',
string $method =
'', array $params = []): void
231 if (!isset($_SESSION[
'user_logged_in']) || !$_SESSION[
'user_logged_in']) {
233 if (empty($controller) && empty($method)) {
235 $redirectUrl = $_SERVER[
'REQUEST_URI'] ??
'/';
238 $redirectParams = array_merge([
'controller' => $controller,
'method' => $method], $params);
239 $redirectUrl =
'/?' . http_build_query($redirectParams);
243 if (!empty($redirectUrl)) {
244 $redirectUrlDecoded = urldecode($redirectUrl);
245 if (strpos($redirectUrlDecoded,
'://') !==
false || (strlen($redirectUrlDecoded) > 0 && $redirectUrlDecoded[0] !==
'/')) {
250 $redirectToEncoded = urlencode($redirectUrl);
253 $this->
redirectTo(
'home',
'connect', [
'redirect' => $redirectToEncoded]);
271 $sessionRole = $_SESSION[
'user_role'] ??
null;
274 $userRoleValue = (is_object($sessionRole) && property_exists($sessionRole,
'value'))
275 ? $sessionRole->value
279 $userRole = $_SESSION[
'user_role'] ??
null;
280 $userRoleValue = $userRole instanceof
RoleEnum ? $userRole->value : $userRole;
281 $roleValue = $requiredRole instanceof
RoleEnum ? $requiredRole->value : $requiredRole;
283 if ($userRoleValue !== $roleValue) {
284 http_response_code(403);
285 $template = $this->
getTwig()->load(
'errors/403.html.twig');
286 echo $template->render([
288 'title' =>
"Erreur 403 - Accès refusé",
290 'description' =>
"Vous n'avez pas l'autorisation d'accéder à cette ressource."
307 protected function redirectTo(
string $controller,
string $method, array $params = []): void
310 'controller' => $controller,
314 if (!empty($params)) {
315 $query = array_merge($query, $params);
318 $queryString = http_build_query($query);
319 header(
'Location: /?' . $queryString);
332 http_response_code(405);
333 $template = $this->
getTwig()->load(
'errors/405.html.twig');
334 echo $template->render([
336 'title' =>
"Erreur 405 - Méthode non autorisée",
338 'description' =>
"La méthode HTTP utilisée n'est pas autorisée pour cette ressource."
357 $userRole = $_SESSION[
'user_role'] ??
null;
358 $userRoleValue = $userRole instanceof
RoleEnum ? $userRole->value : $userRole;
359 $allowedRoleValues = array_map(
function ($role) {
360 return $role instanceof
RoleEnum ? $role->value : $role;
363 if (!in_array($userRoleValue, $allowedRoleValues,
true)) {
364 http_response_code(403);
365 $template = $this->
getTwig()->load(
'errors/403.html.twig');
366 echo $template->render([
368 'title' =>
"Erreur 403 - Accès refusé",
370 'description' =>
"Vous n'avez pas l'autorisation d'accéder à cette ressource."
RoleEnum
Énumération des rôles utilisateur.
Classe de base pour tous les contrôleurs de l'application.
getPost()
Récupère les données POST.
call(string $method)
Appelle une méthode du contrôleur de façon dynamique.
__construct(\Twig\Loader\FilesystemLoader $loader, \Twig\Environment $twig)
Constructeur du contrôleur.
requireRole($requiredRole)
Exige que l'utilisateur ait un rôle spécifique.
setPDO(?PDO $pdo)
Définit la connexion PDO.
show405()
Affiche une erreur 405 Méthode non autorisée.
redirectTo(string $controller, string $method, array $params=[])
Redirige vers un contrôleur et une méthode donnés.
getGet()
Récupère les données GET.
requireAnyRole(array $allowedRoles)
Exige que l'utilisateur ait un des rôles spécifiés.
requireAuth(string $controller='', string $method='', array $params=[])
Exige que l'utilisateur soit authentifié.
setTwig(?\Twig\Environment $twig)
Définit l'environnement Twig.
getLoader()
Récupère le chargeur de templates Twig.
setPost(?array $post)
Définit les données POST.
setGet(?array $get)
Définit les données GET.
Twig Loader FilesystemLoader $loader
getPDO()
Récupère la connexion PDO.
setLoader(?\Twig\Loader\FilesystemLoader $loader)
Définit le chargeur de templates Twig.
getTwig()
Récupère l'environnement Twig.
const ROLE_SITE_ADMINISTRATEUR
static getInstance()
Retourne l'instance unique de la classe bd (pattern Singleton).