Application web de traiteur gastronomique sur-mesure à Bordeaux, développée dans le cadre de l'Évaluation en Cours de Formation (ECF) - Titre Professionnel Développeur Web et Web Mobile (DWWM).
- Serveur Web : Apache (XAMPP sur port 80)
- Langage Back-End : PHP 8.2 (Architecture modulaire & Design Pattern Repository)
- Front-End : HTML5 sémantique (Conforme RGAA), CSS3 Vanilla moderne & modulaire (Playfair Display, Plus Jakarta Sans), JavaScript Vanilla (ES6+)
- Bases de Données (Hybride) :
- Relationnelle (MySQL) : Gestion relationnelle complète (Utilisateurs, Menus, Plats, Allergènes, Commandes, Avis, Horaires).
- NoSQL (MongoDB) : Base
vite_et_gourmand_nosql, collectionstatistiques_commandesalimentée en double-écriture pour l'agrégation des statistiques et du chiffre d'affaires.
- XAMPP installé avec Apache, MySQL et PHP 8.2+.
- Extension PHP MongoDB activée (
php_mongodb.dll). - Serveur MongoDB en cours d'exécution sur le port
27017.
Placez le projet dans le dossier racine de votre serveur web local (ex: C:\xampp\htdocs\vite_et_gourmand) :
git clone https://github.com/VOTRE_COMPTE/vite_et_gourmand.git
cd vite_et_gourmandCopiez le fichier d'exemple et adaptez vos identifiants si nécessaire :
cp .env.example .envContenu type du fichier .env :
DB_HOST=127.0.0.1
DB_NAME=vite_et_gourmand
DB_USER=root
DB_PASS=
# MongoDB NoSQL
MONGO_URI=mongodb://127.0.0.1:27017
MONGO_DB=vite_et_gourmand_nosqlExécutez le script d'initialisation pour créer le schéma SQL, injecter le jeu d'essai complet et synchroniser MongoDB :
php config/setup_db.phpLancez Apache et MySQL via le panneau de contrôle XAMPP, puis ouvrez votre navigateur :
👉 http://localhost/vite_et_gourmand/index.php
| Rôle | Nom / Prénom | Email (Identifiant) | Mot de passe |
|---|---|---|---|
| Administrateur | José Administrateur | jose@viteetgourmand.fr |
Admin1234! |
| Employée | Julie Chef | julie@viteetgourmand.fr |
Employe1234! |
| Employé | Thomas Dubois | thomas@viteetgourmand.fr |
Employe1234! |
| Client | Sophie Martin | sophie.martin@gmail.com |
Client1234! |
| Client | Lucas Bernard | lucas.bernard@yahoo.fr |
Client1234! |
| Cliente | Claire Dupont | claire.dupont@orange.fr |
Client1234! |
- Connexion : Email + MDP, redirection selon rôle (admin/employé/client), remember-me (30 jours)
- Inscription : Validation RGPD, MDP fort (10 car + maj/min/chiffre/spécial), hash ARGON2ID, auto-login
- Mot de passe oublié : Token sécurisé 32 bytes, expiration 1h, envoi email (simulation log)
- Reset MDP : Validation token + expiration, nouveau MDP avec règles de force
- Déconnexion : Destruction session + cookies HttpOnly
- Middleware :
requireAuth(),requireRole(),requireEmploye(),requireAdmin(), protection CSRF
- Hero section avec background responsive (AVIF/WebP/JPEG)
- Présentation entreprise (25 ans, Julie & José)
- Savoir-faire : Qualité, Sur-mesure, Réactivité, Artisanal
- Menus vitrine (3 à la une) avec badges thème/régime
- Avis clients validés uniquement (statut
VALIDE) - Formulaire dépôt avis (connecté) ou invitation connexion (visiteur)
- Formulaire public : Sujet (select), Email, Message (textarea min 20 car)
- Validation : Côté client (HTML5) + serveur (CSRF, longueur, format email)
- Envoi email : Notification équipe (
contact@viteetgourmand.fr) avec Reply-To expéditeur - Message flash : Succès animé ou erreurs inline
- Infos côte : Coordonnées, livraison, horaires, carte OpenStreetMap interactive
- CTA : Lien vers menus si prêt à commander
| Page | Contenu |
|---|---|
cgv.php |
12 articles : Objet, Commande, Prix/Paiement, Livraison, Matériel (prêt + 600€ pénalité), Rétractation (exclue Art. L.221-28), Responsabilité, Allergènes (Règlement INCO), RGPD, Propriété intellectuelle, Droit applicable + Médiation, Dispositions générales |
mentions-legales.php |
Éditeur (SIRET, RCS, TVA, gérant), Hébergeur (OVHcloud), Propriété intellectuelle, RGPD détaillé (tableau finalités/bases/durées/droits), Cookies (tableau types/durée/consentement), Responsabilité, Droit applicable, Contact DPO/CNIL |
- Dashboard KPI : 6 cartes (en attente, préparation, livraison, terminées, avis à modérer, menus actifs)
- Gestion Commandes : Tableau filtrable par statut/client, actions (voir détail, changer statut, annuler)
- Cycle Statuts (6 étapes) :
en attente→acceptée→en préparation→en livraison→livrée→attente retour matériel→terminée - Annulation Employé : Motif + mode contact (GSM/Email) obligatoires (règle ECF)
- Modération Avis : Liste
EN_ATTENTEavec boutons Valider/Refuser → statutVALIDE/REFUSE - Gestion Menus : Tableau CRUD (activer/désactiver, modifier, nouveau)
- Horaires : Grille Lundi-Dimanche (ouverture/fermeture, ouvert/fermé), sauvegarde groupée
- Détail Commande (
employe/commande-detail.php) : Infos client, menu, facturation, matériel, historique statuts, actions
- Hérite de tout l'espace employé + fonctionnalités exclusives :
- Gestion Équipe : Tableau employés (nom, email, téléphone, rôle, statut, date création)
- Création compte employé : formulaire complet, MDP généré affiché une seule fois (copier), email notification (sans MDP)
- Activation/Désactivation (bloquer) employé via AJAX
- Protection : admin ne peut pas se bloquer lui-même
- Statistiques NoSQL (MongoDB) :
- Graphique 1 : Nombre de commandes par menu (Chart.js, agrégation
statistiques_commandes) - Graphique 2 : Chiffre d'affaires par menu (Chart.js, sommes
chiffre_affaires) - Filtres : Par menu, date début/fin
- Tableau détaillé : Menu, thème, régime, nb commandes, total personnes, CA, frais livraison
- Graphique 1 : Nombre de commandes par menu (Chart.js, agrégation
- Navigation : Lien vers vue employé + espace client
- Formulaire public : Sujet (select), Email, Message (textarea min 20 car)
- Validation : Côté client (HTML5) + serveur (CSRF, longueur, format email)
- Envoi email : Notification équipe (
contact@viteetgourmand.fr) avec Reply-To expéditeur - Message flash : Succès animé ou erreurs inline
- Infos côte : Coordonnées, livraison, horaires, carte OpenStreetMap interactive
- CTA : Lien vers menus si prêt à commander
- Filtres dynamiques AJAX (sans rechargement) :
- Recherche texte (nom/description)
- Prix maximum (slider) + Fourchette min/max (inputs)
- Thème (Noël, Pâques, Classique, Événement, Mariage)
- Régime (Classique, Végétarien, Vegan, Sans gluten)
- Nombre de personnes minimum (slider)
- Tri : Prix croissant/décroissant, Personnes, Nom A-Z
- Pagination (12 par page)
- Sidebar responsive : Fixe desktop, Drawer mobile avec toggle
- Grille responsive
auto-fit minmax(320px)
- Galerie : Image principale + miniatures cliquables (navigation clavier)
- Composition plats groupés : Entrées / Plats / Desserts
- Allergènes par plat (tags) + Liste globale unique
- Conditions délai/stockage mises en évidence (boîte alert)
- Stock disponible temps réel + alerte rupture
- Calcul prix dynamique : Sync quantité header ↔ sidebar
- Remise 10% auto si quantité ≥ minimum + 5 personnes
- CTA Commander : Connecté = direct, Visiteur = redirection login
| Page | Fonctionnalité |
|---|---|
commander.php |
Formulaire 3 sections (Client pré-rempli, Livraison, Quantité) + Récapitulatif sticky |
commander-confirm.php |
Validation finale avec steps, détail facturation complet |
commander-success.php |
Confirmation animée, numéro commande, étapes suivantes, info paiement |
Calculs Métier (ECF) :
- ✅ Frais livraison : Gratuit Bordeaux (33000,33100,33200,33300,33800), sinon 5,00 € + 0,59 €/km
- ✅ Remise 10% : Auto si nb_personnes ≥ min_menu + 5
- ✅ Double insertion : MySQL (relationnel) + MongoDB (
statistiques_commandes) - ✅ Historique statut : Initial
en attentetracé danscommande_historique_statut
- Mes Commandes : Cartes avec badge statut, détail prix, actions (Voir détail, Annuler si
en attente, Donner avis siterminée) - Mon Profil : Modification nom/prénom/GSM/adresse (email protégé)
- Sécurité : Changement MDP avec validation force actuelle/nouveau/confirmation
- Modales AJAX : Détail commande (
api/commande-detail.php), Confirmation annulation, Dépôt avis
- Navbar fixe : Effet scroll (ombre + compact), Hamburger mobile accessible (ARIA)
- Footer dynamique : Horaires Lundi-Dimanche depuis BDD, mentions légales, CGV
- CSS Modulaire : 11 fichiers sections + variables CSS, responsive mobile-first
- Formulaires : Labels associés, messages d'erreur ARIA, validation HTML5 + JS
- Contraste : Palette Terracotta/Crème/Anthracite/Ocre conforme
api/menus-filtres.php: POST JSON (filtres, pagination, tri) → menus filtrésapi/commande-detail.php: GET HTML fragment pour modale détail commande
├── actions/ # Traitements formulaires (POST)
│ ├── ajouter_avis.php
│ ├── connexion.php
│ ├── inscription.php
│ ├── deconnexion.php
│ ├── mot-de-passe-oublie.php
│ ├── reset-password.php
│ ├── contact.php
│ ├── employe/ # Actions employé
│ │ ├── change-statut.php
│ │ ├── annuler-commande.php
│ │ ├── moderer-avis.php
│ │ ├── update-horaires.php
│ │ └── toggle-menu.php
│ └── admin/ # Actions admin
│ ├── add-employe.php
│ └── toggle-employe.php
├── api/ # Endpoints AJAX
│ ├── commande-detail.php
│ └── menus-filtres.php
├── config/ # Configuration & connexions
│ ├── database.php # PDO MySQL
│ ├── mongo.php # MongoDB Manager + helpers (insert, query, aggregate)
│ ├── require_auth.php # Middleware auth, rôles, CSRF, validation MDP
│ └── setup_db.php # Initialisation MySQL + MongoDB
├── docs/ # Documents de cadrage & sujet ECF
├── includes/ # Composants réutilisables
│ ├── navbar.php # Navbar fixe + hamburger mobile
│ └── footer.php # Footer + horaires dynamiques
├── public/ # Ressources statiques
│ ├── css/
│ │ ├── style.css # Point d'entrée (imports)
│ │ └── sections/ # 14 fichiers CSS modulaires (+ contact.css, + legal.css, + admin.css)
│ ├── img/ # Images (AVIF/WebP/JPEG) + SVG
│ └── js/ # Scripts frontend
├── repositories/ # Repository Pattern (Accès données)
│ ├── BaseRepository.php
│ ├── MenuRepository.php # CRUD + filtres dynamiques + détails complets
│ ├── AvisRepository.php # CRUD + modération (EN_ATTENTE/VALIDE/REFUSE)
│ ├── UtilisateurRepository.php # CRUD + rôles + toggle actif
│ ├── CommandeRepository.php # CRUD + double-insertion MySQL/MongoDB + historique
│ ├── HoraireRepository.php # CRUD horaires Lundi-Dimanche
│ └── StatistiqueRepository.php # Agrégations MongoDB (graphiques, CA)
├── sql/ # Scripts SQL
│ ├── schema.sql # Schéma complet (13 tables, FK, index, ENUM)
│ └── fixtures.sql # Jeu d'essai (6 users, 5 menus, 14 plats, 14 allergènes, 3 commandes, 5 avis, 7 horaires)
├── .env.example
├── .gitignore
├── ECF_SUBJECT.md # Cahier des charges complet
├── PROJET_CONTEXT.md # Contexte projet pour IA
├── README.md # Ce fichier
├── index.php # Page d'accueil
├── menus.php # Catalogue avec filtres AJAX
├── menu-detail.php # Détail menu complet
├── commander.php # Étape 1 commande
├── commander-confirm.php # Étape 2 confirmation
├── commander-success.php # Succès commande
├── espace.php # Espace client (3 onglets + modales)
├── connexion.php # Login
├── inscription.php # Inscription
├── mot-de-passe-oublie.php # Demande reset
├── reset-password.php # Nouveau MDP
├── contact.php # Formulaire contact + carte
├── cgv.php # Conditions Générales de Vente
├── mentions-legales.php # Mentions légales (LCEN, RGPD, cookies)
├── employe/
│ ├── dashboard.php # Dashboard employé (commandes, avis, menus, horaires)
│ └── commande-detail.php # Détail commande pour équipe
├── admin/
│ └── dashboard.php # Dashboard admin (tout employé + équipe + stats MongoDB)
main: Branche principale stable (code prêt pour la livraison / jury).dev: Branche d'intégration et de développement (branche courante).feature/*: Branches pour chaque fonctionnalité spécifique.
- Page Contact : Formulaire public + envoi email notification équipe
- Espace Employé (
employe/) : Dashboard, gestion commandes (cycle 6 statuts), modération avis, CRUD menus/plats/allergènes/horaires - Espace Administrateur (
admin/) : Dashboard stats MongoDB (graphiques commandes/menu, CA par période/filtres), gestion comptes employés (création, désactivation) - Mentions Légales & CGV : Pages statiques
- Emails réels : Intégration PHPMailer (bienvenue, confirmation commande, reset MDP, notification avis, contact)
- Géocodage précis : API Nominatim/OpenStreetMap pour calcul distance km exact
- Tests : PHPUnit (repositories), Cypress/Playwright (E2E auth + commande)
Projet réalisé dans le cadre de l'ECF DWWM — Titre Professionnel Développeur Web et Web Mobile.
Sujet complet disponible dans docs/Enonce ECF.pdf et ECF_SUBJECT.md.
© 2026 Vite & Gourmand — Bordeaux