diff --git a/web/app/assets/javascripts/meta_tracking.js b/web/app/assets/javascripts/meta_tracking.js index e94961246..08bb0b508 100644 --- a/web/app/assets/javascripts/meta_tracking.js +++ b/web/app/assets/javascripts/meta_tracking.js @@ -15,6 +15,7 @@ var location = window.location; this.handleFbc(location.search); this.handleFbp(); + this.handleUtm(location.search); }, // 1. Parsing and storing _fbc (Click ID) @@ -33,6 +34,19 @@ } }, + handleUtm: function (searchParams) { + var utmParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content']; + var self = this; + // forEach not supported in IE8, but this is modern enough or we can use for loop + for (var i = 0; i < utmParams.length; i++) { + var param = utmParams[i]; + var value = self.getQueryParam(param, searchParams); + if (value) { + self.setCookie(param, value, 90); + } + } + }, + // 2. Handling _fbp (Browser ID) handleFbp: function () { if (!this.getCookie('_fbp')) { diff --git a/web/app/controllers/api_recurly_controller.rb b/web/app/controllers/api_recurly_controller.rb index 7b12d9fc1..f06e9124e 100644 --- a/web/app/controllers/api_recurly_controller.rb +++ b/web/app/controllers/api_recurly_controller.rb @@ -42,8 +42,8 @@ class ApiRecurlyController < ApiController affiliate_referral_id: cookies[:affiliate_visitor], origin: origin_cookie, timezone: current_timezone, - facebook_click_id: cookies['_fbc'], - facebook_browser_id: cookies['_fbp'] + facebook_click_id: cookies[:_fbc], + facebook_browser_id: cookies[:_fbp] } options = User.musician_defaults(request.remote_ip, ApplicationHelper.base_uri(request) + "/confirm", any_user, options) diff --git a/web/app/controllers/application_controller.rb b/web/app/controllers/application_controller.rb index d092e08e2..31ef9c635 100644 --- a/web/app/controllers/application_controller.rb +++ b/web/app/controllers/application_controller.rb @@ -49,11 +49,22 @@ class ApplicationController < ActionController::Base def origin_cookie begin - JSON.parse(cookies[:origin]) if cookies[:origin] + data = JSON.parse(cookies[:origin]) if cookies[:origin] rescue - nil + data = nil end + # Backfill with individual UTM cookies if present + # This supports cases where the frontend (jam-ui/web) set specific cookies + # or if the JSON cookie is missing/incomplete. + %w(utm_source utm_medium utm_campaign utm_term utm_content).each do |key| + if cookies[key].present? + data ||= {} + data[key] = cookies[key] + end + end + + data end def track_origin diff --git a/web/app/controllers/landings_controller.rb b/web/app/controllers/landings_controller.rb index a2d5b8076..ae11d82a5 100644 --- a/web/app/controllers/landings_controller.rb +++ b/web/app/controllers/landings_controller.rb @@ -635,6 +635,10 @@ class LandingsController < ApplicationController musician: true, timezone: current_timezone, first_name: @first, + origin: origin_cookie, + affiliate_referral_id: cookies[:affiliate_visitor], + facebook_click_id: cookies[:_fbc], + facebook_browser_id: cookies[:_fbp], instruments: [{:instrument_id => @instrument, :proficiency_level => 1, :priority => 1}]) if @user.errors.any? first = @user.errors.first diff --git a/web/app/controllers/sessions_controller.rb b/web/app/controllers/sessions_controller.rb index b1d1139ad..d07381b67 100644 --- a/web/app/controllers/sessions_controller.rb +++ b/web/app/controllers/sessions_controller.rb @@ -118,7 +118,10 @@ class SessionsController < ApplicationController last_name: auth_hash[:info][:last_name], email: auth_hash[:info][:email], timezone: current_timezone, - affiliate_referral_id: cookies[:affiliate_visitor]) + affiliate_referral_id: cookies[:affiliate_visitor], + origin: origin_cookie, + facebook_click_id: cookies[:_fbc], + facebook_browser_id: cookies[:_fbp]) # Users who sign up using oauth are presumed to have valid email adddresses. user.confirm_email! @@ -194,7 +197,9 @@ class SessionsController < ApplicationController location: {:country => nil, :state => nil, :city => nil}, affiliate_referral_id: cookies[:affiliate_visitor], origin: origin_cookie, - timezone: current_timezone + timezone: current_timezone, + facebook_click_id: cookies[:_fbc], + facebook_browser_id: cookies[:_fbp] } options = User.musician_defaults(request.remote_ip, ApplicationHelper.base_uri(request) + "/confirm", any_user, options)