liquid_feedback_frontend
annotate app/main/issue/_list.lua @ 5:afd9f769c7ae
Version beta1
Final voting with Schulze-Method is now possible
Many bug fixes and code cleanup
Registration with invite codes
More sort and filter options
Seperated display of "supporters" and "potential supporters"
Optical changes
Flood limit / initiative contigent is now checked by frontend
Neccessary changes to access core beta11
Final voting with Schulze-Method is now possible
Many bug fixes and code cleanup
Registration with invite codes
More sort and filter options
Seperated display of "supporters" and "potential supporters"
Optical changes
Flood limit / initiative contigent is now checked by frontend
Neccessary changes to access core beta11
author | bsw/jbe |
---|---|
date | Fri Dec 25 12:00:00 2009 +0100 (2009-12-25) |
parents | 5c601807d397 |
children | 8d91bccab0bf |
rev | line source |
---|---|
bsw/jbe@0 | 1 local issues_selector = param.get("issues_selector", "table") |
bsw/jbe@0 | 2 |
bsw/jbe@5 | 3 local ui_filter = ui.filter |
bsw/jbe@5 | 4 if param.get("filter", atom.boolean) == false then |
bsw/jbe@5 | 5 ui_filter = function(args) args.content() end |
bsw/jbe@5 | 6 end |
bsw/jbe@0 | 7 |
bsw/jbe@5 | 8 local filter_voting = false |
bsw/jbe@5 | 9 ui_filter{ |
bsw/jbe@0 | 10 selector = issues_selector, |
bsw@2 | 11 filters = { |
bsw@2 | 12 { |
bsw@2 | 13 type = "boolean", |
bsw@2 | 14 name = "any", |
bsw@2 | 15 label = _"Any", |
bsw@2 | 16 selector_modifier = function() end |
bsw@2 | 17 }, |
bsw/jbe@0 | 18 { |
bsw@2 | 19 type = "boolean", |
bsw@2 | 20 name = "new", |
bsw@2 | 21 label = _"New", |
bsw@2 | 22 selector_modifier = function(selector, value) |
bsw@2 | 23 if value then |
bsw@2 | 24 selector:add_where("issue.accepted ISNULL AND issue.closed ISNULL") |
bsw@2 | 25 end |
bsw@2 | 26 end |
bsw@2 | 27 }, |
bsw@2 | 28 { |
bsw@2 | 29 type = "boolean", |
bsw@2 | 30 name = "accepted", |
bsw@2 | 31 label = _"In discussion", |
bsw@2 | 32 selector_modifier = function(selector, value) |
bsw@2 | 33 if value then |
bsw@2 | 34 selector:add_where("issue.accepted NOTNULL AND issue.half_frozen ISNULL AND issue.closed ISNULL") |
bsw@2 | 35 end |
bsw@2 | 36 end |
bsw/jbe@0 | 37 }, |
bsw/jbe@0 | 38 { |
bsw@2 | 39 type = "boolean", |
bsw@2 | 40 name = "half_frozen", |
bsw@2 | 41 label = _"Frozen", |
bsw@2 | 42 selector_modifier = function(selector, value) |
bsw@2 | 43 if value then |
bsw/jbe@5 | 44 selector:add_where("issue.half_frozen NOTNULL AND issue.fully_frozen ISNULL") |
bsw@2 | 45 end |
bsw@2 | 46 end |
bsw@2 | 47 }, |
bsw@2 | 48 { |
bsw@2 | 49 type = "boolean", |
bsw@2 | 50 name = "frozen", |
bsw@2 | 51 label = _"Voting", |
bsw@2 | 52 selector_modifier = function(selector, value) |
bsw@2 | 53 if value then |
bsw@2 | 54 selector:add_where("issue.fully_frozen NOTNULL AND issue.closed ISNULL") |
bsw/jbe@5 | 55 filter_voting = true |
bsw@2 | 56 end |
bsw@2 | 57 end |
bsw/jbe@0 | 58 }, |
bsw/jbe@0 | 59 { |
bsw@2 | 60 type = "boolean", |
bsw@2 | 61 name = "finished", |
bsw@2 | 62 label = _"Finished", |
bsw@2 | 63 selector_modifier = function(selector, value) |
bsw@2 | 64 if value then |
bsw/jbe@5 | 65 selector:add_where("issue.closed NOTNULL AND issue.fully_frozen NOTNULL") |
bsw@2 | 66 end |
bsw@2 | 67 end |
bsw@2 | 68 }, |
bsw@2 | 69 { |
bsw@2 | 70 type = "boolean", |
bsw@2 | 71 name = "cancelled", |
bsw@2 | 72 label = _"Cancelled", |
bsw@2 | 73 selector_modifier = function(selector, value) |
bsw@2 | 74 if value then |
bsw/jbe@5 | 75 selector:add_where("issue.closed NOTNULL AND issue.accepted ISNULL") |
bsw@2 | 76 end |
bsw@2 | 77 end |
bsw@2 | 78 }, |
bsw/jbe@0 | 79 }, |
bsw/jbe@0 | 80 content = function() |
bsw/jbe@5 | 81 local ui_filter = ui.filter |
bsw/jbe@5 | 82 if not filter_voting then |
bsw/jbe@5 | 83 ui_filter = function(args) args.content() end |
bsw/jbe@5 | 84 end |
bsw/jbe@5 | 85 ui_filter{ |
bsw/jbe@0 | 86 selector = issues_selector, |
bsw/jbe@5 | 87 name = "filter_voting", |
bsw/jbe@5 | 88 filters = { |
bsw@2 | 89 { |
bsw/jbe@5 | 90 type = "boolean", |
bsw/jbe@5 | 91 name = "any", |
bsw/jbe@5 | 92 label = _"Any", |
bsw/jbe@5 | 93 selector_modifier = function() end |
bsw@2 | 94 }, |
bsw@2 | 95 { |
bsw/jbe@5 | 96 type = "boolean", |
bsw/jbe@5 | 97 name = "not_voted", |
bsw/jbe@5 | 98 label = _"Not voted", |
bsw/jbe@5 | 99 selector_modifier = function(selector, value) |
bsw/jbe@5 | 100 if value then |
bsw/jbe@5 | 101 selector:left_join("direct_voter", nil, { "direct_voter.issue_id = issue.id AND direct_voter.member_id = ?", app.session.member.id }) |
bsw/jbe@5 | 102 selector:add_where("direct_voter.member_id ISNULL") |
bsw/jbe@5 | 103 end |
bsw/jbe@5 | 104 end |
bsw@2 | 105 }, |
bsw@2 | 106 { |
bsw/jbe@5 | 107 type = "boolean", |
bsw/jbe@5 | 108 name = "voted", |
bsw/jbe@5 | 109 label = _"Voted", |
bsw/jbe@5 | 110 selector_modifier = function(selector, value) |
bsw/jbe@5 | 111 if value then |
bsw/jbe@5 | 112 selector:join("direct_voter", nil, { "direct_voter.issue_id = issue.id AND direct_voter.member_id = ?", app.session.member.id }) |
bsw/jbe@5 | 113 end |
bsw/jbe@5 | 114 end |
bsw/jbe@5 | 115 }, |
bsw@2 | 116 }, |
bsw/jbe@0 | 117 content = function() |
bsw/jbe@5 | 118 local ui_filter = ui.filter |
bsw/jbe@5 | 119 if param.get("filter", atom.boolean) == false then |
bsw/jbe@5 | 120 ui_filter = function(args) args.content() end |
bsw/jbe@5 | 121 end |
bsw/jbe@5 | 122 ui_filter{ |
bsw@2 | 123 selector = issues_selector, |
bsw/jbe@5 | 124 name = "filter_interest", |
bsw/jbe@5 | 125 filters = { |
bsw/jbe@5 | 126 { |
bsw/jbe@5 | 127 type = "boolean", |
bsw/jbe@5 | 128 name = "any", |
bsw/jbe@5 | 129 label = _"Any", |
bsw/jbe@5 | 130 selector_modifier = function() end |
bsw/jbe@5 | 131 }, |
bsw/jbe@5 | 132 { |
bsw/jbe@5 | 133 type = "boolean", |
bsw/jbe@5 | 134 name = "my", |
bsw/jbe@5 | 135 label = _"Interested", |
bsw/jbe@5 | 136 selector_modifier = function(selector, value) |
bsw/jbe@5 | 137 if value then |
bsw/jbe@5 | 138 selector:join("interest", "filter_interest", { "filter_interest.issue_id = issue.id AND filter_interest.member_id = ? ", app.session.member.id }) |
bsw/jbe@5 | 139 end |
bsw/jbe@5 | 140 end |
bsw/jbe@5 | 141 }, |
bsw/jbe@5 | 142 }, |
bsw@2 | 143 content = function() |
bsw/jbe@5 | 144 |
bsw/jbe@5 | 145 ui.order{ |
bsw/jbe@5 | 146 name = "issue_list", |
bsw/jbe@5 | 147 selector = issues_selector, |
bsw/jbe@5 | 148 options = { |
bsw@2 | 149 { |
bsw/jbe@5 | 150 name = "max_potential_support", |
bsw/jbe@5 | 151 label = _"Max potential support", |
bsw/jbe@5 | 152 selector_modifier = function(selector) |
bsw/jbe@5 | 153 selector:add_order_by("(SELECT max(supporter_count) FROM initiative WHERE initiative.issue_id = issue.id)") |
bsw@2 | 154 end |
bsw@2 | 155 }, |
bsw@2 | 156 { |
bsw/jbe@5 | 157 name = "max_support", |
bsw/jbe@5 | 158 label = _"Max support", |
bsw/jbe@5 | 159 selector_modifier = function(selector) |
bsw/jbe@5 | 160 selector:add_order_by("(SELECT max(satisfied_supporter_count) FROM initiative WHERE initiative.issue_id = issue.id)") |
bsw@2 | 161 end |
bsw@2 | 162 }, |
bsw@2 | 163 { |
bsw/jbe@5 | 164 name = "population", |
bsw/jbe@5 | 165 label = _"Population", |
bsw/jbe@5 | 166 order_by = "issue.population DESC" |
bsw/jbe@5 | 167 }, |
bsw/jbe@5 | 168 { |
bsw/jbe@5 | 169 name = "newest", |
bsw/jbe@5 | 170 label = _"Newest", |
bsw/jbe@5 | 171 order_by = "issue.created DESC" |
bsw/jbe@5 | 172 }, |
bsw/jbe@5 | 173 { |
bsw/jbe@5 | 174 name = "oldest", |
bsw/jbe@5 | 175 label = _"Oldest", |
bsw/jbe@5 | 176 order_by = "issue.created" |
bsw/jbe@5 | 177 } |
bsw/jbe@5 | 178 }, |
bsw/jbe@5 | 179 content = function() |
bsw/jbe@5 | 180 ui.paginate{ |
bsw/jbe@5 | 181 selector = issues_selector, |
bsw/jbe@5 | 182 content = function() |
bsw/jbe@5 | 183 local highlight_string = param.get("highlight_string", "string") |
bsw/jbe@5 | 184 local issues = issues or issues_selector:exec() |
bsw/jbe@5 | 185 -- issues:load(initiatives) |
bsw/jbe@5 | 186 ui.list{ |
bsw/jbe@5 | 187 attr = { class = "issues" }, |
bsw/jbe@5 | 188 records = issues, |
bsw/jbe@5 | 189 columns = { |
bsw/jbe@5 | 190 { |
bsw/jbe@5 | 191 label = _"Issue", |
bsw/jbe@5 | 192 content = function(record) |
bsw/jbe@5 | 193 if not param.get("for_area_list", atom.boolean) then |
bsw/jbe@5 | 194 ui.field.text{ |
bsw/jbe@5 | 195 value = record.area.name |
bsw/jbe@5 | 196 } |
bsw/jbe@5 | 197 slot.put("<br />") |
bsw/jbe@5 | 198 end |
bsw/jbe@5 | 199 ui.link{ |
bsw/jbe@5 | 200 text = _"Issue ##{id}":gsub("#{id}", tostring(record.id)), |
bsw/jbe@5 | 201 module = "issue", |
bsw/jbe@5 | 202 view = "show", |
bsw/jbe@5 | 203 id = record.id |
bsw/jbe@5 | 204 } |
bsw/jbe@5 | 205 if record.state == "new" then |
bsw/jbe@5 | 206 ui.image{ |
bsw/jbe@5 | 207 static = "icons/16/new.png" |
bsw/jbe@5 | 208 } |
bsw/jbe@5 | 209 end |
bsw/jbe@5 | 210 slot.put("<br />") |
bsw/jbe@5 | 211 slot.put("<br />") |
bsw/jbe@5 | 212 end |
bsw/jbe@5 | 213 }, |
bsw/jbe@5 | 214 { |
bsw/jbe@5 | 215 label = _"State", |
bsw/jbe@5 | 216 content = function(record) |
bsw/jbe@5 | 217 ui.field.issue_state{ value = record.state } |
bsw/jbe@5 | 218 end |
bsw/jbe@5 | 219 }, |
bsw/jbe@5 | 220 { |
bsw/jbe@5 | 221 label = _"Initiatives", |
bsw/jbe@5 | 222 content = function(record) |
bsw/jbe@5 | 223 local initiatives_selector = record:get_reference_selector("initiatives") |
bsw/jbe@5 | 224 local highlight_string = param.get("highlight_string") |
bsw/jbe@5 | 225 if highlight_string then |
bsw/jbe@5 | 226 initiatives_selector:add_field( {'"highlight"("initiative"."name", ?)', highlight_string }, "name_highlighted") |
bsw/jbe@5 | 227 end |
bsw/jbe@5 | 228 execute.view{ |
bsw/jbe@5 | 229 module = "initiative", |
bsw/jbe@5 | 230 view = "_list", |
bsw/jbe@5 | 231 params = { |
bsw/jbe@5 | 232 issue = record, |
bsw/jbe@5 | 233 initiatives_selector = initiatives_selector, |
bsw/jbe@5 | 234 highlight_string = highlight_string, |
bsw/jbe@5 | 235 limit = 3 |
bsw/jbe@5 | 236 } |
bsw/jbe@5 | 237 } |
bsw/jbe@5 | 238 end |
bsw/jbe@5 | 239 }, |
bsw@2 | 240 } |
bsw@2 | 241 } |
bsw@2 | 242 end |
bsw/jbe@5 | 243 } |
bsw/jbe@5 | 244 end |
bsw@2 | 245 } |
bsw@2 | 246 end |
bsw/jbe@0 | 247 } |
bsw/jbe@0 | 248 end |
bsw/jbe@0 | 249 } |
bsw/jbe@5 | 250 if param.get("legend", atom.boolean) ~= false then |
bsw/jbe@5 | 251 local filter = param.get_all_cgi().filter |
bsw/jbe@5 | 252 if not filter or filter == "any" or filter ~= "finished" then |
bsw/jbe@5 | 253 ui.bargraph_legend{ |
bsw/jbe@5 | 254 width = 25, |
bsw/jbe@5 | 255 bars = { |
bsw/jbe@5 | 256 { color = "#0a0", label = _"Supporter" }, |
bsw/jbe@5 | 257 { color = "#777", label = _"Potential supporter" }, |
bsw/jbe@5 | 258 { color = "#ddd", label = _"No support at all" }, |
bsw/jbe@5 | 259 } |
bsw/jbe@5 | 260 } |
bsw/jbe@5 | 261 end |
bsw/jbe@5 | 262 if not filter or filter == "any" or filter == "finished" then |
bsw/jbe@5 | 263 ui.bargraph_legend{ |
bsw/jbe@5 | 264 width = 25, |
bsw/jbe@5 | 265 bars = { |
bsw/jbe@5 | 266 { color = "#0a0", label = _"Yes" }, |
bsw/jbe@5 | 267 { color = "#aaa", label = _"Abstention" }, |
bsw/jbe@5 | 268 { color = "#a00", label = _"No" }, |
bsw/jbe@5 | 269 } |
bsw/jbe@5 | 270 } |
bsw/jbe@5 | 271 end |
bsw/jbe@5 | 272 end |
bsw/jbe@0 | 273 end |
bsw@2 | 274 } |