metadata_presenter 3.3.14 → 3.3.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fce1f7719e73302d134f91f03ce4bfbd239e9303d1d2a08bc5594f9b9882585c
4
- data.tar.gz: 5c15e0714aaa369a8898ba00d27f0199972bed43dfc6bffb99e6c0e8be35d0e9
3
+ metadata.gz: 6a56bfee298fe7e9138b1d60ee8c29af5685240ae893a665e6b920ca3ccdf9af
4
+ data.tar.gz: 62db49deaa88439f4c8e8efe962c6bf544de01b194351374444a487ec6580462
5
5
  SHA512:
6
- metadata.gz: cfb93f873bdd5cd77e49819a924178b45c2a30e35c8dd6aab829011c058a49ca6a79aa3d94917f136e68c3274fa722b6c9864ee8f5ae759a957f40ac4c6dee95
7
- data.tar.gz: 6c68732e6f9cbcac962ce1ef24847d317a041a3b0b48ebacc7589ddd4bfc419770d0fc049dd61427446f82e08d7baa29741538908538f54503afd9a2d21ec7ca
6
+ metadata.gz: 29bd9a966ac9a90033e9c75d33a508e59608bad99aba8966f1be17f20aa8f8cfcf38c68cc6d5ae5a5022a06a4c4fabfb57bf5cf614cb849e629ce2e588b60bee
7
+ data.tar.gz: 5da8149a431708bdff1b03317d9903b51815a1d1e505ce473a58d26b9c1f332b61d7e69005d11e21e7913fdf7cf2ccad409aeeb911b98691e8c1f4121ae4a31a
@@ -0,0 +1,31 @@
1
+ module MetadataPresenter
2
+ module Concerns
3
+ module SaveAndReturn
4
+ extend ActiveSupport::Concern
5
+
6
+ included do
7
+ helper_method :page_slug, :label_text
8
+ end
9
+
10
+ def page_slug
11
+ if params && params[:page_slug].present?
12
+ return params[:page_slug]
13
+ end
14
+ if session['returning_slug'].present?
15
+ return session['returning_slug']
16
+ end
17
+ if session['saved_form'].present?
18
+ return session['saved_form']['page_slug']
19
+ end
20
+
21
+ if params['saved_form'].present?
22
+ params['saved_form']['page_slug']
23
+ end
24
+ end
25
+
26
+ def label_text(text)
27
+ "<h2 class='govuk-heading-m'>#{text}</h2>"
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,119 @@
1
+ module MetadataPresenter
2
+ class ResumeController < EngineController
3
+ include Concerns::SaveAndReturn
4
+
5
+ helper_method :get_service_name, :get_uuid, :pages_presenters
6
+
7
+ def return
8
+ response = get_saved_progress(get_uuid)
9
+
10
+ if response.status == 404
11
+ redirect_to '/record_error' and return
12
+ end
13
+
14
+ if response.status == 400
15
+ redirect_to '/record_failure' and return
16
+ end
17
+
18
+ if response.status == 422
19
+ redirect_to '/already_used' and return
20
+ end
21
+
22
+ @saved_form = SavedForm.new.from_json(response.body.to_json)
23
+ @resume_form = ResumeForm.new(@saved_form.secret_question)
24
+ end
25
+
26
+ # rubocop:disable Style/RescueStandardError
27
+ def submit_secret_answer
28
+ response = get_saved_progress(get_uuid)
29
+
30
+ if response.status != 200
31
+ if response.status == 400
32
+ redirect_to '/record_failure' and return
33
+ end
34
+
35
+ redirect_to '/record_error' and return
36
+ end
37
+
38
+ @saved_form = SavedForm.new.from_json(response.body.to_json)
39
+ @resume_form = ResumeForm.new(@saved_form.secret_question)
40
+ @resume_form.secret_answer = resume_form_params[:secret_answer]
41
+ @resume_form.recorded_answer = @saved_form.secret_answer
42
+ @resume_form.attempts_remaining = 2 - @saved_form.attempts.to_i
43
+
44
+ if @resume_form.valid?
45
+ # redirect back to right place in form
46
+ session[:user_id] = @saved_form.user_id
47
+ session[:user_token] = @saved_form.user_token
48
+ session[:returning_slug] = @saved_form.page_slug
49
+
50
+ invalidate_record(@saved_form.id)
51
+
52
+ if @saved_form.service_version == service.version_id
53
+ redirect_to '/resume_progress' and return
54
+ else
55
+ redirect_to '/resume_from_start' and return
56
+ end
57
+ else
58
+ if @resume_form.attempts_remaining <= 0
59
+ begin
60
+ increment_record_counter(@saved_form.id)
61
+ rescue => e
62
+ Rails.logger.info(e)
63
+ redirect_to '/record_failure' and return
64
+ end
65
+ redirect_to '/record_failure' and return
66
+ end
67
+
68
+ increment_record_counter(@saved_form.id)
69
+
70
+ render :return, params: { uuid: @saved_form.id }
71
+ end
72
+ end
73
+ # rubocop:enable Style/RescueStandardError
74
+
75
+ def resume_progress
76
+ @user_data = load_user_data
77
+
78
+ @page ||= service.checkanswers_page
79
+
80
+ if @page
81
+ @page_answers = PageAnswers.new(@page, @answered_pages)
82
+ else
83
+ not_found
84
+ end
85
+ end
86
+
87
+ def answered_pages
88
+ TraversedPages.new(service, @user_data, @page).all
89
+ end
90
+
91
+ def pages_presenters
92
+ PageAnswersPresenter.map(
93
+ view: view_context,
94
+ pages: answered_pages,
95
+ answers: @user_data
96
+ )
97
+ end
98
+
99
+ private
100
+
101
+ def resume_form_params
102
+ params.require(:resume_form).permit(
103
+ :secret_answer, :uuid
104
+ )
105
+ end
106
+
107
+ def get_uuid
108
+ if params[:uuid].present?
109
+ return params[:uuid]
110
+ end
111
+
112
+ resume_form_params[:uuid].presence
113
+ end
114
+
115
+ def get_service_name
116
+ service.service_name
117
+ end
118
+ end
119
+ end
@@ -1,27 +1,13 @@
1
1
  module MetadataPresenter
