Skip to main content

Plugin — Formulaire Logger

Formulaire Logger est un plugin WordPress sur mesure (version 1.2.0, auteur : Eliott) qui enregistre en temps réel tous les événements liés aux formulaires Elementor : soumissions, validations, erreurs, envois d'email, et interactions JavaScript côté client.


Vue d'ensemble

flowchart TD
A[Utilisateur interagit avec le formulaire] --> B{Origine de l'événement}
B -- PHP / Elementor --> C[Hook WordPress]
B -- JavaScript --> D[AJAX fl_log_event]
C --> E[fl_log écrit dans formulairelogs.txt]
D --> E
E --> F[Page admin WordPress : Form Logs]

1. Fichier de log

Tous les événements sont écrits dans :

/wp-content/formulairelogs.txt

Chaque ligne suit ce format :

[YYYY-MM-DD HH:MM:SS] [TYPE] User: <login> | IP: <ip> | Page: <referrer> | <message> | Data: {...}
  • User : login WordPress si connecté, sinon Visiteur anonyme
  • IP : adresse IP du client
  • Page : URL de provenance (HTTP_REFERER)
  • Data : JSON des données complémentaires (champs, erreurs, fichiers…)

2. Hooks PHP — événements Elementor

HookType de logDonnées enregistrées
elementor_pro/forms/new_recordELEMENTOR_SUBMITNom du formulaire, état de chaque champ (renseigné / vide / [MASQUÉ] pour les mots de passe)
elementor_pro/forms/mail_sentELEMENTOR_EMAIL_SENTNom du formulaire, destinataire, sujet
elementor_pro/forms/mail_errorELEMENTOR_EMAIL_FAILEDNom du formulaire, destinataire
elementor_pro/forms/validation_errorELEMENTOR_INVALIDNom du formulaire, liste des erreurs
wp_mail_failedEMAIL_FAILEDMessage d'erreur WP
Confidentialité

Les valeurs des champs ne sont jamais loguées — seul leur état (renseigné / vide) est enregistré.


3. Endpoint AJAX — logs côté JavaScript

Le plugin expose un endpoint AJAX sécurisé pour recevoir les événements JavaScript :

Paramètre POSTDescription
actionfl_log_event
nonceNonce WordPress (généré côté serveur via wp_create_nonce('fl_nonce'))
eventNom de l'événement (ex. field_focus, file_too_large)
fieldNom du champ concerné
messageMessage descriptif
extraTableau de données complémentaires

Le type de log généré est JS_<EVENT> (ex. JS_FIELD_FOCUS).


Le script est injecté en pied de page sur toutes les pages du site. Il surveille les formulaires Elementor et envoie des logs via AJAX pour chaque interaction.

Événements loggés

Événement JSDéclencheurType de log
field_focusFocus sur un champJS_FIELD_FOCUS
field_changeModification d'un champJS_FIELD_CHANGE
field_empty_blurChamp quitté videJS_FIELD_EMPTY_BLUR
field_invalidValidation HTML5 échouéeJS_FIELD_INVALID
file_bad_formatFichier avec extension non autoriséeJS_FILE_BAD_FORMAT
file_too_largeFichier dépassant la taille maximaleJS_FILE_TOO_LARGE
resetFormulaire réinitialiséJS_RESET
elementor_submitSoumission du formulaireJS_ELEMENTOR_SUBMIT
elementor_successSoumission réussieJS_ELEMENTOR_SUCCESS
elementor_errorErreur serveur ElementorJS_ELEMENTOR_ERROR
elementor_invalidChamps invalides (client)JS_ELEMENTOR_INVALID
step_errorErreur sur un step multi-étapesJS_STEP_ERROR
js_errorErreur JavaScript globale (window.onerror)JS_JS_ERROR

Validation des fichiers (côté client)

Le script valide les fichiers uploadés avant soumission :

  • Formats autorisés : jpg, jpeg, png, pdf, doc, docx, odt, tiff
  • Taille maximale : lue depuis l'attribut data-max-size du champ Elementor (défaut : 50 MB)

En cas de fichier invalide :

  1. Une alert() informe l'utilisateur
  2. Le champ est réinitialisé
  3. Les boutons "Suivant" et "Soumettre" sont désactivés
  4. L'événement est logué

5. Page d'administration

Accessible depuis Tableau de bord WordPress → Form Logs.

Fonctionnalités :

ActionDescription
AffichageLogs affichés en ordre chronologique inverse, avec coloration syntaxique
TéléchargementExport du fichier formulairelogs.txt via ?fl_download=1
VidageEffacement de tous les logs (confirmation requise + nonce CSRF)

Coloration des logs

CouleurTypes de logs
Vert #4ec94e_EMAIL_SENT, _SUCCESS
Rouge #f44747_FAILED, _INVALID, _ERROR, STEP_ERROR
Orange #ff8c00FILE_TOO_LARGE, FILE_BAD_FORMAT, [SECURITY]
Bleu #9cdcfe[JS_*] (tous les événements JavaScript)
Gris #d4d4d4Autres

6. Sécurité

  • Chaque requête AJAX est vérifiée par un nonce WordPress (fl_nonce). Un nonce invalide génère un log de type SECURITY et retourne une erreur.
  • La page admin est protégée par current_user_can('manage_options').
  • Le vidage des logs est protégé par un nonce CSRF (fl_clear_logs).
  • Les valeurs des champs formulaire ne sont jamais loguées en clair.