liquid_feedback_frontend

annotate app/main/suggestion/_list.lua @ 219:217653875fbb

Fix registration process for units
author bsw
date Sun Mar 13 16:59:16 2011 +0100 (2011-03-13)
parents 44ba79952610
children f460555c9896
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
poelzi@142 161 -- we need to put initiative_id into the parameters to have a redirect target in case the suggestion is gone after the action
poelzi@142 162 params = param.get_all_cgi()
poelzi@142 163 params['initiative_id'] = initiative.id
poelzi@142 164
bsw@51 165 ui.link{
bsw@95 166 attr = { class = "action" .. (degree == 2 and " active_green2" or "") },
bsw@95 167 text = _"must",
bsw@51 168 module = "opinion",
bsw@51 169 action = "update",
poelzi@142 170 routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = params } },
bsw@51 171 params = {
bsw@51 172 suggestion_id = record.id,
bsw@95 173 degree = 2
bsw@51 174 },
bsw@51 175 partial = partial
bsw@51 176 }
bsw@51 177 slot.put(" ")
bsw@51 178 ui.link{
bsw@51 179 attr = { class = "action" .. (degree == 1 and " active_green1" or "") },
bsw@51 180 text = _"should",
bsw@51 181 module = "opinion",
bsw@51 182 action = "update",
poelzi@142 183 routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = params} },
bsw@51 184 params = {
bsw@51 185 suggestion_id = record.id,
bsw@51 186 degree = 1
bsw@51 187 },
bsw@51 188 partial = partial
bsw@51 189 }
bsw@51 190 slot.put(" ")
bsw@51 191 ui.link{
bsw@95 192 attr = { class = "action" .. (degree == nil and " active" or "") },
bsw@95 193 text = _"neutral",
bsw@51 194 module = "opinion",
bsw@51 195 action = "update",
poelzi@142 196 routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = params } },
bsw@51 197 params = {
bsw@51 198 suggestion_id = record.id,
bsw@95 199 delete = true
bsw@95 200 },
bsw@95 201 partial = partial
bsw@95 202 }
bsw@95 203 slot.put(" ")
bsw@95 204 ui.link{
bsw@95 205 attr = { class = "action" .. (degree == -1 and " active_red1" or "") },
bsw@95 206 text = _"should not",
bsw@95 207 module = "opinion",
bsw@95 208 action = "update",
poelzi@142 209 routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = params } },
bsw@95 210 params = {
bsw@95 211 suggestion_id = record.id,
bsw@95 212 degree = -1
bsw@95 213 },
bsw@95 214 partial = partial
bsw@95 215 }
bsw@95 216 slot.put(" ")
bsw@95 217 ui.link{
bsw@95 218 attr = { class = "action" .. (degree == -2 and " active_red2" or "") },
bsw@95 219 text = _"must not",
bsw@95 220 module = "opinion",
bsw@95 221 action = "update",
poelzi@142 222 routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = params } },
bsw@95 223 params = {
bsw@95 224 suggestion_id = record.id,
bsw@95 225 degree = -2
bsw@51 226 },
bsw@51 227 partial = partial
bsw@51 228 }
bsw@51 229 end
bsw/jbe@19 230 else
bsw@51 231 ui.field.text{ value = _"[Registered members only]" }
bsw/jbe@19 232 end
bsw/jbe@5 233 end
bsw/jbe@0 234 }
bsw/jbe@0 235 end
bsw/jbe@4 236 },
bsw/jbe@4 237 {
bsw/jbe@4 238 label = _"Suggestion currently not implemented",
bsw/jbe@4 239 label_attr = { style = "width: 101px;" },
bsw/jbe@4 240 content = function(record)
bsw/jbe@4 241 if record.minus2_unfulfilled_count then
bsw@95 242 local max_value = record.initiative.supporter_count
bsw/jbe@4 243 ui.bargraph{
bsw/jbe@4 244 max_value = max_value,
bsw@95 245 width = 100,
bsw/jbe@4 246 bars = {
bsw/jbe@4 247 { color = "#0a0", value = record.plus2_unfulfilled_count },
bsw/jbe@4 248 { color = "#8f8", value = record.plus1_unfulfilled_count },
bsw@95 249 { color = "#eee", value = max_value - record.minus2_unfulfilled_count - record.minus1_unfulfilled_count - record.plus1_unfulfilled_count - record.plus2_unfulfilled_count },
bsw@95 250 { color = "#f88", value = record.minus1_unfulfilled_count },
bsw@95 251 { color = "#a00", value = record.minus2_unfulfilled_count },
bsw/jbe@4 252 }
bsw/jbe@4 253 }
bsw/jbe@4 254 end
bsw/jbe@4 255 end
bsw/jbe@4 256 },
bsw/jbe@4 257 {
bsw/jbe@4 258 label = _"Suggestion currently implemented",
bsw/jbe@4 259 label_attr = { style = "width: 101px;" },
bsw/jbe@4 260 content = function(record)
bsw/jbe@4 261 if record.minus2_fulfilled_count then
bsw@95 262 local max_value = record.initiative.supporter_count
bsw/jbe@4 263 ui.bargraph{
bsw/jbe@4 264 max_value = max_value,
bsw@95 265 width = 100,
bsw/jbe@4 266 bars = {
bsw@95 267 { color = "#0a0", value = record.plus2_fulfilled_count },
bsw@95 268 { color = "#8f8", value = record.plus1_fulfilled_count },
bsw@95 269 { color = "#eee", value = max_value - record.minus2_fulfilled_count - record.minus1_fulfilled_count - record.plus1_fulfilled_count - record.plus2_fulfilled_count},
bsw/jbe@4 270 { color = "#f88", value = record.minus1_fulfilled_count },
bsw/jbe@4 271 { color = "#a00", value = record.minus2_fulfilled_count },
bsw/jbe@4 272 }
bsw/jbe@4 273 }
bsw/jbe@4 274 end
bsw@3 275 end
bsw/jbe@4 276 },
bsw/jbe@4 277 {
bsw@95 278 label = app.session.member_id and _"I consider suggestion as" or nil,
bsw@95 279 label_attr = { style = "width: 100px; font-style: italic;" },
bsw/jbe@4 280 content = function(record)
bsw/jbe@4 281 local degree
bsw@51 282 local opinion
bsw@51 283 if app.session.member_id then
bsw@51 284 opinion = Opinion:by_pk(app.session.member.id, record.id)
bsw@51 285 end
bsw/jbe@4 286 if opinion then
bsw/jbe@4 287 degree = opinion.degree
bsw/jbe@4 288 end
bsw/jbe@4 289 if opinion then
bsw@95 290
bsw@95 291 ui.link{
bsw@95 292 attr = { class = opinion.fulfilled and "action active" or "action" },
bsw@95 293 text = _"implemented",
bsw@95 294 module = "opinion",
bsw@95 295 action = "update",
bsw@95 296 routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } },
bsw@95 297 params = {
bsw@95 298 suggestion_id = record.id,
bsw@95 299 fulfilled = true
bsw@95 300 },
bsw@95 301 partial = partial
bsw@95 302 }
bsw@95 303 slot.put("<br />")
bsw@95 304 ui.link{
bsw@95 305 attr = { class = not opinion.fulfilled and "action active" or "action" },
bsw@95 306 text = _"not implemented",
bsw@95 307 module = "opinion",
bsw@95 308 action = "update",
bsw@95 309 routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } },
bsw@95 310 params = {
bsw@95 311 suggestion_id = record.id,
bsw@95 312 fulfilled = false
bsw@95 313 },
bsw@95 314 partial = partial
bsw@95 315 }
bsw@95 316
bsw/jbe@4 317 end
bsw/jbe@4 318 end
bsw/jbe@4 319 },
bsw/jbe@4 320 {
bsw@95 321 label = app.session.member_id and _"So I'm" or nil,
bsw/jbe@4 322 content = function(record)
bsw@51 323 local opinion
bsw@51 324 if app.session.member_id then
bsw@51 325 opinion = Opinion:by_pk(app.session.member.id, record.id)
bsw@51 326 end
bsw/jbe@4 327 if opinion then
bsw/jbe@4 328 if (opinion.fulfilled and opinion.degree > 0) or (not opinion.fulfilled and opinion.degree < 0) then
bsw@95 329 local title = _"satisfied"
bsw@95 330 ui.image{ attr = { alt = title, title = title }, static = "icons/emoticon_happy.png" }
bsw@95 331 elseif opinion.degree == 1 or opinion.degree == -1 then
bsw@95 332 local title = _"a bit unsatisfied"
bsw@95 333 ui.image{ attr = { alt = title, title = title }, static = "icons/emoticon_unhappy.png" }
bsw/jbe@4 334 else
bsw@95 335 local title = _"more unsatisfied"
bsw@95 336 ui.image{ attr = { alt = title, title = title }, static = "icons/emoticon_unhappy_red.png" }
bsw/jbe@4 337 end
bsw/jbe@4 338 end
bsw/jbe@4 339 end
bsw/jbe@4 340 },
bsw/jbe@4 341 }
bsw/jbe@4 342 }
bsw/jbe@4 343 end
bsw/jbe@0 344 }
bsw/jbe@0 345 end
bsw/jbe@0 346 }

Impressum / About Us