liquid_feedback_frontend

annotate app/main/survey/participate.lua @ 1751:ddbd46a34b6a

Allow API lookup of member profile fields
author bsw
date Tue Oct 12 15:37:28 2021 +0200 (2021-10-12)
parents d15767492064
children 6d69bc46440e
rev   line source
bsw@1735 1 local survey = Survey:get_open()
bsw@1735 2 if not survey then
bsw@1735 3 return execute.view { module = "index", view = "404" }
bsw@1735 4 end
bsw@1735 5
bsw@1735 6 local survey_member = SurveyMember:by_pk(survey.id, app.session.member_id)
bsw@1735 7 if not survey_member then
bsw@1735 8 return execute.view { module = "index", view = "404" }
bsw@1735 9 end
bsw@1735 10
bsw@1735 11 local question
bsw@1735 12
bsw@1735 13 if survey_member then
bsw@1735 14 local answer_set = survey_member.answer_set
bsw@1735 15 if answer_set then
bsw@1735 16 local answers_by_question_id = {}
bsw@1735 17 for i, answer in ipairs(answer_set.answers) do
bsw@1735 18 answers_by_question_id[answer.survey_question_id] = answer
bsw@1735 19 end
bsw@1735 20 for i, q in ipairs(survey.questions) do
bsw@1735 21 if not question and not answers_by_question_id[q.id] then
bsw@1735 22 question = q
bsw@1735 23 end
bsw@1735 24 end
bsw@1735 25 end
bsw@1735 26 end
bsw@1735 27
bsw@1742 28 ui.title(survey.title)
bsw@1735 29 ui.grid{ content = function()
bsw@1735 30 ui.cell_main{ content = function()
bsw@1735 31
bsw@1740 32 ui.container{ attr = { class = "mdl-card mdl-card__fullwidth mdl-shadow--2dp survey" }, content = function()
bsw@1735 33 ui.container{ attr = { class = "mdl-card__title mdl-card--border" }, content = function()
bsw@1746 34 ui.heading { attr = { class = "mdl-card__title-text" }, level = 2, content = function()
bsw@1746 35 if survey_member.finished then
bsw@1746 36 slot.put(survey.finished_title)
bsw@1746 37 else
bsw@1746 38 ui.tag{ content = question.question }
bsw@1746 39 end
bsw@1747 40 end }
bsw@1735 41 end }
bsw@1735 42 ui.container{ attr = { class = "mdl-card__content mdl-card--border" }, content = function()
bsw@1735 43 if survey_member.finished then
bsw@1735 44 ui.container{ content = function()
bsw@1735 45 slot.put(survey.finished_text)
bsw@1735 46 end }
bsw@1735 47 slot.put("<br>")
bsw@1735 48 ui.link{
bsw@1735 49 attr = { class = "mdl-button mdl-js-button mdl-button--raised mdl-button--colored" },
bsw@1735 50 module = "index", view = "index", content = _"Go to start page"
bsw@1735 51 }
bsw@1735 52 return
bsw@1735 53 else
bsw@1735 54 if question.description then
bsw@1735 55 ui.container{ content = question.description }
bsw@1750 56 slot.put("<br>")
bsw@1735 57 end
bsw@1735 58 ui.form{
bsw@1735 59 module = "survey", action = "answer",
bsw@1735 60 routing = {
bsw@1735 61 ok = { mode = "redirect", module = "survey", view = "participate" },
bsw@1735 62 error = { mode = "forward", module = "survey", view = "participate" },
bsw@1735 63 },
bsw@1735 64 content = function()
bsw@1735 65 ui.field.hidden{ name = "question_id", value = question.id }
bsw@1743 66
bsw@1735 67 if question.answer_type == "radio" then
bsw@1735 68 for i, answer_option in ipairs(question.answer_options) do
bsw@1735 69 ui.container{ content = function()
bsw@1735 70 ui.tag{ tag = "label", attr = {
bsw@1735 71 class = "mdl-radio mdl-js-radio mdl-js-ripple-effect",
bsw@1735 72 ["for"] = "answer_" .. i
bsw@1735 73 },
bsw@1735 74 content = function()
bsw@1735 75 ui.tag{
bsw@1735 76 tag = "input",
bsw@1735 77 attr = {
bsw@1735 78 id = "answer_" .. i,
bsw@1735 79 class = "mdl-radio__button",
bsw@1735 80 type = "radio",
bsw@1735 81 name = "answer",
bsw@1735 82 value = answer_option,
bsw@1735 83 checked = param.get("answer") == answer_option and "checked" or nil,
bsw@1735 84 }
bsw@1735 85 }
bsw@1735 86 ui.tag{
bsw@1735 87 attr = { class = "mdl-radio__label", ['for'] = "answer_" .. i },
bsw@1735 88 content = answer_option
bsw@1735 89 }
bsw@1735 90 end
bsw@1735 91 }
bsw@1735 92 end }
bsw@1745 93 end
bsw@1743 94
bsw@1744 95 elseif question.answer_type == "checkbox" then
bsw@1743 96 for i, answer_option in ipairs(question.answer_options) do
bsw@1743 97 ui.container{ content = function()
bsw@1743 98 ui.tag{ tag = "label", attr = {
bsw@1743 99 class = "mdl-checkbox mdl-js-checkbox mdl-js-ripple-effect",
bsw@1743 100 ["for"] = "answer_" .. i
bsw@1743 101 },
bsw@1743 102 content = function()
bsw@1743 103 ui.tag{
bsw@1743 104 tag = "input",
bsw@1743 105 attr = {
bsw@1743 106 id = "answer_" .. i,
bsw@1749 107 class = "mdl-checkbox__input",
bsw@1743 108 type = "checkbox",
bsw@1743 109 name = "answer_" .. answer_option,
bsw@1743 110 value = "1",
bsw@1743 111 checked = param.get("answer_" .. answer_option) and "checked" or nil,
bsw@1743 112 }
bsw@1743 113 }
bsw@1743 114 ui.tag{
bsw@1743 115 attr = { class = "mdl-checkbox__label", ['for'] = "answer_" .. i },
bsw@1743 116 content = answer_option
bsw@1743 117 }
bsw@1743 118 end
bsw@1743 119 }
bsw@1743 120 end }
bsw@1735 121 end
bsw@1745 122 end
bsw@1743 123
bsw@1745 124 slot.put("<br>")
bsw@1745 125 ui.tag{
bsw@1745 126 tag = "input",
bsw@1745 127 attr = {
bsw@1745 128 type = "submit",
bsw@1745 129 class = "mdl-button mdl-js-button mdl-button--raised mdl-button--colored",
bsw@1745 130 value = _"Next step"
bsw@1745 131 },
bsw@1745 132 content = ""
bsw@1745 133 }
bsw@1735 134 end
bsw@1735 135 }
bsw@1735 136 end
bsw@1735 137 end }
bsw@1735 138 end }
bsw@1735 139 end }
bsw@1735 140 end }

Impressum / About Us