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 }
|