From 5cdc6a6ac6379036403385c1ea5b8327efed5e05 Mon Sep 17 00:00:00 2001 From: petechd Date: Thu, 8 Aug 2024 09:15:14 +0100 Subject: [PATCH 01/13] Add custom event --- templates/layouts/_base.html | 1 + 1 file changed, 1 insertion(+) diff --git a/templates/layouts/_base.html b/templates/layouts/_base.html index 40b21c128f..d345f7d384 100644 --- a/templates/layouts/_base.html +++ b/templates/layouts/_base.html @@ -99,6 +99,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', '{{ google_tag_id }}'); + gtag('event', 'screen_view', { 'app_name': 'myAppName', 'screen_name': 'Home' }); } {% endif %} From 7ea588bedc51bf9f8dd6a7ee9d42c50b40f3b00f Mon Sep 17 00:00:00 2001 From: petechd Date: Thu, 8 Aug 2024 09:39:38 +0100 Subject: [PATCH 02/13] Add user name event --- templates/layouts/_base.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/layouts/_base.html b/templates/layouts/_base.html index d345f7d384..a03a0cc547 100644 --- a/templates/layouts/_base.html +++ b/templates/layouts/_base.html @@ -99,7 +99,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', '{{ google_tag_id }}'); - gtag('event', 'screen_view', { 'app_name': 'myAppName', 'screen_name': 'Home' }); + gtag('event', 'base_template_view', { 'app_name': 'Runner', 'screen_name': 'Base', 'user_name': "Rhys" }); } {% endif %} From 24b9a21e5f79d78b3659d415daf5a850fb7fa3f0 Mon Sep 17 00:00:00 2001 From: petechd Date: Thu, 8 Aug 2024 10:02:36 +0100 Subject: [PATCH 03/13] Replace tests paramaters with data layer --- templates/layouts/_base.html | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/templates/layouts/_base.html b/templates/layouts/_base.html index a03a0cc547..768dd23b4c 100644 --- a/templates/layouts/_base.html +++ b/templates/layouts/_base.html @@ -73,9 +73,6 @@ {% block head %} {# djlint:off #} {% if google_tag_id %} - {% endif %} From 26ce6bf834e1eaacdbc85271e05dc818305a4f5f Mon Sep 17 00:00:00 2001 From: petechd Date: Thu, 8 Aug 2024 10:16:45 +0100 Subject: [PATCH 04/13] Modify data layer --- templates/layouts/_base.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/layouts/_base.html b/templates/layouts/_base.html index 768dd23b4c..dc5fcbf0a4 100644 --- a/templates/layouts/_base.html +++ b/templates/layouts/_base.html @@ -96,7 +96,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', '{{ google_tag_id }}'); - gtag('event', 'data_layer', {{ data_layer | tojson }}); + gtag('event', 'survey_data', {{ data_layer }}); } {% endif %} From 58b61d92d56db6dfb25a9543ce61b75216b72bb9 Mon Sep 17 00:00:00 2001 From: petechd Date: Thu, 8 Aug 2024 10:29:24 +0100 Subject: [PATCH 05/13] Flatten data layer context --- app/helpers/template_helpers.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/app/helpers/template_helpers.py b/app/helpers/template_helpers.py index 75c9c68244..88d67bb688 100644 --- a/app/helpers/template_helpers.py +++ b/app/helpers/template_helpers.py @@ -130,9 +130,14 @@ def data_layer_context( key: value for key in DATA_LAYER_KEYS if (value := cookie_session.get(key)) } context = [*additional_context, schema_context] + if tx_id_context: context.append(tx_id_context) - return context + + flattened_context = {} + for d in context: + flattened_context |= d + return flattened_context @property def footer_context(self) -> dict[str, Any]: From bf197cd01e00650ecd112a81abebcb53886afd79 Mon Sep 17 00:00:00 2001 From: petechd Date: Thu, 8 Aug 2024 10:40:10 +0100 Subject: [PATCH 06/13] Add parsing to json --- templates/layouts/_base.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/layouts/_base.html b/templates/layouts/_base.html index dc5fcbf0a4..0dadf0c274 100644 --- a/templates/layouts/_base.html +++ b/templates/layouts/_base.html @@ -96,7 +96,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', '{{ google_tag_id }}'); - gtag('event', 'survey_data', {{ data_layer }}); + gtag('event', 'survey_data', {{ data_layer | tojson }}); } {% endif %} From 5018030def8eb896bab30c4a2e3c0ac4b2454fe5 Mon Sep 17 00:00:00 2001 From: petechd Date: Thu, 8 Aug 2024 11:36:54 +0100 Subject: [PATCH 07/13] Fix tests and linting --- app/helpers/template_helpers.py | 4 +-- tests/app/helpers/test_template_helpers.py | 26 +++++++++---------- .../integration/test_application_variables.py | 4 +-- 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/app/helpers/template_helpers.py b/app/helpers/template_helpers.py index 88d67bb688..df70611181 100644 --- a/app/helpers/template_helpers.py +++ b/app/helpers/template_helpers.py @@ -119,7 +119,7 @@ def service_links_context( @property def data_layer_context( self, - ) -> list[dict]: + ) -> dict[str, str]: tx_id_context = ( {"tx_id": metadata.tx_id} if (metadata := get_metadata(current_user)) @@ -134,7 +134,7 @@ def data_layer_context( if tx_id_context: context.append(tx_id_context) - flattened_context = {} + flattened_context: dict[str, str] = {} for d in context: flattened_context |= d return flattened_context diff --git a/tests/app/helpers/test_template_helpers.py b/tests/app/helpers/test_template_helpers.py index f622be9cd5..d9e277cdbe 100644 --- a/tests/app/helpers/test_template_helpers.py +++ b/tests/app/helpers/test_template_helpers.py @@ -1029,13 +1029,13 @@ def test_use_default_survey_title_in_context_when_no_cookie( SurveyType.DEFAULT, "en", QuestionnaireSchema({"survey_id": "001"}), - [{"survey_id": "001"}], + {"survey_id": "001"}, ), ( SurveyType.DEFAULT, "en", QuestionnaireSchema({"survey_id": "001", "form_type": "test"}), - [{"form_type": "test", "survey_id": "001"}], + {"form_type": "test", "survey_id": "001"}, ), ( SurveyType.BUSINESS, @@ -1043,7 +1043,7 @@ def test_use_default_survey_title_in_context_when_no_cookie( QuestionnaireSchema( {"survey_id": "001", "form_type": "test", "title": "test_title"} ), - [{"form_type": "test", "survey_id": "001", "title": "test_title"}], + {"form_type": "test", "survey_id": "001", "title": "test_title"}, ), ( SurveyType.HEALTH, @@ -1051,7 +1051,7 @@ def test_use_default_survey_title_in_context_when_no_cookie( QuestionnaireSchema( {"survey_id": "001", "form_type": "test", "title": "test_title"} ), - [{"form_type": "test", "survey_id": "001", "title": "test_title"}], + {"form_type": "test", "survey_id": "001", "title": "test_title"}, ), ( SurveyType.SOCIAL, @@ -1059,55 +1059,55 @@ def test_use_default_survey_title_in_context_when_no_cookie( QuestionnaireSchema( {"survey_id": "001", "form_type": "test", "title": "test_title"} ), - [{"form_type": "test", "survey_id": "001", "title": "test_title"}], + {"form_type": "test", "survey_id": "001", "title": "test_title"}, ), ( SurveyType.NORTHERN_IRELAND, "en", QuestionnaireSchema({"survey_id": "001"}), - [{"survey_id": "001"}], + {"survey_id": "001"}, ), ( SurveyType.DBT_DSIT, "en", QuestionnaireSchema({"survey_id": "001"}), - [{"survey_id": "001"}], + {"survey_id": "001"}, ), ( SurveyType.DBT_DSIT_NI, "en", QuestionnaireSchema({"survey_id": "001"}), - [{"survey_id": "001"}], + {"survey_id": "001"}, ), ( SurveyType.DBT, "en", QuestionnaireSchema({"survey_id": "001"}), - [{"survey_id": "001"}], + {"survey_id": "001"}, ), ( SurveyType.DBT_NI, "en", QuestionnaireSchema({"survey_id": "001"}), - [{"survey_id": "001"}], + {"survey_id": "001"}, ), ( SurveyType.ORR, "en", QuestionnaireSchema({"survey_id": "001"}), - [{"survey_id": "001"}], + {"survey_id": "001"}, ), ( SurveyType.DESNZ, "en", QuestionnaireSchema({"survey_id": "001"}), - [{"survey_id": "001"}], + {"survey_id": "001"}, ), ( SurveyType.DESNZ_NI, "en", QuestionnaireSchema({"survey_id": "001"}), - [{"survey_id": "001"}], + {"survey_id": "001"}, ), ], ) diff --git a/tests/integration/test_application_variables.py b/tests/integration/test_application_variables.py index 5ba3b54cea..62a5398f33 100644 --- a/tests/integration/test_application_variables.py +++ b/tests/integration/test_application_variables.py @@ -24,7 +24,7 @@ def test_google_analytics_code_and_credentials_are_present(self): self.get("/questionnaire/feedback/") self.assertStatusOK() self.assertInHead( - f'dataLayer = [{{"form_type": "H", "survey_id": "0", "title": "Feedback test schema"}}, {{"tx_id": "{actual["METADATA"]["tx_id"]}"}}]' + f'"form_type": "H", "survey_id": "0", "title": "Feedback test schema", "tx_id": "{actual["METADATA"]["tx_id"]}"' ) self.assertInHead("https://www.googletagmanager.com") self.assertInHead(settings.EQ_GOOGLE_TAG_ID) @@ -40,7 +40,7 @@ def test_google_analytics_data_layer_has_no_null_fields(self): self.assertStatusOK() # form_type is empty so should not be present self.assertInHead( - f'dataLayer = [{{"survey_id": "001", "title": "Other input fields"}}, {{"tx_id": "{actual["METADATA"]["tx_id"]}"}}]' + f'"survey_id": "001", "title": "Other input fields", "tx_id": "{actual["METADATA"]["tx_id"]}"' ) def test_livereload_script_rendered(self): From 635989644c6d286ded119dd300c67f40de558dc3 Mon Sep 17 00:00:00 2001 From: petechd Date: Thu, 8 Aug 2024 12:54:04 +0100 Subject: [PATCH 08/13] Test data layer push --- templates/layouts/_base.html | 1 + 1 file changed, 1 insertion(+) diff --git a/templates/layouts/_base.html b/templates/layouts/_base.html index 0dadf0c274..ed5cbf6989 100644 --- a/templates/layouts/_base.html +++ b/templates/layouts/_base.html @@ -97,6 +97,7 @@ gtag('js', new Date()); gtag('config', '{{ google_tag_id }}'); gtag('event', 'survey_data', {{ data_layer | tojson }}); + dataLayer.push({{ data_layer | tojson }}); } {% endif %} From 57be61204ffdfdaa9b5ca2af88f6d68d0825e1a5 Mon Sep 17 00:00:00 2001 From: petechd Date: Fri, 9 Aug 2024 11:15:58 +0100 Subject: [PATCH 09/13] Revert data layer push --- templates/layouts/_base.html | 1 - 1 file changed, 1 deletion(-) diff --git a/templates/layouts/_base.html b/templates/layouts/_base.html index ed5cbf6989..0dadf0c274 100644 --- a/templates/layouts/_base.html +++ b/templates/layouts/_base.html @@ -97,7 +97,6 @@ gtag('js', new Date()); gtag('config', '{{ google_tag_id }}'); gtag('event', 'survey_data', {{ data_layer | tojson }}); - dataLayer.push({{ data_layer | tojson }}); } {% endif %} From 2f9f94f66bbdabee5a73fdd2a440aa84a28270bd Mon Sep 17 00:00:00 2001 From: petechd Date: Mon, 12 Aug 2024 08:50:58 +0100 Subject: [PATCH 10/13] Send survey info as gtag parameters --- templates/layouts/_base.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/layouts/_base.html b/templates/layouts/_base.html index 0dadf0c274..9291fd0a21 100644 --- a/templates/layouts/_base.html +++ b/templates/layouts/_base.html @@ -95,7 +95,7 @@ loadGoogleTagScript() function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); - gtag('config', '{{ google_tag_id }}'); + gtag('config', '{{ google_tag_id }}', {{ data_layer | tojson }}); gtag('event', 'survey_data', {{ data_layer | tojson }}); } From ecd023d515edd04c00b2e1cd127666a7b4a9635c Mon Sep 17 00:00:00 2001 From: petechd Date: Mon, 12 Aug 2024 09:06:11 +0100 Subject: [PATCH 11/13] Set gtag parameters --- templates/layouts/_base.html | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/templates/layouts/_base.html b/templates/layouts/_base.html index 9291fd0a21..fa7c601f73 100644 --- a/templates/layouts/_base.html +++ b/templates/layouts/_base.html @@ -95,7 +95,8 @@ loadGoogleTagScript() function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); - gtag('config', '{{ google_tag_id }}', {{ data_layer | tojson }}); + gtag('set', {{ data_layer }}); + gtag('config', '{{ google_tag_id }}'); gtag('event', 'survey_data', {{ data_layer | tojson }}); } From 2e3c1cfda702b564028e29a776da1a62c8f06f8f Mon Sep 17 00:00:00 2001 From: petechd Date: Fri, 6 Sep 2024 08:42:24 +0100 Subject: [PATCH 12/13] Remove additional context, create flat dict --- app/helpers/template_helpers.py | 17 +++-------------- app/survey_config/survey_config.py | 5 ----- 2 files changed, 3 insertions(+), 19 deletions(-) diff --git a/app/helpers/template_helpers.py b/app/helpers/template_helpers.py index df70611181..7602fb622d 100644 --- a/app/helpers/template_helpers.py +++ b/app/helpers/template_helpers.py @@ -120,24 +120,13 @@ def service_links_context( def data_layer_context( self, ) -> dict[str, str]: - tx_id_context = ( + return ( {"tx_id": metadata.tx_id} if (metadata := get_metadata(current_user)) - else None - ) - additional_context = self._survey_config.get_additional_data_layer_context() - schema_context = { + else {} + ) | { key: value for key in DATA_LAYER_KEYS if (value := cookie_session.get(key)) } - context = [*additional_context, schema_context] - - if tx_id_context: - context.append(tx_id_context) - - flattened_context: dict[str, str] = {} - for d in context: - flattened_context |= d - return flattened_context @property def footer_context(self) -> dict[str, Any]: diff --git a/app/survey_config/survey_config.py b/app/survey_config/survey_config.py index c9cd640d84..36aeb5ae58 100644 --- a/app/survey_config/survey_config.py +++ b/app/survey_config/survey_config.py @@ -70,8 +70,3 @@ def get_footer_legal_links( # pylint: disable=unused-argument, no-self-use self, cookie_has_theme: bool ) -> Optional[list[dict]]: return None - - def get_additional_data_layer_context( # pylint: disable=no-self-use - self, - ) -> list: - return [] From 9953ba888d2e081103611f804825c353585f7a18 Mon Sep 17 00:00:00 2001 From: petechd Date: Fri, 6 Sep 2024 08:53:50 +0100 Subject: [PATCH 13/13] Fix linting issue --- app/helpers/template_helpers.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/helpers/template_helpers.py b/app/helpers/template_helpers.py index 7602fb622d..b5bc4d3751 100644 --- a/app/helpers/template_helpers.py +++ b/app/helpers/template_helpers.py @@ -120,13 +120,15 @@ def service_links_context( def data_layer_context( self, ) -> dict[str, str]: - return ( + tx_id_context = ( {"tx_id": metadata.tx_id} if (metadata := get_metadata(current_user)) else {} - ) | { + ) + schema_context = { key: value for key in DATA_LAYER_KEYS if (value := cookie_session.get(key)) } + return tx_id_context | schema_context @property def footer_context(self) -> dict[str, Any]: