Polaszyk Booking est une plateforme type Airbnb permettant à des utilisateurs de rechercher et réserver des logements, et à des loueurs de publier et gérer leurs annonces.
Visiteur connecté. Peut rechercher, réserver, noter et utiliser la messagerie.
✓ 2FA optionnellePublie des annonces et gère ses réservations. Statut obtenu après candidature validée.
⚠ 2FA obligatoireValide les candidatures loueurs et les annonces publiées.
⚠ 2FA obligatoireAccès complet : utilisateurs, annonces, réservations, journal d'audit.
⚠ 2FA obligatoireInscription — /public/register.php
- Prénom, nom, email, mot de passe
- Un email de vérification est envoyé automatiquement
- Le compte reste inactif jusqu'au clic sur le lien
- Si l'email n'arrive pas :
/public/resend-verification.php
Connexion — /public/login.php
- Email + mot de passe classique
- Bouton "Continuer avec Google" (OAuth)
- Si 2FA activée : étape de vérification supplémentaire
- Protection contre le brute-force (blocage après plusieurs échecs)
Double authentification — /public/settings.php?tab=securite
Deux méthodes disponibles :
- Email : code à 6 chiffres envoyé par email, valable 15 min (max 3 renvois)
- Google Authenticator (TOTP) : scan d'un QR code, code renouvelé toutes les 30s
- Option "Se souvenir 30 jours" sur l'appareil en cours
- Max 5 tentatives de code incorrectes, puis renvoi vers le login
Mot de passe oublié — /public/forgot-password.php
- Saisir son email → lien envoyé si le compte existe
- Lien valable 1 heure
- Limité à 5 demandes par heure par IP
- Message générique affiché (ne révèle pas si l'email existe)
Page centrale du site. Combine une carte interactive et des filtres pour trouver un logement.
- Galerie photos (principale + secondaires, WebP optimisé)
- Titre, type de logement, ville, surface, nombre de chambres
- Description complète + liste des équipements
- Carte de localisation intégrée
- Note moyenne et avis des précédents voyageurs
- Profil de l'hôte avec lien vers sa page publique
- Formulaire de réservation : dates, voyageurs, calcul du prix total
Statuts d'une réservation
Étapes
- Voyageur choisit dates + voyageurs → demande créée en en_attente
- Loueur reçoit notification + email → accepte ou refuse
- Si acceptée : toutes les autres demandes chevauchantes sont automatiquement refusées
- Voyageur déclenche le paiement Stripe → redirigé vers page sécurisée Stripe
- Après paiement → statut passe à payée
Annuler
Le voyageur peut annuler une réservation depuis /public/cancel-reservation.php?id=XXX ou depuis "Mes voyages".
- Messagerie interne entre voyageurs et loueurs
- Mise à jour automatique toutes les 3 secondes (pas de rechargement de page)
- Avatars des contacts dans la liste et dans les bulles de chat
- Indicateur Vu / Reçu sur les messages envoyés
- Badge de messages non lus dans la barre de navigation
- Un message automatique est créé lors de chaque nouvelle demande de réservation
L'interface est entièrement traduite en 5 langues. La langue est détectée automatiquement à partir du navigateur de l'utilisateur, sans aucune configuration requise. Le choix est mémorisé en session et dans un cookie de 30 jours.
en, en-US, en-GB…de, de-DE, de-AT, de-CH…it, it-IT, it-CH…es, es-ES, es-MX, es-AR…Priorité de détection
Paramètre GET ?lang=xx
L'utilisateur clique sur un bouton du sélecteur (FR / EN / DE / IT / ES). Priorité maximale — mémorisé immédiatement en session et cookie.
Session PHP
Si une langue a déjà été choisie dans la session en cours, elle est réutilisée.
Cookie lang
Si la session a expiré mais que le cookie est encore valide (30 jours), la langue préférée est restaurée.
En-tête Accept-Language du navigateur
Détection automatique à la première visite. Le navigateur envoie ses préférences (ex: de-DE,de;q=0.9,en;q=0.8) — la première langue supportée est sélectionnée.
Fallback : Français
Si aucune correspondance n'est trouvée, le français est utilisé. Si une clé est absente dans la langue active, le français est utilisé comme langue de secours.
Architecture technique
| Fichier | Rôle |
|---|---|
includes/lang.php | Moteur i18n : détection, chargement, fonction t(), sélecteur HTML |
lang/fr.php | Traductions françaises (~80 clés) — langue par défaut et fallback |
lang/en.php | Traductions anglaises |
lang/de.php | Traductions allemandes |
lang/it.php | Traductions italiennes |
lang/es.php | Traductions espagnoles |
Utilisation dans le code
Toutes les chaînes visibles par l'utilisateur passent par la fonction t($clé, $params) :
t('nav.home') → "Accueil" / "Home" / "Startseite"…t('error.too_many_min', [5]) → "Trop de tentatives. Réessayez dans 5 minute(s)."Les strings JavaScript sont injectées via un objet
_t = {…} généré en PHP côté serveur.
Ajouter une nouvelle langue
- Créer
lang/xx.phpen copiantlang/en.phpet en traduisant les valeurs - Ajouter
'xx'au tableauLANG_SUPPORTEDdansincludes/lang.php - Ajouter le label dans le tableau
$labelsdelang_switcher_html() - Le sélecteur et la détection automatique fonctionnent immédiatement
| Page | URL | Description |
|---|---|---|
| Tableau de bord | /loueur/dashboard.php | Annonces actives, demandes en attente, stats |
| Créer une annonce | /loueur/add-listing.php | Formulaire complet, jusqu'à 30 photos |
| Modifier une annonce | /loueur/edit-listing.php?id=XXX | Repasse en "en attente" après modif |
| Gérer une réservation | /loueur/edit-reservation.php?id=XXX | Accepter ou refuser une demande |
| Répondre à un avis | /loueur/reply-avis.php?avis_id=XXX | Réponse publique visible sur la fiche |
| Page | URL | Description |
|---|---|---|
| Tableau de bord | /moderateur/dashboard.php | Vue d'ensemble des éléments à valider |
| Candidatures loueurs | /moderateur/candidatures.php | Liste des demandes de passage loueur |
| Examiner candidature | /moderateur/review-candidature.php?id=XXX | Accepter = rôle loueur + 2FA activée auto |
| Valider annonce | /moderateur/review-listing.php?id=XXX | Approuver ou refuser une annonce |
| Page | URL | Description |
|---|---|---|
| Tableau de bord | /admin/dashboard.php | Stats globales : users, annonces, revenus |
| Utilisateurs | /admin/users.php | Tous les comptes, changement de rôle |
| Fiche utilisateur | /admin/user-detail.php?id=XXX | Historique, activité, statut |
| Annonces | /admin/listings.php | Toutes les annonces de la plateforme |
| Réservations | /admin/reservations.php | Vue complète de toutes les réservations |
| Conversations | /admin/conversations.php | Lecture de tous les échanges |
| Journal d'audit | /admin/audit-log.php | Historique de toutes les actions sensibles |
Inscription / Connexion
L'utilisateur crée un compte ou se connecte via Google. Si 2FA activée, vérification du code.
Recherche d'un logement
Filtres (ville, dates, prix, services) + carte interactive. 12 résultats par page.
Consultation de la fiche
Photos, description, équipements, avis, localisation, profil de l'hôte.
Demande de réservation
Choix des dates et du nombre de voyageurs. La demande est créée en en_attente. Le loueur reçoit une notification.
Loueur accepte ou refuse
Si acceptée, toutes les autres demandes chevauchantes sont automatiquement refusées.
Paiement Stripe
Le voyageur paie via la page sécurisée Stripe. Réservation marquée payée.
Séjour terminé → Avis
Le voyageur laisse une note (1-5) et un commentaire. Le loueur peut y répondre publiquement.
Pages publiques (sans connexion)
| Page | URL |
|---|---|
| Accueil | /public/index.php |
| Recherche | /public/search.php |
| Fiche annonce | /public/property.php?id=XXX |
| Profil hôte | /public/host.php?id=XXX |
| Connexion | /public/login.php |
| Inscription | /public/register.php |
| Mot de passe oublié | /public/forgot-password.php |
Pages connectées
| Page | URL |
|---|---|
| Mes voyages | /public/mes-voyages.php |
| Favoris | /public/favoris.php |
| Messagerie | /visiteur/messages.php |
| Notifications | /visiteur/notifications.php |
| Paramètres | /public/settings.php |
| Devenir loueur | /visiteur/devenir-loueur.php |
| Laisser un avis | /public/avis.php?reservation_id=XXX |
| Payer | /public/checkout.php?reservation_id=XXX |
Pages légales
| Page | URL |
|---|---|
| CGU | /public/cgu.php |
| Confidentialité | /public/confidentialite.php |
| Cookies | /public/cookies.php |