From 5aa1a768f978e301aac624a0517fcd512894a6de Mon Sep 17 00:00:00 2001 From: Pranav Date: Tue, 19 May 2026 11:43:06 -0700 Subject: [PATCH] Add GTM to the settings page --- .../api/v1/accounts/portals_controller.rb | 2 +- .../api/v1/accounts/portals/_portal.json.jbuilder | 1 + app/views/layouts/_portal_analytics.html.erb | 13 +++++++++++++ .../layouts/_portal_analytics_noscript.html.erb | 6 ++++++ app/views/layouts/_portal_head.html.erb | 2 ++ app/views/layouts/portal.html+documentation.erb | 1 + app/views/layouts/portal.html.erb | 1 + 7 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 app/views/layouts/_portal_analytics.html.erb create mode 100644 app/views/layouts/_portal_analytics_noscript.html.erb diff --git a/app/controllers/api/v1/accounts/portals_controller.rb b/app/controllers/api/v1/accounts/portals_controller.rb index 770018e3c..23f87af73 100644 --- a/app/controllers/api/v1/accounts/portals_controller.rb +++ b/app/controllers/api/v1/accounts/portals_controller.rb @@ -79,7 +79,7 @@ class Api::V1::Accounts::PortalsController < Api::V1::Accounts::BaseController params.require(:portal).permit( :id, :color, :custom_domain, :header_text, :homepage_link, :name, :page_title, :slug, :archived, - { config: [:default_locale, :layout, { allowed_locales: [] }, { draft_locales: [] }, + { config: [:default_locale, :layout, :gtm_container_id, { allowed_locales: [] }, { draft_locales: [] }, { social_profiles: %i[facebook x instagram linkedin youtube tiktok github whatsapp] }] } ) end diff --git a/app/views/api/v1/accounts/portals/_portal.json.jbuilder b/app/views/api/v1/accounts/portals/_portal.json.jbuilder index 08b3e8b36..2bbda193c 100644 --- a/app/views/api/v1/accounts/portals/_portal.json.jbuilder +++ b/app/views/api/v1/accounts/portals/_portal.json.jbuilder @@ -18,6 +18,7 @@ json.config do json.default_locale portal.default_locale json.layout portal.layout json.social_profiles portal.social_profiles + json.gtm_container_id portal.gtm_container_id end if portal.channel_web_widget diff --git a/app/views/layouts/_portal_analytics.html.erb b/app/views/layouts/_portal_analytics.html.erb new file mode 100644 index 000000000..0812de979 --- /dev/null +++ b/app/views/layouts/_portal_analytics.html.erb @@ -0,0 +1,13 @@ +<%# Google Tag Manager. The container ID is validated against Portal::GTM_CONTAINER_ID_FORMAT, %> +<%# so it is restricted to `GTM-` + alphanumerics and is safe to interpolate here. %> +<% if @portal.gtm_container_id.present? %> + + + +<% end %> diff --git a/app/views/layouts/_portal_analytics_noscript.html.erb b/app/views/layouts/_portal_analytics_noscript.html.erb new file mode 100644 index 000000000..5bb9023e0 --- /dev/null +++ b/app/views/layouts/_portal_analytics_noscript.html.erb @@ -0,0 +1,6 @@ +<% if @portal.gtm_container_id.present? %> + + + +<% end %> diff --git a/app/views/layouts/_portal_head.html.erb b/app/views/layouts/_portal_head.html.erb index a04e09d3f..ca5c2c9d3 100644 --- a/app/views/layouts/_portal_head.html.erb +++ b/app/views/layouts/_portal_head.html.erb @@ -3,6 +3,8 @@ +<%= render 'layouts/portal_analytics' %> + <%= vite_client_tag %> <%= vite_javascript_tag 'portal' %>