liquid_feedback_frontend

annotate app/main/suggestion/_list.lua @ 64:3ec1dea6eefb

Bug when creating alternative initiatives fixed; Policy list link only shown when creating new issue
author bsw
date Thu Apr 22 17:05:18 2010 +0200 (2010-04-22)
parents 0849be391140
children 6a12fb7e4963
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/jbe@4 87 label = _"Collective opinion",
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/jbe@4 91 local max_value = record.initiative.issue.population
bsw/jbe@4 92 ui.bargraph{
bsw/jbe@4 93 max_value = max_value,
bsw/jbe@4 94 width = 50,
bsw/jbe@4 95 bars = {
bsw/jbe@4 96 { color = "#ddd", value = max_value - record.minus2_unfulfilled_count - record.minus1_unfulfilled_count - record.minus2_fulfilled_count - record.minus1_fulfilled_count },
bsw/jbe@4 97 { color = "#f88", value = record.minus1_unfulfilled_count + record.minus1_fulfilled_count },
bsw/jbe@4 98 { color = "#a00", value = record.minus2_unfulfilled_count + record.minus2_fulfilled_count },
bsw/jbe@4 99 { color = "#0a0", value = record.plus2_unfulfilled_count + record.plus2_fulfilled_count },
bsw/jbe@4 100 { color = "#8f8", value = record.plus1_unfulfilled_count + record.plus1_fulfilled_count },
bsw/jbe@4 101 { color = "#ddd", value = max_value - record.plus1_unfulfilled_count - record.plus2_unfulfilled_count - record.plus1_fulfilled_count - record.plus2_fulfilled_count },
bsw/jbe@4 102 }
bsw/jbe@4 103 }
bsw/jbe@4 104 end
bsw/jbe@4 105 end
bsw/jbe@4 106 },
bsw/jbe@4 107 {
bsw/jbe@4 108 label = _"My opinion",
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@51 123 ui.tag{
bsw@51 124 tag = "span",
bsw@51 125 attr = { class = "action" .. (degree == -2 and " active_red2" or "") },
bsw@51 126 content = _"must not"
bsw@51 127 }
bsw@51 128 ui.tag{
bsw@51 129 tag = "span",
bsw@51 130 attr = { class = "action" .. (degree == -1 and " active_red1" or "") },
bsw@51 131 content = _"should not"
bsw@51 132 }
bsw@51 133 ui.tag{
bsw@51 134 tag = "span",
bsw@51 135 attr = { class = "action" .. (degree == nil and " active" or "") },
bsw@51 136 content = _"neutral"
bsw@51 137 }
bsw@51 138 ui.tag{
bsw@51 139 tag = "span",
bsw@51 140 attr = { class = "action" .. (degree == 1 and " active_green1" or "") },
bsw@51 141 content = _"should"
bsw@51 142 }
bsw@51 143 ui.tag{
bsw@51 144 tag = "span",
bsw@51 145 attr = { class = "action" .. (degree == 2 and " active_green2" or "") },
bsw@51 146 content = _"must"
bsw@51 147 }
bsw@51 148 else
bsw@51 149 ui.link{
bsw@51 150 attr = { class = "action" .. (degree == -2 and " active_red2" or "") },
bsw@51 151 text = _"must not",
bsw@51 152 module = "opinion",
bsw@51 153 action = "update",
bsw@51 154 routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } },
bsw@51 155 params = {
bsw@51 156 suggestion_id = record.id,
bsw@51 157 degree = -2
bsw@51 158 },
bsw@51 159 partial = partial
bsw@51 160 }
bsw@51 161 slot.put(" ")
bsw@51 162 ui.link{
bsw@51 163 attr = { class = "action" .. (degree == -1 and " active_red1" or "") },
bsw@51 164 text = _"should not",
bsw@51 165 module = "opinion",
bsw@51 166 action = "update",
bsw@51 167 routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } },
bsw@51 168 params = {
bsw@51 169 suggestion_id = record.id,
bsw@51 170 degree = -1
bsw@51 171 },
bsw@51 172 partial = partial
bsw@51 173 }
bsw@51 174 slot.put(" ")
bsw@51 175 ui.link{
bsw@51 176 attr = { class = "action" .. (degree == nil and " active" or "") },
bsw@51 177 text = _"neutral",
bsw@51 178 module = "opinion",
bsw@51 179 action = "update",
bsw@51 180 routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } },
bsw@51 181 params = {
bsw@51 182 suggestion_id = record.id,
bsw@51 183 delete = true
bsw@51 184 },
bsw@51 185 partial = partial
bsw@51 186 }
bsw@51 187 slot.put(" ")
bsw@51 188 ui.link{
bsw@51 189 attr = { class = "action" .. (degree == 1 and " active_green1" or "") },
bsw@51 190 text = _"should",
bsw@51 191 module = "opinion",
bsw@51 192 action = "update",
bsw@51 193 routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } },
bsw@51 194 params = {
bsw@51 195 suggestion_id = record.id,
bsw@51 196 degree = 1
bsw@51 197 },
bsw@51 198 partial = partial
bsw@51 199 }
bsw@51 200 slot.put(" ")
bsw@51 201 ui.link{
bsw@51 202 attr = { class = "action" .. (degree == 2 and " active_green2" or "") },
bsw@51 203 text = _"must",
bsw@51 204 module = "opinion",
bsw@51 205 action = "update",
bsw@51 206 routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } },
bsw@51 207 params = {
bsw@51 208 suggestion_id = record.id,
bsw@51 209 degree = 2
bsw@51 210 },
bsw@51 211 partial = partial
bsw@51 212 }
bsw@51 213 end
bsw/jbe@19 214 else
bsw@51 215 ui.field.text{ value = _"[Registered members only]" }
bsw/jbe@19 216 end
bsw/jbe@5 217 end
bsw/jbe@0 218 }
bsw/jbe@0 219 end
bsw/jbe@4 220 },
bsw/jbe@4 221 {
bsw/jbe@4 222 content = function(record)
bsw@51 223 local opinion
bsw@51 224 if app.session.member_id then
bsw@51 225 opinion = Opinion:by_pk(app.session.member.id, record.id)
bsw@51 226 end
bsw/jbe@4 227 if opinion and not opinion.fulfilled then
bsw/jbe@4 228 ui.image{ static = "icons/16/cross.png" }
bsw/jbe@4 229 end
bsw/jbe@4 230 end
bsw/jbe@4 231 },
bsw/jbe@4 232 {
bsw/jbe@4 233 label = _"Suggestion currently not implemented",
bsw/jbe@4 234 label_attr = { style = "width: 101px;" },
bsw/jbe@4 235 content = function(record)
bsw/jbe@4 236 if record.minus2_unfulfilled_count then
bsw/jbe@4 237 local max_value = record.initiative.issue.population
bsw/jbe@4 238 ui.bargraph{
bsw/jbe@4 239 max_value = max_value,
bsw/jbe@4 240 width = 50,
bsw/jbe@4 241 bars = {
bsw/jbe@4 242 { color = "#ddd", value = max_value - record.minus2_unfulfilled_count - record.minus1_unfulfilled_count },
bsw/jbe@4 243 { color = "#f88", value = record.minus1_unfulfilled_count },
bsw/jbe@4 244 { color = "#a00", value = record.minus2_unfulfilled_count },
bsw/jbe@4 245 { color = "#0a0", value = record.plus2_unfulfilled_count },
bsw/jbe@4 246 { color = "#8f8", value = record.plus1_unfulfilled_count },
bsw/jbe@4 247 { color = "#ddd", value = max_value - record.plus1_unfulfilled_count - record.plus2_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 content = function(record)
bsw@51 255 local opinion
bsw@51 256 if app.session.member_id then
bsw@51 257 opinion = Opinion:by_pk(app.session.member.id, record.id)
bsw@51 258 end
bsw/jbe@4 259 if opinion and opinion.fulfilled then
bsw/jbe@4 260 ui.image{ static = "icons/16/tick.png" }
bsw/jbe@4 261 end
bsw/jbe@4 262 end
bsw/jbe@4 263 },
bsw/jbe@4 264 {
bsw/jbe@4 265 label = _"Suggestion currently implemented",
bsw/jbe@4 266 label_attr = { style = "width: 101px;" },
bsw/jbe@4 267 content = function(record)
bsw/jbe@4 268 if record.minus2_fulfilled_count then
bsw/jbe@4 269 local max_value = record.initiative.issue.population
bsw/jbe@4 270 ui.bargraph{
bsw/jbe@4 271 max_value = max_value,
bsw/jbe@4 272 width = 50,
bsw/jbe@4 273 bars = {
bsw/jbe@4 274 { color = "#ddd", value = max_value - record.minus2_fulfilled_count - record.minus1_fulfilled_count },
bsw/jbe@4 275 { color = "#f88", value = record.minus1_fulfilled_count },
bsw/jbe@4 276 { color = "#a00", value = record.minus2_fulfilled_count },
bsw/jbe@4 277 { color = "#0a0", value = record.plus2_fulfilled_count },
bsw/jbe@4 278 { color = "#8f8", value = record.plus1_fulfilled_count },
bsw/jbe@4 279 { color = "#ddd", value = max_value - record.plus1_fulfilled_count - record.plus2_fulfilled_count },
bsw/jbe@4 280 }
bsw/jbe@4 281 }
bsw/jbe@4 282 end
bsw@3 283 end
bsw/jbe@4 284 },
bsw/jbe@4 285 {
bsw/jbe@4 286 label_attr = { style = "width: 200px;" },
bsw/jbe@4 287 content = function(record)
bsw/jbe@4 288 local degree
bsw@51 289 local opinion
bsw@51 290 if app.session.member_id then
bsw@51 291 opinion = Opinion:by_pk(app.session.member.id, record.id)
bsw@51 292 end
bsw/jbe@4 293 if opinion then
bsw/jbe@4 294 degree = opinion.degree
bsw/jbe@4 295 end
bsw/jbe@4 296 if opinion then
bsw/jbe@4 297 if not opinion.fulfilled then
bsw/jbe@4 298 local text = ""
bsw/jbe@4 299 if opinion.degree > 0 then
bsw/jbe@4 300 text = _"Mark suggestion as implemented and express satisfaction"
bsw/jbe@4 301 else
bsw/jbe@4 302 text = _"Mark suggestion as implemented and express dissatisfaction"
bsw/jbe@4 303 end
bsw/jbe@4 304 ui.link{
bsw/jbe@4 305 attr = { class = "action" },
bsw/jbe@4 306 text = text,
bsw/jbe@4 307 module = "opinion",
bsw/jbe@4 308 action = "update",
bsw/jbe@4 309 routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } },
bsw/jbe@4 310 params = {
bsw/jbe@4 311 suggestion_id = record.id,
bsw/jbe@4 312 fulfilled = true
bsw/jbe@19 313 },
bsw/jbe@19 314 partial = partial
bsw/jbe@4 315 }
bsw/jbe@4 316 else
bsw/jbe@4 317 if opinion.degree > 0 then
bsw/jbe@4 318 text = _"Mark suggestion as not implemented and express dissatisfaction"
bsw/jbe@4 319 else
bsw/jbe@4 320 text = _"Mark suggestion as not implemented and express satisfaction"
bsw/jbe@4 321 end
bsw/jbe@4 322 ui.link{
bsw/jbe@4 323 attr = { class = "action" },
bsw/jbe@4 324 text = text,
bsw/jbe@4 325 module = "opinion",
bsw/jbe@4 326 action = "update",
bsw/jbe@4 327 routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } },
bsw/jbe@4 328 params = {
bsw/jbe@4 329 suggestion_id = record.id,
bsw/jbe@4 330 fulfilled = false
bsw/jbe@19 331 },
bsw/jbe@19 332 partial = partial
bsw/jbe@4 333 }
bsw/jbe@4 334 end
bsw/jbe@4 335 end
bsw/jbe@4 336 end
bsw/jbe@4 337 },
bsw/jbe@4 338 {
bsw/jbe@4 339 content = function(record)
bsw@51 340 local opinion
bsw@51 341 if app.session.member_id then
bsw@51 342 opinion = Opinion:by_pk(app.session.member.id, record.id)
bsw@51 343 end
bsw/jbe@4 344 if opinion then
bsw/jbe@4 345 if (opinion.fulfilled and opinion.degree > 0) or (not opinion.fulfilled and opinion.degree < 0) then
bsw/jbe@4 346 ui.image{ static = "icons/16/thumb_up_green.png" }
bsw/jbe@4 347 else
bsw/jbe@4 348 ui.image{ static = "icons/16/thumb_down_red.png" }
bsw/jbe@4 349 end
bsw/jbe@4 350 end
bsw/jbe@4 351 end
bsw/jbe@4 352 },
bsw/jbe@4 353 }
bsw/jbe@4 354 }
bsw/jbe@4 355 end
bsw/jbe@0 356 }
bsw/jbe@0 357 end
bsw/jbe@0 358 }

Impressum / About Us