liquid_feedback_frontend
annotate app/main/initiative/show.lua @ 7:3941792e8be6
Version beta3
Table allowed_policy is respected while creating new issues
Broken vote now/later link is not shown anymore (until it's implemented)
More user friendly error page
Minor spelling error corrected
Table allowed_policy is respected while creating new issues
Broken vote now/later link is not shown anymore (until it's implemented)
More user friendly error page
Minor spelling error corrected
| author | bsw |
|---|---|
| date | Sat Jan 02 12:00:00 2010 +0100 (2010-01-02) |
| parents | 8d91bccab0bf |
| children | 72c5e0ee7c98 |
| rev | line source |
|---|---|
| bsw/jbe@0 | 1 local initiative = Initiative:new_selector():add_where{ "id = ?", param.get_id()}:single_object_mode():exec() |
| bsw/jbe@0 | 2 |
| bsw/jbe@5 | 3 slot.select("actions", function() |
| bsw/jbe@5 | 4 ui.link{ |
| bsw/jbe@5 | 5 content = function() |
| bsw/jbe@5 | 6 ui.image{ static = "icons/16/script.png" } |
| bsw/jbe@5 | 7 slot.put(_"Show all initiatives") |
| bsw/jbe@5 | 8 end, |
| bsw/jbe@5 | 9 module = "issue", |
| bsw/jbe@5 | 10 view = "show", |
| bsw/jbe@5 | 11 id = initiative.issue.id |
| bsw/jbe@5 | 12 } |
| bsw/jbe@5 | 13 end) |
| bsw/jbe@4 | 14 |
| bsw/jbe@4 | 15 execute.view{ |
| bsw/jbe@4 | 16 module = "issue", |
| bsw/jbe@4 | 17 view = "_show_head", |
| bsw/jbe@4 | 18 params = { issue = initiative.issue } |
| bsw/jbe@4 | 19 } |
| bsw/jbe@4 | 20 |
| bsw/jbe@4 | 21 local initiator = Initiator:by_pk(initiative.id, app.session.member.id) |
| bsw/jbe@4 | 22 |
| bsw@3 | 23 --slot.put_into("html_head", '<link rel="alternate" type="application/rss+xml" title="RSS" href="../show/' .. tostring(initiative.id) .. '.rss" />') |
| bsw/jbe@0 | 24 |
| bsw/jbe@0 | 25 execute.view{ |
| bsw/jbe@0 | 26 module = "supporter", |
| bsw/jbe@0 | 27 view = "_show_box", |
| bsw/jbe@0 | 28 params = { initiative = initiative } |
| bsw/jbe@0 | 29 } |
| bsw/jbe@0 | 30 |
| bsw/jbe@4 | 31 slot.put_into("sub_title", encode.html(_"Initiative: '#{name}'":gsub("#{name}", initiative.shortened_name) )) |
| bsw/jbe@0 | 32 |
| bsw/jbe@0 | 33 slot.select("actions", function() |
| bsw/jbe@4 | 34 if not initiative.issue.fully_frozen and not initiative.issue.closed then |
| bsw@2 | 35 ui.link{ |
| bsw@3 | 36 attr = { class = "action" }, |
| bsw@3 | 37 content = function() |
| bsw@3 | 38 ui.image{ static = "icons/16/script_add.png" } |
| bsw/jbe@4 | 39 slot.put(_"Create alternative initiative") |
| bsw@3 | 40 end, |
| bsw@3 | 41 module = "initiative", |
| bsw@3 | 42 view = "new", |
| bsw@3 | 43 params = { issue_id = initiative.issue.id } |
| bsw@3 | 44 } |
| bsw@3 | 45 end |
| bsw/jbe@4 | 46 end) |
| bsw/jbe@4 | 47 |
| bsw/jbe@4 | 48 |
| bsw/jbe@4 | 49 util.help("initiative.show") |
| bsw/jbe@4 | 50 |
| bsw/jbe@4 | 51 |
| bsw/jbe@4 | 52 ui.container{ |
| bsw/jbe@4 | 53 attr = { class = "vertical" }, |
| bsw/jbe@4 | 54 content = function() |
| bsw/jbe@4 | 55 ui.container{ |
| bsw/jbe@4 | 56 attr = { class = "ui_field_label" }, |
| bsw/jbe@4 | 57 content = _"Discussion URL" |
| bsw/jbe@4 | 58 } |
| bsw/jbe@4 | 59 ui.tag{ |
| bsw/jbe@4 | 60 tag = "span", |
| bsw@3 | 61 content = function() |
| bsw/jbe@4 | 62 if initiative.discussion_url and #initiative.discussion_url > 0 then |
| bsw/jbe@4 | 63 ui.link{ |
| bsw/jbe@4 | 64 attr = { |
| bsw/jbe@4 | 65 class = "actions", |
| bsw/jbe@5 | 66 target = "_blank", |
| bsw/jbe@4 | 67 title = initiative.discussion_url |
| bsw/jbe@4 | 68 }, |
| bsw/jbe@4 | 69 content = function() |
| bsw/jbe@4 | 70 slot.put(encode.html(initiative.discussion_url)) |
| bsw/jbe@4 | 71 end, |
| bsw/jbe@4 | 72 external = initiative.discussion_url |
| bsw/jbe@4 | 73 } |
| bsw/jbe@4 | 74 end |
| bsw/jbe@4 | 75 slot.put(" ") |
| bsw/jbe@4 | 76 if initiator then |
| bsw/jbe@4 | 77 ui.link{ |
| bsw/jbe@4 | 78 attr = { class = "actions" }, |
| bsw/jbe@4 | 79 content = _"(change URL)", |
| bsw/jbe@4 | 80 module = "initiative", |
| bsw/jbe@4 | 81 view = "edit", |
| bsw/jbe@4 | 82 id = initiative.id |
| bsw/jbe@4 | 83 } |
| bsw/jbe@4 | 84 end |
| bsw/jbe@4 | 85 end |
| bsw@3 | 86 } |
| bsw@3 | 87 end |
| bsw/jbe@4 | 88 } |
| bsw/jbe@4 | 89 |
| bsw/jbe@0 | 90 |
| bsw/jbe@0 | 91 |
| bsw/jbe@0 | 92 ui.container{ |
| bsw/jbe@0 | 93 attr = { id = "add_suggestion_form", class = "hidden_inline_form" }, |
| bsw/jbe@0 | 94 content = function() |
| bsw/jbe@0 | 95 |
| bsw/jbe@0 | 96 ui.link{ |
| bsw/jbe@0 | 97 content = _"Close", |
| bsw/jbe@0 | 98 attr = { |
| bsw/jbe@0 | 99 onclick = "document.getElementById('add_suggestion_form').style.display='none';return(false)", |
| bsw/jbe@0 | 100 style = "float: right;" |
| bsw/jbe@0 | 101 } |
| bsw/jbe@0 | 102 } |
| bsw/jbe@0 | 103 |
| bsw/jbe@0 | 104 ui.field.text{ attr = { class = "head" }, value = _"Add new suggestion" } |
| bsw/jbe@0 | 105 |
| bsw/jbe@0 | 106 |
| bsw/jbe@0 | 107 ui.form{ |
| bsw/jbe@0 | 108 module = "suggestion", |
| bsw/jbe@0 | 109 action = "add", |
| bsw/jbe@0 | 110 params = { initiative_id = initiative.id }, |
| bsw/jbe@0 | 111 routing = { |
| bsw/jbe@0 | 112 default = { |
| bsw/jbe@0 | 113 mode = "redirect", |
| bsw/jbe@0 | 114 module = "initiative", |
| bsw/jbe@0 | 115 view = "show", |
| bsw/jbe@0 | 116 id = initiative.id, |
| bsw/jbe@0 | 117 params = { tab = "suggestion" } |
| bsw/jbe@0 | 118 } |
| bsw/jbe@0 | 119 }, |
| bsw/jbe@0 | 120 attr = { class = "vertical" }, |
| bsw/jbe@0 | 121 content = function() |
| bsw/jbe@4 | 122 local supported = Supporter:by_pk(initiative.id, app.session.member.id) and true or false |
| bsw/jbe@4 | 123 if not supported then |
| bsw/jbe@4 | 124 ui.field.text{ |
| bsw/jbe@4 | 125 attr = { class = "warning" }, |
| bsw/jbe@4 | 126 value = _"You are currently not supporting this initiative. By adding suggestions to this initiative you will automatically become a potential supporter." |
| bsw/jbe@4 | 127 } |
| bsw/jbe@4 | 128 end |
| bsw/jbe@4 | 129 ui.field.text{ label = _"Title (80 chars max)", name = "name" } |
| bsw/jbe@0 | 130 ui.field.text{ label = _"Description", name = "description", multiline = true } |
| bsw/jbe@0 | 131 ui.field.select{ |
| bsw/jbe@0 | 132 label = _"Degree", |
| bsw/jbe@0 | 133 name = "degree", |
| bsw/jbe@0 | 134 foreign_records = { |
| bsw/jbe@0 | 135 { id = 1, name = _"should"}, |
| bsw/jbe@0 | 136 { id = 2, name = _"must"}, |
| bsw/jbe@0 | 137 }, |
| bsw/jbe@0 | 138 foreign_id = "id", |
| bsw/jbe@0 | 139 foreign_name = "name" |
| bsw/jbe@0 | 140 } |
| bsw/jbe@0 | 141 ui.submit{ text = _"Commit suggestion" } |
| bsw/jbe@0 | 142 end |
| bsw/jbe@0 | 143 } |
| bsw/jbe@0 | 144 end |
| bsw/jbe@0 | 145 } |
| bsw/jbe@0 | 146 |
| bsw@2 | 147 local supporter = app.session.member:get_reference_selector("supporters") |
| bsw@2 | 148 :add_where{ "initiative_id = ?", initiative.id } |
| bsw@2 | 149 :optional_object_mode() |
| bsw@2 | 150 :exec() |
| bsw@2 | 151 |
| bsw@2 | 152 if supporter then |
| bsw@2 | 153 local old_draft_id = supporter.draft_id |
| bsw@2 | 154 local new_draft_id = initiative.current_draft.id |
| bsw@2 | 155 if old_draft_id ~= new_draft_id then |
| bsw@2 | 156 ui.container{ |
| bsw@2 | 157 attr = { class = "draft_updated_info" }, |
| bsw@2 | 158 content = function() |
| bsw@2 | 159 slot.put("The draft of this initiative has been updated!") |
| bsw@2 | 160 slot.put(" ") |
| bsw@2 | 161 ui.link{ |
| bsw@2 | 162 content = _"Show diff", |
| bsw@2 | 163 module = "draft", |
| bsw@2 | 164 view = "diff", |
| bsw@2 | 165 params = { |
| bsw@2 | 166 old_draft_id = old_draft_id, |
| bsw@2 | 167 new_draft_id = new_draft_id |
| bsw@2 | 168 } |
| bsw@2 | 169 } |
| bsw@2 | 170 slot.put(" ") |
| bsw@2 | 171 ui.link{ |
| bsw@2 | 172 content = _"Refresh support to current draft", |
| bsw@2 | 173 module = "initiative", |
| bsw@2 | 174 action = "add_support", |
| bsw@2 | 175 id = initiative.id, |
| bsw@2 | 176 routing = { |
| bsw@2 | 177 default = { |
| bsw@2 | 178 mode = "redirect", |
| bsw@2 | 179 module = "initiative", |
| bsw@2 | 180 view = "show", |
| bsw@2 | 181 id = initiative.id |
| bsw@2 | 182 } |
| bsw@2 | 183 } |
| bsw@2 | 184 } |
| bsw@2 | 185 end |
| bsw@2 | 186 } |
| bsw@2 | 187 end |
| bsw@2 | 188 end |
| bsw/jbe@0 | 189 |
| bsw/jbe@4 | 190 |
| bsw/jbe@6 | 191 local current_draft_name = _"Current draft" |
| bsw/jbe@6 | 192 if initiative.issue.half_frozen then |
| bsw/jbe@6 | 193 current_draft_name = _"Voting proposal" |
| bsw/jbe@6 | 194 end |
| bsw/jbe@6 | 195 |
| bsw/jbe@6 | 196 if initiative.issue.state == "finished" then |
| bsw/jbe@6 | 197 current_draft_name = _"Voted proposal" |
| bsw/jbe@6 | 198 end |
| bsw/jbe@6 | 199 |
| bsw/jbe@6 | 200 local tabs = { |
| bsw/jbe@0 | 201 { |
| bsw/jbe@0 | 202 name = "current_draft", |
| bsw/jbe@6 | 203 label = current_draft_name, |
| bsw/jbe@0 | 204 content = function() |
| bsw/jbe@4 | 205 if initiator then |
| bsw/jbe@4 | 206 ui.link{ |
| bsw/jbe@4 | 207 content = function() |
| bsw/jbe@4 | 208 ui.image{ static = "icons/16/script_add.png" } |
| bsw/jbe@4 | 209 slot.put(_"Edit draft") |
| bsw/jbe@4 | 210 end, |
| bsw/jbe@4 | 211 module = "draft", |
| bsw/jbe@4 | 212 view = "new", |
| bsw/jbe@4 | 213 params = { initiative_id = initiative.id } |
| bsw/jbe@4 | 214 } |
| bsw/jbe@4 | 215 end |
| bsw/jbe@0 | 216 execute.view{ module = "draft", view = "_show", params = { draft = initiative.current_draft } } |
| bsw/jbe@0 | 217 end |
| bsw/jbe@6 | 218 } |
| bsw/jbe@6 | 219 } |
| bsw/jbe@6 | 220 |
| bsw/jbe@6 | 221 if initiative.issue.ranks_available then |
| bsw/jbe@6 | 222 tabs[#tabs+1] = { |
| bsw/jbe@6 | 223 name = "voter", |
| bsw/jbe@6 | 224 label = _"Voter", |
| bsw/jbe@0 | 225 content = function() |
| bsw@3 | 226 execute.view{ |
| bsw@3 | 227 module = "member", |
| bsw@3 | 228 view = "_list", |
| bsw@3 | 229 params = { |
| bsw@3 | 230 initiative = initiative, |
| bsw/jbe@6 | 231 members_selector = initiative.issue:get_reference_selector("direct_voters") |
| bsw/jbe@6 | 232 :left_join("vote", nil, { "vote.initiative_id = ? AND vote.member_id = member.id", initiative.id }) |
| bsw/jbe@6 | 233 :add_field("direct_voter.weight as voter_weight") |
| bsw/jbe@6 | 234 :add_field("coalesce(vote.grade, 0) as grade") |
| bsw@3 | 235 } |
| bsw@3 | 236 } |
| bsw/jbe@0 | 237 end |
| bsw/jbe@6 | 238 } |
| bsw/jbe@6 | 239 end |
| bsw/jbe@6 | 240 |
| bsw/jbe@6 | 241 tabs[#tabs+1] = { |
| bsw/jbe@6 | 242 name = "suggestion", |
| bsw/jbe@6 | 243 label = _"Suggestions", |
| bsw/jbe@6 | 244 content = function() |
| bsw/jbe@6 | 245 execute.view{ |
| bsw/jbe@6 | 246 module = "suggestion", |
| bsw/jbe@6 | 247 view = "_list", |
| bsw/jbe@6 | 248 params = { |
| bsw/jbe@6 | 249 initiative = initiative, |
| bsw/jbe@6 | 250 suggestions_selector = initiative:get_reference_selector("suggestions") |
| bsw/jbe@6 | 251 } |
| bsw/jbe@6 | 252 } |
| bsw/jbe@6 | 253 slot.put("<br />") |
| bsw/jbe@6 | 254 if not initiative.issue.fully_frozen and not initiative.issue.closed then |
| bsw/jbe@6 | 255 ui.link{ |
| bsw@2 | 256 content = function() |
| bsw/jbe@6 | 257 ui.image{ static = "icons/16/comment_add.png" } |
| bsw/jbe@6 | 258 slot.put(_"Add new suggestion") |
| bsw/jbe@6 | 259 end, |
| bsw/jbe@6 | 260 attr = { onclick = "document.getElementById('add_suggestion_form').style.display='block';return(false)" }, |
| bsw/jbe@6 | 261 static = "#" |
| bsw@2 | 262 } |
| bsw@2 | 263 end |
| bsw/jbe@6 | 264 end |
| bsw/jbe@6 | 265 } |
| bsw/jbe@6 | 266 |
| bsw/jbe@6 | 267 tabs[#tabs+1] = { |
| bsw/jbe@6 | 268 name = "satisfied_supporter", |
| bsw/jbe@6 | 269 label = _"Supporter", |
| bsw/jbe@6 | 270 content = function() |
| bsw/jbe@6 | 271 execute.view{ |
| bsw/jbe@6 | 272 module = "member", |
| bsw/jbe@6 | 273 view = "_list", |
| bsw/jbe@6 | 274 params = { |
| bsw/jbe@6 | 275 initiative = initiative, |
| bsw/jbe@6 | 276 members_selector = initiative:get_reference_selector("supporting_members_snapshot") |
| bsw/jbe@6 | 277 :join("issue", nil, "issue.id = direct_supporter_snapshot.issue_id") |
| bsw/jbe@6 | 278 :join("direct_interest_snapshot", nil, "direct_interest_snapshot.event = issue.latest_snapshot_event AND direct_interest_snapshot.issue_id = issue.id AND direct_interest_snapshot.member_id = member.id") |
| bsw/jbe@6 | 279 :add_field("direct_interest_snapshot.weight") |
| bsw/jbe@6 | 280 :add_where("direct_supporter_snapshot.event = issue.latest_snapshot_event") |
| bsw/jbe@6 | 281 :add_where("direct_supporter_snapshot.satisfied") |
| bsw/jbe@6 | 282 } |
| bsw/jbe@6 | 283 } |
| bsw/jbe@6 | 284 end |
| bsw/jbe@6 | 285 } |
| bsw/jbe@6 | 286 |
| bsw/jbe@6 | 287 tabs[#tabs+1] = { |
| bsw/jbe@6 | 288 name = "supporter", |
| bsw/jbe@6 | 289 label = _"Potential supporter", |
| bsw/jbe@6 | 290 content = function() |
| bsw/jbe@6 | 291 execute.view{ |
| bsw/jbe@6 | 292 module = "member", |
| bsw/jbe@6 | 293 view = "_list", |
| bsw/jbe@6 | 294 params = { |
| bsw/jbe@6 | 295 initiative = initiative, |
| bsw/jbe@6 | 296 members_selector = initiative:get_reference_selector("supporting_members_snapshot") |
| bsw/jbe@6 | 297 :join("issue", nil, "issue.id = direct_supporter_snapshot.issue_id") |
| bsw/jbe@6 | 298 :join("direct_interest_snapshot", nil, "direct_interest_snapshot.event = issue.latest_snapshot_event AND direct_interest_snapshot.issue_id = issue.id AND direct_interest_snapshot.member_id = member.id") |
| bsw/jbe@6 | 299 :add_field("direct_interest_snapshot.weight") |
| bsw/jbe@6 | 300 :add_where("direct_supporter_snapshot.event = issue.latest_snapshot_event") |
| bsw/jbe@6 | 301 :add_where("NOT direct_supporter_snapshot.satisfied") |
| bsw/jbe@6 | 302 } |
| bsw/jbe@6 | 303 } |
| bsw/jbe@6 | 304 end |
| bsw/jbe@6 | 305 } |
| bsw/jbe@6 | 306 |
| bsw/jbe@6 | 307 tabs[#tabs+1] = { |
| bsw/jbe@6 | 308 name = "initiators", |
| bsw/jbe@6 | 309 label = _"Initiators", |
| bsw/jbe@6 | 310 content = function() |
| bsw/jbe@6 | 311 execute.view{ module = "member", view = "_list", params = { members_selector = initiative:get_reference_selector("initiating_members") } } |
| bsw/jbe@6 | 312 end |
| bsw/jbe@6 | 313 } |
| bsw/jbe@6 | 314 |
| bsw/jbe@6 | 315 tabs[#tabs+1] = { |
| bsw/jbe@6 | 316 name = "drafts", |
| bsw/jbe@6 | 317 label = _"Old drafts", |
| bsw/jbe@6 | 318 content = function() |
| bsw/jbe@6 | 319 execute.view{ module = "draft", view = "_list", params = { drafts = initiative.drafts } } |
| bsw/jbe@6 | 320 end |
| bsw/jbe@6 | 321 } |
| bsw/jbe@6 | 322 |
| bsw/jbe@6 | 323 tabs[#tabs+1] = { |
| bsw/jbe@6 | 324 name = "details", |
| bsw/jbe@6 | 325 label = _"Details", |
| bsw/jbe@6 | 326 content = function() |
| bsw/jbe@6 | 327 ui.form{ |
| bsw/jbe@6 | 328 attr = { class = "vertical" }, |
| bsw/jbe@6 | 329 record = initiative, |
| bsw/jbe@6 | 330 readonly = true, |
| bsw/jbe@6 | 331 content = function() |
| bsw/jbe@6 | 332 ui.field.text{ label = _"Issue policy", value = initiative.issue.policy.name } |
| bsw/jbe@6 | 333 ui.field.text{ |
| bsw/jbe@6 | 334 label = _"Created at", |
| bsw/jbe@6 | 335 value = tostring(initiative.created) |
| bsw/jbe@6 | 336 } |
| bsw/jbe@6 | 337 ui.field.text{ |
| bsw/jbe@6 | 338 label = _"Created at", |
| bsw/jbe@6 | 339 value = format.timestamp(initiative.created) |
| bsw/jbe@6 | 340 } |
| bsw/jbe@6 | 341 ui.field.date{ label = _"Revoked at", name = "revoked" } |
| bsw/jbe@6 | 342 ui.field.boolean{ label = _"Admitted", name = "admitted" } |
| bsw/jbe@6 | 343 end |
| bsw/jbe@6 | 344 } |
| bsw/jbe@6 | 345 end |
| bsw/jbe@0 | 346 } |
| bsw/jbe@0 | 347 |
| bsw/jbe@0 | 348 |
| bsw/jbe@6 | 349 ui.tabs(tabs) |
| bsw/jbe@6 | 350 |