Newer
Older
dmpopidor / app / controllers / answers_controller.rb
# 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