liquid_feedback_frontend

view app/main/issue/_list.lua @ 30:abcac05b1091

Added tag beta11 for changeset b195682957dc
author jbe
date Sun Feb 21 17:34:37 2010 +0100 (2010-02-21)
parents 00d1004545f1
children 0849be391140
line source
1 local issues_selector = param.get("issues_selector", "table")
3 issues_selector
4 :left_join("interest", "_interest", { "_interest.issue_id = issue.id AND _interest.member_id = ?", app.session.member.id} )
5 :add_field("(_interest.member_id NOTNULL)", "is_interested")
7 ui.add_partial_param_names{
8 "filter",
9 "filter_open",
10 "filter_voting",
11 "filter_interest",
12 "issue_list"
13 }
15 local filters = {}
17 filters[#filters+1] = {
18 label = _"Filter",
19 {
20 name = "open",
21 label = _"Open",
22 selector_modifier = function(selector)
23 selector:add_where("issue.closed ISNULL")
24 end
25 },
26 {
27 name = "new",
28 label = _"New",
29 selector_modifier = function(selector)
30 selector:add_where("issue.accepted ISNULL AND issue.closed ISNULL")
31 end
32 },
33 {
34 name = "accepted",
35 label = _"In discussion",
36 selector_modifier = function(selector)
37 selector:add_where("issue.accepted NOTNULL AND issue.half_frozen ISNULL AND issue.closed ISNULL")
38 end
39 },
40 {
41 name = "half_frozen",
42 label = _"Frozen",
43 selector_modifier = function(selector)
44 selector:add_where("issue.half_frozen NOTNULL AND issue.fully_frozen ISNULL")
45 end
46 },
47 {
48 name = "frozen",
49 label = _"Voting",
50 selector_modifier = function(selector)
51 selector:add_where("issue.fully_frozen NOTNULL AND issue.closed ISNULL")
52 filter_voting = true
53 end
54 },
55 {
56 name = "finished",
57 label = _"Finished",
58 selector_modifier = function(selector)
59 selector:add_where("issue.closed NOTNULL AND issue.fully_frozen NOTNULL")
60 end
61 },
62 {
63 name = "cancelled",
64 label = _"Cancelled",
65 selector_modifier = function(selector)
66 selector:add_where("issue.closed NOTNULL AND issue.accepted ISNULL")
67 end
68 },
69 {
70 name = "any",
71 label = _"Any",
72 selector_modifier = function(selector) end
73 },
74 }
77 if param.get("filter") == "frozen" then
78 filters[#filters+1] = {
79 label = _"Filter",
80 name = "filter_voting",
81 {
82 name = "any",
83 label = _"Any",
84 selector_modifier = function() end
85 },
86 {
87 name = "not_voted",
88 label = _"Not voted",
89 selector_modifier = function(selector)
90 selector:left_join("direct_voter", nil, { "direct_voter.issue_id = issue.id AND direct_voter.member_id = ?", app.session.member.id })
91 selector:add_where("direct_voter.member_id ISNULL")
92 end
93 },
94 {
95 name = "voted",
96 label = _"Voted",
97 selector_modifier = function(selector)
98 selector:join("direct_voter", nil, { "direct_voter.issue_id = issue.id AND direct_voter.member_id = ?", app.session.member.id })
99 end
100 },
101 }
102 end
105 filters[#filters+1] = {
106 label = _"Filter",
107 name = "filter_interest",
108 {
109 name = "any",
110 label = _"Any",
111 selector_modifier = function() end
112 },
113 {
114 name = "my",
115 label = _"Interested",
116 selector_modifier = function(selector)
117 selector:join("interest", "filter_interest", { "filter_interest.issue_id = issue.id AND filter_interest.member_id = ? ", app.session.member.id })
118 end
119 },
120 {
121 name = "supported",
122 label = _"Supported",
123 selector_modifier = function(selector)
124 selector:add_where({ "EXISTS (SELECT 1 FROM initiative JOIN supporter ON supporter.initiative_id = initiative.id AND supporter.member_id = ? LEFT JOIN opinion ON opinion.initiative_id = initiative.id AND opinion.member_id = ? AND ((opinion.degree = 2 AND NOT fulfilled) OR (opinion.degree = -2 AND fulfilled)) WHERE initiative.issue_id = issue.id AND opinion.member_id ISNULL LIMIT 1)", app.session.member.id, app.session.member.id })
125 end
126 },
127 {
128 name = "potentially_supported",
129 label = _"Potential supported",
130 selector_modifier = function(selector)
131 selector:add_where({ "EXISTS (SELECT 1 FROM initiative JOIN supporter ON supporter.initiative_id = initiative.id AND supporter.member_id = ? JOIN opinion ON opinion.initiative_id = initiative.id AND opinion.member_id = ? AND ((opinion.degree = 2 AND NOT fulfilled) OR (opinion.degree = -2 AND fulfilled)) WHERE initiative.issue_id = issue.id LIMIT 1)", app.session.member.id, app.session.member.id })
132 end
133 },
134 {
135 name = "initiated",
136 label = _"Initiated",
137 selector_modifier = function(selector)
138 selector:add_where({ "EXISTS (SELECT 1 FROM initiative JOIN initiator ON initiator.initiative_id = initiative.id AND initiator.member_id = ? WHERE initiative.issue_id = issue.id)", app.session.member.id })
139 end
140 },
141 }
143 if not param.get("no_sort", atom.boolean) then
144 filters[#filters+1] = {
145 label = _"Order by",
146 name = "issue_list",
147 {
148 name = "max_potential_support",
149 label = _"Max potential support",
150 selector_modifier = function(selector)
151 selector:add_order_by("(SELECT max(supporter_count) FROM initiative WHERE initiative.issue_id = issue.id) DESC")
152 end
153 },
154 {
155 name = "max_support",
156 label = _"Max support",
157 selector_modifier = function(selector)
158 selector:add_order_by("(SELECT max(satisfied_supporter_count) FROM initiative WHERE initiative.issue_id = issue.id) DESC")
159 end
160 },
161 {
162 name = "population",
163 label = _"Population",
164 selector_modifier = function(selector)
165 selector:add_order_by("issue.population DESC")
166 end
167 },
168 {
169 name = "newest",
170 label = _"Newest",
171 selector_modifier = function(selector)
172 selector:add_order_by("issue.created DESC")
173 end
174 },
175 {
176 name = "oldest",
177 label = _"Oldest",
178 selector_modifier = function(selector)
179 selector:add_order_by("issue.created")
180 end
181 }
182 }
183 end
185 filters.content = function()
186 local ui_paginate = ui.paginate
187 if param.get("per_page") == "all" then
188 ui_paginate = function(args) args.content() end
189 end
190 ui_paginate{
191 per_page = tonumber(param.get("per_page")),
192 selector = issues_selector,
193 content = function()
194 local highlight_string = param.get("highlight_string", "string")
195 local issues = issues or issues_selector:exec()
196 -- issues:load(initiatives)
197 ui.list{
198 attr = { class = "issues" },
199 records = issues,
200 columns = {
201 {
202 label = _"Issue",
203 content = function(record)
204 if not param.get("for_area_list", atom.boolean) then
205 ui.field.text{
206 value = record.area.name
207 }
208 slot.put("<br />")
209 end
210 if record.is_interested then
211 local label = _"You are interested in this issue",
212 ui.image{
213 attr = { alt = label, title = label },
214 static = "icons/16/eye.png"
215 }
216 slot.put("&nbsp;")
217 end
218 ui.link{
219 text = _("Issue ##{id}", { id = tostring(record.id) }),
220 module = "issue",
221 view = "show",
222 id = record.id
223 }
224 if record.state == "new" then
225 ui.image{
226 static = "icons/16/new.png"
227 }
228 end
229 slot.put("<br />")
230 slot.put("<br />")
231 if record.old_state then
232 ui.field.text{ value = format.time(record.sort) }
233 ui.field.text{ value = Issue:get_state_name_for_state(record.old_state) .. " > " .. Issue:get_state_name_for_state(record.new_state) }
234 else
235 end
236 end
237 },
238 {
239 label = _"State",
240 content = function(record)
241 if record.state == "voting" then
242 ui.link{
243 content = _"Voting",
244 module = "vote",
245 view = "list",
246 params = { issue_id = record.id }
247 }
248 else
249 ui.field.issue_state{ value = record.state }
250 end
251 end
252 },
253 {
254 label = _"Initiatives",
255 content = function(record)
256 local initiatives_selector = record:get_reference_selector("initiatives")
257 local highlight_string = param.get("highlight_string")
258 if highlight_string then
259 initiatives_selector:add_field( {'"highlight"("initiative"."name", ?)', highlight_string }, "name_highlighted")
260 end
261 execute.view{
262 module = "initiative",
263 view = "_list",
264 params = {
265 issue = record,
266 initiatives_selector = initiatives_selector,
267 highlight_string = highlight_string,
268 per_page = tonumber(app.session.member:get_setting_value("initiatives_preview_limit") or 3),
269 no_sort = true,
270 limit = tonumber(app.session.member:get_setting_value("initiatives_preview_limit") or 3)
271 }
272 }
273 end
274 },
275 }
276 }
277 end
278 }
279 end
281 filters.selector = issues_selector
282 filters.label = _"Change filters and order"
284 if param.get("no_filter", atom.boolean) then
285 filters.content()
286 else
287 ui.filters(filters)
288 end
290 if param.get("legend", atom.boolean) ~= false then
291 local filter = param.get_all_cgi().filter
292 if not filter or filter == "any" or filter ~= "finished" then
293 ui.bargraph_legend{
294 width = 25,
295 bars = {
296 { color = "#0a0", label = _"Supporter" },
297 { color = "#777", label = _"Potential supporter" },
298 { color = "#ddd", label = _"No support at all" },
299 }
300 }
301 end
302 if not filter or filter == "any" or filter == "finished" then
303 ui.bargraph_legend{
304 width = 25,
305 bars = {
306 { color = "#0a0", label = _"Yes" },
307 { color = "#aaa", label = _"Abstention" },
308 { color = "#a00", label = _"No" },
309 }
310 }
311 end
312 end

Impressum / About Us