2
2
  class SaveAndReturnController < EngineController
3
- helper_method :secret_questions, :page_slug, :confirmed_email, :get_service_name, :get_uuid, :label_text
3
+ include Concerns::SaveAndReturn
4
+
5
+ helper_method :secret_questions, :confirmed_email
4
6
 
5
7
  def show
6
8
  @saved_form = SavedForm.new
7
9
  end
8
10
 
9
- def page_slug
10
- if params && params[:page_slug].present?
11
- return params[:page_slug]
12
- end
13
- if session['returning_slug'].present?
14
- return session['returning_slug']
15
- end
16
- if session['saved_form'].present?
17
- return session['saved_form']['page_slug']
18
- end
19
-
20
- if params['saved_form'].present?
21
- params['saved_form']['page_slug']
22
- end
23
- end
24
-
25
11
  def confirmed_email
26
12
  email = session['saved_form']['email']
27
13
  session['saved_form']['email'] = nil
@@ -77,96 +63,6 @@ module MetadataPresenter
77
63
  end
78
64
  end
79
65
 
80
- def return
81
- response = get_saved_progress(get_uuid)
82
-
83
- if response.status == 404
84
- redirect_to '/record_error' and return
85
- end
86
-
87
- if response.status == 400
88
- redirect_to '/record_failure' and return
89
- end
90
-
91
- if response.status == 422
92
- redirect_to '/already_used' and return
93
- end
94
-
95
- @saved_form = SavedForm.new.from_json(response.body.to_json)
96
- @resume_form = ResumeForm.new(@saved_form.secret_question)
97
- end
98
-
99
- def get_uuid
100
- if params[:uuid].present?
101
- return params[:uuid]
102
- end
103
-
104
- params[:resume_form][:uuid].presence
105
- end
106
-
107
- # rubocop:disable Style/RescueStandardError
108
- def submit_secret_answer
109
- response = get_saved_progress(get_uuid)
110
-
111
- if response.status != 200
112
- if response.status == 400
113
- redirect_to '/record_failure' and return
114
- end
115
-
116
- redirect_to '/record_error' and return
117
- end
118
-
119
- @saved_form = SavedForm.new.from_json(response.body.to_json)
120
- @resume_form = ResumeForm.new(@saved_form.secret_question)
121
- @resume_form.secret_answer = resume_form_params[:resume_form][:secret_answer]
122
- @resume_form.recorded_answer = @saved_form.secret_answer
123
- @resume_form.attempts_remaining = 2 - @saved_form.attempts.to_i
124
-
125
- if @resume_form.valid?
126
- # redirect back to right place in form
127
- session[:user_id] = @saved_form.user_id
128
- session[:user_token] = @saved_form.user_token
129
- session[:returning_slug] = @saved_form.page_slug
130
-
131
- invalidate_record(@saved_form.id)
132
-
133
- if @saved_form.service_version == service.version_id
134
- redirect_to '/resume_progress' and return
135
- else
136
- redirect_to '/resume_from_start' and return
137
- end
138
- else
139
- if @resume_form.attempts_remaining <= 0
140
- begin
141
- increment_record_counter(@saved_form.id)
142
- rescue => e
143
- Rails.logger.info(e)
144
- redirect_to '/record_failure' and return
145
- end
146
- redirect_to '/record_failure' and return
147
- end
148
-
149
- increment_record_counter(@saved_form.id)
150
-
151
- render :return, params: { uuid: @saved_form.id }
152
- end
153
- end
154
- # rubocop:enable Style/RescueStandardError
155
-
156
- def resume_progress
157
- @user_data = load_user_data
158
-
159
- @page ||= service.checkanswers_page
160
-
161
- if @page
162
- @page_answers = PageAnswers.new(@page, @answered_pages)
163
-
164
- render template: 'metadata_presenter/save_and_return/resume_progress'
165
- else
166
- not_found
167
- end
168
- end
169
-
170
66
  def save_progress
