From 7a2958f3ee763ea0f4d707b35444e99e421d5ea4 Mon Sep 17 00:00:00 2001
From: TheoLechemia <lechemia.theo@gmail.com>
Date: Wed, 15 Jan 2025 17:12:43 +0100
Subject: [PATCH] improve doc, config and footer.html.sample

---
 atlas/configuration/config.py.example         |   5 +-
 atlas/configuration/config_schema.py          |  24 ++-
 .../custom/templates/footer.html.sample       |  27 +---
 docs/changelog.rst                            |   3 +
 docs/cookies_rgpd.rst                         | 141 ++++++++++++++++++
 docs/rgpd.rst                                 | 139 -----------------
 6 files changed, 170 insertions(+), 169 deletions(-)
 create mode 100644 docs/cookies_rgpd.rst
 delete mode 100644 docs/rgpd.rst

diff --git a/atlas/configuration/config.py.example b/atlas/configuration/config.py.example
index bd7da925e..15f120d7d 100644
--- a/atlas/configuration/config.py.example
+++ b/atlas/configuration/config.py.example
@@ -84,9 +84,6 @@ LANGUAGES = {
 #####################
 #####################
 
-# Code de suivi des statistiques Google Analytics (si AFFICHAGE_FOOTER = True)
-ID_GOOGLE_ANALYTICS = "UA-xxxxxxx-xx"
-
 # Utiliser et afficher le glossaire (static/custom/glossaire.json.sample)
 GLOSSAIRE = False
 
@@ -261,6 +258,8 @@ PATRIMONIALITE = {
     }
 }
 
+OREJIME_APPS = []
+
 #############################
 #### Lien custom du logo ####
 #############################
diff --git a/atlas/configuration/config_schema.py b/atlas/configuration/config_schema.py
index dcd8045d3..3cd045c02 100644
--- a/atlas/configuration/config_schema.py
+++ b/atlas/configuration/config_schema.py
@@ -77,6 +77,28 @@
     },
 }
 
+orijime_default_translations = {
+        "fr": {
+            "consentModal": {
+                "description": "",
+            },
+            "purposes": {
+                "analytics": "Analyse",
+                "security": "Sécurité"
+            }
+        },
+        "en": {
+            "consentModal": {
+                "description": "This is an example of how to override an existing translation already used by Orejime",
+            },
+            "purposes": {
+                "analytics": "Analytics",
+                "security": "Security"
+            },
+
+        }
+    }
+
 
 class SecretSchemaConf(Schema):
     class Meta:
@@ -122,7 +144,6 @@ class Meta:
     URL_APPLICATION = fields.String(load_default="")
     DEFAULT_LANGUAGE = fields.String(load_default="fr")
     MULTILINGUAL = fields.Boolean(load_default=False)
-    ID_GOOGLE_ANALYTICS = fields.String(load_default="UA-xxxxxxx-xx")
     ORGANISM_MODULE = fields.Boolean(load_default=False)
     DISPLAY_OBSERVERS = fields.Boolean(load_default=True)
     GLOSSAIRE = fields.Boolean(load_default=False)
@@ -132,6 +153,7 @@ class Meta:
     AFFICHAGE_FOOTER = fields.Boolean(load_default=True)
     AFFICHAGE_RGPD = fields.Boolean(load_default=True)
     OREJIME_APPS = fields.List(fields.Dict(), load_default=[])
+    OREJIME_TRANSLATIONS = fields.Dict(load_default=orijime_default_translations)
     AFFICHAGE_STAT_GLOBALES = fields.Boolean(load_default=True)
     AFFICHAGE_DERNIERES_OBS = fields.Boolean(load_default=True)
     AFFICHAGE_EN_CE_MOMENT = fields.Boolean(load_default=True)
diff --git a/atlas/static/custom/templates/footer.html.sample b/atlas/static/custom/templates/footer.html.sample
index 609b70a41..f10b7a932 100644
--- a/atlas/static/custom/templates/footer.html.sample
+++ b/atlas/static/custom/templates/footer.html.sample
@@ -75,30 +75,5 @@
 </div>
 {% endif %}
 
