✉️ Feature: Epic 5 - Formulaire de Contact (Stories 5.1-5.7)
- Formulaire HTML5 avec validation (nom, prénom, email, entreprise, catégorie, objet, message) - Validation JavaScript côté client (FormValidator) - Persistance localStorage des données (AppState) - Intégration reCAPTCHA v3 avec dégradation gracieuse - Traitement PHP sécurisé (CSRF, validation, envoi email) - Feedback utilisateur AJAX (succès/erreur) - Liens contact secondaires (LinkedIn, GitHub, Email protégé) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
59
includes/config.php
Normal file
59
includes/config.php
Normal file
@@ -0,0 +1,59 @@
|
||||
<?php
|
||||
/**
|
||||
* Configuration de l'application
|
||||
* Charge les variables d'environnement depuis .env
|
||||
*/
|
||||
|
||||
/**
|
||||
* Charge un fichier .env et définit les variables d'environnement
|
||||
* @param string $path Chemin vers le fichier .env
|
||||
*/
|
||||
function loadEnv(string $path): void
|
||||
{
|
||||
if (!file_exists($path)) {
|
||||
return;
|
||||
}
|
||||
|
||||
$lines = file($path, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
|
||||
|
||||
foreach ($lines as $line) {
|
||||
// Ignorer les commentaires
|
||||
if (str_starts_with(trim($line), '#')) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Parser KEY=value
|
||||
if (str_contains($line, '=')) {
|
||||
[$key, $value] = explode('=', $line, 2);
|
||||
$key = trim($key);
|
||||
$value = trim($value);
|
||||
|
||||
// Supprimer les guillemets si présents
|
||||
if (preg_match('/^["\'](.*)["\']\s*$/', $value, $matches)) {
|
||||
$value = $matches[1];
|
||||
}
|
||||
|
||||
$_ENV[$key] = $value;
|
||||
putenv("{$key}={$value}");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Charger le fichier .env
|
||||
loadEnv(__DIR__ . '/../.env');
|
||||
|
||||
// Définir les constantes de configuration
|
||||
define('APP_ENV', $_ENV['APP_ENV'] ?? 'production');
|
||||
define('APP_DEBUG', ($_ENV['APP_DEBUG'] ?? 'false') === 'true');
|
||||
define('APP_URL', $_ENV['APP_URL'] ?? 'http://localhost');
|
||||
|
||||
// reCAPTCHA v3
|
||||
define('RECAPTCHA_SITE_KEY', $_ENV['RECAPTCHA_SITE_KEY'] ?? '');
|
||||
define('RECAPTCHA_SECRET_KEY', $_ENV['RECAPTCHA_SECRET_KEY'] ?? '');
|
||||
define('RECAPTCHA_THRESHOLD', 0.5); // Score minimum (0.0 à 1.0)
|
||||
|
||||
// Contact
|
||||
define('CONTACT_EMAIL', $_ENV['CONTACT_EMAIL'] ?? '');
|
||||
|
||||
// Sécurité
|
||||
define('APP_SECRET', $_ENV['APP_SECRET'] ?? '');
|
||||
Reference in New Issue
Block a user