171
67
  session['saved_form']['user_id'] = nil
172
68
  session['saved_form']['user_token'] = nil
@@ -174,19 +70,6 @@ module MetadataPresenter
174
70
  session['user_token'] = nil
175
71
  end
176
72
 
177
- def answered_pages
178
- TraversedPages.new(service, @user_data, @page).all
179
- end
180
-
181
- def pages_presenters
182
- PageAnswersPresenter.map(
183
- view: view_context,
184
- pages: answered_pages,
185
- answers: @user_data
186
- )
187
- end
188
- helper_method :pages_presenters
189
-
190
73
  def secret_questions
191
74
  [
192
75
  OpenStruct.new(id: 1, name: I18n.t('presenter.save_and_return.secret_questions.one')),
@@ -201,6 +84,8 @@ module MetadataPresenter
201
84
  secret_questions.select { |s| s.id.to_s == question.to_s }.first.name
202
85
  end
203
86
 
87
+ private
88
+
204
89
  def saved_form_params
205
90
  params.permit(
206
91
  :email,
@@ -218,23 +103,6 @@ module MetadataPresenter
218
103
  )
219
104
  end
220
105
 
221
- def resume_form_params
222
- params.permit(
223
- { resume_form: %i[secret_answer uuid] },
224
- :authenticity_token
225
- )
226
- end
227
-
228
- def get_service_name
229
- service.service_name
230
- end
231
-
232
- def label_text(text)
233
- "<h2 class='govuk-heading-m'>#{text}</h2>"
234
- end
235
-
236
- private
237
-
238
106
  def service_slug
239
107
  @service_slug ||= service_slug_config
240
108
  end
@@ -2,6 +2,8 @@ require 'govspeak'
2
2
 
3
3
  module MetadataPresenter
4
4
  module ApplicationHelper
5
+ OLD_BODY_DEFAULT_CONTENT = 'Body section'.freeze
6
+
5
7
  def main_title(component:, tag: :h1, classes: 'govuk-heading-xl')
6
8
  content_tag(tag, class: classes) do
7
9
  component.humanised_title
@@ -21,6 +23,15 @@ module MetadataPresenter
21
23
  MetadataPresenter::DefaultText[property]
22
24
  end
23
25
 
26
+ # we used to have some placeholder text in the body key, which was always replaced
27
+ # we since exposed the body key in an optional content area for certain pages, so forms created before that
28
+ # need to have their old default content ignored
29
+ def page_body_content
30
+ if @page.body
31
+ @page.body == OLD_BODY_DEFAULT_CONTENT ? '' : @page.body
32
+ end
33
+ end
34
+
24
35
  def default_title(component_type)
25
36
  MetadataPresenter::DefaultMetadata["component.#{component_type}"]&.[]('label') ||
26
37
  MetadataPresenter::DefaultMetadata["component.#{component_type}"]&.[]('legend')
@@ -3,8 +3,8 @@
3
3
  class="fb-editable"
4
4
  type="content"
5
5
  default-content="<%= default_text('body') %>"
6
- content="<%= @page.body %>"
6
+ content="<%= page_body_content %>"
7
7
  data-fb-content-id="<%= "page[body]" %>">
8
- <%= to_html(@page.body) %>
8
+ <%= to_html(page_body_content) %>
9
9
  </editable-content>
10
10
  <%- end %>
@@ -1,4 +1,5 @@
1
1
  <legend class="govuk-heading-xl"><%= input_title %></legend>
2
+ <%= render 'metadata_presenter/attribute/body' %>
2
3
 
3
4
  <% if answered?(component.id) && @page_answers.send(component.id)[component.id].compact.count.positive? %>
4
5
  <label id="uploaded-file-summary-list-label"><p class="govuk-heading-s"><%= uploads_count %></p></label>
@@ -15,6 +16,8 @@
15
16
  </div>
16
17
  <% end %>
17
18
  </dl>
19
+ <% else %>
20
+ <label id="uploaded-file-summary-list-label"><p class="govuk-heading-s"><%= t('presenter.questions.multiupload.upload_file') %></p></label>
18
21
  <% end %>
19
22
 
20
23
  <% if uploads_remaining.positive? || editable? %>
@@ -1,10 +1,13 @@
1
1
  <div class="fb-main-grid-wrapper">
2
2
  <div class="govuk-grid-row">
3
3
  <div class="govuk-grid-column-two-thirds">
4
- <h1 id="page-heading" class="govuk-heading-xl"><%= t('presenter.save_and_return.resume.heading', service_name: get_service_name) %></h1>
5
- <p><%= t('presenter.save_and_return.resume.content') %></p>
4
+
6
5
  <%= form_for @resume_form do |f| %>
7
6
  <%= f.govuk_error_summary(t('presenter.errors.summary_heading')) %>
7
+
8
+ <h1 id="page-heading" class="govuk-heading-xl"><%= t('presenter.save_and_return.resume.heading', service_name: get_service_name) %></h1>
9
+ <p><%= t('presenter.save_and_return.resume.content') %></p>
10
+
8
11
  <%= f.hidden_field(:uuid, value: get_uuid) %>
9
12
  <div class="govuk-form-group">
10
13
  <%=
@@ -66,13 +66,14 @@ cy:
66
66
  upload:
67
67
  remove_file: (cy) Remove file
68
68
  multiupload:
69
+ upload_file: '(cy) Upload a file'
69
70
  remove_file: '(cy) Delete'
70
71
  add_another: '(cy) Add another file'
71
72
  single_upload: '(cy) Maximum file size 7MB'
72
73
  answered_singular: '(cy) You can add 1 more file (maximum 7MB per file)'
73
74
  answered_plural: '(cy) You can add %{num} more files (maximum 7MB per file)'
74
- answered_count_singular: '(cy) You have added 1 file'
75
- answered_count_plural: '(cy) You have added %{num} files'
75
+ answered_count_singular: '(cy) You have uploaded 1 file'
76
+ answered_count_plural: '(cy) You have uploaded %{num} files'
76
77
  singular: '(cy) You can add 1 more file (maximum 7MB)'
77
78
  plural: '(cy) You can add up to %{num} files (maximum 7MB per file)'
78
79
  none: "(cy) You can't add any more files. Remove a file if you need to add a different one."
@@ -57,13 +57,14 @@ en:
57
57
  upload:
58
58
  remove_file: Remove file
59
59
  multiupload:
60
+ upload_file: 'Upload a file'
60
61
  remove_file: 'Delete'
61
62
  add_another: 'Add another file'
62
63
  single_upload: 'Maximum file size 7MB'
63
64
  answered_singular: 'You can add 1 more file (maximum 7MB per file)'
64
65
  answered_plural: 'You can add %{num} more files (maximum 7MB per file)'
65
- answered_count_singular: 'You have added 1 file'
66
- answered_count_plural: 'You have added %{num} files'
66
+ answered_count_singular: 'You have uploaded 1 file'
67
+ answered_count_plural: 'You have uploaded %{num} files'
67
68
  singular: 'You can add 1 more file (maximum 7MB)'
68
69
  plural: 'You can add up to %{num} files (maximum 7MB per file)'
69
70
  none: "You can't add any more files. Remove a file if you need to add a different one."
data/config/routes.rb CHANGED
@@ -12,19 +12,22 @@ MetadataPresenter::Engine.routes.draw do
12
12
  get 'session/expired', to: 'session#expired'
13
13
  get 'session/complete', to: 'session#complete'
14
14
 
15
+ # save form journey
15
16
  get 'save', to: 'save_and_return#show'
16
17
  post 'saved_forms', to: 'save_and_return#create'
17
18
  get 'save/email_confirmation', to: 'save_and_return#email_confirmation'
18
19
  post 'email_confirmations', to: 'save_and_return#confirm_email'
19
20
  get 'save/progress_saved', to: 'save_and_return#save_progress'
20
- get '/return/:uuid', to: 'save_and_return#return'
21
- post 'resume_forms', to: 'save_and_return#submit_secret_answer'
22
- get 'record_error', to: 'save_and_return#record_error'
23
- get 'record_failure', to: 'save_and_return#record_failure'
24
- get 'expired', to: 'save_and_return#record_link_expired'
25
- get 'already_used', to: 'save_and_return#record_link_used'
26
- get 'resume_from_start', to: 'save_and_return#resume_from_start'
27
- get 'resume_progress', to: 'save_and_return#resume_progress'
21
+
22
+ # resume form journey
23
+ get '/return/:uuid', to: 'resume#return'
24
+ post 'resume_forms', to: 'resume#submit_secret_answer'
25
+ get 'resume_from_start', to: 'resume#resume_from_start'
26
+ get 'resume_progress', to: 'resume#resume_progress'
27
+ get 'record_error', to: 'resume#record_error'
28
+ get 'record_failure', to: 'resume#record_failure'
29
+ get 'expired', to: 'resume#record_link_expired'
30
+ get 'already_used', to: 'resume#record_link_used'
28
31
 
29
32
  post '/', to: 'answers#create'
30
33
  match '*path', to: 'answers#create', via: :post
@@ -4,7 +4,7 @@
4
4
  "section_heading": "",
5
5
  "heading": "",
6
6
  "lede": "",
7
- "body": "Body section",
7
+ "body": "",
8
8
  "components": [],
9
9
  "url": ""
10
10
  }
