diff --git a/app/controllers/form_controller.rb b/app/controllers/form_controller.rb index c584e40ee..16ae09b57 100644 --- a/app/controllers/form_controller.rb +++ b/app/controllers/form_controller.rb @@ -126,7 +126,7 @@ private page_index = page_ids.index(@page.id) next_page_id = form.next_page(@page, @log, current_user) next_page = form.get_page(next_page_id) - previous_page = form.previous_page(page_ids, page_index, @log, current_user) + previous_page = form.previous_page(@page, @log, current_user) if next_page&.interruption_screen? || next_page_id == previous_page return send("#{@log.class.name.underscore}_#{next_page_id}_path", @log, { referrer: "check_answers" }) diff --git a/app/models/form.rb b/app/models/form.rb index af4c955f2..6a4e402ba 100644 --- a/app/models/form.rb +++ b/app/models/form.rb @@ -67,7 +67,7 @@ class Form page_ids = subsection_for_page(page).pages.map(&:id) page_index = page_ids.index(page.id) page_id = if page.interruption_screen? && log[page.questions[0].id] == 1 && page.routed_to?(log, current_user) - previous_page(page_ids, page_index, log, current_user) + previous_page(page, log, current_user) else page_ids[page_index + 1] end @@ -88,10 +88,24 @@ class Form end end - def previous_page_redirect_path(page, log, current_user) + def previous_page(page, log, current_user) page_ids = subsection_for_page(page).pages.map(&:id) page_index = page_ids.index(page.id) - previous_page = previous_page(page_ids, page_index, log, current_user) + page_id = if page_index == 0 + :check_answers + else + page_ids[page_index - 1] + end + prvs_page = get_page(page_id) + + return :check_answers if prvs_page.nil? + return prvs_page.id if prvs_page.routed_to?(log, current_user) + + previous_page(prvs_page, log, current_user) + end + + def previous_page_redirect_path(page, log, current_user) + previous_page = previous_page(page, log, current_user) if previous_page == :check_answers "#{type}_log_#{subsection_for_page(page).id}_check_answers_path" else @@ -217,13 +231,6 @@ class Form questions.select { |q| q.type == "numeric" } end - def previous_page(page_ids, page_index, log, current_user) - prev_page = get_page(page_ids[page_index - 1]) - return prev_page.id if prev_page.routed_to?(log, current_user) - - previous_page(page_ids, page_index - 1, log, current_user) - end - def send_chain(arr, log) Array(arr).inject(log) { |o, a| o.public_send(*a) } end diff --git a/app/views/form/page.html.erb b/app/views/form/page.html.erb index 7b8e89a83..410492a04 100644 --- a/app/views/form/page.html.erb +++ b/app/views/form/page.html.erb @@ -1,7 +1,11 @@ <% content_for :title, @page.header.presence || @page.questions.first.header.html_safe %> <% content_for :before_content do %> - <%= govuk_back_link(href: send(@log.form.previous_page_redirect_path(@page, @log, current_user), @log)) %> + <% if url_for(:back).include?("check_answers") %> + <%= govuk_back_link(href: :back) %> + <% else %> + <%= govuk_back_link(href: send(@log.form.previous_page_redirect_path(@page, @log, current_user), @log)) %> + <% end %> <% end %>