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.
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 }

Impressum / About Us