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

Impressum / About Us