class AnswersController < ApplicationController
after_action :verify_authorized
respond_to :html
##
# PUT/PATCH /[:locale]/answer/[:id]
def update
# create a new answer based off the passed params
ans_params = params[:answer]
plan_id = ans_params[:plan_id]
phase_id = ans_params[:phase_id]
user_id = ans_params[:user_id]
lock_version = ans_params[:lock_version]
question_id = ans_params[:question_id]
@question = Question.find(question_id);
@answer = Answer.find_by(
plan_id: plan_id,
user_id: user_id,
question_id: question_id)
@old_answer = nil
if @answer.nil?
@answer = Answer.new(params[:answer])
@answer.text = params["answer-text-#{@answer.question_id}".to_sym]
authorize @answer
@answer.save
else
# if you do the obvious clone here it will overwrite the old_answer text
# in the next line
#@old_answer = @answer.clone
@old_answer = Marshal::load(Marshal.dump(@answer))
@answer.text = params["answer-text-#{@answer.question_id}".to_sym]
authorize @answer
@answer.update(params[:answer])
end
@section_id = @answer.question.section.id
# these are used for updating the status line
@username = @answer.user.name
@timestamp = ""
if @answer.text.present?
@timestamp = @answer.updated_at.iso8601
end
@nquestions = 0
@nanswers = 0
@n_section_questions = 0
@n_section_answers = 0
plan = Plan.find(plan_id)
plan.template.phases.each do |phase|
phase.sections.each do |section|
section.questions.each do |question|
@nquestions += 1
if section.id == @section_id
@n_section_questions += 1
end
question.answers = question.answers.to_a.select {|answer| answer.plan_id == plan.id}
if question.answers.present? && question.answers.first.text.present?
@nanswers += 1
if section.id == @section_id
@n_section_answers += 1
end
end
end
end
end
respond_to do |format|
# pass new lock_version back to the client or they'll never save again
@lock_version = @answer.lock_version
@old_answer = nil
format.js {}
end
rescue ActiveRecord::StaleObjectError
@lock_version = @old_answer.lock_version
respond_to do |format|
format.js {}
end
end
end