Skip to content

Commit 7ce5cab

Browse files
authored
Merge pull request #1855 from alphagov/add-lang-submissions
Tell processors when forms have been submitted in Welsh
2 parents a900b3a + 6fe0262 commit 7ce5cab

27 files changed

+340
-25
lines changed

app/controllers/forms/page_controller.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ def save
3030
current_context.clear_submission_details if is_first_page?
3131

3232
validation_context = @step.autocomplete_selection_question? ? :skip_none_of_the_above_question_validation : nil
33-
if current_context.save_step(@step, context: validation_context)
33+
if current_context.save_step(@step, context: validation_context, locale:)
3434
# Redirect before logging when the question has multiple pages so that we don't send multiple form started
3535
# metrics to CloudWatch if this is the first question.
3636
return redirect_to selection_none_of_the_above_page if redirect_to_none_of_the_above_page?

app/lib/csv_generator.rb

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
require "csv"
22

33
class CsvGenerator
4-
def self.generate_submission(all_steps:, submission_reference:, timestamp:, is_s3_submission:)
4+
def self.generate_submission(all_steps:, submission_reference:, timestamp:, is_s3_submission:, language:)
55
headers = [I18n.t("submission_csv.reference"), I18n.t("submission_csv.submitted_at")]
66
values = [submission_reference, timestamp.iso8601]
77
all_steps.map do |step|
@@ -10,6 +10,11 @@ def self.generate_submission(all_steps:, submission_reference:, timestamp:, is_s
1010
values.push(*answer_parts.values)
1111
end
1212

13+
if language.present?
14+
headers.push(I18n.t("submission_csv.language"))
15+
values.push(language)
16+
end
17+
1318
CSV.generate do |csv|
1419
csv << headers
1520
csv << values

app/lib/flow/context.rb

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,14 @@ def initialize(form:, store:)
1111

1212
delegate :support_details, to: :form
1313
delegate :find_or_create, :previous_step, :next_page_slug, :next_step, :can_visit?, :completed_steps, :all_steps, to: :journey
14-
delegate :clear_stored_answer, :clear, :form_submitted?, :answers, to: :answer_store
14+
delegate :clear_stored_answer, :clear, :form_submitted?, :answers, :locales_used, to: :answer_store
1515
delegate :save_submission_details, :get_submission_reference, :requested_email_confirmation?, :clear_submission_details, to: :confirmation_details_store
1616

17-
def save_step(step, context: nil)
17+
def save_step(step, locale: :en, context: nil)
1818
return false unless step.valid?(context)
1919

20-
step.save_to_store(@answer_store)
20+
answer_store.add_locale(locale)
21+
step.save_to_store(answer_store)
2122
end
2223

2324
private
Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
11
class JsonSubmissionGenerator
2-
def self.generate_submission(form:, all_steps:, submission_reference:, timestamp:, is_s3_submission:)
2+
def self.generate_submission(form:, all_steps:, submission_reference:, timestamp:, is_s3_submission:, language:)
33
submission = {
44
"$schema" => "#{Settings.forms_product_page.base_url}/json-submissions/v1/schema",
55
form_name: form.name,
66
submission_reference:,
77
submitted_at: timestamp.getutc.iso8601(3),
88
answers: all_steps.flat_map { |step| step.show_answer_in_json(is_s3_submission) },
99
}
10+
11+
if language.present?
12+
submission[:language] = language
13+
end
14+
1015
JSON.pretty_generate(submission)
1116
end
1217
end

app/lib/store/session_answer_store.rb

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,13 @@ class SessionAnswerStore
33
include Store::Access
44

55
ANSWERS_KEY = :answers
6+
LOCALES_KEY = :locales
67

78
def initialize(store, form_id)
89
@store = store
910
@form_key = form_id.to_s
1011
@store[ANSWERS_KEY] ||= {}
12+
@store[LOCALES_KEY] ||= {}
1113
end
1214

1315
def save_step(step, answer)
@@ -25,6 +27,7 @@ def clear_stored_answer(step)
2527

2628
def clear
2729
@store[ANSWERS_KEY][@form_key] = nil
30+
@store[LOCALES_KEY][@form_key] = nil
2831
end
2932

3033
def form_submitted?
@@ -34,5 +37,15 @@ def form_submitted?
3437
def answers
3538
@store[ANSWERS_KEY][@form_key]
3639
end
40+
41+
def add_locale(locale)
42+
@store[LOCALES_KEY][@form_key] ||= []
43+
@store[LOCALES_KEY][@form_key] |= [locale.to_s]
44+
end
45+
46+
def locales_used
47+
locales = @store.dig(LOCALES_KEY, @form_key) || []
48+
locales.map(&:to_sym) || []
49+
end
3750
end
3851
end

app/mailers/aws_ses_form_submission_mailer.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ def submission_email(answer_content_html:, answer_content_plain_text:, submissio
1010
@subject = email_subject
1111
@csv_filename = csv_filename
1212
@json_filename = json_filename
13+
@welsh_submission = submission.submission_locale.to_sym == :cy
1314

1415
files.each do |name, file|
1516
attachments[name] = {

app/services/aws_ses_submission_service.rb

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ def generate_csv_submission
5252
submission_reference: @submission.reference,
5353
timestamp: @submission.submission_time,
5454
is_s3_submission: false,
55+
language:,
5556
)
5657
end
5758

@@ -62,6 +63,7 @@ def generate_json_submission
6263
submission_reference: @submission.reference,
6364
timestamp: @submission.submission_time,
6465
is_s3_submission: false,
66+
language:,
6567
)
6668
end
6769

@@ -101,4 +103,10 @@ def generate_csv_filename
101103
def generate_json_filename
102104
SubmissionFilenameGenerator.json_filename(form_name: @form.name, submission_reference: @submission.reference)
103105
end
106+
107+
def language
108+
return nil unless @form.multilingual?
109+
110+
@submission.submission_locale
111+
end
104112
end

app/services/form_submission_service.rb

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,12 @@ def submit
3333
submission_reference
3434
end
3535

36+
def submission_locale
37+
return :cy if current_context.locales_used.present? && current_context.locales_used.include?(:cy)
38+
39+
:en
40+
end
41+
3642
private
3743

3844
attr_accessor :current_context, :form, :email_confirmation_input, :mode, :timestamp, :submission_reference, :localised_form
@@ -77,6 +83,7 @@ def deliver_submission_via_s3
7783
timestamp: timestamp,
7884
submission_reference: submission_reference,
7985
is_preview: mode.preview?,
86+
submission_locale:,
8087
)
8188