@@ -1,3 +1,3 @@
1
1
  module MetadataPresenter
2
- VERSION = '3.3.14'.freeze
2
+ VERSION = '3.3.16'.freeze
3
3
  end
@@ -12,7 +12,7 @@
12
12
  "maxItems": 1,
13
13
  "accepts": [
14
14
  "control"
15
- ]
15
+ ]
16
16
  }
17
17
  },
18
18
  "allOf": [
@@ -26,7 +26,6 @@
26
26
  ],
27
27
  "surplus_properties": [
28
28
  "heading",
29
- "lede",
30
- "body"
29
+ "lede"
31
30
  ]
32
31
  }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: metadata_presenter
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.3.14
4
+ version: 3.3.16
5
5
  platform: ruby
6
6
  authors:
7
7
  - MoJ Forms
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-02-08 00:00:00.000000000 Z
11
+ date: 2024-02-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: govuk_design_system_formbuilder
@@ -331,9 +331,11 @@ files:
331
331
  - app/assets/stylesheets/metadata_presenter/application.css
332
332
  - app/controllers/metadata_presenter/answers_controller.rb
333
333
  - app/controllers/metadata_presenter/change_answer_controller.rb
334
+ - app/controllers/metadata_presenter/concerns/save_and_return.rb
334
335
  - app/controllers/metadata_presenter/engine_controller.rb
