liquid_feedback_frontend
annotate app/main/suggestion/_list.lua @ 118:93f4e465b50d
add initiator support in delegation
if a delegation is issued from the initiative view, the initiators
from that one are added to the delegation target list. this makes it easier to delegate to the author without the need to add him to the contact list.
if a delegation is issued from the initiative view, the initiators
from that one are added to the delegation target list. this makes it easier to delegate to the author without the need to add him to the contact list.
author | Daniel Poelzleithner <poelzi@poelzi.org> |
---|---|
date | Mon Sep 20 20:32:04 2010 +0200 (2010-09-20) |
parents | 6a12fb7e4963 |
children | 44ba79952610 |
rev | line source |
---|---|
bsw/jbe@4 | 1 |
bsw/jbe@4 | 2 local initiative = param.get("initiative", "table") |
bsw/jbe@0 | 3 local suggestions_selector = param.get("suggestions_selector", "table") |
bsw/jbe@19 | 4 local tab_id = param.get("tab_id") |
bsw/jbe@19 | 5 local show_name = param.get("show_name", atom.boolean) |
bsw/jbe@19 | 6 if show_name == nil then |
bsw/jbe@19 | 7 show_name = true |
bsw/jbe@19 | 8 end |
bsw/jbe@19 | 9 local show_filter = param.get("show_filter", atom.boolean) |
bsw/jbe@19 | 10 if show_filter == nil then |
bsw/jbe@19 | 11 show_filter = true |
bsw/jbe@19 | 12 end |
bsw/jbe@0 | 13 |
bsw/jbe@19 | 14 local partial = { |
bsw/jbe@19 | 15 routing = { |
bsw/jbe@19 | 16 default = { |
bsw/jbe@19 | 17 mode = "redirect", |
bsw/jbe@19 | 18 module = "initiative", |
bsw/jbe@19 | 19 view = "show_tab", |
bsw/jbe@19 | 20 params = { |
bsw/jbe@19 | 21 initiative_id = initiative.id, |
bsw/jbe@19 | 22 tab = "suggestions", |
bsw/jbe@19 | 23 tab_id = tab_id |
bsw/jbe@19 | 24 }, |
bsw/jbe@19 | 25 } |
bsw/jbe@19 | 26 } |
bsw/jbe@19 | 27 } |
bsw/jbe@19 | 28 |
bsw/jbe@19 | 29 local ui_filters = ui.filters |
bsw/jbe@19 | 30 if not show_filter then |
bsw/jbe@19 | 31 ui_filters = function(args) args.content() end |
bsw/jbe@19 | 32 end |
bsw/jbe@19 | 33 |
bsw/jbe@19 | 34 ui_filters{ |
bsw/jbe@19 | 35 label = _"Show filter", |
bsw/jbe@0 | 36 selector = suggestions_selector, |
bsw/jbe@19 | 37 { |
bsw/jbe@19 | 38 label = _"Order by", |
bsw/jbe@4 | 39 { |
bsw/jbe@19 | 40 name = "plus_unfulfilled", |
bsw/jbe@19 | 41 label = _"requested", |
bsw/jbe@19 | 42 selector_modifier = function(selector) selector:add_order_by("plus2_unfulfilled_count + plus1_unfulfilled_count DESC, id") end |
bsw/jbe@4 | 43 }, |
bsw/jbe@4 | 44 { |
bsw/jbe@4 | 45 name = "plus2", |
bsw/jbe@4 | 46 label = _"must", |
bsw/jbe@19 | 47 selector_modifier = function(selector) selector:add_order_by("plus2_unfulfilled_count + plus2_fulfilled_count DESC, id") end |
bsw/jbe@4 | 48 }, |
bsw/jbe@4 | 49 { |
bsw/jbe@4 | 50 name = "plus", |
bsw/jbe@4 | 51 label = _"must/should", |
bsw/jbe@19 | 52 selector_modifier = function(selector) selector:add_order_by("plus2_unfulfilled_count + plus1_unfulfilled_count + plus2_fulfilled_count + plus1_fulfilled_count DESC, id") end |
bsw/jbe@4 | 53 }, |
bsw/jbe@4 | 54 { |
bsw/jbe@4 | 55 name = "minus", |
bsw/jbe@4 | 56 label = _"must/should not", |
bsw/jbe@19 | 57 selector_modifier = function(selector) selector:add_order_by("minus2_unfulfilled_count + minus1_unfulfilled_count + minus2_fulfilled_count + minus1_fulfilled_count DESC, id") end |
bsw/jbe@4 | 58 }, |
bsw/jbe@4 | 59 { |
bsw/jbe@4 | 60 name = "minus2", |
bsw/jbe@4 | 61 label = _"must not", |
bsw/jbe@19 | 62 selector_modifier = function(selector) selector:add_order_by("minus2_unfulfilled_count + minus2_fulfilled_count DESC, id") end |
bsw/jbe@19 | 63 } |
bsw/jbe@4 | 64 }, |
bsw/jbe@0 | 65 content = function() |
bsw/jbe@4 | 66 ui.paginate{ |
bsw/jbe@4 | 67 selector = suggestions_selector, |
bsw/jbe@4 | 68 content = function() |
bsw/jbe@4 | 69 ui.list{ |
bsw/jbe@4 | 70 attr = { style = "table-layout: fixed;" }, |
bsw/jbe@4 | 71 records = suggestions_selector:exec(), |
bsw/jbe@4 | 72 columns = { |
bsw/jbe@4 | 73 { |
bsw/jbe@19 | 74 label = show_name and _"Suggestion" or nil, |
bsw/jbe@4 | 75 content = function(record) |
bsw/jbe@19 | 76 if show_name then |
bsw/jbe@19 | 77 ui.link{ |
bsw/jbe@19 | 78 text = record.name, |
bsw/jbe@19 | 79 module = "suggestion", |
bsw/jbe@19 | 80 view = "show", |
bsw/jbe@19 | 81 id = record.id |
bsw/jbe@19 | 82 } |
bsw/jbe@19 | 83 end |
bsw/jbe@4 | 84 end |
bsw/jbe@4 | 85 }, |
bsw/jbe@4 | 86 { |
bsw@95 | 87 label = _"Collective opinion of supporters", |
bsw/jbe@4 | 88 label_attr = { style = "width: 101px;" }, |
bsw/jbe@4 | 89 content = function(record) |
bsw/jbe@4 | 90 if record.minus2_unfulfilled_count then |
bsw@95 | 91 local max_value = record.initiative.supporter_count |
bsw/jbe@4 | 92 ui.bargraph{ |
bsw/jbe@4 | 93 max_value = max_value, |
bsw@95 | 94 width = 100, |
bsw/jbe@4 | 95 bars = { |
bsw@95 | 96 { color = "#0a0", value = record.plus2_unfulfilled_count + record.plus2_fulfilled_count }, |
bsw@95 | 97 { color = "#8f8", value = record.plus1_unfulfilled_count + record.plus1_fulfilled_count }, |
bsw@95 | 98 { color = "#eee", value = max_value - record.minus2_unfulfilled_count - record.minus1_unfulfilled_count - record.minus2_fulfilled_count - record.minus1_fulfilled_count - record.plus1_unfulfilled_count - record.plus2_unfulfilled_count - record.plus1_fulfilled_count - record.plus2_fulfilled_count}, |
bsw/jbe@4 | 99 { color = "#f88", value = record.minus1_unfulfilled_count + record.minus1_fulfilled_count }, |
bsw/jbe@4 | 100 { color = "#a00", value = record.minus2_unfulfilled_count + record.minus2_fulfilled_count }, |
bsw/jbe@4 | 101 } |
bsw/jbe@4 | 102 } |
bsw/jbe@4 | 103 end |
bsw/jbe@4 | 104 end |
bsw/jbe@4 | 105 }, |
bsw/jbe@4 | 106 { |
bsw/jbe@4 | 107 label = _"My opinion", |
bsw@95 | 108 label_attr = { style = "width: 130px; font-style: italic;" }, |
bsw/jbe@4 | 109 content = function(record) |
bsw/jbe@4 | 110 local degree |
bsw@51 | 111 local opinion |
bsw@51 | 112 if app.session.member_id then |
bsw@51 | 113 opinion = Opinion:by_pk(app.session.member.id, record.id) |
bsw@51 | 114 end |
bsw/jbe@4 | 115 if opinion then |
bsw/jbe@4 | 116 degree = opinion.degree |
bsw@3 | 117 end |
bsw/jbe@5 | 118 ui.container{ |
bsw/jbe@5 | 119 attr = { class = "suggestion_my_opinion" }, |
bsw/jbe@5 | 120 content = function() |
bsw@51 | 121 if app.session.member_id then |
bsw@51 | 122 if initiative.issue.state == "voting" or initiative.issue.state == "closed" then |
bsw@95 | 123 if degree == -2 then |
bsw@95 | 124 ui.tag{ |
bsw@95 | 125 tag = "span", |
bsw@95 | 126 attr = { |
bsw@95 | 127 class = "action" .. (degree == -2 and " active_red2" or "") |
bsw@95 | 128 }, |
bsw@95 | 129 content = _"must not" |
bsw@95 | 130 } |
bsw@95 | 131 end |
bsw@95 | 132 if degree == -1 then |
bsw@95 | 133 ui.tag{ |
bsw@95 | 134 tag = "span", |
bsw@95 | 135 attr = { class = "action" .. (degree == -1 and " active_red1" or "") }, |
bsw@95 | 136 content = _"should not" |
bsw@95 | 137 } |
bsw@95 | 138 end |
bsw@95 | 139 if degree == nil then |
bsw@95 | 140 ui.tag{ |
bsw@95 | 141 tag = "span", |
bsw@95 | 142 attr = { class = "action" .. (degree == nil and " active" or "") }, |
bsw@95 | 143 content = _"neutral" |
bsw@95 | 144 } |
bsw@95 | 145 end |
bsw@95 | 146 if degree == 1 then |
bsw@95 | 147 ui.tag{ |
bsw@95 | 148 tag = "span", |
bsw@95 | 149 attr = { class = "action" .. (degree == 1 and " active_green1" or "") }, |
bsw@95 | 150 content = _"should" |
bsw@95 | 151 } |
bsw@95 | 152 end |
bsw@95 | 153 if degree == 2 then |
bsw@95 | 154 ui.tag{ |
bsw@95 | 155 tag = "span", |
bsw@95 | 156 attr = { class = "action" .. (degree == 2 and " active_green2" or "") }, |
bsw@95 | 157 content = _"must" |
bsw@95 | 158 } |
bsw@95 | 159 end |
bsw@51 | 160 else |
bsw@51 | 161 ui.link{ |
bsw@95 | 162 attr = { class = "action" .. (degree == 2 and " active_green2" or "") }, |
bsw@95 | 163 text = _"must", |
bsw@51 | 164 module = "opinion", |
bsw@51 | 165 action = "update", |
bsw@51 | 166 routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } }, |
bsw@51 | 167 params = { |
bsw@51 | 168 suggestion_id = record.id, |
bsw@95 | 169 degree = 2 |
bsw@51 | 170 }, |
bsw@51 | 171 partial = partial |
bsw@51 | 172 } |
bsw@51 | 173 slot.put(" ") |
bsw@51 | 174 ui.link{ |
bsw@51 | 175 attr = { class = "action" .. (degree == 1 and " active_green1" or "") }, |
bsw@51 | 176 text = _"should", |
bsw@51 | 177 module = "opinion", |
bsw@51 | 178 action = "update", |
bsw@51 | 179 routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } }, |
bsw@51 | 180 params = { |
bsw@51 | 181 suggestion_id = record.id, |
bsw@51 | 182 degree = 1 |
bsw@51 | 183 }, |
bsw@51 | 184 partial = partial |
bsw@51 | 185 } |
bsw@51 | 186 slot.put(" ") |
bsw@51 | 187 ui.link{ |
bsw@95 | 188 attr = { class = "action" .. (degree == nil and " active" or "") }, |
bsw@95 | 189 text = _"neutral", |
bsw@51 | 190 module = "opinion", |
bsw@51 | 191 action = "update", |
bsw@51 | 192 routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } }, |
bsw@51 | 193 params = { |
bsw@51 | 194 suggestion_id = record.id, |
bsw@95 | 195 delete = true |
bsw@95 | 196 }, |
bsw@95 | 197 partial = partial |
bsw@95 | 198 } |
bsw@95 | 199 slot.put(" ") |
bsw@95 | 200 ui.link{ |
bsw@95 | 201 attr = { class = "action" .. (degree == -1 and " active_red1" or "") }, |
bsw@95 | 202 text = _"should not", |
bsw@95 | 203 module = "opinion", |
bsw@95 | 204 action = "update", |
bsw@95 | 205 routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } }, |
bsw@95 | 206 params = { |
bsw@95 | 207 suggestion_id = record.id, |
bsw@95 | 208 degree = -1 |
bsw@95 | 209 }, |
bsw@95 | 210 partial = partial |
bsw@95 | 211 } |
bsw@95 | 212 slot.put(" ") |
bsw@95 | 213 ui.link{ |
bsw@95 | 214 attr = { class = "action" .. (degree == -2 and " active_red2" or "") }, |
bsw@95 | 215 text = _"must not", |
bsw@95 | 216 module = "opinion", |
bsw@95 | 217 action = "update", |
bsw@95 | 218 routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } }, |
bsw@95 | 219 params = { |
bsw@95 | 220 suggestion_id = record.id, |
bsw@95 | 221 degree = -2 |
bsw@51 | 222 }, |
bsw@51 | 223 partial = partial |
bsw@51 | 224 } |
bsw@51 | 225 end |
bsw/jbe@19 | 226 else |
bsw@51 | 227 ui.field.text{ value = _"[Registered members only]" } |
bsw/jbe@19 | 228 end |
bsw/jbe@5 | 229 end |
bsw/jbe@0 | 230 } |
bsw/jbe@0 | 231 end |
bsw/jbe@4 | 232 }, |
bsw/jbe@4 | 233 { |
bsw/jbe@4 | 234 label = _"Suggestion currently not implemented", |
bsw/jbe@4 | 235 label_attr = { style = "width: 101px;" }, |
bsw/jbe@4 | 236 content = function(record) |
bsw/jbe@4 | 237 if record.minus2_unfulfilled_count then |
bsw@95 | 238 local max_value = record.initiative.supporter_count |
bsw/jbe@4 | 239 ui.bargraph{ |
bsw/jbe@4 | 240 max_value = max_value, |
bsw@95 | 241 width = 100, |
bsw/jbe@4 | 242 bars = { |
bsw/jbe@4 | 243 { color = "#0a0", value = record.plus2_unfulfilled_count }, |
bsw/jbe@4 | 244 { color = "#8f8", value = record.plus1_unfulfilled_count }, |
bsw@95 | 245 { color = "#eee", value = max_value - record.minus2_unfulfilled_count - record.minus1_unfulfilled_count - record.plus1_unfulfilled_count - record.plus2_unfulfilled_count }, |
bsw@95 | 246 { color = "#f88", value = record.minus1_unfulfilled_count }, |
bsw@95 | 247 { color = "#a00", value = record.minus2_unfulfilled_count }, |
bsw/jbe@4 | 248 } |
bsw/jbe@4 | 249 } |
bsw/jbe@4 | 250 end |
bsw/jbe@4 | 251 end |
bsw/jbe@4 | 252 }, |
bsw/jbe@4 | 253 { |
bsw/jbe@4 | 254 label = _"Suggestion currently implemented", |
bsw/jbe@4 | 255 label_attr = { style = "width: 101px;" }, |
bsw/jbe@4 | 256 content = function(record) |
bsw/jbe@4 | 257 if record.minus2_fulfilled_count then |
bsw@95 | 258 local max_value = record.initiative.supporter_count |
bsw/jbe@4 | 259 ui.bargraph{ |
bsw/jbe@4 | 260 max_value = max_value, |
bsw@95 | 261 width = 100, |
bsw/jbe@4 | 262 bars = { |
bsw@95 | 263 { color = "#0a0", value = record.plus2_fulfilled_count }, |
bsw@95 | 264 { color = "#8f8", value = record.plus1_fulfilled_count }, |
bsw@95 | 265 { color = "#eee", value = max_value - record.minus2_fulfilled_count - record.minus1_fulfilled_count - record.plus1_fulfilled_count - record.plus2_fulfilled_count}, |
bsw/jbe@4 | 266 { color = "#f88", value = record.minus1_fulfilled_count }, |
bsw/jbe@4 | 267 { color = "#a00", value = record.minus2_fulfilled_count }, |
bsw/jbe@4 | 268 } |
bsw/jbe@4 | 269 } |
bsw/jbe@4 | 270 end |
bsw@3 | 271 end |
bsw/jbe@4 | 272 }, |
bsw/jbe@4 | 273 { |
bsw@95 | 274 label = app.session.member_id and _"I consider suggestion as" or nil, |
bsw@95 | 275 label_attr = { style = "width: 100px; font-style: italic;" }, |
bsw/jbe@4 | 276 content = function(record) |
bsw/jbe@4 | 277 local degree |
bsw@51 | 278 local opinion |
bsw@51 | 279 if app.session.member_id then |
bsw@51 | 280 opinion = Opinion:by_pk(app.session.member.id, record.id) |
bsw@51 | 281 end |
bsw/jbe@4 | 282 if opinion then |
bsw/jbe@4 | 283 degree = opinion.degree |
bsw/jbe@4 | 284 end |
bsw/jbe@4 | 285 if opinion then |
bsw@95 | 286 |
bsw@95 | 287 ui.link{ |
bsw@95 | 288 attr = { class = opinion.fulfilled and "action active" or "action" }, |
bsw@95 | 289 text = _"implemented", |
bsw@95 | 290 module = "opinion", |
bsw@95 | 291 action = "update", |
bsw@95 | 292 routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } }, |
bsw@95 | 293 params = { |
bsw@95 | 294 suggestion_id = record.id, |
bsw@95 | 295 fulfilled = true |
bsw@95 | 296 }, |
bsw@95 | 297 partial = partial |
bsw@95 | 298 } |
bsw@95 | 299 slot.put("<br />") |
bsw@95 | 300 ui.link{ |
bsw@95 | 301 attr = { class = not opinion.fulfilled and "action active" or "action" }, |
bsw@95 | 302 text = _"not implemented", |
bsw@95 | 303 module = "opinion", |
bsw@95 | 304 action = "update", |
bsw@95 | 305 routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } }, |
bsw@95 | 306 params = { |
bsw@95 | 307 suggestion_id = record.id, |
bsw@95 | 308 fulfilled = false |
bsw@95 | 309 }, |
bsw@95 | 310 partial = partial |
bsw@95 | 311 } |
bsw@95 | 312 |
bsw/jbe@4 | 313 end |
bsw/jbe@4 | 314 end |
bsw/jbe@4 | 315 }, |
bsw/jbe@4 | 316 { |
bsw@95 | 317 label = app.session.member_id and _"So I'm" or nil, |
bsw/jbe@4 | 318 content = function(record) |
bsw@51 | 319 local opinion |
bsw@51 | 320 if app.session.member_id then |
bsw@51 | 321 opinion = Opinion:by_pk(app.session.member.id, record.id) |
bsw@51 | 322 end |
bsw/jbe@4 | 323 if opinion then |
bsw/jbe@4 | 324 if (opinion.fulfilled and opinion.degree > 0) or (not opinion.fulfilled and opinion.degree < 0) then |
bsw@95 | 325 local title = _"satisfied" |
bsw@95 | 326 ui.image{ attr = { alt = title, title = title }, static = "icons/emoticon_happy.png" } |
bsw@95 | 327 elseif opinion.degree == 1 or opinion.degree == -1 then |
bsw@95 | 328 local title = _"a bit unsatisfied" |
bsw@95 | 329 ui.image{ attr = { alt = title, title = title }, static = "icons/emoticon_unhappy.png" } |
bsw/jbe@4 | 330 else |
bsw@95 | 331 local title = _"more unsatisfied" |
bsw@95 | 332 ui.image{ attr = { alt = title, title = title }, static = "icons/emoticon_unhappy_red.png" } |
bsw/jbe@4 | 333 end |
bsw/jbe@4 | 334 end |
bsw/jbe@4 | 335 end |
bsw/jbe@4 | 336 }, |
bsw/jbe@4 | 337 } |
bsw/jbe@4 | 338 } |
bsw/jbe@4 | 339 end |
bsw/jbe@0 | 340 } |
bsw/jbe@0 | 341 end |
bsw/jbe@0 | 342 } |