8289
s3_submission_service.submit
@@ -89,6 +96,7 @@ def deliver_submission_via_email
8996
answers: current_context.answers,
9097
mode: mode,
9198
form_document: form.document_json,
99+
submission_locale:,
92100
)
93101

94102
SendSubmissionJob.perform_later(submission) do |job|

app/services/s3_submission_service.rb

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,15 @@ def initialize(journey:,
33
form:,
44
timestamp:,
55
submission_reference:,
6-
is_preview:)
6+
is_preview:,
7+
submission_locale:)
78
@journey = journey
89
@form = form
910
@timestamp = timestamp
1011
@submission_reference = submission_reference
1112
@is_preview = is_preview
1213
@file_upload_bucket_name = Settings.aws.file_upload_s3_bucket_name
14+
@submission_locale = submission_locale
1315
end
1416

1517
def submit
@@ -44,6 +46,7 @@ def generate_csv_submission
4446
submission_reference: @submission_reference,
4547
timestamp: @timestamp,
4648
is_s3_submission: true,
49+
language:,
4750
)
4851
end
4952

@@ -54,6 +57,7 @@ def generate_json_submission
5457
submission_reference: @submission_reference,
5558
timestamp: @timestamp,
5659
is_s3_submission: true,
60+
language:,
5761
)
5862
end
5963

@@ -121,4 +125,10 @@ def generate_key(filename)
121125
formatted_timestamp = @timestamp.utc.strftime("%Y%m%dT%H%M%SZ")
122126
"#{folder}/#{@form.id}/#{formatted_timestamp}_#{@submission_reference}/#{filename}"
123127
end
128+
129+
def language
130+
return nil unless @form.multilingual?
131+
132+
@submission_locale
133+
end
124134
end

app/views/aws_ses_form_submission_mailer/submission_email.html.erb

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,11 @@
99
<p>
1010
<%= I18n.t("mailer.submission.time", time: @submission.submission_time.strftime("%l:%M%P").strip, date: @submission.submission_time.strftime("%-d %B %Y") ) %>
1111
</p>
12+
<p>
13+
<% if @welsh_submission %>
14+
<%= I18n.t("mailer.submission.welsh_submission") %>
15+
<% end %>
16+
</p>
1217
<p>
1318
<%= I18n.t("mailer.submission.reference", submission_reference: @submission.reference) %>
1419
</p>

0 commit comments

Comments
 (0)