From 73e688e1c09765099565a8d4f72c5fa04adc1ab7 Mon Sep 17 00:00:00 2001 From: Ryan Wold <64987852+ryanwoldatwork@users.noreply.github.com> Date: Mon, 13 Jan 2025 13:16:16 -0800 Subject: [PATCH] capturing submission query string --- app/controllers/submissions_controller.rb | 2 +- app/models/form.rb | 1 + app/models/submission.rb | 1 + app/serializers/submission_serializer.rb | 1 + app/views/admin/submissions/show.html.erb | 8 ++++++++ app/views/components/widget/_fba.js.erb | 1 + .../20250110215441_add_querystring_to_submissions.rb | 5 +++++ db/schema.rb | 3 ++- spec/features/touchpoints_spec.rb | 4 +++- spec/models/form_spec.rb | 1 + 10 files changed, 24 insertions(+), 3 deletions(-) create mode 100644 db/migrate/20250110215441_add_querystring_to_submissions.rb diff --git a/app/controllers/submissions_controller.rb b/app/controllers/submissions_controller.rb index 4c73beae5..3d61bffd6 100644 --- a/app/controllers/submissions_controller.rb +++ b/app/controllers/submissions_controller.rb @@ -150,7 +150,7 @@ def set_form def submission_params permitted_fields = @form.questions.collect(&:answer_field) - permitted_fields << %i[language location_code referer hostname page fba_directive] + permitted_fields << %i[language location_code referer hostname page query_string fba_directive] params.require(:submission).permit(permitted_fields) end diff --git a/app/models/form.rb b/app/models/form.rb index 4c56a0cd1..3d28e3d4d 100644 --- a/app/models/form.rb +++ b/app/models/form.rb @@ -629,6 +629,7 @@ def hashed_fields_for_export archived: 'Archived', flagged: 'Flagged', page: 'Page', + query_string: 'Query string', hostname: 'Hostname', referer: 'Referrer', created_at: 'Created At', diff --git a/app/models/submission.rb b/app/models/submission.rb index 484a7c657..9248f5b80 100644 --- a/app/models/submission.rb +++ b/app/models/submission.rb @@ -58,6 +58,7 @@ def validate_custom_form answered_questions.delete('user_agent') answered_questions.delete('hostname') answered_questions.delete('page') + answered_questions.delete('query_string') answered_questions.delete('ip_address') answered_questions.delete('language') answered_questions.delete('referer') diff --git a/app/serializers/submission_serializer.rb b/app/serializers/submission_serializer.rb index ffce138ec..7ac67208f 100644 --- a/app/serializers/submission_serializer.rb +++ b/app/serializers/submission_serializer.rb @@ -8,6 +8,7 @@ class SubmissionSerializer < ActiveModel::Serializer :referer, :hostname, :page, + :query_string, :user_agent, :answer_01, :answer_02, diff --git a/app/views/admin/submissions/show.html.erb b/app/views/admin/submissions/show.html.erb index a91ab9db1..e5a110b78 100644 --- a/app/views/admin/submissions/show.html.erb +++ b/app/views/admin/submissions/show.html.erb @@ -155,6 +155,14 @@ <%= sanitize(@submission.page) %> + + + Query string + + + <%= sanitize(@submission.query_string) %> + + Referer diff --git a/app/views/components/widget/_fba.js.erb b/app/views/components/widget/_fba.js.erb index 3e9819b44..0840da004 100644 --- a/app/views/components/widget/_fba.js.erb +++ b/app/views/components/widget/_fba.js.erb @@ -537,6 +537,7 @@ function FBAform(d, N) { params["referer"] = d.referrer; params["hostname"] = N.location.hostname; params["page"] = N.location.pathname; + params["query_string"] = N.location.search; params["location_code"] = form.querySelector("#fba_location_code") ? form.querySelector("#fba_location_code").value : null; params["fba_directive"] = form.querySelector("#fba_directive") ? form.querySelector("#fba_directive").value : null; params["language"] = "en"; diff --git a/db/migrate/20250110215441_add_querystring_to_submissions.rb b/db/migrate/20250110215441_add_querystring_to_submissions.rb new file mode 100644 index 000000000..eceda98d8 --- /dev/null +++ b/db/migrate/20250110215441_add_querystring_to_submissions.rb @@ -0,0 +1,5 @@ +class AddQuerystringToSubmissions < ActiveRecord::Migration[7.2] + def change + add_column :submissions, :query_string, :text, default: nil, limit: 2048 + end +end diff --git a/db/schema.rb b/db/schema.rb index d86645841..bf93a37d2 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.2].define(version: 2024_12_19_001513) do +ActiveRecord::Schema[7.2].define(version: 2025_01_10_215441) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -650,6 +650,7 @@ t.string "hostname" t.string "tags", default: [], array: true t.integer "spam_score", default: 0 + t.text "query_string" t.index ["created_at"], name: "index_submissions_on_created_at" t.index ["flagged"], name: "index_submissions_on_flagged" t.index ["form_id"], name: "index_submissions_on_form_id" diff --git a/spec/features/touchpoints_spec.rb b/spec/features/touchpoints_spec.rb index 5ab99544d..1a7095fff 100644 --- a/spec/features/touchpoints_spec.rb +++ b/spec/features/touchpoints_spec.rb @@ -466,7 +466,9 @@ # Asserting against the database/model directly here isn't ideal. # An alternative is to send location_code back to the client and assert against it - expect(Submission.last.location_code).to eq 'TEST_LOCATION_CODE' + last_submission = Submission.last + expect(last_submission.location_code).to eq('TEST_LOCATION_CODE') + expect(last_submission.query_string).to eq("?location_code=TEST_LOCATION_CODE") end end end diff --git a/spec/models/form_spec.rb b/spec/models/form_spec.rb index 156576779..01e8b36bd 100644 --- a/spec/models/form_spec.rb +++ b/spec/models/form_spec.rb @@ -65,6 +65,7 @@ :archived, :flagged, :page, + :query_string, :hostname, :referer, :created_at,