bsw@1045: local initiative = Initiative:by_id ( param.get_id() ) bsw@1045: local member = app.session.member bsw@1045: bsw@1045: if not initiative then bsw@1045: execute.view { module = "index", view = "404" } bsw@1045: request.set_status("404 Not Found") bsw@1045: return bsw@1045: end bsw@1045: bsw/jbe@1309: app.current_initiative = initiative bsw/jbe@1309: bsw@1045: local issue_info bsw@1045: bsw@1045: if member then bsw@1045: initiative:load_everything_for_member_id(member.id) bsw@1045: initiative.issue:load_everything_for_member_id(member.id) bsw@1045: issue_info = initiative.issue.member_info bsw@1045: end bsw@1045: bsw@1145: local direct_supporter bsw@1145: bsw@1045: if app.session.member_id then bsw@1045: direct_supporter = initiative.issue.member_info.own_participation and initiative.member_info.supported bsw@1045: end bsw@718: bsw/jbe@1309: slot.put_into("header", initiative.display_name) bsw@1045: bsw/jbe@1309: execute.view{ module = "issue", view = "_head", params = { issue = initiative.issue, link_issue = true } } bsw@1045: bsw/jbe@1309: ui.grid{ content = function() bsw@1045: bsw/jbe@1309: ui.cell_main{ content = function() bsw/jbe@1309: ui.container{ attr = { class = "mdl-card mdl-card__fullwidth mdl-shadow--2dp" }, content = function() bsw/jbe@1309: execute.view{ bsw/jbe@1309: module = "initiative", view = "_head", params = { bsw/jbe@1309: initiative = initiative bsw@1045: } bsw/jbe@1309: } bsw@1045: bsw@1519: if initiative.location and initiative.location.marker_link then bsw@1519: ui.container { bsw@1519: attr = { class = "mdl-card__content mdl-card--no-bottom-pad" }, bsw@1519: content = function() bsw@1519: ui.tag{ content = _"This initiative references a FirstLife object." } bsw@1519: slot.put(" ") bsw@1519: ui.link{ external = initiative.location.marker_link, content = _"Open in FirstLife" } bsw@1519: end bsw@1519: } bsw@1519: end bsw@1519: bsw/jbe@1309: if direct_supporter and not initiative.issue.closed then bsw/jbe@1309: local supporter = app.session.member:get_reference_selector("supporters") bsw/jbe@1309: :add_where{ "initiative_id = ?", initiative.id } bsw/jbe@1309: :optional_object_mode() bsw/jbe@1309: :exec() bsw/jbe@1309: bsw/jbe@1309: if supporter then bsw@1045: bsw/jbe@1309: local old_draft_id = supporter.draft_id bsw/jbe@1309: local new_draft_id = initiative.current_draft.id bsw/jbe@1309: bsw/jbe@1309: if old_draft_id ~= new_draft_id then bsw/jbe@1309: ui.container { bsw/jbe@1309: attr = { class = "mdl-card__content mdl-card--no-bottom-pad mdl-card--notice" }, bsw/jbe@1309: content = _"The draft of this initiative has been updated!" bsw/jbe@1309: } bsw/jbe@1309: ui.container { bsw/jbe@1309: attr = { class = "mdl-card__actions mdl-card--action-border mdl-card--notice" }, bsw/jbe@1309: content = function () bsw/jbe@1309: if not initiative.revoked then bsw/jbe@1309: ui.link{ bsw/jbe@1309: attr = { class = "mdl-button mdl-js-button mdl-button--raised" }, bsw/jbe@1309: text = _"refresh my support", bsw/jbe@1309: module = "initiative", bsw/jbe@1309: action = "add_support", bsw/jbe@1309: id = initiative.id, bsw/jbe@1309: params = { draft_id = initiative.current_draft.id }, bsw/jbe@1309: routing = { bsw/jbe@1309: default = { bsw/jbe@1309: mode = "redirect", bsw/jbe@1309: module = "initiative", bsw/jbe@1309: view = "show", bsw/jbe@1309: id = initiative.id bsw/jbe@1309: } bsw/jbe@1309: } bsw/jbe@1309: } bsw/jbe@1309: slot.put("   ") bsw/jbe@1309: ui.link{ bsw/jbe@1309: attr = { class = "mdl-button mdl-js-button mdl-button--raised" }, bsw/jbe@1309: content = _"show differences", bsw/jbe@1309: module = "draft", bsw/jbe@1309: view = "diff", bsw/jbe@1309: params = { bsw/jbe@1309: old_draft_id = old_draft_id, bsw/jbe@1309: new_draft_id = new_draft_id bsw/jbe@1309: } bsw/jbe@1309: } bsw/jbe@1309: slot.put("   ") bsw@1045: end bsw/jbe@1309: ui.link{ bsw/jbe@1309: attr = { class = "mdl-button mdl-js-button mdl-button--raised" }, bsw/jbe@1309: text = _"remove my support", bsw/jbe@1309: module = "initiative", bsw/jbe@1309: action = "remove_support", bsw/jbe@1309: id = initiative.id, bsw/jbe@1309: routing = { bsw/jbe@1309: default = { bsw/jbe@1309: mode = "redirect", bsw/jbe@1309: module = "initiative", bsw/jbe@1309: view = "show", bsw/jbe@1309: id = initiative.id bsw@1045: } bsw@1045: } bsw@1061: } bsw@1061: bsw/jbe@1309: end bsw/jbe@1309: } bsw/jbe@1309: end bsw/jbe@1309: end bsw/jbe@1309: end bsw/jbe@1309: bsw/jbe@1309: if config.render_external_reference and config.render_external_reference.initiative then bsw/jbe@1309: config.render_external_reference.initiative(initiative, function (callback) bsw/jbe@1309: ui.sectionRow(callback) bsw/jbe@1309: end) bsw/jbe@1309: end bsw/jbe@1309: local draft_content = initiative.current_draft.content bsw/jbe@1309: if config.initiative_abstract then bsw/jbe@1309: local abstract = string.match(draft_content, "(.+)") bsw/jbe@1309: if abstract then bsw/jbe@1309: draft_content = string.match(draft_content, "(.*)") bsw/jbe@1309: end bsw/jbe@1309: end bsw/jbe@1309: ui.container { bsw/jbe@1309: attr = { class = "draft mdl-card__content mdl-card--border" }, bsw/jbe@1309: content = function () bsw/jbe@1309: if initiative.current_draft.formatting_engine == "html" or not initiative.current_draft.formatting_engine then bsw/jbe@1309: if config.draft_filter then bsw/jbe@1309: slot.put(config.draft_filter(draft_content)) bsw/jbe@1309: else bsw/jbe@1309: slot.put(draft_content) bsw@1045: end bsw/jbe@1309: else bsw/jbe@1309: slot.put ( initiative.current_draft:get_content ( "html" ) ) bsw/jbe@1309: end bsw/jbe@1309: end bsw/jbe@1309: } bsw@1045: bsw@1495: if config.attachments then bsw@1495: bsw@1495: local files = File:new_selector() bsw@1495: :left_join("draft_attachment", nil, "draft_attachment.file_id = file.id") bsw@1495: :add_where{ "draft_attachment.draft_id = ?", initiative.current_draft.id } bsw@1495: :reset_fields() bsw@1495: :add_field("file.id") bsw@1495: :add_field("draft_attachment.title") bsw@1495: :add_field("draft_attachment.description") bsw@1495: :add_order_by("draft_attachment.id") bsw@1495: :exec() bsw@1495: bsw@1495: if #files > 0 then bsw@1495: ui.container { bsw@1664: attr = { class = "mdl-card__content mdl-card--border attachments" }, bsw@1495: content = function() bsw@1495: for i, file in ipairs(files) do bsw@1495: ui.link{ module = "file", view = "show.jpg", id = file.id, content = function() bsw@1495: ui.image{ module = "file", view = "show.jpg", id = file.id, params = { preview = true } } bsw@1495: end } bsw@1496: ui.container{ content = function() bsw@1496: ui.tag{ tag = "strong", content = file.title or "" } bsw@1496: end } bsw@1495: ui.container{ content = file.description or "" } bsw@1495: end bsw@1495: end bsw@1495: } bsw@1495: end bsw@1495: end bsw@1495: bsw/jbe@1309: local drafts_count = initiative:get_reference_selector("drafts"):count() bsw@1045: bsw/jbe@1309: if not config.voting_only then bsw/jbe@1309: ui.container { bsw/jbe@1309: attr = { class = "mdl-card__actions" }, bsw/jbe@1309: content = function() bsw/jbe@1309: ui.link{ bsw/jbe@1309: attr = { class = "mdl-button mdl-js-button" }, bsw/jbe@1309: module = "initiative", view = "history", id = initiative.id, bsw/jbe@1309: content = _("draft history (#{count})", { count = drafts_count }) bsw/jbe@1309: } bsw/jbe@1309: end bsw/jbe@1309: } bsw@1045: end bsw/jbe@1309: bsw/jbe@1309: end } bsw/jbe@1309: bsw/jbe@1309: execute.view{ module = "initiative", view = "_suggestions", params = { initiative = initiative } } bsw@1045: bsw/jbe@1309: end } bsw/jbe@1309: bsw/jbe@1309: ui.cell_sidebar{ content = function() bsw/jbe@1309: if config.logo then bsw/jbe@1309: config.logo() bsw/jbe@1309: end bsw@1620: bsw/jbe@1309: execute.view { bsw/jbe@1309: module = "issue", view = "_sidebar", bsw/jbe@1309: params = { bsw/jbe@1309: issue = initiative.issue, bsw/jbe@1309: initiative = initiative, bsw/jbe@1309: member = app.session.member bsw/jbe@1309: } bsw/jbe@1309: } bsw/jbe@1309: bsw/jbe@1309: execute.view { bsw/jbe@1309: module = "issue", view = "_sidebar_whatcanido", bsw/jbe@1309: params = { bsw/jbe@1309: issue = initiative.issue, bsw/jbe@1309: initiative = initiative, bsw/jbe@1309: member = app.session.member bsw/jbe@1309: } bsw/jbe@1309: } bsw/jbe@1309: bsw/jbe@1309: execute.view { bsw/jbe@1309: module = "issue", view = "_sidebar_members", params = { bsw/jbe@1309: issue = initiative.issue, initiative = initiative bsw/jbe@1309: } bsw/jbe@1309: } bsw/jbe@1309: bsw/jbe@1309: end } bsw/jbe@1309: bsw/jbe@1309: end }