Une boîte à outils complète de conformité RGPD pour votre site LaraClassifier / JobClass. Affichez une bannière de consentement aux cookies personnalisable, enregistrez les décisions de consentement des visiteurs pour les audits de conformité, et gérez les catégories de cookies depuis le panneau d'administration.
Bannière de consentement aux cookies
Une bannière soignée et responsive avec les options Tout accepter, Tout refuser et Personnaliser. Sept variantes de position, dont un mode modal.
Catégories granulaires
Quatre catégories de cookies (Essentiels, Analytique, Marketing, Préférences) avec des interrupteurs par catégorie pour les visiteurs.
Journalisation des consentements
Piste d'audit complète de chaque décision de consentement : adresse IP, user agent, action effectuée et catégories sélectionnées. Conforme à l'article 7 du RGPD.
Injection automatique
La bannière est injectée automatiquement dans toutes les pages front-end via un middleware. Aucune modification de template n'est nécessaire. Le panneau d'administration et les requêtes AJAX sont ignorés.
Cas d'usage
Conformité d'un site web UE/EEE
Votre site s'adresse à des visiteurs de l'Union européenne et doit se conformer au RGPD et à la directive ePrivacy.
- Activez la bannière de consentement aux cookies pour informer les visiteurs de l'utilisation des cookies.
- Activez la journalisation des consentements pour conserver un registre auditable de toutes les décisions de consentement.
- Liez votre page de politique de confidentialité afin que les visiteurs puissent consulter vos pratiques en matière de données.
- Configurez les interrupteurs de catégories afin que les visiteurs puissent accepter ou refuser les cookies analytiques et marketing.
Site à forte composante analytique
Vous utilisez Google Analytics, Hotjar ou des outils similaires et avez besoin du consentement de l'utilisateur avant de charger les scripts de suivi.
- Activez l'interrupteur de la catégorie Analytique.
- Lisez le cookie de consentement (
gdpr_consent, un objet JSON encodé pour l'URL, par exemple{"necessary":true,"analytics":true,...}) dans votre JavaScript avant de charger les scripts analytiques, ou écoutez l'événement navigateurgdpr:consentdéclenché surwindowlorsque le visiteur fait son choix. - Ne chargez l'analytique que lorsque
analyticsvauttrue.
Marketing & reciblage publicitaire
Vous utilisez Facebook Pixel, Google Ads ou des outils d'e-mail marketing qui déposent des cookies.
- Activez l'interrupteur de la catégorie Marketing.
- Conditionnez tous les scripts marketing/publicitaires au drapeau de consentement
marketing. - Les visiteurs peuvent retirer leur consentement à tout moment via le point de terminaison de retrait.
Prérequis
- LaraClassifier / JobClass v19.0.0 ou ultérieur
- PHP 8.3+
- MySQL 8.0+
Installation
Étape 1 : Téléverser l'add-on
Allez dans Panneau d'administration → Extensions → Add-ons, cliquez sur Téléverser un add-on et déposez le fichier .zip de l'add-on dans la zone de téléversement (50 Mo maximum).
L'archive est extraite dans extensions/addons/gdpr/ et GDPR & Cookie Consent apparaît dans la liste, désactivé.
extensions/addons/gdpr/ par FTP ou SSH : son fichier addon.json doit se trouver directement dans ce dossier.
Ouvrez ensuite Panneau d'administration → Extensions → Add-ons. La page analyse extensions/addons/ à chaque chargement : l'add-on est donc listé immédiatement (le bouton Synchroniser lance la même analyse à la demande).
Étape 2 : Activer l'add-on
Cliquez sur Activer sur la carte GDPR & Cookie Consent. C'est un add-on payant : une fenêtre demande son code d'achat, qui est vérifié avant toute autre opération. Un code invalide est refusé dans la fenêtre et rien n'est modifié.
Une fois le code accepté, l'activation se fait en une seule passe : elle crée les tables de base de données de l'add-on (ses migrations), enregistre ses permissions, exécute ses seeders et publie ses assets publics. Rechargez la page pour voir sa nouvelle entrée dans la section Add-ons de la barre latérale d'administration.
Étape 3 : Configurer
Ouvrez Panneau d'administration → RGPD depuis la section Add-ons de la barre latérale et configurez l'add-on : voir Configuration.
Code d'achat (clé de licence)
GDPR & Cookie Consent est vendu comme un produit séparé ; il possède donc son propre code d'achat (clé de licence), distinct du code d'achat de l'application principale et de celui de tout autre add-on. Il vous est demandé lorsque vous activez GDPR & Cookie Consent dans Panneau d'administration → Extensions → Add-ons.
Nos produits sont vendus sur trois plateformes. La façon dont vous recevez un code d'achat dépend de l'endroit où vous avez acheté le produit.
| Plateforme / Marketplace | Comment vous obtenez le code d'achat | Où le retrouver |
|---|---|---|
| Boutique bedigit.com Achat sur le site (Boutique) |
Généré automatiquement lorsque la commande est payée, puis envoyé par e-mail, soit dans un e-mail de licence dédié, soit dans l'e-mail de confirmation de commande. | Mon compte → Mes licences sur bedigit.com |
| Gumroad | Créé dès que Gumroad nous notifie la vente, puis envoyé dans un e-mail séparé, en plus du reçu Gumroad. | L'e-mail de licence, votre Bibliothèque Gumroad, et Mon compte → Mes licences sur bedigit.com |
| Envato Market CodeCanyon |
Délivré par Envato, pas par nous, et jamais envoyé par e-mail : vous le téléchargez vous-même depuis votre compte Envato. | Compte Envato → Downloads → License certificate & purchase code |
1. Boutique bedigit.com (achat sur le site)
- Dès que le statut de paiement de la commande passe à Payée, une clé de licence est générée automatiquement pour chaque article sous licence de la commande (une clé par unité achetée : acheter 3 unités donne 3 clés distinctes).
- Elle est envoyée par e-mail à l'adresse utilisée pour la commande, soit dans un e-mail de licence dédié, soit dans l'e-mail de confirmation de commande. Vérifiez votre boîte de réception et votre dossier spam / courrier indésirable.
- La clé reste disponible dans votre compte sous Mon compte → Mes licences. Les clés sont masquées dans la liste ; ouvrez la page de détail de la licence pour afficher et copier la clé complète, voir les domaines sur lesquels elle est activée, et désactiver un domaine pour libérer un emplacement d'activation.
- La facture correspondante se trouve sous Mon compte → Mes commandes.
2. Gumroad
- Un achat sur Gumroad génère deux e-mails distincts : le reçu Gumroad (envoyé par Gumroad, donnant accès aux fichiers) et un e-mail de clé de licence (envoyé par bedigit.com) qui contient votre code d'achat.
- L'e-mail de clé de licence est généré dès que Gumroad nous notifie la vente ; il arrive donc normalement quelques secondes après le paiement. Ici aussi, vérifiez votre boîte de réception et votre dossier spam / courrier indésirable.
- Lorsque le produit Gumroad utilise la fonctionnalité de clé de licence propre à Gumroad, la même clé apparaît également dans votre reçu Gumroad et sous Bibliothèque → votre achat sur gumroad.com.
- Utilisez la même adresse e-mail sur bedigit.com que sur Gumroad : vos clés sont alors liées automatiquement à votre compte et listées sous Mon compte → Mes licences, même si vous vous inscrivez après l'achat. Vous pouvez aussi ajouter une clé Gumroad manuellement depuis Mon compte → Mes licences Gumroad.
3. Envato Market (CodeCanyon)
- Les codes d'achat Envato sont délivrés et fournis par Envato Market, jamais envoyés par e-mail par nos soins, il n'y a donc rien à chercher dans votre dossier spam : vous récupérez le code depuis votre compte Envato.
- Connectez-vous à votre compte Envato / CodeCanyon, ouvrez la page Downloads, trouvez l'article, et choisissez License certificate & purchase code dans le menu déroulant Download. Le code est inscrit dans ce certificat.
- Un code d'achat Envato ressemble à
12345678-90ab-cdef-1234-567890abcdef(8-4-4-4-12 caractères). Il ne change jamais, et le renouvellement du support de l'article n'en délivre pas de nouveau. - Article officiel Envato : Where Is My Purchase Code?
Configuration
Tous les paramètres sont gérés dans Panneau d'administration → Add-ons → RGPD → Paramètres
(stockés dans la table settings du cœur de l'application, groupe gdpr).
Les valeurs par défaut proviennent du fichier config/gdpr.php de l'add-on.
| Paramètre | Description | Par défaut |
|---|---|---|
gdpr_enabled |
Activer ou désactiver globalement la bannière de consentement aux cookies. | true |
gdpr_cookie_lifetime |
Nombre de jours pendant lesquels le cookie de préférence de consentement est mémorisé (1–3650). | 365 |
gdpr_log_consents |
Enregistrer la décision de consentement de chaque visiteur dans la base de données à des fins d'audit de conformité. | true |
gdpr_capture_country |
Déterminer le code pays du visiteur à partir de son adresse IP (via le pilote GeoIP configuré dans LaraClassifier / JobClass) lors de la journalisation d'un consentement. La recherche s'exécute dans un job en file d'attente, et une colonne Pays est ajoutée au tableau des journaux de consentement. | false |
gdpr_banner_position |
Emplacement de la bannière sur la page (7 positions disponibles). | bottom-center |
gdpr_privacy_policy_url |
URL de votre page de politique de confidentialité, affichée sous forme de lien dans la bannière. Laissée vide, la bannière pointe vers la page active de type Politique de confidentialité de votre site (Panneau d'administration → Pages) ; aucun lien n'est affiché s'il n'y en a pas. | (vide) |
gdpr_category_analytics |
Afficher l'interrupteur de la catégorie de cookies Analytique dans le panneau des préférences. | true |
gdpr_category_marketing |
Afficher l'interrupteur de la catégorie de cookies Marketing dans le panneau des préférences. | true |
gdpr_category_preferences |
Afficher l'interrupteur de la catégorie de cookies Préférences dans le panneau des préférences. | true |
gdpr_log_retention_days |
Nombre de jours avant que les journaux de consentement et les fichiers d'archive soient définitivement supprimés (1–7300). | 730 (2 ans) |
gdpr_archive_enabled |
Lorsque cette option est activée, les journaux des mois précédents sont compressés en gzip et déplacés vers le stockage privé ; seul le mois en cours reste dans la base de données. | false |
gdpr_dedup_window_minutes |
Ne pas écrire de nouveau journal de consentement si un journal identique (même utilisateur/IP, action, catégories) a été enregistré dans cette fenêtre. Mettez 0 pour désactiver. |
5 |
gdpr_stats_cache_ttl |
Durée (en secondes) pendant laquelle les statistiques du tableau de bord mises en cache restent valides. Mettez 0 pour désactiver complètement le cache. |
900 (15 minutes) |
Valeurs par défaut du fichier de configuration
Le fichier config/gdpr.php de l'add-on (dans extensions/addons/gdpr/config/) fournit les valeurs par défaut utilisées
jusqu'au premier enregistrement de la page des paramètres. Il contient aussi quelques options sans champ dans la page des paramètres :
cookie_name(par défautgdpr_consent) : nom du cookie de consentement.archive_disk(par défautlocal) etarchive_path(par défautgdpr) : emplacement de stockage des fichiers d'archive mensuels.admin_per_page(par défaut25) : nombre de lignes par page dans la page des journaux de consentement.
Admin : Paramètres
La page des paramètres (Panneau d'administration → Add-ons → RGPD → Paramètres) requiert la permission
admin.setting.view pour s'ouvrir et admin.setting.edit pour enregistrer. Elle est organisée en quatre zones principales :
Paramètres généraux
La colonne de gauche (largeur 7/12) contient les options de configuration principales :
- Activer la bannière de cookies : interrupteur pour activer/désactiver la bannière globalement. Lorsqu'elle est désactivée, aucune bannière n'est affichée et aucune injection par le middleware n'a lieu.
- Durée de vie du cookie (jours) : champ numérique (1–3650 jours) contrôlant la durée de persistance du cookie de consentement dans le navigateur du visiteur.
- Position de la bannière : sélecteur visuel de position avec 7 positions affichées sur une maquette de navigateur. Cliquez sur une position pour la sélectionner ; le libellé se met à jour en temps réel.
- Journaliser les actions de consentement : interrupteur pour activer/désactiver la journalisation des consentements dans la base de données. Lorsqu'il est activé, chaque action Accepter/Refuser/Personnaliser/Retirer est enregistrée.
- URL de la politique de confidentialité : champ texte pour l'URL de votre page de politique de confidentialité. Si elle est renseignée, un lien “Politique de confidentialité” vers cette adresse apparaît dans la bannière. Laissée vide, la bannière pointe vers la page active de type Politique de confidentialité de votre site (Panneau d'administration → Pages), dont l'adresse s'affiche en texte indicatif dans le champ ; si cette page n'existe pas, aucun lien n'est affiché.
- Capturer le pays via l'IP : interrupteur pour enregistrer le code pays du visiteur avec chaque journal de consentement. Le pays est déterminé dans un job en file d'attente à l'aide du pilote GeoIP configuré dans LaraClassifier / JobClass : une configuration GeoIP fonctionnelle est donc nécessaire.
Sélecteur de position de la bannière
Le sélecteur de position est un élément visuel interactif représentant une fenêtre de navigateur miniature. Sept points cliquables représentent les positions disponibles :
| Position | Disposition | Description |
|---|---|---|
top-left |
Carte compacte | Carte flottante dans le coin supérieur gauche (420px de large max.) |
top-center |
Barre pleine largeur | Barre horizontale en haut de la page |
top-right |
Carte compacte | Carte flottante dans le coin supérieur droit (420px de large max.) |
middle-center |
Boîte de dialogue modale | Modale centrée avec un voile d'arrière-plan semi-transparent |
bottom-left |
Carte compacte | Carte flottante dans le coin inférieur gauche (420px de large max.) |
bottom-center |
Barre pleine largeur | Barre horizontale en bas de la page (par défaut) |
bottom-right |
Carte compacte | Carte flottante dans le coin inférieur droit (420px de large max.) |
Catégories de cookies
La colonne de droite (largeur 5/12) affiche les quatre catégories de cookies avec des interrupteurs :
- Essentiels : toujours activés, ne peuvent pas être désactivés (affichés avec un badge “Toujours actif”). Il s'agit des cookies nécessaires au fonctionnement du site (sessions, jetons CSRF, etc.).
- Analytique : activable. Lorsqu'elle est activée, les visiteurs peuvent accepter ou refuser les cookies analytiques (Google Analytics, Hotjar, etc.).
- Marketing : activable. Lorsqu'elle est activée, les visiteurs peuvent accepter ou refuser les cookies marketing (Facebook Pixel, reciblage publicitaire, etc.).
- Préférences : activable. Lorsqu'elle est activée, les visiteurs peuvent accepter ou refuser les cookies de préférences (langue, thème, personnalisation, etc.).
Les trois catégories facultatives sont activées par défaut : tant que vous n'en désactivez pas une et n'enregistrez pas les paramètres, elle est proposée aux visiteurs dans la bannière et apparaît activée dans cette carte.
Journaux & rétention
Une troisième carte pleine largeur, sous les deux colonnes existantes, contrôle la rétention des données et les performances :
- Archive mensuelle des journaux : interrupteur. Lorsqu'il est activé, seuls les journaux du mois en cours restent dans la base de données ; les mois précédents sont compressés en gzip et déplacés vers le stockage privé (voir Admin : Archives). Un raccourci vers la page Archives apparaît à côté de l'interrupteur.
- Rétention des journaux (jours) : entier (1–7300). Les lignes de la base de données et les fichiers d'archive plus anciens que cette valeur
sont définitivement supprimés par la tâche quotidienne
gdpr:purge-logs. Le RGPD recommande généralement 2 à 6 ans pour les preuves de consentement. - Fenêtre de déduplication : entier en minutes (0–1440). Si une entrée de consentement identique existe pour le
même utilisateur/IP dans cette fenêtre, la nouvelle écriture est ignorée et l'enregistrement existant est réutilisé. Mettez
0pour désactiver. - TTL du cache des statistiques : entier en secondes (0–86400). Durée pendant laquelle les statistiques du tableau de bord mises en cache restent valides.
Le cache est automatiquement invalidé dès qu'un journal de consentement est créé ou supprimé. Mettez
0pour désactiver la mise en cache. - Vider le cache des statistiques maintenant : bouton qui purge les statistiques mises en cache à la demande (utile après des suppressions en masse ou des imports).
Statistiques d'aperçu des consentements
En haut de la page des paramètres, cinq cartes de statistiques affichent les métriques de consentement des 30 derniers jours :
- Total des consentements : nombre total d'actions de consentement enregistrées
- Tout accepté : visiteurs ayant cliqué sur “Tout accepter”
- Tout refusé : visiteurs ayant cliqué sur “Tout refuser”
- Personnalisé : visiteurs ayant enregistré des préférences personnalisées
- Taux d'acceptation : pourcentage de “Tout accepté” par rapport au total des consentements
Ces statistiques sont mises en cache pendant gdpr_stats_cache_ttl secondes (15 minutes par défaut) pour garder la page rapide sur
des bases de données contenant des millions de lignes.
Admin : Journaux de consentement
La page Journaux de consentement (Panneau d'administration → Add-ons → RGPD → Journaux de consentement, permission admin.gdpr.view) fournit une piste d'audit complète
de chaque décision de consentement des visiteurs, comme l'exige l'article 7 du RGPD. La page est entièrement pilotée en AJAX : le filtrage,
la pagination, la suppression en ligne et les actions groupées rafraîchissent tous le tableau sur place sans rechargement complet.
Carte de statistiques
Une carte dédiée en haut de la page affiche quatre mini-cartes de statistiques pour les 30 derniers jours (indépendantes des filtres du tableau ci-dessous) :
- Total des consentements (couleur neutre)
- Tout accepté (couleur succès/vert)
- Tout refusé (couleur danger/rouge)
- Taux d'acceptation (couleur d'accent, affiché en pourcentage)
Ces chiffres sont mis en cache pendant gdpr_stats_cache_ttl secondes et se rafraîchissent automatiquement lorsqu'un journal est
créé ou supprimé.
Actions de la page
L'en-tête de la page expose trois boutons d'action soumis à permission :
- Archives (affiché uniquement lorsque le mode archive est activé) : ouvre le navigateur d'archives mensuelles
(voir ci-dessous). Nécessite
admin.gdpr-archive.view. - Exporter en CSV : télécharge un fichier CSV des lignes actuellement filtrées, avec un BOM UTF-8 pour la compatibilité
avec Excel. Colonnes :
id,created_at,user_id,user_name,user_email,ip_address,user_agent,action,categories(JSON). Nécessiteadmin.gdpr.export. - Purger maintenant : met en file d'attente le job
PurgeConsentLogsJobpour supprimer immédiatement les lignes de la base de données et les fichiers d'archive au-delà de la période de rétention (demande une confirmation). Le job s'exécute sur votre connexion de file d'attente. Nécessiteadmin.gdpr.delete.
Filtres
Tous les filtres sont alignés sur une seule ligne dans l'en-tête de la carte et déclenchent un rafraîchissement AJAX :
- Recherche (avec un délai de 300 ms) : filtre par adresse IP, nom d'utilisateur ou e-mail de l'utilisateur.
- Action : liste déroulante avec
accepted_all,rejected_all,customized,withdrew. - Date de début et Date de fin : sélecteurs natifs
<input type="date">qui appliquent une plagewhereDate(created_at, …).
Le bouton Exporter en CSV respecte les filtres actuellement appliqués.
Tableau des journaux
Un tableau paginé (25 enregistrements par page par défaut) avec les colonnes suivantes :
| Colonne | Description |
|---|---|
| Sélection | Case à cocher de ligne + “tout sélectionner” dans l'en-tête. Affichée uniquement lorsque l'utilisateur possède admin.gdpr.delete. |
| Visiteur | Avatar de l'utilisateur + nom/e-mail (si authentifié) ou libellé “Invité” (si anonyme). |
| Adresse IP | Adresse IP du visiteur, affichée en police monospace/code. |
| Pays | Drapeau et code pays (nom complet dans une infobulle). Affichée uniquement lorsque Capturer le pays via l'IP est activé. |
| Action | Badge coloré : Tout accepté (vert), Tout refusé (rouge), Personnalisé (jaune), Retiré (gris). |
| Catégories | Badges en ligne pour chaque catégorie indiquant l'état activé (plein) ou désactivé (contour). |
| Date | Temps relatif lisible (ex. “il y a 2 heures”) avec la date complète dans une infobulle. |
| Actions | Icône de corbeille par ligne qui supprime l'entrée via AJAX après une demande de confirmation. |
Suppression groupée
Cocher une ou plusieurs cases de ligne fait apparaître une barre d'actions groupées flottante en haut de la liste. Cliquez sur Supprimer la sélection et confirmez l'invite SweetAlert pour supprimer toutes les lignes sélectionnées en une seule requête AJAX. La sélection est réinitialisée et le tableau se rafraîchit en cas de succès.
Déduplication
Avant d'insérer une nouvelle ligne, GdprService::logConsent() recherche un journal récent identique (même
user_id ou IP, même action, mêmes catégories) créé dans la fenêtre
gdpr_dedup_window_minutes. Si un tel journal est trouvé, l'enregistrement existant est renvoyé et aucune nouvelle ligne n'est
écrite. Cela évite que le tableau ne se remplisse lorsqu'un visiteur recharge une page ou bascule rapidement son consentement.
État vide
Lorsqu'aucun journal ne correspond aux filtres actuels, un état vide convivial est affiché avec une grande icône et un message expliquant que les enregistrements apparaîtront dès que des visiteurs interagiront avec la bannière.
Admin : Archives
La page Archives (Panneau d'administration → Add-ons → RGPD → Archives) est toujours listée dans la barre latérale.
Les nouvelles archives ne sont créées que lorsque Archivage mensuel des journaux (gdpr_archive_enabled) est activé : tant qu'il
est désactivé, la page l'indique par un message, avec un raccourci vers la page des paramètres, et les archives créées auparavant restent listées et
téléchargeables. Elle liste tous les fichiers d'archive mensuels gzippés trouvés sous
storage/app/gdpr/{year}/{month}/consent-logs-{year}-{month}.csv.gz (disque local par défaut).
Comment les archives sont créées
Chaque 1er du mois à 00:05, la commande planifiée gdpr:archive-monthly s'exécute (si le paramètre
d'archive est activé). Elle effectue les opérations suivantes pour chaque mois antérieur au mois en cours qui ne possède pas encore
de fichier d'archive :
- Diffuse chaque journal de ce mois dans un tampon CSV (1000 lignes à la fois).
- Compresse le CSV en gzip et l'écrit sur le disque privé au chemin indiqué ci-dessus.
- Supprime les lignes archivées de
gdpr_consent_logspar lots de 1000, dans une seule transaction de base de données. - Enfin, élague tous les fichiers d'archive plus anciens que
gdpr_log_retention_days.
Parcourir les archives
La page d'administration regroupe les fichiers par année dans une liste repliable. Chaque ligne affiche le mois, le nom du fichier, la taille du fichier et
l'horodatage de l'archive, ainsi qu'un bouton Télécharger qui renvoie le fichier gzip au navigateur. L'accès
à la navigation comme au téléchargement est soumis à permission (admin.gdpr-archive.view et
admin.gdpr-archive.download).
year / month /
filename à l'aide de motifs regex stricts et renvoie une erreur 404 pour tout ce qui se trouve en dehors du
répertoire de stockage gdpr/.
CLI & planification
L'add-on enregistre deux commandes Artisan et leurs entrées planifiées correspondantes. Les deux sont câblées automatiquement
dans GdprServiceProvider::boot(), aucune modification de
routes/console.php n'est nécessaire.
| Commande | Planification | Rôle |
|---|---|---|
gdpr:purge-logs |
Chaque jour à 00:00 | Distribue PurgeConsentLogsJob : supprime les lignes de la base de données plus anciennes que gdpr_log_retention_days,
élague les fichiers d'archive expirés et vide le cache des statistiques. |
gdpr:archive-monthly [--force] |
Le 1er de chaque mois à 00:05 | Distribue ArchiveMonthlyConsentLogsJob : archive chaque mois passé terminé, puis élague
les archives expirées. Ne fait rien du tout lorsque gdpr_archive_enabled est désactivé, sauf si
--force est passé. |
Les deux commandes exécutent leur job de façon synchrone, dans la commande elle-même : aucun worker de file d'attente n'est nécessaire pour les exécutions planifiées
(seul le bouton Purger maintenant de la page des journaux de consentement place le job de purge dans votre file d'attente). La planification
ne se déclenche que si la tâche cron de LaraClassifier / JobClass (* * * * * cd /path-to-your-site && php artisan schedule:run >> /dev/null 2>&1)
est en place sur votre serveur. Vérifiez que les tâches sont enregistrées avec php artisan schedule:list.
Front-end : Bannière de cookies
La bannière de consentement aux cookies est un composant HTML/CSS/JS autonome qui est injecté automatiquement
dans chaque page front-end via le middleware InjectCookieBanner.
Vue principale de la bannière
La vue principale affiche :
- Icône de cookie : une illustration de cookie en SVG inline
- Titre : “Préférences de cookies”
- Message : une brève explication de l'utilisation des cookies
- Lien vers la politique de confidentialité : pointe vers l'URL configurée dans les paramètres ou, si ce champ est vide, vers la page active Politique de confidentialité de votre site ; masqué si aucune des deux n'existe
- Trois boutons d'action :
- Tout accepter (bouton principal sombre) : accepte toutes les catégories de cookies
- Tout refuser (bouton secondaire gris) : refuse tous les cookies non essentiels
- Personnaliser (bouton fantôme/texte) : ouvre le panneau des préférences
Positions de la bannière
La bannière adapte sa disposition en fonction de la position configurée :
- Positions pleine largeur (
top-center,bottom-center) utilisent une disposition flex horizontale avec le contenu et les boutons côte à côte. Largeur max. 860px, centrée. - Positions en coin (
top-left,top-right,bottom-left,bottom-right) utilisent une disposition en carte compacte (420px max.) avec le contenu empilé. - Position modale (
middle-center) centre la bannière avec un voile d'arrière-plan semi-transparent, fonctionnant comme une boîte de dialogue modale (520px max.).
Panneau des préférences
Cliquer sur “Personnaliser” fait passer de la vue principale au panneau des préférences (sans rechargement de page). Le panneau affiche :
- Bouton Retour avec une icône chevron : revient à la vue principale de la bannière
- Liste des catégories (défilante, hauteur max. 280px) avec une ligne par catégorie activée :
- Nom et description de la catégorie
- Catégories obligatoires : affichent un badge “Toujours actif” (pas d'interrupteur)
- Catégories facultatives : affichent un interrupteur CSS personnalisé
- Bouton Enregistrer les préférences : enregistre les catégories sélectionnées et ferme la bannière
Animations
La bannière utilise des animations CSS fluides :
- Glissement depuis le bas pour les positions en bas
- Glissement depuis le haut pour les positions en haut
- Fondu + mise à l'échelle pour la position modale centrée
- Animations inversées lorsque la bannière est fermée
Design responsive
Sur les écrans de moins de 768px :
- Les barres pleine largeur passent en disposition verticale (empilée)
- Les cartes en coin s'étendent sur toute la largeur
- Les boutons d'action s'empilent verticalement et occupent toute la largeur
Traductions
Des fichiers de traduction sont fournis pour 18 langues (ar, bn, de, en, es, fr, he, hi, it, ja, ka, pt, ro, ru, th, tr, uk, zh).
Toutes les chaînes utilisent le préfixe d'espace de noms gdpr::.
Clés de traduction
| Section | Motif de clé | Description |
|---|---|---|
| Catégories | gdpr::messages.categories.* |
Noms et descriptions des catégories (necessary, analytics, marketing, preferences) |
| Actions | gdpr::messages.actions.* |
Libellés des actions de consentement (accepted_all, rejected_all, customized, withdrew) |
| Positions | gdpr::messages.positions.* |
Libellés des positions de la bannière pour le sélecteur admin |
| Front-end | gdpr::messages.front.* |
Chaînes de l'interface de la bannière (titre, message, libellés des boutons, lien de confidentialité) |
| Paramètres admin | gdpr::messages.admin.settings.* |
Libellés, indications et titres de sections de la page des paramètres |
| Journaux de consentement admin | gdpr::messages.admin.consent_logs.* |
Libellés, en-têtes de colonnes et état vide de la page des journaux de consentement |
| Statistiques admin | gdpr::messages.admin.stats.* |
Libellés des cartes de statistiques (total_consents, accepted_all, etc.) |
| Archives admin | gdpr::messages.admin.archives.* |
Libellés du navigateur d'archives (title, subtitle, month, filename, size, archived_at, download, état vide) |
| Messages | gdpr::messages.admin.messages.* |
Messages flash (settings_updated, stats_cache_cleared) |
Mise à jour
Une mise à jour ne remplace que les fichiers de l'add-on. Ses tables et ses données, ses paramètres, son état d'activation et son code d'achat enregistré sont tous conservés : ne désactivez et ne supprimez pas l'add-on avant de le mettre à jour. Sauvegardez tout de même votre base de données au préalable.
Méthode 1 : Téléverser la nouvelle version (recommandé)
- Téléchargez le dernier fichier
.zipde l'add-on. - Allez dans Panneau d'administration → Extensions → Add-ons et cliquez sur Téléverser un add-on.
- Déposez le fichier
.zipdans la zone de téléversement. - Comme GDPR & Cookie Consent est déjà installé, une demande de confirmation affiche la version installée et la nouvelle. Cliquez sur Remplacer : le dossier
extensions/addons/gdpr/est remplacé par les nouveaux fichiers. Annuler la demande abandonne le téléversement.
Méthode 2 : Remplacer les fichiers à la main
- Par FTP ou SSH, supprimez le dossier
extensions/addons/gdpr/et envoyez le nouveau à sa place. Remplacez le dossier entier plutôt que de copier par-dessus, afin que les fichiers retirés par la nouvelle version ne subsistent pas. - Ouvrez Panneau d'administration → Extensions → Add-ons : la page relit
addon.jsonet la carte affiche le nouveau numéro de version.
Une fois les fichiers remplacés
Nouvelles tables ou colonnes. Lorsqu'une nouvelle version en ajoute, créez-les en exécutant php artisan migrate --force en SSH, ou sans SSH en cliquant sur Désactiver puis Activer sur la carte de l'add-on : l'activation exécute toutes les migrations en attente (et redemande le code d'achat). Vos données ne sont pas touchées dans les deux cas.
Si votre installation met en cache sa configuration ou ses routes (php artisan config:cache, route:cache), exécutez php artisan optimize:clear après la mise à jour.
Désinstallation
Éteindre un add-on sans rien perdre, c'est le désactiver : allez dans Panneau d'administration → Extensions → Add-ons, cliquez sur Désactiver sur la carte GDPR & Cookie Consent et confirmez.
- L'add-on n'est plus chargé : ses routes, ses vues, son entrée dans la barre latérale d'administration et ses pages publiques ne répondent plus.
- Ses tables de base de données et toutes les données qu'elles contiennent sont conservées, et ses fichiers restent dans
extensions/addons/gdpr/. Rien n'est supprimé. - Ses permissions et son code d'achat enregistré restent en base de données. Seule la suppression les efface.
- La désactivation est refusée tant qu'un autre add-on actif dépend de celui-ci : désactivez d'abord cet add-on.
Cliquez sur Activer sur la même carte pour le rallumer. Comme lors de la première activation, le code d'achat est redemandé et vérifié ; ensuite les migrations en attente sont exécutées, les assets republiés, et l'add-on reprend exactement là où il s'était arrêté.
Suppression
La suppression est définitive et détruit les données de l'add-on. Le bouton Supprimer n'apparaît que sur un add-on désactivé : la suppression se fait donc toujours en deux temps :
- Désactivez GDPR & Cookie Consent (voir Désinstallation).
- Cliquez sur Supprimer sur sa carte et confirmez la demande.
Le panneau d'administration, en une seule passe :
- exécute le hook de désinstallation de l'add-on, s'il en fournit un, tant que son code est encore sur le disque ;
- révoque les permissions déclarées dans son
addon.json; - annule ses migrations, ce qui supprime ses tables de base de données et toutes les lignes qu'elles contiennent, et purge ses entrées de la table
migrations, afin qu'une réinstallation ultérieure reparte de zéro ; - supprime ses assets publiés :
public/addons/gdpr/,public/vendor/gdpr/etstorage/app/public/addons/gdpr/; - supprime le dossier de l'add-on
extensions/addons/gdpr/; - supprime sa ligne dans la table
addons(le code d'achat enregistré disparaît avec elle) et vide le cache de l'application.
La suppression est refusée, avec un message explicatif et avant toute destruction, lorsque l'add-on est encore actif, lorsqu'un autre add-on actif en dépend, ou lorsque l'utilisateur du serveur web (PHP) ne peut pas supprimer extensions/addons/gdpr/. Dans ce dernier cas, donnez à cet utilisateur le droit d'écriture sur le dossier et sur son parent, puis réessayez.
Supprimer le dossier en FTP ou en SSH n'est pas équivalent : l'add-on est seulement éteint, et ses tables, ses entrées dans la table migrations et sa ligne addons restent en place. Utilisez plutôt Supprimer dans le panneau d'administration.
Dépannage
La bannière n'apparaît pas sur le front-end
Vérifiez les points suivants :
- L'add-on est activé dans Panneau d'administration → Extensions → Add-ons.
- Activer la bannière de cookies est activé dans RGPD → Paramètres.
- Vous n'avez pas déjà un cookie
gdpr_consentdéfini. Effacez les cookies ou utilisez une fenêtre de navigation privée pour tester. - La page est une réponse HTML standard avec une balise
</body>(le middleware recherche cette balise pour injecter la bannière). - Vous consultez une page front-end, pas une page d'administration (les routes admin sont exclues).
La bannière apparaît sur les pages d'administration
Cela ne devrait pas se produire : le middleware ignore explicitement les routes admin via isAdminPanelRoute().
Si cela se produit malgré tout, vérifiez que :
- La fonction helper
isAdminPanelRoute()est définie et fonctionne dans votre installation principale de LaraClassifier / JobClass. - Le préfixe de vos URL d'administration correspond au chemin de base configuré pour l'administration (la valeur
ADMIN_BASE_PATHdu fichier.env,adminpar défaut).
Le cookie de consentement est chiffré / illisible par JavaScript
L'add-on exclut explicitement le cookie gdpr_consent du middleware EncryptCookies de Laravel.
Si le cookie est toujours chiffré :
- Assurez-vous que le
GdprServiceProviderest correctement enregistré (l'add-on est actif). - Vérifiez qu'aucun middleware personnalisé ou package ne rechiffre le cookie.
- Effacez les cookies de votre navigateur et donnez à nouveau votre consentement : d'anciens cookies chiffrés issus d'une configuration précédente peuvent persister.
Les journaux de consentement ne sont pas enregistrés
- Vérifiez que Journaliser les actions de consentement est activé dans les paramètres admin.
- Vérifiez que la table
gdpr_consent_logsexiste (elle est créée à l'activation de l'add-on). - Un choix identique refait par le même utilisateur/la même IP dans la Fenêtre de déduplication n'est pas journalisé deux fois.
- Consultez les journaux de votre serveur pour détecter des erreurs de base de données (ex. problèmes de permissions).
La position de la bannière ne change pas
- Après avoir changé la position dans les paramètres admin, veillez à effacer le cookie
gdpr_consent(ou utilisez une fenêtre de navigation privée) : la bannière n'apparaît que pour les visiteurs sans cookie de consentement. - La bannière générée est mise en cache, mais ce cache est vidé automatiquement à chaque enregistrement des paramètres RGPD.
Les catégories n'apparaissent pas dans le panneau des préférences
Seules les catégories activées dans les paramètres admin apparaissent dans le panneau des préférences. La catégorie “Essentiels” apparaît toujours. Pour les catégories facultatives :
- Vérifiez que Cookies analytiques, Cookies marketing et/ou Cookies de préférences sont activés dans la carte Catégories de cookies de la page des paramètres.
- Les catégories désactivées sont filtrées par le middleware
InjectCookieBanneravant le rendu de la vue.
Rétention / purge des journaux
La rétention est entièrement automatisée. La commande planifiée gdpr:purge-logs s'exécute chaque jour à 00:00 et
supprime à la fois les lignes de la base de données et les fichiers d'archive plus anciens que gdpr_log_retention_days
(par défaut : 730 jours / 2 ans, configurable depuis la page Paramètres). Vous pouvez également :
- La déclencher à la demande depuis la page Journaux de consentement via le bouton Purger maintenant
(nécessite
admin.gdpr.delete). - L'exécuter manuellement :
php artisan gdpr:purge-logs. - Vérifier la planification avec
php artisan schedule:list,gdpr:purge-logs(quotidien) etgdpr:archive-monthly(mensuel, le 1er à 00:05) doivent tous deux apparaître.
Le job d'archive mensuelle ne s'exécute pas
- Assurez-vous que Archivage mensuel des journaux est activé dans les Paramètres ; sinon la commande s'arrête prématurément. Passez
--forceàphp artisan gdpr:archive-monthlypour contourner cette vérification. - Confirmez que le planificateur de Laravel est câblé (
* * * * * cd /path && php artisan schedule:rundans votre crontab). Sans lui, aucune tâche planifiée ne se déclenche jamais. - Vérifiez que le disque
localest accessible en écriture et questorage/app/gdpr/est accessible en écriture (le dossier est créé à la volée par le job).
La page Archives affiche “L'archivage mensuel est désactivé” ou n'apparaît pas dans la barre latérale
- Ce message signifie que Archivage mensuel des journaux est désactivé et qu'aucune nouvelle archive n'est créée : activez-le dans la page des paramètres.
- L'élément de menu Archives n'est listé que pour les administrateurs possédant la permission
admin.gdpr-archive.view.
Les statistiques du tableau de bord semblent obsolètes
- Les statistiques sont mises en cache pendant
gdpr_stats_cache_ttlsecondes (15 minutes par défaut). Le cache est automatiquement vidé à chaque création/suppression de journal. - Après un import en masse ou un nettoyage manuel de la base de données, cliquez sur Vider le cache des statistiques maintenant sur la page Paramètres pour forcer un recalcul.
- Mettez
gdpr_stats_cache_ttlà0pour désactiver complètement la mise en cache (déconseillé sur de grands jeux de données).
Erreur de jeton CSRF sur les points de terminaison de consentement
Tous les points de terminaison de consentement (/gdpr/accept-all, etc.) requièrent un jeton CSRF valide.
Le JavaScript de la bannière lit le jeton dans la balise <meta name="csrf-token"> de la page. Si vous voyez des erreurs 419 :
- Assurez-vous que votre session Laravel est correctement configurée.
- Vérifiez que le groupe de middleware
web(qui inclutVerifyCsrfToken) est appliqué aux routes de consentement. - Si vous utilisez une vue de bannière personnalisée, assurez-vous qu'elle transmet le jeton CSRF dans l'en-tête
X-CSRF-TOKENdes requêtes fetch.
GDPR & Cookie Consent v1.0.4 : un add-on LaraClassifier / JobClass.
© BeDigit. Tous droits réservés.