diff --git a/src/openforms/analytics_tools/admin.py b/src/openforms/analytics_tools/admin.py index 55b1b25408..36e958f391 100644 --- a/src/openforms/analytics_tools/admin.py +++ b/src/openforms/analytics_tools/admin.py @@ -55,8 +55,10 @@ class AnalyticsToolsConfigurationAdmin(TranslationAdmin, SingletonModelAdmin): _("Analytics: GovMetric"), { "fields": ( - "govmetric_source_id", - "govmetric_secure_guid", + "govmetric_source_id_form_finished", + "govmetric_source_id_form_aborted", + "govmetric_secure_guid_form_finished", + "govmetric_secure_guid_form_aborted", "enable_govmetric_analytics", ) }, diff --git a/src/openforms/analytics_tools/api/serializers.py b/src/openforms/analytics_tools/api/serializers.py index e23c364792..c966d6544f 100644 --- a/src/openforms/analytics_tools/api/serializers.py +++ b/src/openforms/analytics_tools/api/serializers.py @@ -7,7 +7,9 @@ class AnalyticsToolsConfigSerializer(serializers.ModelSerializer): class Meta: model = AnalyticsToolsConfiguration fields = ( - "govmetric_source_id", - "govmetric_secure_guid", + "govmetric_source_id_form_finished", + "govmetric_source_id_form_aborted", + "govmetric_secure_guid_form_finished", + "govmetric_secure_guid_form_aborted", "enable_govmetric_analytics", ) diff --git a/src/openforms/analytics_tools/contrib/govmetric/cookies.json b/src/openforms/analytics_tools/contrib/govmetric/cookies.json index cf92e3a3c2..aa44d75388 100644 --- a/src/openforms/analytics_tools/contrib/govmetric/cookies.json +++ b/src/openforms/analytics_tools/contrib/govmetric/cookies.json @@ -1,10 +1,10 @@ [ { - "name": "_pk_id.SOURCE_ID.DOMAIN_HASH", + "name": "_pk_id.SOURCE_ID_FORM_FINISHED.DOMAIN_HASH", "path": "/" }, { - "name": "_pk_ses.SOURCE_ID.DOMAIN_HASH", + "name": "_pk_ses.SOURCE_ID_FORM_FINISHED.DOMAIN_HASH", "path": "/" } ] diff --git a/src/openforms/analytics_tools/migrations/0007_analyticstoolsconfiguration_govmetric_secure_guid_form_abort_and_more.py b/src/openforms/analytics_tools/migrations/0007_analyticstoolsconfiguration_govmetric_secure_guid_form_abort_and_more.py new file mode 100644 index 0000000000..b60dbe9639 --- /dev/null +++ b/src/openforms/analytics_tools/migrations/0007_analyticstoolsconfiguration_govmetric_secure_guid_form_abort_and_more.py @@ -0,0 +1,141 @@ +# Generated by Django 4.2.11 on 2024-04-12 08:43 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("analytics_tools", "0006_auto_20240112_1046"), + ] + + operations = [ + migrations.AddField( + model_name="analyticstoolsconfiguration", + name="govmetric_secure_guid_form_aborted", + field=models.CharField( + blank=True, + help_text="Your GovMetric secure GUID for when a form is aborted - This is an optional value. It is created by KLANTINFOCUS when a list of questions is created. It is a string that is unique per set of questions.", + max_length=50, + verbose_name="GovMetric secure GUID form aborted", + ), + ), + migrations.AddField( + model_name="analyticstoolsconfiguration", + name="govmetric_secure_guid_form_finished", + field=models.CharField( + blank=True, + help_text="Your GovMetric secure GUID for when a form is finished - This is an optional value. It is created by KLANTINFOCUS when a list of questions is created. It is a string that is unique per set of questions.", + max_length=50, + verbose_name="GovMetric secure GUID form finished", + ), + ), + migrations.AddField( + model_name="analyticstoolsconfiguration", + name="govmetric_source_id_form_aborted", + field=models.CharField( + blank=True, + help_text="Your GovMetric source ID for when a form is aborted - This is created by KLANTINFOCUS when a list of questions is created. It is a numerical value that is unique per set of questions.", + max_length=10, + verbose_name="GovMetric source ID form aborted", + ), + ), + migrations.AddField( + model_name="analyticstoolsconfiguration", + name="govmetric_source_id_form_finished", + field=models.CharField( + blank=True, + help_text="Your GovMetric source ID for when a form is finished - This is created by KLANTINFOCUS when a list of questions is created. It is a numerical value that is unique per set of questions.", + max_length=10, + verbose_name="GovMetric source ID form finished", + ), + ), + migrations.AddField( + model_name="analyticstoolsconfiguration", + name="govmetric_secure_guid_form_aborted_en", + field=models.CharField( + blank=True, + help_text="Your GovMetric secure GUID for when a form is aborted - This is an optional value. It is created by KLANTINFOCUS when a list of questions is created. It is a string that is unique per set of questions.", + max_length=50, + null=True, + verbose_name="GovMetric secure GUID form aborted", + ), + ), + migrations.AddField( + model_name="analyticstoolsconfiguration", + name="govmetric_secure_guid_form_aborted_nl", + field=models.CharField( + blank=True, + help_text="Your GovMetric secure GUID for when a form is aborted - This is an optional value. It is created by KLANTINFOCUS when a list of questions is created. It is a string that is unique per set of questions.", + max_length=50, + null=True, + verbose_name="GovMetric secure GUID form aborted", + ), + ), + migrations.AddField( + model_name="analyticstoolsconfiguration", + name="govmetric_secure_guid_form_finished_en", + field=models.CharField( + blank=True, + help_text="Your GovMetric secure GUID for when a form is finished - This is an optional value. It is created by KLANTINFOCUS when a list of questions is created. It is a string that is unique per set of questions.", + max_length=50, + null=True, + verbose_name="GovMetric secure GUID form finished", + ), + ), + migrations.AddField( + model_name="analyticstoolsconfiguration", + name="govmetric_secure_guid_form_finished_nl", + field=models.CharField( + blank=True, + help_text="Your GovMetric secure GUID for when a form is finished - This is an optional value. It is created by KLANTINFOCUS when a list of questions is created. It is a string that is unique per set of questions.", + max_length=50, + null=True, + verbose_name="GovMetric secure GUID form finished", + ), + ), + migrations.AddField( + model_name="analyticstoolsconfiguration", + name="govmetric_source_id_form_aborted_en", + field=models.CharField( + blank=True, + help_text="Your GovMetric source ID for when a form is aborted - This is created by KLANTINFOCUS when a list of questions is created. It is a numerical value that is unique per set of questions.", + max_length=10, + null=True, + verbose_name="GovMetric source ID form aborted", + ), + ), + migrations.AddField( + model_name="analyticstoolsconfiguration", + name="govmetric_source_id_form_aborted_nl", + field=models.CharField( + blank=True, + help_text="Your GovMetric source ID for when a form is aborted - This is created by KLANTINFOCUS when a list of questions is created. It is a numerical value that is unique per set of questions.", + max_length=10, + null=True, + verbose_name="GovMetric source ID form aborted", + ), + ), + migrations.AddField( + model_name="analyticstoolsconfiguration", + name="govmetric_source_id_form_finished_en", + field=models.CharField( + blank=True, + help_text="Your GovMetric source ID for when a form is finished - This is created by KLANTINFOCUS when a list of questions is created. It is a numerical value that is unique per set of questions.", + max_length=10, + null=True, + verbose_name="GovMetric source ID form finished", + ), + ), + migrations.AddField( + model_name="analyticstoolsconfiguration", + name="govmetric_source_id_form_finished_nl", + field=models.CharField( + blank=True, + help_text="Your GovMetric source ID for when a form is finished - This is created by KLANTINFOCUS when a list of questions is created. It is a numerical value that is unique per set of questions.", + max_length=10, + null=True, + verbose_name="GovMetric source ID form finished", + ), + ), + ] diff --git a/src/openforms/analytics_tools/migrations/0008_convert_ids_govmetric.py b/src/openforms/analytics_tools/migrations/0008_convert_ids_govmetric.py new file mode 100644 index 0000000000..397b63dedf --- /dev/null +++ b/src/openforms/analytics_tools/migrations/0008_convert_ids_govmetric.py @@ -0,0 +1,76 @@ +# Generated by Django 4.2.11 on 2024-04-12 08:43 + +from django.db import migrations + +from openforms.translations.utils import get_language_codes + + +def add_extra_source_id_govmetric(apps, schema_editor): + AnalyticsToolsConfiguration = apps.get_model( + "analytics_tools", "AnalyticsToolsConfiguration" + ) + + config = AnalyticsToolsConfiguration.objects.all().first() + if not config: + return + + language_codes = get_language_codes() + + for language_code in language_codes: + if old_id := getattr(config, f"govmetric_source_id_{language_code}"): + setattr(config, f"govmetric_source_id_form_aborted_{language_code}", old_id) + setattr( + config, f"govmetric_source_id_form_finished_{language_code}", old_id + ) + + if old_guid := getattr(config, f"govmetric_secure_guid_{language_code}"): + setattr( + config, f"govmetric_secure_guid_form_aborted_{language_code}", old_guid + ) + setattr( + config, f"govmetric_secure_guid_form_finished_{language_code}", old_guid + ) + + config.save() + + +def remove_extra_source_id_govmetric(apps, schema_editor): + AnalyticsToolsConfiguration = apps.get_model( + "analytics_tools", "AnalyticsToolsConfiguration" + ) + + config = AnalyticsToolsConfiguration.objects.first() + if not config: + return + + language_codes = get_language_codes() + + for language_code in language_codes: + new_id = getattr( + config, f"govmetric_source_id_form_finished_{language_code}" + ) or getattr(config, f"govmetric_source_id_form_aborted_{language_code}") + if new_id: + setattr(config, f"govmetric_source_id_{language_code}", new_id) + + new_guid = getattr( + config, f"govmetric_secure_guid_form_finished_{language_code}" + ) or getattr(config, f"govmetric_secure_guid_form_aborted_{language_code}") + if new_guid: + setattr(config, f"govmetric_secure_guid_{language_code}", new_guid) + + config.save() + + +class Migration(migrations.Migration): + dependencies = [ + ( + "analytics_tools", + "0007_analyticstoolsconfiguration_govmetric_secure_guid_form_abort_and_more", + ), + ] + + operations = [ + migrations.RunPython( + add_extra_source_id_govmetric, remove_extra_source_id_govmetric + ), + ] diff --git a/src/openforms/analytics_tools/migrations/0009_remove_analyticstoolsconfiguration_govmetric_secure_guid_and_more.py b/src/openforms/analytics_tools/migrations/0009_remove_analyticstoolsconfiguration_govmetric_secure_guid_and_more.py new file mode 100644 index 0000000000..054cbda4ba --- /dev/null +++ b/src/openforms/analytics_tools/migrations/0009_remove_analyticstoolsconfiguration_govmetric_secure_guid_and_more.py @@ -0,0 +1,37 @@ +# Generated by Django 4.2.11 on 2024-04-12 09:04 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("analytics_tools", "0008_convert_ids_govmetric"), + ] + + operations = [ + migrations.RemoveField( + model_name="analyticstoolsconfiguration", + name="govmetric_secure_guid", + ), + migrations.RemoveField( + model_name="analyticstoolsconfiguration", + name="govmetric_secure_guid_en", + ), + migrations.RemoveField( + model_name="analyticstoolsconfiguration", + name="govmetric_secure_guid_nl", + ), + migrations.RemoveField( + model_name="analyticstoolsconfiguration", + name="govmetric_source_id", + ), + migrations.RemoveField( + model_name="analyticstoolsconfiguration", + name="govmetric_source_id_en", + ), + migrations.RemoveField( + model_name="analyticstoolsconfiguration", + name="govmetric_source_id_nl", + ), + ] diff --git a/src/openforms/analytics_tools/models.py b/src/openforms/analytics_tools/models.py index 8e90244a9a..2a2c4fad3d 100644 --- a/src/openforms/analytics_tools/models.py +++ b/src/openforms/analytics_tools/models.py @@ -87,7 +87,10 @@ def has_enabled_toggled( enable_field_name="enable_govmetric_analytics", is_enabled_property="is_govmetric_enabled", replacements=[ - StringReplacement(needle="SOURCE_ID", field_name="govmetric_source_id"), + StringReplacement( + needle="SOURCE_ID_FORM_FINISHED", + field_name="govmetric_source_id_form_finished", + ), StringReplacement(needle="DOMAIN_HASH", callback=get_domain_hash), ], ), @@ -204,22 +207,42 @@ class AnalyticsToolsConfiguration(SingletonModel): default=False, help_text=_("Enabling this installs SiteImprove"), ) - govmetric_source_id = models.CharField( - _("GovMetric source ID"), + govmetric_source_id_form_aborted = models.CharField( + _("GovMetric source ID form aborted"), max_length=10, blank=True, help_text=_( - "Your GovMetric source ID - This is created by KLANTINFOCUS when a list of questions is created. " - "It is a numerical value that is unique per set of questions." + "Your GovMetric source ID for when a form is aborted - This is created by KLANTINFOCUS when a list of " + "questions is created. It is a numerical value that is unique per set of questions." ), ) - govmetric_secure_guid = models.CharField( - _("GovMetric secure GUID"), + govmetric_secure_guid_form_aborted = models.CharField( + _("GovMetric secure GUID form aborted"), blank=True, max_length=50, help_text=_( - "Your GovMetric secure GUID - This is an optional value. It is created by KLANTINFOCUS when a list " - "of questions is created. It is a string that is unique per set of questions." + "Your GovMetric secure GUID for when a form is aborted - This is an optional value. " + "It is created by KLANTINFOCUS when a list of questions is created. " + "It is a string that is unique per set of questions." + ), + ) + govmetric_source_id_form_finished = models.CharField( + _("GovMetric source ID form finished"), + max_length=10, + blank=True, + help_text=_( + "Your GovMetric source ID for when a form is finished - This is created by KLANTINFOCUS when a list of " + "questions is created. It is a numerical value that is unique per set of questions." + ), + ) + govmetric_secure_guid_form_finished = models.CharField( + _("GovMetric secure GUID form finished"), + blank=True, + max_length=50, + help_text=_( + "Your GovMetric secure GUID for when a form is finished - This is an optional value. " + "It is created by KLANTINFOCUS when a list of questions is created. " + "It is a string that is unique per set of questions." ), ) enable_govmetric_analytics = models.BooleanField( @@ -300,7 +323,11 @@ def is_google_analytics_enabled(self) -> bool: @property def is_govmetric_enabled(self) -> bool: - return self.govmetric_source_id and self.enable_govmetric_analytics + required_fields_present = ( + self.govmetric_source_id_form_finished + and self.govmetric_source_id_form_aborted + ) + return required_fields_present and self.enable_govmetric_analytics def save(self, *args, **kwargs): # If instance is being created, we can't find original values diff --git a/src/openforms/analytics_tools/translation.py b/src/openforms/analytics_tools/translation.py index a51bec85fb..339b2c83ad 100644 --- a/src/openforms/analytics_tools/translation.py +++ b/src/openforms/analytics_tools/translation.py @@ -5,5 +5,15 @@ @register(AnalyticsToolsConfiguration) class AnalyticsToolsConfigurationTranslationOptions(TranslationOptions): - fields = ("govmetric_source_id", "govmetric_secure_guid") - fallback_undefined = {"govmetric_source_id": "", "govmetric_secure_guid": ""} + fields = ( + "govmetric_source_id_form_aborted", + "govmetric_secure_guid_form_aborted", + "govmetric_source_id_form_finished", + "govmetric_secure_guid_form_finished", + ) + fallback_undefined = { + "govmetric_source_id_form_aborted": "", + "govmetric_secure_guid_form_aborted": "", + "govmetric_source_id_form_finished": "", + "govmetric_secure_guid_form_finished": "", + }