bsw@1735: local survey = Survey:get_open() bsw@1735: if not survey then bsw@1735: return execute.view { module = "index", view = "404" } bsw@1735: end bsw@1735: bsw@1735: local survey_member = SurveyMember:by_pk(survey.id, app.session.member_id) bsw@1735: if not survey_member then bsw@1735: return execute.view { module = "index", view = "404" } bsw@1735: end bsw@1735: bsw@1735: local question bsw@1735: bsw@1735: if survey_member then bsw@1735: local answer_set = survey_member.answer_set bsw@1735: if answer_set then bsw@1735: local answers_by_question_id = {} bsw@1735: for i, answer in ipairs(answer_set.answers) do bsw@1735: answers_by_question_id[answer.survey_question_id] = answer bsw@1735: end bsw@1735: for i, q in ipairs(survey.questions) do bsw@1735: if not question and not answers_by_question_id[q.id] then bsw@1735: question = q bsw@1735: end bsw@1735: end bsw@1735: end bsw@1735: end bsw@1735: bsw@1742: ui.title(survey.title) bsw@1735: ui.grid{ content = function() bsw@1735: ui.cell_main{ content = function() bsw@1735: bsw@1740: ui.container{ attr = { class = "mdl-card mdl-card__fullwidth mdl-shadow--2dp survey" }, content = function() bsw@1735: ui.container{ attr = { class = "mdl-card__title mdl-card--border" }, content = function() bsw@1742: ui.heading { attr = { class = "mdl-card__title-text" }, level = 2, content = question.question } bsw@1735: end } bsw@1735: ui.container{ attr = { class = "mdl-card__content mdl-card--border" }, content = function() bsw@1735: if survey_member.finished then bsw@1735: ui.container{ content = function() bsw@1735: slot.put(survey.finished_text) bsw@1735: end } bsw@1735: slot.put("
") bsw@1735: ui.link{ bsw@1735: attr = { class = "mdl-button mdl-js-button mdl-button--raised mdl-button--colored" }, bsw@1735: module = "index", view = "index", content = _"Go to start page" bsw@1735: } bsw@1735: return bsw@1735: else bsw@1735: if question.description then bsw@1735: ui.container{ content = question.description } bsw@1735: end bsw@1735: ui.form{ bsw@1735: module = "survey", action = "answer", bsw@1735: routing = { bsw@1735: ok = { mode = "redirect", module = "survey", view = "participate" }, bsw@1735: error = { mode = "forward", module = "survey", view = "participate" }, bsw@1735: }, bsw@1735: content = function() bsw@1735: ui.field.hidden{ name = "question_id", value = question.id } bsw@1743: bsw@1735: if question.answer_type == "radio" then bsw@1735: for i, answer_option in ipairs(question.answer_options) do bsw@1735: ui.container{ content = function() bsw@1735: ui.tag{ tag = "label", attr = { bsw@1735: class = "mdl-radio mdl-js-radio mdl-js-ripple-effect", bsw@1735: ["for"] = "answer_" .. i bsw@1735: }, bsw@1735: content = function() bsw@1735: ui.tag{ bsw@1735: tag = "input", bsw@1735: attr = { bsw@1735: id = "answer_" .. i, bsw@1735: class = "mdl-radio__button", bsw@1735: type = "radio", bsw@1735: name = "answer", bsw@1735: value = answer_option, bsw@1735: checked = param.get("answer") == answer_option and "checked" or nil, bsw@1735: } bsw@1735: } bsw@1735: ui.tag{ bsw@1735: attr = { class = "mdl-radio__label", ['for'] = "answer_" .. i }, bsw@1735: content = answer_option bsw@1735: } bsw@1735: end bsw@1735: } bsw@1735: end } bsw@1743: bsw@1744: elseif question.answer_type == "checkbox" then bsw@1743: for i, answer_option in ipairs(question.answer_options) do bsw@1743: ui.container{ content = function() bsw@1743: ui.tag{ tag = "label", attr = { bsw@1743: class = "mdl-checkbox mdl-js-checkbox mdl-js-ripple-effect", bsw@1743: ["for"] = "answer_" .. i bsw@1743: }, bsw@1743: content = function() bsw@1743: ui.tag{ bsw@1743: tag = "input", bsw@1743: attr = { bsw@1743: id = "answer_" .. i, bsw@1743: class = "mdl-checkbox__button", bsw@1743: type = "checkbox", bsw@1743: name = "answer_" .. answer_option, bsw@1743: value = "1", bsw@1743: checked = param.get("answer_" .. answer_option) and "checked" or nil, bsw@1743: } bsw@1743: } bsw@1743: ui.tag{ bsw@1743: attr = { class = "mdl-checkbox__label", ['for'] = "answer_" .. i }, bsw@1743: content = answer_option bsw@1743: } bsw@1743: end bsw@1743: } bsw@1743: end } bsw@1735: end bsw@1743: bsw@1735: slot.put("
") bsw@1735: ui.tag{ bsw@1735: tag = "input", bsw@1735: attr = { bsw@1735: type = "submit", bsw@1735: class = "mdl-button mdl-js-button mdl-button--raised mdl-button--colored", bsw@1735: value = _"Next step" bsw@1735: }, bsw@1735: content = "" bsw@1735: } bsw@1735: end bsw@1735: end bsw@1735: } bsw@1735: end bsw@1735: end } bsw@1735: end } bsw@1735: end } bsw@1735: end }