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