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