bsw/jbe@0: local issue bsw/jbe@0: local area bsw/jbe@0: bsw/jbe@0: local issue_id = param.get("issue_id", atom.integer) bsw/jbe@0: if issue_id then bsw/jbe@0: issue = Issue:new_selector():add_where{"id=?",issue_id}:single_object_mode():exec() bsw@1045: issue:load_everything_for_member_id(app.session.member_id) bsw/jbe@0: area = issue.area bsw/jbe@0: bsw/jbe@0: else bsw/jbe@0: local area_id = param.get("area_id", atom.integer) bsw/jbe@0: area = Area:new_selector():add_where{"id=?",area_id}:single_object_mode():exec() bsw@1045: area:load_delegation_info_once_for_member_id(app.session.member_id) bsw/jbe@0: end bsw/jbe@0: bsw@904: local polling = param.get("polling", atom.boolean) bsw@904: bsw@901: local policy_id = param.get("policy_id", atom.integer) bsw@901: local policy bsw@901: bsw@1045: local preview = param.get("preview") bsw@1045: bsw@1045: if #(slot.get_content("error")) > 0 then bsw@1045: preview = false bsw@1045: end bsw@1045: bsw@901: if policy_id then bsw@901: policy = Policy:by_id(policy_id) bsw@901: end bsw@901: bsw/jbe@0: if issue_id then bsw@1045: execute.view { bsw@1045: module = "issue", view = "_head", bsw@1045: params = { issue = issue, member = app.session.member } bsw@1045: } bsw/jbe@0: else bsw/jbe@1309: --[[ bsw@1045: execute.view { bsw@1045: module = "area", view = "_head", bsw@1045: params = { area = area, member = app.session.member } bsw@1045: } bsw/jbe@1309: --]] bsw/jbe@1309: --[[ bsw@1045: execute.view { bsw@1045: module = "initiative", view = "_sidebar_policies", bsw@1045: params = { bsw@1045: area = area, bsw@1045: } bsw@1045: } bsw/jbe@1309: --]] bsw/jbe@0: end bsw/jbe@0: bsw/jbe@0: ui.form{ bsw/jbe@0: module = "initiative", bsw/jbe@0: action = "create", bsw/jbe@0: params = { bsw/jbe@0: area_id = area.id, bsw/jbe@0: issue_id = issue and issue.id or nil bsw/jbe@0: }, bsw/jbe@0: attr = { class = "vertical" }, bsw/jbe@0: content = function() bsw/jbe@1309: ui.grid{ content = function() bsw/jbe@1309: ui.cell_main{ content = function() bsw/jbe@1309: ui.container{ attr = { class = "mdl-card mdl-shadow--2dp mdl-card__fullwidth" }, content = function() bsw/jbe@1309: ui.container{ attr = { class = "mdl-card__title mdl-card--border" }, content = function() bsw/jbe@1309: if preview then bsw/jbe@1309: ui.heading { attr = { class = "mdl-card__title-text" }, level = 2, content = _"Preview" } bsw/jbe@1309: elseif issue_id then bsw/jbe@1309: ui.heading { attr = { class = "mdl-card__title-text" }, level = 2, content = _"New competing initiative" } bsw/jbe@1309: else bsw/jbe@1309: ui.heading { attr = { class = "mdl-card__title-text" }, level = 2, content = _"Create a new issue" } bsw@1045: end bsw/jbe@1309: end } bsw/jbe@1309: bsw/jbe@1309: ui.container{ attr = { class = "mdl-card__content mdl-card--border" }, content = function() bsw@1045: bsw@1045: bsw/jbe@1309: if preview then bsw/jbe@1309: bsw/jbe@1309: ui.section( function() bsw/jbe@1309: ui.sectionHead( function() bsw/jbe@1309: ui.heading{ level = 1, content = encode.html(param.get("name")) } bsw/jbe@1309: if not issue then bsw/jbe@1309: ui.container { content = policy.name } bsw/jbe@1309: end bsw/jbe@1309: if param.get("free_timing") then bsw/jbe@1309: ui.container { content = param.get("free_timing") } bsw/jbe@1309: end bsw/jbe@1309: slot.put("
") bsw/jbe@1309: bsw/jbe@1309: local draft_text = param.get("draft") bsw/jbe@1309: local draft_text = util.wysihtml_preproc(draft_text) bsw@1045: bsw/jbe@1309: ui.field.hidden{ name = "policy_id", value = param.get("policy_id") } bsw/jbe@1309: ui.field.hidden{ name = "name", value = param.get("name") } bsw/jbe@1309: if config.initiative_abstract then bsw/jbe@1309: ui.field.hidden{ name = "abstract", value = param.get("abstract") } bsw/jbe@1309: ui.container{ bsw/jbe@1309: attr = { class = "abstract" }, bsw/jbe@1309: content = param.get("abstract") bsw/jbe@1309: } bsw/jbe@1309: slot.put("
") bsw/jbe@1309: end bsw/jbe@1309: ui.field.hidden{ name = "draft", value = draft_text } bsw/jbe@1309: ui.field.hidden{ name = "free_timing", value = param.get("free_timing") } bsw/jbe@1309: ui.field.hidden{ name = "polling", value = param.get("polling", atom.boolean) } bsw/jbe@1309: ui.field.hidden{ name = "location", value = param.get("location") } bsw/jbe@1309: local formatting_engine bsw/jbe@1309: if config.enforce_formatting_engine then bsw/jbe@1309: formatting_engine = config.enforce_formatting_engine bsw/jbe@1309: else bsw/jbe@1309: formatting_engine = param.get("formatting_engine") bsw/jbe@1309: end bsw/jbe@1309: ui.container{ bsw/jbe@1309: attr = { class = "draft" }, bsw/jbe@1309: content = function() bsw/jbe@1309: slot.put(draft_text) bsw/jbe@1309: end bsw/jbe@1309: } bsw/jbe@1309: slot.put("
") bsw@1045: bsw/jbe@1309: ui.tag{ bsw/jbe@1309: tag = "input", bsw/jbe@1309: attr = { bsw/jbe@1309: type = "submit", bsw/jbe@1309: class = "mdl-button mdl-js-button mdl-button--raised mdl-js-ripple-effect mdl-button--colored", bsw/jbe@1309: value = _'Publish now' bsw/jbe@1309: }, bsw/jbe@1309: content = "" bsw/jbe@1309: } bsw/jbe@1309: slot.put("   ") bsw/jbe@1309: ui.tag{ bsw/jbe@1309: tag = "input", bsw/jbe@1309: attr = { bsw/jbe@1309: type = "submit", bsw/jbe@1309: name = "edit", bsw/jbe@1309: class = "mdl-button mdl-js-button mdl-button--raised mdl-js-ripple-effect", bsw/jbe@1309: value = _'Edit again' bsw/jbe@1309: }, bsw/jbe@1309: content = "" bsw/jbe@1309: } bsw/jbe@1309: slot.put("   ") bsw/jbe@1309: local class = "mdl-button mdl-js-button mdl-button--raised mdl-js-ripple-effect" bsw/jbe@1309: if issue then bsw/jbe@1309: ui.link{ content = _"Cancel", module = "issue", view = "show", id = issue.id, attr = { class = class } } bsw/jbe@1309: else bsw/jbe@1309: ui.link{ content = _"Cancel", module = "index", view = "index", params = { unit = area.unit_id, area = area.id }, attr = { class = class } } bsw/jbe@1309: end bsw/jbe@1309: end ) bsw/jbe@1309: end ) bsw/jbe@1309: else bsw/jbe@1309: bsw/jbe@1309: ui.sectionRow( function() bsw/jbe@1309: --[[ bsw/jbe@1309: if not preview and not issue_id then bsw/jbe@1309: ui.container { attr = { class = "section" }, content = _"Before creating a new issue, please check any existant issues before, if the topic is already in discussion." } bsw/jbe@1309: slot.put("
") bsw/jbe@1309: end bsw/jbe@1309: --]] bsw/jbe@1309: if not issue_id then bsw/jbe@1309: local tmp = { { id = -1, name = "" } } bsw/jbe@1309: for i, allowed_policy in ipairs(area.allowed_policies) do bsw/jbe@1309: if not allowed_policy.polling or app.session.member:has_polling_right_for_unit_id(area.unit_id) then bsw/jbe@1309: tmp[#tmp+1] = allowed_policy bsw/jbe@1309: end bsw/jbe@1309: end bsw/jbe@1309: ui.container{ content = _"Please choose a policy for the new issue:" } bsw/jbe@1309: ui.field.select{ bsw/jbe@1309: name = "policy_id", bsw/jbe@1309: foreign_records = tmp, bsw/jbe@1309: foreign_id = "id", bsw/jbe@1309: foreign_name = "name", bsw/jbe@1309: value = param.get("policy_id", atom.integer) or area.default_policy and area.default_policy.id bsw/jbe@1309: } bsw/jbe@1309: if policy and policy.free_timeable then bsw/jbe@1309: local available_timings bsw/jbe@1309: if config.free_timing and config.free_timing.available_func then bsw/jbe@1309: available_timings = config.free_timing.available_func(policy) bsw/jbe@1309: if available_timings == false then bsw/jbe@1309: slot.put_into("error", "error in free timing config") bsw/jbe@1309: return false bsw/jbe@1309: end bsw/jbe@1309: end bsw/jbe@1309: ui.heading{ level = 4, content = _"Free timing:" } bsw/jbe@1309: if available_timings then bsw/jbe@1309: ui.field.select{ bsw/jbe@1309: name = "free_timing", bsw/jbe@1309: foreign_records = available_timings, bsw/jbe@1309: foreign_id = "id", bsw/jbe@1309: foreign_name = "name", bsw/jbe@1309: value = param.get("free_timing") bsw/jbe@1309: } bsw/jbe@1309: else bsw/jbe@1309: ui.field.text{ bsw/jbe@1309: name = "free_timing", bsw/jbe@1309: value = param.get("free_timing") bsw/jbe@1309: } bsw/jbe@1309: end bsw/jbe@1309: end bsw/jbe@1309: end bsw@1045: bsw/jbe@1309: if issue and issue.policy.polling and app.session.member:has_polling_right_for_unit_id(area.unit_id) then bsw/jbe@1309: slot.put("
") bsw/jbe@1309: ui.field.boolean{ name = "polling", label = _"No admission needed", value = polling } bsw/jbe@1309: end bsw/jbe@1309: bsw/jbe@1309: ui.container{ attr = { class = "mdl-textfield mdl-js-textfield mdl-textfield--floating-label mdl-card__fullwidth" }, content = function () bsw/jbe@1309: ui.field.text{ bsw/jbe@1309: attr = { id = "lf-initiative__name", class = "mdl-textfield__input" }, bsw/jbe@1309: label_attr = { class = "mdl-textfield__label", ["for"] = "lf-initiative__name" }, bsw/jbe@1309: label = _"Title", bsw/jbe@1309: name = "name", bsw/jbe@1309: value = param.get("name") bsw/jbe@1309: } bsw/jbe@1309: end } bsw/jbe@1309: bsw/jbe@1309: if config.initiative_abstract then bsw/jbe@1309: ui.container { content = _"Enter abstract:" } bsw/jbe@1309: ui.container{ attr = { class = "mdl-textfield mdl-js-textfield mdl-textfield--expandable mdl-textfield__fullwidth" }, content = function() bsw/jbe@1309: ui.field.text{ bsw/jbe@1309: name = "abstract", bsw/jbe@1309: multiline = true, bsw/jbe@1309: attr = { id = "abstract", style = "height: 20ex; width: 100%;" }, bsw/jbe@1309: value = param.get("abstract") bsw/jbe@1309: } bsw/jbe@1309: end } bsw/jbe@1309: end bsw/jbe@1309: bsw/jbe@1309: ui.container { content = _"Enter your proposal and/or reasons:" } bsw/jbe@1309: ui.container{ attr = { class = "mdl-textfield mdl-js-textfield mdl-textfield--expandable mdl-textfield__fullwidth" }, content = function() bsw/jbe@1309: ui.field.wysihtml{ bsw/jbe@1309: name = "draft", bsw/jbe@1309: multiline = true, bsw/jbe@1309: attr = { id = "draft", style = "height: 50ex; width: 100%;" }, bsw/jbe@1309: value = param.get("draft") or config.draft_template bsw/jbe@1309: } bsw/jbe@1309: end } bsw/jbe@1309: if not issue or issue.state == "admission" or issue.state == "discussion" then bsw/jbe@1309: ui.container { content = _"You can change your text again anytime during admission and discussion phase" } bsw/jbe@1309: else bsw/jbe@1309: ui.container { content = _"You cannot change your text again later, because this issue is already in verfication phase!" } bsw/jbe@1309: end bsw/jbe@1309: slot.put("
") bsw/jbe@1309: bsw/jbe@1309: slot.put("
") bsw/jbe@1309: ui.tag{ bsw/jbe@1309: tag = "input", bsw/jbe@1309: attr = { bsw/jbe@1309: type = "submit", bsw/jbe@1309: name = "preview", bsw/jbe@1309: class = "mdl-button mdl-js-button mdl-button--raised mdl-js-ripple-effect mdl-button--colored", bsw/jbe@1309: value = _'Preview' bsw/jbe@1309: }, bsw/jbe@1309: content = "" bsw/jbe@1309: } bsw/jbe@1309: slot.put("   ") bsw/jbe@1309: bsw/jbe@1309: local class = "mdl-button mdl-js-button mdl-button--raised mdl-js-ripple-effect" bsw/jbe@1309: if issue then bsw/jbe@1309: bsw/jbe@1309: ui.link{ content = _"Cancel", module = "issue", view = "show", id = issue.id, attr = { class = class } } bsw/jbe@1309: else bsw/jbe@1309: ui.link{ content = _"Cancel", module = "index", view = "index", params = { unit = area.unit_id, area = area.id }, attr = { class = class } } bsw/jbe@1309: end bsw/jbe@1309: end ) bsw/jbe@1309: end bsw/jbe@1309: end } bsw/jbe@1309: end } bsw/jbe@1309: end } bsw/jbe@1309: if config.map or config.firstlife then bsw/jbe@1309: ui.cell_sidebar{ content = function() bsw/jbe@1309: ui.container{ attr = { class = "mdl-special-card map mdl-shadow--2dp" }, content = function() bsw/jbe@1309: ui.field.location{ name = "location", value = param.get("location") } bsw/jbe@1309: end } bsw/jbe@1309: end } bsw/jbe@1309: end bsw/jbe@1309: end } bsw/jbe@0: end bsw@907: }