335
336
  - app/controllers/metadata_presenter/file_controller.rb
336
337
  - app/controllers/metadata_presenter/pages_controller.rb
338
+ - app/controllers/metadata_presenter/resume_controller.rb
337
339
  - app/controllers/metadata_presenter/save_and_return_controller.rb
338
340
  - app/controllers/metadata_presenter/service_controller.rb
339
341
  - app/controllers/metadata_presenter/session_controller.rb
@@ -457,14 +459,14 @@ files:
457
459
  - app/views/metadata_presenter/page/singlequestion.html.erb
458
460
  - app/views/metadata_presenter/page/standalone.html.erb
459
461
  - app/views/metadata_presenter/page/start.html.erb
462
+ - app/views/metadata_presenter/resume/record_error.html.erb
463
+ - app/views/metadata_presenter/resume/record_failure.html.erb
464
+ - app/views/metadata_presenter/resume/record_link_expired.html.erb
465
+ - app/views/metadata_presenter/resume/record_link_used.html.erb
466
+ - app/views/metadata_presenter/resume/resume_from_start.html.erb
467
+ - app/views/metadata_presenter/resume/resume_progress.html.erb
468
+ - app/views/metadata_presenter/resume/return.html.erb
460
469
  - app/views/metadata_presenter/save_and_return/email_confirmation.html.erb
461
- - app/views/metadata_presenter/save_and_return/record_error.html.erb
462
- - app/views/metadata_presenter/save_and_return/record_failure.html.erb
463
- - app/views/metadata_presenter/save_and_return/record_link_expired.html.erb
464
- - app/views/metadata_presenter/save_and_return/record_link_used.html.erb
465
- - app/views/metadata_presenter/save_and_return/resume_from_start.html.erb
466
- - app/views/metadata_presenter/save_and_return/resume_progress.html.erb
467
- - app/views/metadata_presenter/save_and_return/return.html.erb
468
470
  - app/views/metadata_presenter/save_and_return/save_progress.html.erb
469
471
  - app/views/metadata_presenter/save_and_return/show.html.erb
470
472
  - app/views/metadata_presenter/session/_timeout_fallback.html.erb