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.
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(" ") |
| 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(" · ") |
| bsw/jbe@19 | 17 slot.put(_"Abstention" .. ": <b>" .. tostring(max_value - initiative.negative_votes - initiative.positive_votes) .. "</b>") |
| bsw/jbe@19 | 18 slot.put(" · ") |
| bsw/jbe@19 | 19 slot.put(_"No" .. ": <b>" .. tostring(initiative.negative_votes) .. "</b>") |
| bsw/jbe@19 | 20 slot.put(" · ") |
| 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 |