liquid_feedback_frontend

annotate app/main/issue/_list.lua @ 126:36aedac3e4bf

Add default policy selector in area admin
author Daniel Poelzleithner <poelzi@poelzi.org>
date Mon Oct 04 15:52:22 2010 +0200 (2010-10-04)
parents 733f65c0c0a0
children 4fb486bce608
rev   line source
bsw/jbe@0 1 local issues_selector = param.get("issues_selector", "table")
bsw/jbe@0 2
bsw@51 3 if app.session.member_id then
bsw@51 4 issues_selector
bsw@51 5 :left_join("interest", "_interest", { "_interest.issue_id = issue.id AND _interest.member_id = ?", app.session.member.id} )
bsw@51 6 :add_field("(_interest.member_id NOTNULL)", "is_interested")
bsw@51 7 end
bsw@11 8
bsw/jbe@19 9 ui.add_partial_param_names{
bsw/jbe@19 10 "filter",
bsw/jbe@19 11 "filter_open",
bsw/jbe@19 12 "filter_voting",
bsw/jbe@19 13 "filter_interest",
bsw/jbe@19 14 "issue_list"
bsw/jbe@19 15 }
bsw/jbe@0 16
bsw/jbe@19 17 local filters = {}
bsw@10 18
bsw/jbe@19 19 filters[#filters+1] = {
bsw/jbe@19 20 label = _"Filter",
bsw/jbe@19 21 {
bsw/jbe@19 22 name = "open",
bsw/jbe@19 23 label = _"Open",
bsw/jbe@19 24 selector_modifier = function(selector)
bsw/jbe@19 25 selector:add_where("issue.closed ISNULL")
bsw/jbe@19 26 end
bsw/jbe@19 27 },
bsw/jbe@19 28 {
bsw/jbe@19 29 name = "new",
bsw/jbe@19 30 label = _"New",
bsw/jbe@19 31 selector_modifier = function(selector)
bsw/jbe@19 32 selector:add_where("issue.accepted ISNULL AND issue.closed ISNULL")
bsw/jbe@19 33 end
bsw/jbe@19 34 },
bsw/jbe@19 35 {
bsw/jbe@19 36 name = "accepted",
bsw/jbe@19 37 label = _"In discussion",
bsw/jbe@19 38 selector_modifier = function(selector)
bsw/jbe@19 39 selector:add_where("issue.accepted NOTNULL AND issue.half_frozen ISNULL AND issue.closed ISNULL")
bsw/jbe@19 40 end
bsw/jbe@19 41 },
bsw/jbe@19 42 {
bsw/jbe@19 43 name = "half_frozen",
bsw/jbe@19 44 label = _"Frozen",
bsw/jbe@19 45 selector_modifier = function(selector)
bsw/jbe@19 46 selector:add_where("issue.half_frozen NOTNULL AND issue.fully_frozen ISNULL")
bsw/jbe@19 47 end
bsw/jbe@19 48 },
bsw/jbe@19 49 {
bsw/jbe@19 50 name = "frozen",
bsw/jbe@19 51 label = _"Voting",
bsw/jbe@19 52 selector_modifier = function(selector)
bsw/jbe@19 53 selector:add_where("issue.fully_frozen NOTNULL AND issue.closed ISNULL")
bsw/jbe@19 54 filter_voting = true
bsw/jbe@19 55 end
bsw/jbe@19 56 },
bsw/jbe@19 57 {
bsw/jbe@19 58 name = "finished",
bsw/jbe@19 59 label = _"Finished",
bsw/jbe@19 60 selector_modifier = function(selector)
bsw/jbe@19 61 selector:add_where("issue.closed NOTNULL AND issue.fully_frozen NOTNULL")
bsw/jbe@19 62 end
bsw/jbe@19 63 },
bsw/jbe@19 64 {
bsw/jbe@19 65 name = "cancelled",
bsw/jbe@19 66 label = _"Cancelled",
bsw/jbe@19 67 selector_modifier = function(selector)
bsw/jbe@52 68 selector:add_where("issue.closed NOTNULL AND issue.fully_frozen ISNULL")
bsw/jbe@19 69 end
bsw/jbe@19 70 },
bsw/jbe@19 71 {
bsw/jbe@19 72 name = "any",
bsw/jbe@19 73 label = _"Any",
bsw/jbe@19 74 selector_modifier = function(selector) end
bsw/jbe@19 75 },
bsw/jbe@19 76 }
bsw/jbe@19 77
bsw/jbe@19 78
bsw@75 79 if app.session.member and param.get("filter") == "frozen" then
bsw/jbe@19 80 filters[#filters+1] = {
bsw/jbe@19 81 label = _"Filter",
bsw/jbe@19 82 name = "filter_voting",
bsw@2 83 {
bsw/jbe@19 84 name = "any",
bsw/jbe@19 85 label = _"Any",
bsw/jbe@19 86 selector_modifier = function() end
bsw@2 87 },
bsw/jbe@0 88 {
bsw/jbe@19 89 name = "not_voted",
bsw/jbe@19 90 label = _"Not voted",
bsw/jbe@19 91 selector_modifier = function(selector)
bsw/jbe@19 92 selector:left_join("direct_voter", nil, { "direct_voter.issue_id = issue.id AND direct_voter.member_id = ?", app.session.member.id })
bsw/jbe@19 93 selector:add_where("direct_voter.member_id ISNULL")
bsw@2 94 end
bsw@2 95 },
bsw@2 96 {
bsw/jbe@19 97 name = "voted",
bsw/jbe@19 98 label = _"Voted",
bsw/jbe@19 99 selector_modifier = function(selector)
bsw/jbe@19 100 selector:join("direct_voter", nil, { "direct_voter.issue_id = issue.id AND direct_voter.member_id = ?", app.session.member.id })
bsw@2 101 end
bsw@2 102 },
bsw/jbe@19 103 }
bsw/jbe@19 104 end
bsw/jbe@19 105
bsw/jbe@19 106
bsw/jbe@19 107 filters[#filters+1] = {
bsw/jbe@19 108 label = _"Filter",
bsw/jbe@19 109 name = "filter_interest",
bsw/jbe@19 110 {
bsw/jbe@19 111 name = "any",
bsw/jbe@19 112 label = _"Any",
bsw/jbe@19 113 selector_modifier = function() end
bsw/jbe@19 114 },
bsw/jbe@19 115 {
bsw/jbe@19 116 name = "my",
bsw/jbe@19 117 label = _"Interested",
bsw/jbe@19 118 selector_modifier = function(selector)
bsw/jbe@19 119 selector:join("interest", "filter_interest", { "filter_interest.issue_id = issue.id AND filter_interest.member_id = ? ", app.session.member.id })
bsw/jbe@19 120 end
bsw/jbe@19 121 },
bsw/jbe@19 122 {
bsw/jbe@19 123 name = "supported",
bsw/jbe@19 124 label = _"Supported",
bsw/jbe@19 125 selector_modifier = function(selector)
bsw/jbe@19 126 selector:add_where({ "EXISTS (SELECT 1 FROM initiative JOIN supporter ON supporter.initiative_id = initiative.id AND supporter.member_id = ? LEFT JOIN opinion ON opinion.initiative_id = initiative.id AND opinion.member_id = ? AND ((opinion.degree = 2 AND NOT fulfilled) OR (opinion.degree = -2 AND fulfilled)) WHERE initiative.issue_id = issue.id AND opinion.member_id ISNULL LIMIT 1)", app.session.member.id, app.session.member.id })
bsw/jbe@19 127 end
bsw/jbe@19 128 },
bsw/jbe@19 129 {
bsw/jbe@19 130 name = "potentially_supported",
bsw/jbe@19 131 label = _"Potential supported",
bsw/jbe@19 132 selector_modifier = function(selector)
bsw/jbe@19 133 selector:add_where({ "EXISTS (SELECT 1 FROM initiative JOIN supporter ON supporter.initiative_id = initiative.id AND supporter.member_id = ? JOIN opinion ON opinion.initiative_id = initiative.id AND opinion.member_id = ? AND ((opinion.degree = 2 AND NOT fulfilled) OR (opinion.degree = -2 AND fulfilled)) WHERE initiative.issue_id = issue.id LIMIT 1)", app.session.member.id, app.session.member.id })
bsw/jbe@19 134 end
bsw/jbe@19 135 },
bsw/jbe@19 136 {
bsw/jbe@19 137 name = "initiated",
bsw/jbe@19 138 label = _"Initiated",
bsw/jbe@19 139 selector_modifier = function(selector)
bsw/jbe@19 140 selector:add_where({ "EXISTS (SELECT 1 FROM initiative JOIN initiator ON initiator.initiative_id = initiative.id AND initiator.member_id = ? WHERE initiative.issue_id = issue.id)", app.session.member.id })
bsw/jbe@19 141 end
bsw/jbe@19 142 },
bsw/jbe@19 143 }
bsw/jbe@19 144
bsw/jbe@19 145 if not param.get("no_sort", atom.boolean) then
bsw/jbe@19 146 filters[#filters+1] = {
bsw/jbe@19 147 label = _"Order by",
bsw/jbe@19 148 name = "issue_list",
bsw@2 149 {
bsw/jbe@19 150 name = "max_potential_support",
bsw/jbe@19 151 label = _"Max potential support",
bsw/jbe@19 152 selector_modifier = function(selector)
bsw/jbe@19 153 selector:add_order_by("(SELECT max(supporter_count) FROM initiative WHERE initiative.issue_id = issue.id) DESC")
bsw@2 154 end
bsw@2 155 },
bsw@2 156 {
bsw/jbe@19 157 name = "max_support",
bsw/jbe@19 158 label = _"Max support",
bsw/jbe@19 159 selector_modifier = function(selector)
bsw/jbe@19 160 selector:add_order_by("(SELECT max(satisfied_supporter_count) FROM initiative WHERE initiative.issue_id = issue.id) DESC")
bsw/jbe@19 161 end
bsw/jbe@19 162 },
bsw/jbe@19 163 {
bsw/jbe@19 164 name = "population",
bsw/jbe@19 165 label = _"Population",
bsw/jbe@19 166 selector_modifier = function(selector)
bsw/jbe@19 167 selector:add_order_by("issue.population DESC")
bsw/jbe@19 168 end
bsw/jbe@19 169 },
bsw/jbe@19 170 {
bsw/jbe@19 171 name = "newest",
bsw/jbe@19 172 label = _"Newest",
bsw/jbe@19 173 selector_modifier = function(selector)
bsw/jbe@19 174 selector:add_order_by("issue.created DESC")
bsw@2 175 end
bsw@2 176 },
bsw/jbe@19 177 {
bsw/jbe@19 178 name = "oldest",
bsw/jbe@19 179 label = _"Oldest",
bsw/jbe@19 180 selector_modifier = function(selector)
bsw/jbe@19 181 selector:add_order_by("issue.created")
bsw/jbe@19 182 end
bsw/jbe@19 183 }
bsw/jbe@19 184 }
bsw/jbe@19 185 end
bsw/jbe@19 186
bsw/jbe@19 187 filters.content = function()
bsw/jbe@19 188 local ui_paginate = ui.paginate
bsw/jbe@19 189 if param.get("per_page") == "all" then
bsw/jbe@19 190 ui_paginate = function(args) args.content() end
bsw/jbe@19 191 end
bsw/jbe@19 192 ui_paginate{
bsw/jbe@19 193 per_page = tonumber(param.get("per_page")),
bsw/jbe@19 194 selector = issues_selector,
bsw/jbe@19 195 content = function()
bsw/jbe@19 196 local highlight_string = param.get("highlight_string", "string")
bsw/jbe@19 197 local issues = issues or issues_selector:exec()
bsw/jbe@19 198 -- issues:load(initiatives)
bsw/jbe@19 199 ui.list{
bsw/jbe@19 200 attr = { class = "issues" },
bsw/jbe@19 201 records = issues,
bsw/jbe@19 202 columns = {
bsw/jbe@19 203 {
bsw/jbe@19 204 label = _"Issue",
bsw/jbe@19 205 content = function(record)
bsw/jbe@19 206 if not param.get("for_area_list", atom.boolean) then
bsw/jbe@19 207 ui.field.text{
bsw/jbe@19 208 value = record.area.name
bsw/jbe@19 209 }
bsw/jbe@19 210 slot.put("<br />")
bsw@11 211 end
bsw/jbe@19 212 if record.is_interested then
bsw/jbe@19 213 local label = _"You are interested in this issue",
bsw/jbe@19 214 ui.image{
bsw/jbe@19 215 attr = { alt = label, title = label },
bsw/jbe@19 216 static = "icons/16/eye.png"
bsw/jbe@5 217 }
bsw/jbe@19 218 slot.put("&nbsp;")
bsw/jbe@19 219 end
bsw/jbe@19 220 ui.link{
bsw/jbe@19 221 text = _("Issue ##{id}", { id = tostring(record.id) }),
bsw/jbe@19 222 module = "issue",
bsw/jbe@19 223 view = "show",
bsw/jbe@19 224 id = record.id
bsw/jbe@19 225 }
bsw/jbe@19 226 if record.state == "new" then
bsw/jbe@19 227 ui.image{
bsw/jbe@19 228 static = "icons/16/new.png"
bsw/jbe@5 229 }
bsw/jbe@5 230 end
bsw/jbe@19 231 slot.put("<br />")
bsw/jbe@19 232 slot.put("<br />")
bsw/jbe@19 233 if record.old_state then
bsw/jbe@19 234 ui.field.text{ value = format.time(record.sort) }
bsw/jbe@19 235 ui.field.text{ value = Issue:get_state_name_for_state(record.old_state) .. " > " .. Issue:get_state_name_for_state(record.new_state) }
bsw/jbe@19 236 else
bsw/jbe@19 237 end
bsw/jbe@19 238 end
bsw/jbe@19 239 },
bsw/jbe@19 240 {
bsw/jbe@19 241 label = _"State",
bsw/jbe@19 242 content = function(record)
bsw/jbe@19 243 if record.state == "voting" then
bsw/jbe@19 244 ui.link{
bsw/jbe@19 245 content = _"Voting",
bsw/jbe@19 246 module = "vote",
bsw/jbe@19 247 view = "list",
bsw/jbe@19 248 params = { issue_id = record.id }
bsw/jbe@19 249 }
bsw/jbe@19 250 else
bsw/jbe@19 251 ui.field.issue_state{ value = record.state }
bsw/jbe@19 252 end
bsw/jbe@19 253 end
bsw/jbe@19 254 },
bsw/jbe@19 255 {
bsw/jbe@19 256 label = _"Initiatives",
bsw/jbe@19 257 content = function(record)
bsw/jbe@19 258 local initiatives_selector = record:get_reference_selector("initiatives")
bsw/jbe@19 259 local highlight_string = param.get("highlight_string")
bsw/jbe@19 260 if highlight_string then
bsw/jbe@19 261 initiatives_selector:add_field( {'"highlight"("initiative"."name", ?)', highlight_string }, "name_highlighted")
bsw/jbe@19 262 end
bsw/jbe@19 263 execute.view{
bsw/jbe@19 264 module = "initiative",
bsw/jbe@19 265 view = "_list",
bsw/jbe@19 266 params = {
bsw/jbe@19 267 issue = record,
bsw/jbe@19 268 initiatives_selector = initiatives_selector,
bsw/jbe@19 269 highlight_string = highlight_string,
bsw@51 270 per_page = app.session.member_id and tonumber(app.session.member:get_setting_value("initiatives_preview_limit") or 3) or 3,
bsw/jbe@19 271 no_sort = true,
bsw@51 272 limit = app.session.member_id and tonumber(app.session.member:get_setting_value("initiatives_preview_limit") or 3) or 3
bsw/jbe@19 273 }
bsw/jbe@19 274 }
bsw/jbe@19 275 end
bsw/jbe@19 276 },
bsw/jbe@0 277 }
bsw/jbe@19 278 }
bsw/jbe@19 279 end
bsw/jbe@19 280 }
bsw/jbe@19 281 end
bsw/jbe@19 282
bsw/jbe@19 283 filters.selector = issues_selector
bsw/jbe@19 284 filters.label = _"Change filters and order"
bsw/jbe@19 285
bsw/jbe@19 286 if param.get("no_filter", atom.boolean) then
bsw/jbe@19 287 filters.content()
bsw/jbe@19 288 else
bsw/jbe@19 289 ui.filters(filters)
bsw/jbe@19 290 end
bsw/jbe@19 291
bsw/jbe@19 292 if param.get("legend", atom.boolean) ~= false then
bsw/jbe@19 293 local filter = param.get_all_cgi().filter
bsw/jbe@19 294 if not filter or filter == "any" or filter ~= "finished" then
bsw/jbe@19 295 ui.bargraph_legend{
bsw/jbe@19 296 width = 25,
bsw/jbe@19 297 bars = {
bsw/jbe@19 298 { color = "#0a0", label = _"Supporter" },
bsw/jbe@19 299 { color = "#777", label = _"Potential supporter" },
bsw/jbe@19 300 { color = "#ddd", label = _"No support at all" },
bsw/jbe@19 301 }
bsw/jbe@0 302 }
bsw/jbe@0 303 end
bsw/jbe@19 304 if not filter or filter == "any" or filter == "finished" then
bsw/jbe@19 305 ui.bargraph_legend{
bsw/jbe@19 306 width = 25,
bsw/jbe@19 307 bars = {
bsw/jbe@19 308 { color = "#0a0", label = _"Yes" },
bsw/jbe@19 309 { color = "#aaa", label = _"Abstention" },
bsw/jbe@19 310 { color = "#a00", label = _"No" },
bsw/jbe@19 311 }
bsw/jbe@19 312 }
bsw/jbe@19 313 end
bsw/jbe@19 314 end
bsw/jbe@19 315

Impressum / About Us