# Les Kozettes — V2 complète

Application web PHP 8.3+ / MySQL 8 / HTML5 / CSS3 / JavaScript vanilla.

## Modules
- Authentification et sessions
- 3 rôles : admin, utilisateur, adhérent
- Gestion des utilisateurs
- Gestion des entreprises adhérentes
- Gestion des adhésions annuelles
- Tableau de bord
- Calendrier éditorial
- Posts Instagram / Facebook
- Stories Instagram / Facebook
- Gazette mensuelle
- Sections Gazette : dossier, portraits multiples, focus multiples, bons plans multiples
- Médiathèque et plusieurs visuels
- Workflow : brouillon → soumis → validé/refusé → publié
- Espace adhérent
- Focus proposés par les adhérents
- Bons plans proposés par les adhérents
- Maximum 4 bons plans par année civile
- Date limite : le 15 du mois précédent
- Notifications internes
- Réinitialisation de mot de passe
- Journal des actions
- Historique détaillé de chaque changement de statut
- Création du compte adhérent depuis sa fiche et lien d'activation sécurisé
- File d'e-mails fiable (activation, mot de passe, notifications)
- Centre de notifications consultable
- Alerte tableau de bord pour les adhésions arrivant à échéance sous 45 jours
- Réordonnancement des sections Gazette
- Verrouillage des contenus validés/publiés pour les profils non administrateurs
- Formulaires conditionnels stricts pour Post, Story et Gazette
- Gazette composée d'un dossier unique, puis de portraits, focus et bons plans multiples
- Règles de visuels : plusieurs autorisés pour posts/dossiers/portraits/focus, un seul pour stories et bons plans
- Recherche et filtres
- Charte : #fec26b / #f76d76 / #004aad / Poppins

## Installation
1. PHP 8.3+ avec extensions PDO/MySQL, fileinfo, mbstring.
2. MySQL 8.
3. Nouvelle installation : importer `sql/schema.sql` depuis le dossier `sql`.
   Mise à niveau de la version précédente : importer uniquement `sql/migrate-v1-to-v2.sql`.
4. Modifier `config/config.php`.
5. Donner les droits d'écriture à `public/uploads`.
6. Configurer le serveur web avec `public/` comme document root.
7. Créer le premier administrateur avec :
   `php -r "echo password_hash('MotDePasseFort', PASSWORD_DEFAULT), PHP_EOL;"`
   puis utiliser le hash dans un INSERT SQL (voir `sql/seed.sql`).

## E-mails et réinitialisation du mot de passe
Renseigner `BASE_URL`, `MAIL_FROM` et activer `MAIL_ENABLED` dans `config/config.php`.
Lancer ensuite toutes les minutes :
`* * * * * /usr/bin/php /chemin/les-kozettes-complet/app/mailer.php`

Quand l'envoi est désactivé, le lien de réinitialisation est affiché à l'écran pour faciliter la recette. Les e-mails restent tracés dans `email_queue`.

## Recette recommandée
1. Créer un adhérent avec son compte.
2. Définir son mot de passe via le lien d'activation.
3. Déposer quatre bons plans, puis vérifier le blocage du cinquième.
4. Vérifier le refus d'un dépôt après le 15 du mois précédent.
5. Créer un contenu, le soumettre, le valider en admin et le marquer publié.
6. Vérifier l'historique, le calendrier et les notifications.

Avant le déploiement, exécuter `sh bin/check.sh` avec PHP 8.3 afin de contrôler toute la syntaxe et les règles métier isolées.

## Règle des bons plans
Pour un mois cible `YYYY-MM`, la date limite est le 15 du mois précédent à 23:59:59.
Une proposition après cette échéance est refusée.
Un adhérent peut déposer au maximum 4 bons plans par année civile.

## Production
Pour un déploiement public, activer HTTPS, définir des secrets forts, désactiver l'affichage des erreurs, configurer les cookies Secure/HttpOnly/SameSite et brancher un vrai service SMTP.
