liquid_feedback_frontend

annotate app/main/suggestion/_list.lua @ 9:0ee1e0c42d4c

Version beta5

Minor security fix: Added missing security filter for admin section. Reading of member listing including login names was possible for all users. Write access has not been possible though.

Changing of name and login is possible while a history of these changes is written and accessible by all users.

Statistics shown in area list

Trimming of user input also converts multiple whitespaces to single space character.
author bsw
date Mon Jan 04 12:00:00 2010 +0100 (2010-01-04)
parents afd9f769c7ae
children 00d1004545f1
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@0 4
bsw/jbe@4 5 ui.order{
bsw/jbe@4 6 name = name,
bsw/jbe@0 7 selector = suggestions_selector,
bsw/jbe@4 8 options = {
bsw/jbe@4 9 {
bsw/jbe@4 10 name = "all",
bsw/jbe@4 11 label = _"all",
bsw/jbe@4 12 order_by = "minus2_unfulfilled_count + minus1_unfulfilled_count + minus2_fulfilled_count + minus1_fulfilled_count + plus2_unfulfilled_count + plus1_unfulfilled_count + plus2_fulfilled_count + plus1_fulfilled_count DESC, id"
bsw/jbe@4 13 },
bsw/jbe@4 14 {
bsw/jbe@4 15 name = "plus2",
bsw/jbe@4 16 label = _"must",
bsw/jbe@4 17 order_by = "plus2_unfulfilled_count + plus2_fulfilled_count DESC, id"
bsw/jbe@4 18 },
bsw/jbe@4 19 {
bsw/jbe@4 20 name = "plus",
bsw/jbe@4 21 label = _"must/should",
bsw/jbe@4 22 order_by = "plus2_unfulfilled_count + plus1_unfulfilled_count + plus2_fulfilled_count + plus1_fulfilled_count DESC, id"
bsw/jbe@4 23 },
bsw/jbe@4 24 {
bsw/jbe@4 25 name = "minus",
bsw/jbe@4 26 label = _"must/should not",
bsw/jbe@4 27 order_by = "minus2_unfulfilled_count + minus1_unfulfilled_count + minus2_fulfilled_count + minus1_fulfilled_count DESC, id"
bsw/jbe@4 28 },
bsw/jbe@4 29 {
bsw/jbe@4 30 name = "minus2",
bsw/jbe@4 31 label = _"must not",
bsw/jbe@4 32 order_by = "minus2_unfulfilled_count + minus2_fulfilled_count DESC, id"
bsw/jbe@4 33 },
bsw/jbe@4 34 {
bsw/jbe@4 35 name = "unfulfilled",
bsw/jbe@4 36 label = _"not implemented",
bsw/jbe@4 37 order_by = "minus2_unfulfilled_count + minus1_unfulfilled_count + plus2_unfulfilled_count + plus1_unfulfilled_count DESC, id"
bsw/jbe@4 38 },
bsw/jbe@4 39 {
bsw/jbe@4 40 name = "plus2_unfulfilled",
bsw/jbe@4 41 label = _"must",
bsw/jbe@4 42 order_by = "plus2_unfulfilled_count DESC, id"
bsw/jbe@4 43 },
bsw/jbe@4 44 {
bsw/jbe@4 45 name = "plus_unfulfilled",
bsw/jbe@4 46 label = _"must/should",
bsw/jbe@4 47 order_by = "plus2_unfulfilled_count + plus1_unfulfilled_count DESC, id"
bsw/jbe@4 48 },
bsw/jbe@4 49 {
bsw/jbe@4 50 name = "minus_unfulfilled",
bsw/jbe@4 51 label = _"must/should not",
bsw/jbe@4 52 order_by = "minus2_unfulfilled_count + minus1_unfulfilled_count DESC, id"
bsw/jbe@4 53 },
bsw/jbe@4 54 {
bsw/jbe@4 55 name = "minus2_unfulfilled",
bsw/jbe@4 56 label = _"must not",
bsw/jbe@4 57 order_by = "minus2_unfulfilled_count DESC, id"
bsw/jbe@4 58 },
bsw/jbe@4 59 },
bsw/jbe@0 60 content = function()
bsw/jbe@4 61 ui.paginate{
bsw/jbe@4 62 selector = suggestions_selector,
bsw/jbe@4 63 content = function()
bsw/jbe@4 64 ui.list{
bsw/jbe@4 65 attr = { style = "table-layout: fixed;" },
bsw/jbe@4 66 records = suggestions_selector:exec(),
bsw/jbe@4 67 columns = {
bsw/jbe@4 68 {
bsw/jbe@4 69 label = _"Suggestion",
bsw/jbe@4 70 content = function(record)
bsw/jbe@4 71 ui.link{
bsw/jbe@4 72 text = record.name,
bsw/jbe@4 73 module = "suggestion",
bsw/jbe@4 74 view = "show",
bsw/jbe@4 75 id = record.id
bsw/jbe@0 76 }
bsw/jbe@4 77 end
bsw/jbe@4 78 },
bsw/jbe@4 79 {
bsw/jbe@4 80 label = _"Collective opinion",
bsw/jbe@4 81 label_attr = { style = "width: 101px;" },
bsw/jbe@4 82 content = function(record)
bsw/jbe@4 83 if record.minus2_unfulfilled_count then
bsw/jbe@4 84 local max_value = record.initiative.issue.population
bsw/jbe@4 85 ui.bargraph{
bsw/jbe@4 86 max_value = max_value,
bsw/jbe@4 87 width = 50,
bsw/jbe@4 88 bars = {
bsw/jbe@4 89 { color = "#ddd", value = max_value - record.minus2_unfulfilled_count - record.minus1_unfulfilled_count - record.minus2_fulfilled_count - record.minus1_fulfilled_count },
bsw/jbe@4 90 { color = "#f88", value = record.minus1_unfulfilled_count + record.minus1_fulfilled_count },
bsw/jbe@4 91 { color = "#a00", value = record.minus2_unfulfilled_count + record.minus2_fulfilled_count },
bsw/jbe@4 92 { color = "#0a0", value = record.plus2_unfulfilled_count + record.plus2_fulfilled_count },
bsw/jbe@4 93 { color = "#8f8", value = record.plus1_unfulfilled_count + record.plus1_fulfilled_count },
bsw/jbe@4 94 { color = "#ddd", value = max_value - record.plus1_unfulfilled_count - record.plus2_unfulfilled_count - record.plus1_fulfilled_count - record.plus2_fulfilled_count },
bsw/jbe@4 95 }
bsw/jbe@4 96 }
bsw/jbe@4 97 end
bsw/jbe@4 98 end
bsw/jbe@4 99 },
bsw/jbe@4 100 {
bsw/jbe@4 101 label = _"My opinion",
bsw/jbe@4 102 content = function(record)
bsw/jbe@4 103 local degree
bsw/jbe@4 104 local opinion = Opinion:by_pk(app.session.member.id, record.id)
bsw/jbe@4 105 if opinion then
bsw/jbe@4 106 degree = opinion.degree
bsw@3 107 end
bsw/jbe@5 108 ui.container{
bsw/jbe@5 109 attr = { class = "suggestion_my_opinion" },
bsw/jbe@5 110 content = function()
bsw/jbe@5 111 ui.link{
bsw/jbe@5 112 attr = { class = "action" .. (degree == -2 and " active_red2" or "") },
bsw/jbe@5 113 text = _"must not",
bsw/jbe@5 114 module = "opinion",
bsw/jbe@5 115 action = "update",
bsw/jbe@5 116 routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } },
bsw/jbe@5 117 params = {
bsw/jbe@5 118 suggestion_id = record.id,
bsw/jbe@5 119 degree = -2
bsw/jbe@5 120 }
bsw/jbe@5 121 }
bsw/jbe@5 122 slot.put(" ")
bsw/jbe@5 123 ui.link{
bsw/jbe@5 124 attr = { class = "action" .. (degree == -1 and " active_red1" or "") },
bsw/jbe@5 125 text = _"should not",
bsw/jbe@5 126 module = "opinion",
bsw/jbe@5 127 action = "update",
bsw/jbe@5 128 routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } },
bsw/jbe@5 129 params = {
bsw/jbe@5 130 suggestion_id = record.id,
bsw/jbe@5 131 degree = -1
bsw/jbe@5 132 }
bsw/jbe@5 133 }
bsw/jbe@5 134 slot.put(" ")
bsw/jbe@5 135 ui.link{
bsw/jbe@5 136 attr = { class = "action" .. (degree == nil and " active" or "") },
bsw/jbe@5 137 text = _"neutral",
bsw/jbe@5 138 module = "opinion",
bsw/jbe@5 139 action = "update",
bsw/jbe@5 140 routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } },
bsw/jbe@5 141 params = {
bsw/jbe@5 142 suggestion_id = record.id,
bsw/jbe@5 143 delete = true
bsw/jbe@5 144 }
bsw/jbe@5 145 }
bsw/jbe@5 146 slot.put(" ")
bsw/jbe@5 147 ui.link{
bsw/jbe@5 148 attr = { class = "action" .. (degree == 1 and " active_green1" or "") },
bsw/jbe@5 149 text = _"should",
bsw/jbe@5 150 module = "opinion",
bsw/jbe@5 151 action = "update",
bsw/jbe@5 152 routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } },
bsw/jbe@5 153 params = {
bsw/jbe@5 154 suggestion_id = record.id,
bsw/jbe@5 155 degree = 1
bsw/jbe@5 156 }
bsw/jbe@5 157 }
bsw/jbe@5 158 slot.put(" ")
bsw/jbe@5 159 ui.link{
bsw/jbe@5 160 attr = { class = "action" .. (degree == 2 and " active_green2" or "") },
bsw/jbe@5 161 text = _"must",
bsw/jbe@5 162 module = "opinion",
bsw/jbe@5 163 action = "update",
bsw/jbe@5 164 routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } },
bsw/jbe@5 165 params = {
bsw/jbe@5 166 suggestion_id = record.id,
bsw/jbe@5 167 degree = 2
bsw/jbe@5 168 }
bsw/jbe@5 169 }
bsw/jbe@5 170 end
bsw/jbe@0 171 }
bsw/jbe@0 172 end
bsw/jbe@4 173 },
bsw/jbe@4 174 {
bsw/jbe@4 175 content = function(record)
bsw/jbe@4 176 local opinion = Opinion:by_pk(app.session.member.id, record.id)
bsw/jbe@4 177 if opinion and not opinion.fulfilled then
bsw/jbe@4 178 ui.image{ static = "icons/16/cross.png" }
bsw/jbe@4 179 end
bsw/jbe@4 180 end
bsw/jbe@4 181 },
bsw/jbe@4 182 {
bsw/jbe@4 183 label = _"Suggestion currently not implemented",
bsw/jbe@4 184 label_attr = { style = "width: 101px;" },
bsw/jbe@4 185 content = function(record)
bsw/jbe@4 186 if record.minus2_unfulfilled_count then
bsw/jbe@4 187 local max_value = record.initiative.issue.population
bsw/jbe@4 188 ui.bargraph{
bsw/jbe@4 189 max_value = max_value,
bsw/jbe@4 190 width = 50,
bsw/jbe@4 191 bars = {
bsw/jbe@4 192 { color = "#ddd", value = max_value - record.minus2_unfulfilled_count - record.minus1_unfulfilled_count },
bsw/jbe@4 193 { color = "#f88", value = record.minus1_unfulfilled_count },
bsw/jbe@4 194 { color = "#a00", value = record.minus2_unfulfilled_count },
bsw/jbe@4 195 { color = "#0a0", value = record.plus2_unfulfilled_count },
bsw/jbe@4 196 { color = "#8f8", value = record.plus1_unfulfilled_count },
bsw/jbe@4 197 { color = "#ddd", value = max_value - record.plus1_unfulfilled_count - record.plus2_unfulfilled_count },
bsw/jbe@4 198 }
bsw/jbe@4 199 }
bsw/jbe@4 200 end
bsw/jbe@4 201 end
bsw/jbe@4 202 },
bsw/jbe@4 203 {
bsw/jbe@4 204 content = function(record)
bsw/jbe@4 205 local opinion = Opinion:by_pk(app.session.member.id, record.id)
bsw/jbe@4 206 if opinion and opinion.fulfilled then
bsw/jbe@4 207 ui.image{ static = "icons/16/tick.png" }
bsw/jbe@4 208 end
bsw/jbe@4 209 end
bsw/jbe@4 210 },
bsw/jbe@4 211 {
bsw/jbe@4 212 label = _"Suggestion currently implemented",
bsw/jbe@4 213 label_attr = { style = "width: 101px;" },
bsw/jbe@4 214 content = function(record)
bsw/jbe@4 215 if record.minus2_fulfilled_count then
bsw/jbe@4 216 local max_value = record.initiative.issue.population
bsw/jbe@4 217 ui.bargraph{
bsw/jbe@4 218 max_value = max_value,
bsw/jbe@4 219 width = 50,
bsw/jbe@4 220 bars = {
bsw/jbe@4 221 { color = "#ddd", value = max_value - record.minus2_fulfilled_count - record.minus1_fulfilled_count },
bsw/jbe@4 222 { color = "#f88", value = record.minus1_fulfilled_count },
bsw/jbe@4 223 { color = "#a00", value = record.minus2_fulfilled_count },
bsw/jbe@4 224 { color = "#0a0", value = record.plus2_fulfilled_count },
bsw/jbe@4 225 { color = "#8f8", value = record.plus1_fulfilled_count },
bsw/jbe@4 226 { color = "#ddd", value = max_value - record.plus1_fulfilled_count - record.plus2_fulfilled_count },
bsw/jbe@4 227 }
bsw/jbe@4 228 }
bsw/jbe@4 229 end
bsw@3 230 end
bsw/jbe@4 231 },
bsw/jbe@4 232 {
bsw/jbe@4 233 label_attr = { style = "width: 200px;" },
bsw/jbe@4 234 content = function(record)
bsw/jbe@4 235 local degree
bsw/jbe@4 236 local opinion = Opinion:by_pk(app.session.member.id, record.id)
bsw/jbe@4 237 if opinion then
bsw/jbe@4 238 degree = opinion.degree
bsw/jbe@4 239 end
bsw/jbe@4 240 if opinion then
bsw/jbe@4 241 if not opinion.fulfilled then
bsw/jbe@4 242 local text = ""
bsw/jbe@4 243 if opinion.degree > 0 then
bsw/jbe@4 244 text = _"Mark suggestion as implemented and express satisfaction"
bsw/jbe@4 245 else
bsw/jbe@4 246 text = _"Mark suggestion as implemented and express dissatisfaction"
bsw/jbe@4 247 end
bsw/jbe@4 248 ui.link{
bsw/jbe@4 249 attr = { class = "action" },
bsw/jbe@4 250 text = text,
bsw/jbe@4 251 module = "opinion",
bsw/jbe@4 252 action = "update",
bsw/jbe@4 253 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 254 params = {
bsw/jbe@4 255 suggestion_id = record.id,
bsw/jbe@4 256 fulfilled = true
bsw/jbe@4 257 }
bsw/jbe@4 258 }
bsw/jbe@4 259 else
bsw/jbe@4 260 if opinion.degree > 0 then
bsw/jbe@4 261 text = _"Mark suggestion as not implemented and express dissatisfaction"
bsw/jbe@4 262 else
bsw/jbe@4 263 text = _"Mark suggestion as not implemented and express satisfaction"
bsw/jbe@4 264 end
bsw/jbe@4 265 ui.link{
bsw/jbe@4 266 attr = { class = "action" },
bsw/jbe@4 267 text = text,
bsw/jbe@4 268 module = "opinion",
bsw/jbe@4 269 action = "update",
bsw/jbe@4 270 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 271 params = {
bsw/jbe@4 272 suggestion_id = record.id,
bsw/jbe@4 273 fulfilled = false
bsw/jbe@4 274 }
bsw/jbe@4 275 }
bsw/jbe@4 276 end
bsw/jbe@4 277 end
bsw/jbe@4 278 end
bsw/jbe@4 279 },
bsw/jbe@4 280 {
bsw/jbe@4 281 content = function(record)
bsw/jbe@4 282 local opinion = Opinion:by_pk(app.session.member.id, record.id)
bsw/jbe@4 283 if opinion then
bsw/jbe@4 284 if (opinion.fulfilled and opinion.degree > 0) or (not opinion.fulfilled and opinion.degree < 0) then
bsw/jbe@4 285 ui.image{ static = "icons/16/thumb_up_green.png" }
bsw/jbe@4 286 else
bsw/jbe@4 287 ui.image{ static = "icons/16/thumb_down_red.png" }
bsw/jbe@4 288 end
bsw/jbe@4 289 end
bsw/jbe@4 290 end
bsw/jbe@4 291 },
bsw/jbe@4 292 }
bsw/jbe@4 293 }
bsw/jbe@4 294 end
bsw/jbe@0 295 }
bsw/jbe@0 296 end
bsw/jbe@0 297 }
bsw/jbe@4 298
bsw/jbe@4 299 if initiative then
bsw/jbe@4 300 ui.field.timestamp{ label = _"Last snapshot:", value = initiative.issue.snapshot }
bsw/jbe@4 301 end

Impressum / About Us