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

Impressum / About Us