liquid_feedback_frontend
view app/main/survey/_action/answer.lua @ 1735:5a8a09119865
Added survey feature
| author | bsw | 
|---|---|
| date | Fri Oct 08 00:09:23 2021 +0200 (2021-10-08) | 
| parents | |
| children | 3d61fa0d6474 | 
 line source
     1 local id = param.get("question_id", atom.integer)
     3 local question = SurveyQuestion:by_id(id)
     5 local survey = Survey:get_open()
     7 if question.survey_id ~= survey.id then
     8   slot.put_into("error", _"Internal error 2")
     9   return false
    10 end
    12 if not question or not question.survey.open then
    13   slot.put_into("error", _"Internal error 3")
    14   return false
    15 end
    17 local survey_member = SurveyMember:by_pk(question.survey.id, app.session.member_id)
    18 if not survey_member then
    19   return execute.view { module = "index", view = "404" }
    20 end
    22 local answer_set = survey_member.answer_set
    23 if not answer_set then
    24   return execute.view { module = "index", view = "404" }
    25 end
    27 local answer = SurveyAnswer:by_pk(answer_set.ident, question.id)
    28 if not answer then
    29   answer = SurveyAnswer:new()
    30   answer.survey_answer_set_ident = answer_set.ident
    31   answer.survey_question_id = question.id
    32 end
    34 local given_answer = param.get("answer")
    36 if question.answer_type == "radio" then
    37   if not given_answer then
    38     slot.put_into("error", _"Please choose an option!")
    39     return false
    40   end
    41   local answer_valid = false
    42   for i, answer_option in ipairs(question.answer_options) do
    43     if given_answer == answer_option then
    44       answer_valid = true
    45     end
    46   end
    47   if not answer_valid then
    48     slot.put_into("error", _"Internal error 1")
    49     return false
    50   end
    51 end
    53 answer.answer = given_answer
    54 answer:save()
    56 local question
    57 local answers_by_question_id = {}
    58 for i, answer in ipairs(answer_set.answers) do
    59   answers_by_question_id[answer.survey_question_id] = answer
    60 end
    61 for i, q in ipairs(survey.questions) do
    62   if not question and not answers_by_question_id[q.id] then
    63     question = q
    64   end
    65 end
    67 if not question then
    68   survey_member.survey_answer_set_ident = nil
    69   survey_member.finished = 'now'
    70   survey_member:save()
    71 end
    73 return true
