'application/json', 'csv' => 'text/csv', 'pdf' => 'application/pdf', 'jpg' => 'image/jpeg', 'jpeg' => 'image/jpeg', 'png' => 'image/png' ]); // ================================================ // PAGINATION // ================================================ define('ITEMS_PER_PAGE', 20); define('MAX_PAGINATION_LINKS', 5); // ================================================ // LOGS // ================================================ define('LOG_ERRORS', true); define('LOG_QUERIES', DEBUG_MODE); define('LOG_FILE_ERRORS', LOGS_DIR . '/errors.log'); define('LOG_FILE_ACCESS', LOGS_DIR . '/access.log'); // ================================================ // CONFIGURATION PHP // ================================================ // Fuseau horaire date_default_timezone_set('Europe/Paris'); // Affichage erreurs selon environnement if (DEBUG_MODE) { error_reporting(E_ALL); ini_set('display_errors', 1); ini_set('display_startup_errors', 1); } else { error_reporting(E_ALL & ~E_DEPRECATED & ~E_STRICT); ini_set('display_errors', 0); ini_set('display_startup_errors', 0); } // Logs personnalisés ini_set('log_errors', LOG_ERRORS); ini_set('error_log', LOG_FILE_ERRORS); // Limites PHP ini_set('memory_limit', '256M'); ini_set('max_execution_time', '300'); ini_set('upload_max_filesize', '50M'); ini_set('post_max_size', '50M'); // ================================================ // CONFIGURATION SESSIONS // ================================================ ini_set('session.name', SESSION_NAME); ini_set('session.gc_maxlifetime', SESSION_LIFETIME); ini_set('session.cookie_lifetime', SESSION_LIFETIME); ini_set('session.cookie_secure', SESSION_COOKIE_SECURE); ini_set('session.cookie_httponly', SESSION_COOKIE_HTTPONLY); ini_set('session.cookie_samesite', SESSION_COOKIE_SAMESITE); ini_set('session.use_strict_mode', 1); ini_set('session.use_only_cookies', 1); // ================================================ // AUTOLOAD SIMPLE // ================================================ spl_autoload_register(function($class) { // Chercher dans includes/classes/ $file = APP_ROOT . '/includes/classes/' . $class . '.php'; if (file_exists($file)) { require_once $file; return true; } // Chercher dans src/models/ $file = APP_ROOT . '/src/models/' . $class . '.php'; if (file_exists($file)) { require_once $file; return true; } return false; }); // ================================================ // FONCTIONS HELPER GLOBALES // ================================================ /** * Échapper HTML */ function h($string) { return htmlspecialchars($string ?? '', ENT_QUOTES, 'UTF-8'); } /** * Redirection */ function redirect($url) { $base = rtrim(BASE_URL, '/'); $url = ltrim($url, '/'); header("Location: {$base}/{$url}"); exit; } /** * Générer URL */ function url($path = '') { return BASE_URL . '/' . ltrim($path, '/'); } /** * Vérifier si utilisateur connecté * CORRIGÉ : Utilise SessionManager pour synchronisation */ function isLoggedIn() { // Charger SessionManager si pas déjà fait if (!class_exists('SessionManager')) { require_once __DIR__ . '/session.php'; } return SessionManager::isLoggedIn(); } /** * Obtenir utilisateur courant * CORRIGÉ : Utilise SessionManager pour synchronisation */ function currentUser() { // Charger SessionManager si pas déjà fait if (!class_exists('SessionManager')) { require_once __DIR__ . '/session.php'; } return SessionManager::getUser(); } /** * Vérifier type utilisateur */ function isEnseignant() { if (!isLoggedIn()) return false; $user = currentUser(); return ($user['id_type'] ?? 0) == 1; } function isEleve() { if (!isLoggedIn()) return false; $user = currentUser(); return in_array($user['id_type'] ?? 0, [2, 3]); } function isEleveClasse() { if (!isLoggedIn()) return false; $user = currentUser(); return ($user['id_type'] ?? 0) == 2; } function isEleveLibre() { if (!isLoggedIn()) return false; $user = currentUser(); return ($user['id_type'] ?? 0) == 3; } /** * Logger un message */ function logMessage($message, $level = 'INFO') { $timestamp = date('Y-m-d H:i:s'); $log_entry = "[{$timestamp}] [{$level}] {$message}\n"; error_log($log_entry, 3, LOG_FILE_ACCESS); } /** * Formater une date */ function formatDate($date, $format = 'd/m/Y') { if (empty($date)) return ''; $dt = new DateTime($date); return $dt->format($format); } /** * Formater date et heure */ function formatDateTime($datetime, $format = 'd/m/Y H:i') { if (empty($datetime)) return ''; $dt = new DateTime($datetime); return $dt->format($format); }