# frozen_string_literal: true class AnswersController < ApplicationController include Dmpopidor::Controllers::Answers respond_to :html # # POST /answers/create_or_update # def create_or_update # p_params = permitted_params() # # First it is checked plan exists and question exist for that plan # begin # p = Plan.find(p_params[:plan_id]) # if !p.question_exists?(p_params[:question_id]) # # rubocop:disable LineLength # render(status: :not_found, json: { # msg: _("There is no question with id %{question_id} associated to plan id %{plan_id} for which to create or update an answer") % { # question_id: p_params[:question_id], # plan_id: p_params[:plan_id] # } # }) # # rubocop:enable LineLength # return # end # rescue ActiveRecord::RecordNotFound # # rubocop:disable LineLength # render(status: :not_found, json: { # msg: _("There is no plan with id %{id} for which to create or update an answer") % { # id: p_params[:plan_id] # } # }) # # rubocop:enable LineLength # return # end # q = Question.find(p_params[:question_id]) # # rubocop:disable BlockLength # Answer.transaction do # begin # @answer = Answer.find_by!( # plan_id: p_params[:plan_id], # question_id: p_params[:question_id] # ) # authorize @answer # @answer.update(p_params.merge(user_id: current_user.id)) # if p_params[:question_option_ids].present? # # Saves the record with the updated_at set to the current time. # # Needed if only answer.question_options is updated # @answer.touch() # end # if q.question_format.rda_metadata? # @answer.update_answer_hash( # JSON.parse(params[:standards]), p_params[:text] # ) # @answer.save! # end # rescue ActiveRecord::RecordNotFound # @answer = Answer.new(p_params.merge(user_id: current_user.id)) # @answer.lock_version = 1 # authorize @answer # if q.question_format.rda_metadata? # @answer.update_answer_hash( # JSON.parse(params[:standards]), p_params[:text] # ) # end # @answer.save! # rescue ActiveRecord::StaleObjectError # @stale_answer = @answer # @answer = Answer.find_by( # plan_id: p_params[:plan_id], # question_id: p_params[:question_id] # ) # end # end # # rubocop:enable BlockLength # if @answer.present? # @plan = Plan.includes( # sections: { # questions: [ # :answers, # :question_format # ] # } # ).find(p_params[:plan_id]) # @question = @answer.question # @section = @plan.sections.find_by(id: @question.section_id) # template = @section.phase.template # # rubocop:disable LineLength # render json: { # "question" => { # "id" => @question.id, # "answer_lock_version" => @answer.lock_version, # "locking" => @stale_answer ? # render_to_string(partial: "answers/locking", locals: { # question: @question, # answer: @stale_answer, # user: @answer.user # }, formats: [:html]) : # nil, # "form" => render_to_string(partial: "answers/new_edit", locals: { # template: template, # question: @question, # answer: @answer, # readonly: false, # locking: false, # base_template_org: template.base_org # }, formats: [:html]), # "answer_status" => render_to_string(partial: "answers/status", locals: { # answer: @answer # }, formats: [:html]) # }, # "section" => { # "id" => @section.id, # "progress" => render_to_string(partial: "/org_admin/sections/progress", locals: { # section: @section, # plan: @plan # }, formats: [:html]) # }, # "plan" => { # "id" => @plan.id, # "progress" => render_to_string(partial: "plans/progress", locals: { # plan: @plan, # current_phase: @section.phase # }, formats: [:html]) # } # }.to_json # # rubocop:enable LineLength # end # end private def permitted_params permitted = params.require(:answer).permit(:id, :text, :plan_id, :user_id, :question_id, :lock_version, :research_output_id, :is_common, question_option_ids: []) # If question_option_ids has been filtered out because it was a # scalar value (e.g. radiobutton answer) if !params[:answer][:question_option_ids].nil? && !permitted[:question_option_ids].present? permitted[:question_option_ids] = [params[:answer][:question_option_ids]] end if !permitted[:id].present? permitted.delete(:id) end permitted end end