-<!-- Check ID_GOOGLE_ANALYTICS to keep compability with old Geonature-atlas -->
-{% if configuration.OREJIME_APPS|length > 0 %}
-    <!-- Sample script Analytics Google -->
-    {% for app in configuration.OREJIME_APPS %}
-        {% if app.name == "scripts-gtm" %}
-            <script
-                    type="opt-in"
-                    data-type="application/javascript"
-                    data-name="scripts-gtm">
-                (function (i, s, o, g, r, a, m) {
-                    i['GoogleAnalyticsObject'] = r;
-                    i[r] = i[r] || function () {
-                        (i[r].q = i[r].q || []).push(arguments)
-                    }, i[r].l = 1 * new Date();
-                    a = s.createElement(o),
-                        m = s.getElementsByTagName(o)[0];
-                    a.async = 1;
-                    a.src = g;
-                    m.parentNode.insertBefore(a, m)
-                })(window, document, 'script', 'https://www.google-analytics.com/analytics.js', 'ga');
+    <!-- BLOC TRACEURS / ANALYSES VIZA COOKIES -->
 
-                ga('create', '{{configuration.ID_GOOGLE_ANALYTICS}}', 'auto');
-                ga('send', 'pageview');
-            </script>
-        {%  endif %}
-    {% endfor %}
-{% endif %}
diff --git a/docs/changelog.rst b/docs/changelog.rst
index 5dcf84a35..c2fdf256d 100644
--- a/docs/changelog.rst
+++ b/docs/changelog.rst
@@ -8,6 +8,7 @@ CHANGELOG
 🚀 **Nouveautés**
 
 - Ajout du lien "Données personelles" dans le pied de page (#527 @juggler31)
+- Ajout de la librairie Orijeme pour recueillir le consentement de l'utilisateur sur l'utilisation des cookies
 
 🐛 **Corrections**
 
@@ -21,6 +22,8 @@ CHANGELOG
 
 ⚠️ **Notes de version**
 
+- Le paramètre `ID_GOOGLE_ANALYTICS` et la façon d'integrer un script google analytic sont dépréciés. Se référer à la documentation sur le RGPD et la collecte de cookies : https://github.com/PnX-SI/GeoNature-atlas/blob/master/docs/cookies_rgpd.rst
+
 Si vous mettez à jour GeoNature-atlas :
 
 - Exécutez le script SQL de mise à jour de la BDD : https://github.com/PnX-SI/GeoNature-atlas/blob/master/data/update/update_1.6.1to1.6.2.sql
diff --git a/docs/cookies_rgpd.rst b/docs/cookies_rgpd.rst
new file mode 100644
index 000000000..63e9f5b56
--- /dev/null
+++ b/docs/cookies_rgpd.rst
@@ -0,0 +1,141 @@
+Gestion des cookies et RGPD
+===========================
+
+Cette section explique comment ajouter des outils de collectes de cookies (matomo, google analytics par ex) tout en respetant le RGPG. GeoNature-Atlas utilise pour cela une librairie permettant de receuillir le consentement de l'utilisateur: Orejime.
+
+À quoi sert le RGPD
+-------------------
+
+Le règlement général sur la protection des données est utilisé afin de protéger les données à caractère personnel.
+
+Où configurer l'application
+---------------------------
+
+Dans le fichier : `atlas/configuration/config.py`
+
+
+- Définir les applications pour lesquelles il faut demander l'autorisation de la collecte de cookies via la variable **OREJIME_APPS**
+
+En complément, se référer à la documentation officielle de l'outil orejim: https://github.com/empreinte-digitale/orejime
+
+::
+
+    OREJIME_APPS = [
+        {
+            "name": "script-google", # ce nom devra être réutilisé dans la balise script (attribut `data-name`) du fichier `footer.html` ou le script d'analyse des cookies sera integré
+            "title": "Google Analytics",
+            "cookies": [
+                "_ga",
+                "_gat",
+                "_gid",
+                "__utma",
+                "__utmb",
+                "__utmc",
+                "__utmt",
+                "__utmz",
+            ],
+            "purposes": ["analytics"],
+            "required": False,
+            "optOut": False,
+            "default": True,
+            "onlyOnce": True,
+        },
+        {
+            "name": "second-script",
+            "title": "Deuxième script",
+            "cookies": [
+                "_ga",
+                "_gat",
+                "_gid",
+                "__utma",
+                "__utmb",
+                "__utmc",
+                "__utmt",
+                "__utmz",
+            ],
+            "purposes": ["analytics"],
+            "required": False,
+            "optOut": False,
+            "default": True,
+            "onlyOnce": True,
+        }
+    ]
+
+- Il est possible de surcharger les traductions grâce à la variable : **OREJIME_TRANSLATIONS**
+Voir toutes les possibilité de traduction : https://github.com/empreinte-digitale/orejime
+::
+
+    OREJIME_TRANSLATIONS =  {
+        "fr": {
+            "consentModal": {
+                "description": "",
+            },
+            "purposes": {
+                "analytics": "Analyse",
+                "security": "Sécurité"
+            }
+        },
+        "en": {
+            "consentModal": {
+                "description": "This is an example of how to override an existing translation already used by Orejime",
+            },
+            "purposes": {
+                "analytics": "Analytics",
+                "security": "Security"
+            },
+
+        }
+    }
+
+- Il est possible de catégoriser les applications nécessaires afin de les intégrer dans les choix des utilisateurs.
+
+.. image :: images/choice_rgpd.png
+
+::
+
+    OREJIME_CATEGORIES = [
+            {
+                "name": "analytics",
+                "title": "Analytics",
+                "apps": [
+                    "script-google",
+                ]
+            },
+            {
+                "name": "security",
+                "title": "Secutiry",
+                "apps": [
+                    "second-script",
+                ]
+            }
+        ]
+
+A la fin du fichier : `atlas/static/custom/templates/footer.html`, copiez collez cette exemple en l'adaptant à votre contexte et à votre configuration.
+La variable `AFFICHAGE_FOOTER` doit êtes mise à `True` si on souhaite ajouter des traceurs de cookies.
+
+Dans cet exemple, il s'agit d'un script de google analytics : 
+L'attribut `data-name` de la balise script doit correspondre a l'attribut `name` correspondant à l'application ORIJIME renseigné dans la variable de configuration `OREJIME_APPS`. Dans la configuration d'exemple, la première "l'app google" a pour attribut `name` : `scripts-google`, il faut donc mettre `scripts-google` dans l'attribut `data-name` de la balise script. C'est cet attribut qui permet à Orijeme de savoir quel cookies il va pouvoir accepter ou bloquer en fonction de la réponse de l'utilisateur.
+Si vous souhaitez rajouter un deuxième traceur (matomo par exemple), faire un deuxième balise script séparée en respectant la même logique.
+
+::
+
+    <!-- Sample script Analytics Google -->
+        <script
+                type="opt-in"
+                data-type="application/javascript"
+                data-name="scripts-google">
+            (function (i, s, o, g, r, a, m) {
+                i['GoogleAnalyticsObject'] = r;
+                i[r] = i[r] || function () {
+                    (i[r].q = i[r].q || []).push(arguments)
+                }, i[r].l = 1 * new Date();
+                a = s.createElement(o),
+                    m = s.getElementsByTagName(o)[0];
+                a.async = 1;
+                a.src = g;
+                m.parentNode.insertBefore(a, m)
+            })(window, document, 'script', 'https://www.google-analytics.com/analytics.js', 'ga');
+
+            ga('create', '<VOTRE_ID_GOOGLE_A_REMPLACER>', 'auto');
+            ga('send', 'pageview');
+        </script>
diff --git a/docs/rgpd.rst b/docs/rgpd.rst
deleted file mode 100644
index 3588dc48d..000000000
--- a/docs/rgpd.rst
+++ /dev/null
@@ -1,139 +0,0 @@
-La RGPD
-=======
-
-À quoi sert la RGPD
--------------------
-
-Le règlement général sur la protection des données est utilisé afin de protéger les données à caractère personnel.
-
-Où configurer l'application
----------------------------
-
-Dans le fichier : `atlas/configuration/config.py`
-
-La documentation correspondant à la configuration : https://github.com/empreinte-digitale/orejime
-
-- Définir les applications pour lesquelles il faut bloquer les cookies via la variable **OREJIME_APPS**
-
-::
-
-    OREJIME_APPS = [
-        {
-            "name": "scripts-gtm",
-            "title": "Google Analytics",
-            "cookies": [
-                "_ga",
-                "_gat",
-                "_gid",
-                "__utma",
-                "__utmb",
-                "__utmc",
-                "__utmt",
-                "__utmz",
-            ],
-            "purposes": ["analytics"],
-            "required": False,
-            "optOut": False,
-            "default": True,
-            "onlyOnce": True,
-        },
-        {
-            "name": "second-script",
-            "title": "Deuxième script",
-            "cookies": [
-                "_ga",
-                "_gat",
-                "_gid",
-                "__utma",
-                "__utmb",
-                "__utmc",
-                "__utmt",
-                "__utmz",
-            ],
-            "purposes": ["analytics"],
-            "required": False,
-            "optOut": False,
-            "default": True,
-            "onlyOnce": True,
-        }
-    ]
-
-- Il est possible de surcharger les traductions grâce à la variable : **OREJIME_TRANSLATIONS**
-
-::
-
-    OREJIME_TRANSLATIONS =  {
-        "en": {
-            "consentModal": {
-                "description": "This is an example of how to override an existing translation already used by Orejime",
-            },
-            "inlineTracker": {
-                "description": "Example of an inline tracking script",
-            },
-            "externalTracker": {
-                "description": "Example of an external tracking script",
-            },
-            "purposes": {
-                "analytics": "Analytics",
-                "security": "Security"
-            },
-            "categories": {
-                "analytics": {
-                    "description": "A long form description of the category."
-                }
-            }
-        },
-        }
-
-- Il est possible de catégoriser les applications nécessaires afin de les intégrer dans les choix des utilisateurs.
-
-.. image :: images/choice_rgpd.png
-
-
-::
-
-    OREJIME_CATEGORIES = [
-            {
-                "name": "analytics",
-                "title": "Analytics",
-                "apps": [
-                    "scripts-gtm",
-                    "second-script"
-                ]
-            }
-        ]
-
-Dans le fichier : `atlas/static/custom/templates/footer.html`
-
-- Dans le fichier, rajouter un **if** pour chacun des scripts à exécuter.
-
-Dans cet exemple, il s'agit d'un script de google analitics (le script `scripts-gtm` définit dans la configuration orejime dans le fichier `config.py`).
-
-::
-
-    {% if configuration.OREJIME_APPS|length > 0 %}
-    <!-- Sample script Analytics Google -->
-        {% for app in configuration.OREJIME_APPS %}
-            {% if app.name == "scripts-gtm" %}
-                <script
-                        type="opt-in"
-                        data-type="application/javascript"
-                        data-name="scripts-gtm">
-                    (function (i, s, o, g, r, a, m) {
-                        i['GoogleAnalyticsObject'] = r;
-                        i[r] = i[r] || function () {
-                            (i[r].q = i[r].q || []).push(arguments)
-                        }, i[r].l = 1 * new Date();
-                        a = s.createElement(o),
-                            m = s.getElementsByTagName(o)[0];
-                        a.async = 1;
-                        a.src = g;
-                        m.parentNode.insertBefore(a, m)
-                    })(window, document, 'script', 'https://www.google-analytics.com/analytics.js', 'ga');
-
-                    ga('create', '{{configuration.ID_GOOGLE_ANALYTICS}}', 'auto');
-                    ga('send', 'pageview');
-                </script>
-            {%  endif %}
-        {% endfor %}
-    {% endif %}