liquid_feedback_frontend

view app/main/issue/_filters.lua @ 1152:851d4710452f

Removed usage of deprecated function load_chunk
author bsw
date Sun Mar 22 22:31:47 2015 +0100 (2015-03-22)
parents 904f6807f7fa
children e266841f784b
line source
1 local params = request.get_param_strings() -- TODO replace with request.get_param() calls?
3 local for_unit = param.get("for_unit", atom.boolean)
4 local for_area = param.get("for_area", atom.boolean)
5 local for_events = param.get("for_events", atom.boolean)
6 local for_member = param.get("for_member", "table")
7 local member = param.get("member", "table")
8 local phase = params["phase"]
10 local filters = {}
12 local admission_order_field = "filter_issue_order.order_in_unit"
13 if for_area then
14 admission_order_field = "filter_issue_order.order_in_area"
15 end
17 if not for_issue and not for_member then
19 -- mode
21 local filter = { class = "filter_mode", name = "mode" }
23 filter[#filter+1] = {
24 name = "issue",
25 label = _"issue view",
26 selector_modifier = function () end
27 }
29 filter[#filter+1] = {
30 name = "timeline",
31 label = _"timeline",
32 selector_modifier = function ( selector )
33 selector:add_order_by ( "event.occurrence DESC" )
34 selector:add_order_by ( "id DESC" )
35 end
36 }
38 filters[#filters+1] = filter
40 -- context
42 local filter = { class = "filter_filter", name = "filter" }
44 if member and not for_unit and not for_area then
45 filter[#filter+1] = {
46 name = "my_units",
47 label = _"in my units",
48 selector_modifier = function ( selector )
49 selector:join ( "area", "filter_area", "filter_area.id = issue.area_id" )
50 selector:join ( "privilege", "filter_privilege", {
51 "filter_privilege.unit_id = filter_area.unit_id AND filter_privilege.member_id = ?", member.id
52 })
53 end
54 }
55 end
57 if member and not for_area then
59 filter[#filter+1] = {
60 name = "my_areas",
61 label = _"in my areas",
62 selector_modifier = function ( selector )
63 selector:join ( "membership", "filter_membership", {
64 "filter_membership.area_id = issue.area_id AND filter_membership.member_id = ?", member.id
65 })
66 end
67 }
68 end
70 if member then
71 filter[#filter+1] = {
72 name = "my_issues",
73 label = _"my issues",
74 selector_modifier = function ( selector )
75 selector:left_join("interest", "filter_interest", { "filter_interest.issue_id = issue.id AND filter_interest.member_id = ? ", member.id })
76 --selector:left_join("direct_interest_snapshot", "filter_interest_s", { "filter_interest_s.issue_id = issue.id AND filter_interest_s.member_id = ? AND filter_interest_s.event = issue.latest_snapshot_event", member.id })
77 selector:left_join("delegating_interest_snapshot", "filter_d_interest_s", { "filter_d_interest_s.issue_id = issue.id AND filter_d_interest_s.member_id = ? AND filter_d_interest_s.event = issue.latest_snapshot_event", member.id })
78 end
79 }
80 end
82 filter[#filter+1] = {
83 name = "all",
84 label = _"all issues",
85 selector_modifier = function() end
86 }
88 filters[#filters+1] = filter
90 -- phase
92 local filter = { name = "phase" }
94 filter[#filter+1] = {
95 name = "all",
96 label = _"in all phases",
97 selector_modifier = function ( selector )
98 if not for_events then
99 selector:left_join ( "issue_order_in_admission_state", "filter_issue_order", "filter_issue_order.id = issue.id" )
100 selector:add_order_by ( "issue.closed DESC NULLS FIRST" )
101 selector:add_order_by ( "issue.accepted ISNULL" )
102 selector:add_order_by ( "CASE WHEN issue.accepted ISNULL THEN NULL ELSE justify_interval(coalesce(issue.fully_frozen + issue.voting_time, issue.half_frozen + issue.verification_time, issue.accepted + issue.discussion_time, issue.created + issue.admission_time) - now()) END" )
103 selector:add_order_by ( "CASE WHEN issue.accepted ISNULL THEN " .. admission_order_field .. " ELSE NULL END" )
104 selector:add_order_by ( "id" )
105 end
106 end
107 }
109 filter[#filter+1] = {
110 name = "admission",
111 label = _"(1) Admission",
112 selector_modifier = function ( selector )
113 selector:add_where { "issue.state = ?", "admission" }
114 if not for_events then
115 selector:left_join ( "issue_order_in_admission_state", "filter_issue_order", "filter_issue_order.id = issue.id" )
116 selector:add_order_by ( admission_order_field )
117 selector:add_order_by ( "id" )
118 end
119 end
120 }
122 filter[#filter+1] = {
123 name = "discussion",
124 label = _"(2) Discussion",
125 selector_modifier = function ( selector )
126 selector:add_where { "issue.state = ?", "discussion" }
127 if not for_events then
128 selector:add_order_by ( "issue.accepted + issue.discussion_time - now()" )
129 selector:add_order_by ( "id" )
130 end
131 end
132 }
134 filter[#filter+1] = {
135 name = "verification",
136 label = _"(3) Verification",
137 selector_modifier = function ( selector )
138 selector:add_where { "issue.state = ?", "verification" }
139 if not for_events then
140 selector:add_order_by ( "issue.half_frozen + issue.verification_time - now()" )
141 selector:add_order_by ( "id" )
142 end
143 end
144 }
146 filter[#filter+1] = {
147 name = "voting",
148 label = _"(4) Voting",
149 selector_modifier = function ( selector )
150 selector:add_where { "issue.state = ?", "voting" }
151 if not for_events then
152 selector:add_order_by ( "issue.fully_frozen + issue.voting_time - now()" )
153 selector:add_order_by ( "id" )
154 end
155 end
156 }
158 filter[#filter+1] = {
159 name = "closed",
160 label = _"(5) Result",
161 selector_modifier = function ( selector )
162 if not for_events then
163 selector:add_where ( "issue.closed NOTNULL" )
164 selector:add_order_by ( "issue.closed DESC" )
165 selector:add_order_by ( "id" )
166 end
167 end
168 }
170 filters[#filters+1] = filter
172 -- my issues
174 if params["filter"] == "my_issues" then
176 local delegation = params["delegation"]
178 local filter = { class = "filter_interest subfilter", name = "interest" }
180 filter[#filter+1] = {
181 name = "all",
182 label = _"interested directly or via delegation",
183 selector_modifier = function ( selector )
184 selector:add_where ( "filter_interest.issue_id NOTNULL OR filter_d_interest_s.issue_id NOTNULL" )
185 end
186 }
188 filter[#filter+1] = {
189 name = "direct",
190 label = _"direct interest",
191 selector_modifier = function ( selector )
192 selector:add_where ( "filter_interest.issue_id NOTNULL" )
193 end
194 }
196 filter[#filter+1] = {
197 name = "via_delegation",
198 label = _"interest via delegation",
199 selector_modifier = function ( selector )
200 selector:add_where ( "filter_d_interest_s.issue_id NOTNULL" )
201 end
202 }
204 filter[#filter+1] = {
205 name = "initiated",
206 label = _"initiated by me",
207 selector_modifier = function ( selector )
208 selector:add_where ( "filter_interest.issue_id NOTNULL" )
209 end
210 }
212 filters[#filters+1] = filter
214 end
216 -- voting
218 if phase == "voting" and member then
220 local filter = { class = "subfilter", name = "voted" }
222 filter[#filter+1] = {
223 name = "all",
224 label = _"voted and not voted by me",
225 selector_modifier = function(selector) end
226 }
228 filter[#filter+1] = {
229 name = "voted",
230 label = _"voted by me",
231 selector_modifier = function(selector)
232 selector:join("direct_voter", "filter_direct_voter", { "filter_direct_voter.issue_id = issue.id AND filter_direct_voter.member_id = ?", member.id })
233 end
234 }
236 filter[#filter+1] = {
237 name = "not_voted",
238 label = _"not voted by me",
239 selector_modifier = function(selector)
240 selector:left_join("direct_voter", "filter_direct_voter", { "filter_direct_voter.issue_id = issue.id AND filter_direct_voter.member_id = ?", member.id })
241 selector:add_where("filter_direct_voter.issue_id ISNULL")
242 end
243 }
244 filters[#filters+1] = filter
247 end
249 -- closed
251 if phase == "closed" then
253 local filter = { class = "subfilter", name = "closed" }
255 filter[#filter+1] = {
256 name = "finished",
257 label = _"finished",
258 selector_modifier = function ( selector )
259 selector:add_where ( "issue.state::text like 'finished_%'" )
260 end
261 }
263 filter[#filter+1] = {
264 name = "canceled",
265 label = _"canceled",
266 selector_modifier = function ( selector )
267 selector:add_where ( "issue.closed NOTNULL AND NOT issue.state::text like 'finished_%' AND issue.accepted NOTNULL" )
268 end
269 }
271 filter[#filter+1] = {
272 name = "not_accepted",
273 label = _"not admitted",
274 selector_modifier = function ( selector )
275 selector:add_where ( "issue.closed NOTNULL AND issue.accepted ISNULL" )
276 end
277 }
279 if member then
280 filter[#filter+1] = {
281 name = "voted",
282 label = _"voted by me",
283 selector_modifier = function(selector)
284 selector:left_join("direct_voter", "filter_direct_voter", { "filter_direct_voter.issue_id = issue.id AND filter_direct_voter.member_id = ?", member.id })
285 selector:left_join("delegating_voter", "filter_delegating_voter", { "filter_delegating_voter.issue_id = issue.id AND filter_delegating_voter.member_id = ?", member.id })
286 selector:add_where("filter_direct_voter.issue_id NOTNULL or filter_delegating_voter.issue_id NOTNULL")
287 end
288 }
290 filter[#filter+1] = {
291 name = "voted_direct",
292 label = _"voted directly by me",
293 selector_modifier = function(selector)
294 selector:join("direct_voter", "filter_direct_voter", { "filter_direct_voter.issue_id = issue.id AND filter_direct_voter.member_id = ?", member.id })
295 end
296 }
298 filter[#filter+1] = {
299 name = "voted_via_delegation",
300 label = _"voted via delegation",
301 selector_modifier = function(selector)
302 selector:join("delegating_voter", "filter_delegating_voter", { "filter_delegating_voter.issue_id = issue.id AND filter_delegating_voter.member_id = ?", member.id })
303 end
304 }
306 filter[#filter+1] = {
307 name = "not_voted",
308 label = _"not voted by me",
309 selector_modifier = function(selector)
310 selector:left_join("direct_voter", "filter_direct_voter", { "filter_direct_voter.issue_id = issue.id AND filter_direct_voter.member_id = ?", member.id })
311 selector:left_join("delegating_voter", "filter_delegating_voter", { "filter_delegating_voter.issue_id = issue.id AND filter_delegating_voter.member_id = ?", member.id })
312 selector:add_where("filter_direct_voter.issue_id ISNULL AND filter_delegating_voter.issue_id ISNULL")
313 end
314 }
315 end
317 filters[#filters+1] = filter
320 end
323 end
326 return filters

Impressum / About Us