- Inscription sans redirection HelloAsso (acte volontaire séparé) - Génération automatique d'identifiant AlpID (prenom.code mnémotechnique) - Profil en tuiles : identité, compte, mot de passe, OTP, adhésion, adresse, connexions - Double authentification : activation/suppression OTP via Keycloak - Page d'accueil contextuelle (bienvenue si connecté, CTA adhésion si non adhérent) - Historique des connexions avec statistiques et graphiques Chart.js - Géocodage Nominatim + lien OpenStreetMap pour l'adresse - HelloAsso : checkout intent, validation paiement, mise à jour Dolibarr Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
58 lines
1.4 KiB
PHP
58 lines
1.4 KiB
PHP
<?php
|
|
require_once __DIR__ . '/config.php';
|
|
|
|
function session_start_safe(): void {
|
|
if (session_status() === PHP_SESSION_NONE) {
|
|
session_name('portail_sess');
|
|
session_set_cookie_params([
|
|
'lifetime' => 0,
|
|
'path' => '/',
|
|
'secure' => true,
|
|
'httponly' => true,
|
|
'samesite' => 'Lax',
|
|
]);
|
|
session_start();
|
|
}
|
|
}
|
|
|
|
function current_user(): ?array {
|
|
session_start_safe();
|
|
return $_SESSION['user'] ?? null;
|
|
}
|
|
|
|
function require_login(): void {
|
|
$user = current_user();
|
|
if (!$user) {
|
|
$_SESSION['next_url'] = (isset($_SERVER['HTTPS']) ? 'https' : 'http')
|
|
. '://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
|
|
header('Location: /auth/login.php');
|
|
exit;
|
|
}
|
|
}
|
|
|
|
function require_admin(): void {
|
|
require_login();
|
|
$user = current_user();
|
|
if (!($user['is_admin'] ?? false)) {
|
|
http_response_code(403);
|
|
require __DIR__ . '/../views/403.php';
|
|
exit;
|
|
}
|
|
}
|
|
|
|
function is_adherent(): bool {
|
|
$user = current_user();
|
|
return $user ? (bool)($user['is_adherent'] ?? false) : false;
|
|
}
|
|
|
|
function set_flash(string $type, string $message): void {
|
|
session_start_safe();
|
|
$_SESSION['flash'] = ['type' => $type, 'message' => $message];
|
|
}
|
|
|
|
function get_flash(): ?array {
|
|
session_start_safe();
|
|
$flash = $_SESSION['flash'] ?? null;
|
|
unset($_SESSION['flash']);
|
|
return $flash;
|
|
}
|