liquid_feedback_frontend

annotate app/main/initiative/_show.lua @ 111:bf885faf3452

add initiator support in delegation

if a delegation is issued from the initiative view, the initiators
from that one are added to the delegation target list. this makes it easier to delegate to the author without the need to add him to the contact list.
author Daniel Poelzleithner <poelzi@poelzi.org>
date Mon Sep 20 20:32:04 2010 +0200 (2010-09-20)
parents 733f65c0c0a0
children a9ea02807b94
rev   line source
bsw/jbe@19 1 local initiative = param.get("initiative", "table")
bsw/jbe@19 2 local initiator = param.get("initiator", "table")
bsw/jbe@19 3
bsw/jbe@19 4 util.help("initiative.show")
bsw/jbe@19 5
bsw/jbe@19 6 if initiative.issue.ranks_available and initiative.admitted then
bsw/jbe@19 7 local class = initiative.rank == 1 and "admitted_info" or "not_admitted_info"
bsw/jbe@19 8 ui.container{
bsw/jbe@19 9 attr = { class = class },
bsw/jbe@19 10 content = function()
bsw/jbe@19 11 local max_value = initiative.issue.voter_count
bsw/jbe@19 12 slot.put("&nbsp;")
bsw/jbe@19 13 local positive_votes = initiative.positive_votes
bsw/jbe@19 14 local negative_votes = initiative.negative_votes
bsw/jbe@19 15 slot.put(_"Yes" .. ": <b>" .. tostring(positive_votes) .. "</b>")
bsw/jbe@19 16 slot.put(" &middot; ")
bsw/jbe@19 17 slot.put(_"Abstention" .. ": <b>" .. tostring(max_value - initiative.negative_votes - initiative.positive_votes) .. "</b>")
bsw/jbe@19 18 slot.put(" &middot; ")
bsw/jbe@19 19 slot.put(_"No" .. ": <b>" .. tostring(initiative.negative_votes) .. "</b>")
bsw/jbe@19 20 slot.put(" &middot; ")
bsw/jbe@19 21 slot.put("<b>")
bsw/jbe@19 22 if initiative.rank == 1 then
bsw/jbe@19 23 slot.put(_"Approved")
bsw/jbe@19 24 elseif initiative.rank then
bsw/jbe@19 25 slot.put(_("Not approved (rank #{rank})", { rank = initiative.rank }))
bsw@24 26 else
bsw@24 27 slot.put(_"Not approved")
bsw/jbe@19 28 end
bsw/jbe@19 29 slot.put("</b>")
bsw/jbe@19 30 end
bsw/jbe@19 31 }
bsw/jbe@19 32 end
bsw/jbe@19 33
bsw/jbe@19 34 if initiative.admitted == false then
bsw/jbe@19 35 local policy = initiative.issue.policy
bsw/jbe@19 36 ui.container{
bsw/jbe@19 37 attr = { class = "not_admitted_info" },
bsw/jbe@19 38 content = _("This initiative has not been admitted! It failed the quorum of #{quorum}.", { quorum = format.percentage(policy.initiative_quorum_num / policy.initiative_quorum_den) })
bsw/jbe@19 39 }
bsw/jbe@19 40 end
bsw/jbe@19 41
bsw/jbe@19 42 local web20 = config.user_tab_mode == "accordeon"
bsw/jbe@19 43 or config.user_tab_mode == "accordeon_first_expanded"
bsw/jbe@19 44 or config.user_tab_mode == "accordeon_all_expanded"
bsw/jbe@19 45
bsw/jbe@19 46 if not web20 and initiative.issue.state == "cancelled" then
bsw/jbe@19 47 local policy = initiative.issue.policy
bsw/jbe@19 48 ui.container{
bsw/jbe@19 49 attr = { class = "not_admitted_info" },
bsw/jbe@19 50 content = _("This issue has been cancelled. It failed the quorum of #{quorum}.", { quorum = format.percentage(policy.issue_quorum_num / policy.issue_quorum_den) })
bsw/jbe@19 51 }
bsw/jbe@19 52 end
bsw/jbe@19 53
bsw/jbe@19 54 if initiative.revoked then
bsw/jbe@19 55 ui.container{
bsw/jbe@19 56 attr = { class = "revoked_info" },
bsw/jbe@19 57 content = function()
bsw/jbe@19 58 slot.put(_("This initiative has been revoked at #{revoked}", { revoked = format.timestamp(initiative.revoked) }))
bsw/jbe@19 59 local suggested_initiative = initiative.suggested_initiative
bsw/jbe@19 60 if suggested_initiative then
bsw/jbe@19 61 slot.put("<br /><br />")
bsw/jbe@19 62 slot.put(_("The initiators suggest to support the following initiative:"))
bsw/jbe@19 63 slot.put(" ")
bsw/jbe@19 64 ui.link{
bsw/jbe@19 65 content = _("Issue ##{id}", { id = suggested_initiative.issue.id } ) .. ": " .. encode.html(suggested_initiative.name),
bsw/jbe@19 66 module = "initiative",
bsw/jbe@19 67 view = "show",
bsw/jbe@19 68 id = suggested_initiative.id
bsw/jbe@19 69 }
bsw/jbe@19 70 end
bsw/jbe@19 71 end
bsw/jbe@19 72 }
bsw/jbe@19 73 end
bsw/jbe@19 74
bsw@41 75 if initiator and initiator.accepted == nil and not initiative.issue.half_frozen and not initiative.issue.closed then
bsw/jbe@19 76 ui.container{
bsw/jbe@19 77 attr = { class = "initiator_invite_info" },
bsw/jbe@19 78 content = function()
bsw/jbe@19 79 slot.put(_"You are invited to become initiator of this initiative.")
bsw/jbe@19 80 slot.put(" ")
bsw/jbe@19 81 ui.link{
bsw/jbe@19 82 image = { static = "icons/16/tick.png" },
bsw/jbe@19 83 text = _"Accept invitation",
bsw/jbe@19 84 module = "initiative",
bsw/jbe@19 85 action = "accept_invitation",
bsw/jbe@19 86 id = initiative.id,
bsw/jbe@19 87 routing = {
bsw/jbe@19 88 default = {
bsw/jbe@19 89 mode = "redirect",
bsw/jbe@19 90 module = request.get_module(),
bsw/jbe@19 91 view = request.get_view(),
bsw/jbe@19 92 id = param.get_id_cgi(),
bsw/jbe@19 93 params = param.get_all_cgi()
bsw/jbe@19 94 }
bsw/jbe@19 95 }
bsw/jbe@19 96 }
bsw/jbe@19 97 slot.put(" ")
bsw/jbe@19 98 ui.link{
bsw/jbe@19 99 image = { static = "icons/16/cross.png" },
bsw/jbe@19 100 text = _"Refuse invitation",
bsw/jbe@19 101 module = "initiative",
bsw/jbe@19 102 action = "reject_initiator_invitation",
bsw/jbe@19 103 params = {
bsw/jbe@19 104 initiative_id = initiative.id,
bsw/jbe@19 105 member_id = app.session.member.id
bsw/jbe@19 106 },
bsw/jbe@19 107 routing = {
bsw/jbe@19 108 default = {
bsw/jbe@19 109 mode = "redirect",
bsw/jbe@19 110 module = request.get_module(),
bsw/jbe@19 111 view = request.get_view(),
bsw/jbe@19 112 id = param.get_id_cgi(),
bsw/jbe@19 113 params = param.get_all_cgi()
bsw/jbe@19 114 }
bsw/jbe@19 115 }
bsw/jbe@19 116 }
bsw/jbe@19 117 end
bsw/jbe@19 118 }
bsw/jbe@19 119 slot.put("<br />")
bsw/jbe@19 120 end
bsw/jbe@19 121
bsw/jbe@19 122
bsw@51 123 local supporter
bsw@51 124
bsw@51 125 if app.session.member_id then
bsw@51 126 supporter = app.session.member:get_reference_selector("supporters")
bsw@51 127 :add_where{ "initiative_id = ?", initiative.id }
bsw@51 128 :optional_object_mode()
bsw@51 129 :exec()
bsw@51 130 end
bsw/jbe@19 131
bsw/jbe@19 132 if supporter and not initiative.issue.closed then
bsw/jbe@19 133 local old_draft_id = supporter.draft_id
bsw/jbe@19 134 local new_draft_id = initiative.current_draft.id
bsw/jbe@19 135 if old_draft_id ~= new_draft_id then
bsw/jbe@19 136 ui.container{
bsw/jbe@19 137 attr = { class = "draft_updated_info" },
bsw/jbe@19 138 content = function()
bsw/jbe@19 139 slot.put(_"The draft of this initiative has been updated!")
bsw/jbe@19 140 slot.put(" ")
bsw/jbe@19 141 ui.link{
bsw/jbe@19 142 content = _"Show diff",
bsw/jbe@19 143 module = "draft",
bsw/jbe@19 144 view = "diff",
bsw/jbe@19 145 params = {
bsw/jbe@19 146 old_draft_id = old_draft_id,
bsw/jbe@19 147 new_draft_id = new_draft_id
bsw/jbe@19 148 }
bsw/jbe@19 149 }
bsw@75 150 if not initiative.revoked then
bsw@75 151 slot.put(" ")
bsw@75 152 ui.link{
bsw@75 153 text = _"Refresh support to current draft",
bsw@75 154 module = "initiative",
bsw@75 155 action = "add_support",
bsw@75 156 id = initiative.id,
bsw@75 157 routing = {
bsw@75 158 default = {
bsw@75 159 mode = "redirect",
bsw@75 160 module = "initiative",
bsw@75 161 view = "show",
bsw@75 162 id = initiative.id
bsw@75 163 }
bsw/jbe@19 164 }
bsw/jbe@19 165 }
bsw@75 166 end
bsw/jbe@19 167 end
bsw/jbe@19 168 }
bsw/jbe@19 169 end
bsw/jbe@19 170 end
bsw/jbe@19 171
bsw/jbe@19 172
bsw@51 173 if app.session.member_id then
bsw@51 174 ui.container{
bsw@51 175 attr = {
bsw@51 176 id = "initiative_" .. tostring(initiative.id) .. "_support"
bsw@51 177 },
bsw@51 178 content = function()
bsw@51 179 execute.view{
bsw@51 180 module = "initiative",
bsw@51 181 view = "show_support",
bsw@51 182 params = {
bsw@51 183 initiative = initiative
bsw@51 184 }
bsw/jbe@19 185 }
bsw@51 186 end
bsw@51 187 }
bsw@51 188 end
bsw/jbe@19 189
bsw/jbe@19 190 if (initiative.discussion_url and #initiative.discussion_url > 0)
bsw/jbe@19 191 or (initiator and initiator.accepted and not initiative.issue.half_frozen and not initiative.issue.closed and not initiative.revoked) then
bsw/jbe@19 192 ui.container{
bsw/jbe@19 193 attr = { class = "vertical" },
bsw/jbe@19 194 content = function()
bsw/jbe@19 195 ui.container{
bsw/jbe@19 196 attr = { class = "ui_field_label" },
bsw/jbe@19 197 content = _"Discussion with initiators"
bsw/jbe@19 198 }
bsw/jbe@19 199 ui.tag{
bsw/jbe@19 200 tag = "span",
bsw/jbe@19 201 content = function()
bsw/jbe@19 202 if initiative.discussion_url:find("^https?://") then
bsw/jbe@19 203 if initiative.discussion_url and #initiative.discussion_url > 0 then
bsw/jbe@19 204 ui.link{
bsw/jbe@19 205 attr = {
bsw/jbe@19 206 class = "actions",
bsw/jbe@19 207 target = "_blank",
bsw/jbe@19 208 title = initiative.discussion_url
bsw/jbe@19 209 },
bsw/jbe@19 210 content = function()
bsw/jbe@19 211 slot.put(encode.html(initiative.discussion_url))
bsw/jbe@19 212 end,
bsw/jbe@19 213 external = initiative.discussion_url
bsw/jbe@19 214 }
bsw/jbe@19 215 end
bsw/jbe@19 216 else
bsw/jbe@19 217 slot.put(encode.html(initiative.discussion_url))
bsw/jbe@19 218 end
bsw/jbe@19 219 slot.put(" ")
bsw/jbe@19 220 if initiator and initiator.accepted and not initiative.issue.half_frozen and not initiative.issue.closed and not initiative.revoked then
bsw/jbe@19 221 ui.link{
bsw/jbe@19 222 attr = { class = "actions" },
bsw/jbe@19 223 text = _"(change URL)",
bsw/jbe@19 224 module = "initiative",
bsw/jbe@19 225 view = "edit",
bsw/jbe@19 226 id = initiative.id
bsw/jbe@19 227 }
bsw/jbe@19 228 end
bsw/jbe@19 229 end
bsw/jbe@19 230 }
bsw/jbe@19 231 end
bsw/jbe@19 232 }
bsw/jbe@19 233 end
bsw/jbe@19 234
bsw/jbe@19 235
bsw/jbe@19 236
bsw/jbe@19 237 execute.view{
bsw/jbe@19 238 module = "initiative",
bsw/jbe@19 239 view = "show_tab",
bsw/jbe@19 240 params = {
bsw/jbe@19 241 initiative = initiative,
bsw/jbe@19 242 initiator = initiator
bsw/jbe@19 243 }
bsw/jbe@19 244 }
bsw/jbe@19 245

Impressum / About Us