rev |
line source |
bsw@284
|
1 local member = param.get("member", "table")
|
bsw@459
|
2 local for_member = param.get("for_member", "table")
|
bsw@414
|
3 local state = param.get("state")
|
bsw@414
|
4 local for_unit = param.get("for_unit", atom.boolean)
|
bsw@414
|
5 local for_area = param.get("for_area", atom.boolean)
|
bsw@284
|
6
|
bsw@851
|
7 local for_events = param.get("for_events", atom.boolean)
|
bsw@851
|
8
|
poelzi@127
|
9 local filters = {}
|
poelzi@127
|
10
|
bsw@525
|
11 local filter = { name = "filter" }
|
bsw@525
|
12
|
bsw@525
|
13 if state ~= "closed" then
|
bsw@525
|
14 filter[#filter+1] = {
|
bsw@525
|
15 name = "any",
|
bsw@525
|
16 label = _"Any phase",
|
bsw@525
|
17 selector_modifier = function(selector) end
|
bsw@525
|
18 }
|
bsw@525
|
19 end
|
bsw@525
|
20
|
bsw@525
|
21 if not state then
|
bsw@525
|
22 filter[#filter+1] = {
|
bsw@525
|
23 name = "open",
|
bsw@525
|
24 label = _"Open",
|
bsw@525
|
25 selector_modifier = function(selector)
|
bsw@851
|
26 if for_events then
|
bsw@851
|
27 selector:add_where("event.state in ('admission', 'discussion', 'verification', 'voting')")
|
bsw@851
|
28 else
|
bsw@851
|
29 selector:add_where("issue.closed ISNULL")
|
bsw@851
|
30 end
|
bsw@525
|
31 end
|
bsw@525
|
32 }
|
bsw@525
|
33 end
|
bsw@525
|
34
|
bsw@525
|
35 if not state or state == "open" then
|
bsw@525
|
36 filter[#filter+1] = {
|
bsw@525
|
37 name = "new",
|
bsw@525
|
38 label = _"New",
|
bsw@525
|
39 selector_modifier = function(selector)
|
bsw@851
|
40 if for_events then
|
bsw@851
|
41 selector:add_where("event.state = 'admission'")
|
bsw@851
|
42 else
|
bsw@851
|
43 selector:add_where("issue.accepted ISNULL AND issue.closed ISNULL")
|
bsw@851
|
44 end
|
bsw@525
|
45 end
|
bsw@525
|
46 }
|
bsw@525
|
47 filter[#filter+1] = {
|
bsw@525
|
48 name = "accepted",
|
bsw@525
|
49 label = _"Discussion",
|
bsw@525
|
50 selector_modifier = function(selector)
|
bsw@851
|
51 if for_events then
|
bsw@851
|
52 selector:add_where("event.state = 'discussion'")
|
bsw@851
|
53 else
|
bsw@851
|
54 selector:add_where("issue.accepted NOTNULL AND issue.half_frozen ISNULL AND issue.closed ISNULL")
|
bsw@851
|
55 end
|
bsw@525
|
56 end
|
bsw@525
|
57 }
|
bsw@525
|
58 filter[#filter+1] = {
|
bsw@525
|
59 name = "half_frozen",
|
bsw@525
|
60 label = _"Frozen",
|
bsw@525
|
61 selector_modifier = function(selector)
|
bsw@851
|
62 if for_events then
|
bsw@851
|
63 selector:add_where("event.state = 'verification'")
|
bsw@851
|
64 else
|
bsw@851
|
65 selector:add_where("issue.half_frozen NOTNULL AND issue.fully_frozen ISNULL")
|
bsw@851
|
66 end
|
bsw@525
|
67 end
|
bsw@525
|
68 }
|
bsw@525
|
69 filter[#filter+1] = {
|
bsw@525
|
70 name = "frozen",
|
bsw@525
|
71 label = _"Voting",
|
bsw@525
|
72 selector_modifier = function(selector)
|
bsw@851
|
73 if for_events then
|
bsw@851
|
74 selector:add_where("event.state = 'voting'")
|
bsw@851
|
75 else
|
bsw@851
|
76 selector:add_where("issue.fully_frozen NOTNULL AND issue.closed ISNULL")
|
bsw@851
|
77 end
|
bsw@525
|
78 filter_voting = true
|
bsw@525
|
79 end
|
bsw@525
|
80 }
|
bsw@525
|
81 end
|
bsw@525
|
82
|
bsw@525
|
83 if not state then
|
bsw@525
|
84 filter[#filter+1] = {
|
bsw@525
|
85 name = "finished",
|
bsw@525
|
86 label = _"Finished",
|
bsw@525
|
87 selector_modifier = function(selector)
|
bsw@851
|
88 if for_events then
|
bsw@851
|
89 selector:add_where("event.state IN ('finished_with_winner', 'finished_without_winner')")
|
bsw@851
|
90 else
|
bsw@851
|
91 selector:add_where("issue.closed NOTNULL AND issue.fully_frozen NOTNULL")
|
bsw@851
|
92 end
|
bsw@525
|
93 end
|
bsw@525
|
94 }
|
bsw@525
|
95 filter[#filter+1] = {
|
bsw@525
|
96 name = "cancelled",
|
bsw@525
|
97 label = _"Cancelled",
|
bsw@525
|
98 selector_modifier = function(selector)
|
bsw@851
|
99
|
bsw@851
|
100 if for_events then
|
bsw@851
|
101 selector:add_where("event.state IN ('canceled_revoked_before_accepted', 'canceled_issue_not_accepted', 'canceled_after_revocation_during_discussion', 'canceled_after_revocation_during_verification')")
|
bsw@851
|
102 else
|
bsw@851
|
103 selector:add_where("issue.closed NOTNULL AND issue.fully_frozen ISNULL")
|
bsw@851
|
104 end
|
bsw@525
|
105 end
|
bsw@525
|
106 }
|
bsw@525
|
107 end
|
bsw@525
|
108
|
bsw@525
|
109 if state == "closed" then
|
bsw@525
|
110 filter[#filter+1] = {
|
bsw@525
|
111 name = "any",
|
bsw@525
|
112 label = _"Any state",
|
bsw@525
|
113 selector_modifier = function(selector) end
|
bsw@525
|
114 }
|
bsw@525
|
115
|
bsw@525
|
116 filter[#filter+1] = {
|
bsw@525
|
117 name = "finished",
|
bsw@525
|
118 label = _"Finished",
|
bsw@525
|
119 selector_modifier = function(selector)
|
bsw@851
|
120 if for_events then
|
bsw@851
|
121 selector:add_where("event.state IN ('finished_with_winner', 'finished_without_winner')")
|
bsw@851
|
122 else
|
bsw@851
|
123 selector:add_where("issue.state IN ('finished_with_winner', 'finished_without_winner')")
|
bsw@851
|
124 end
|
bsw@525
|
125 end
|
bsw@525
|
126 }
|
bsw@525
|
127 filter[#filter+1] = {
|
bsw@525
|
128 name = "finished_with_winner",
|
bsw@525
|
129 label = _"with winner",
|
bsw@525
|
130 selector_modifier = function(selector)
|
bsw@851
|
131 if for_events then
|
bsw@851
|
132 selector:add_where("event.state = 'finished_with_winner'")
|
bsw@851
|
133 else
|
bsw@851
|
134 selector:add_where("issue.state = 'finished_with_winner'")
|
bsw@851
|
135 end
|
bsw@525
|
136 end
|
bsw@525
|
137 }
|
bsw@525
|
138 filter[#filter+1] = {
|
bsw@525
|
139 name = "finished_without_winner",
|
bsw@525
|
140 label = _"without winner",
|
bsw@525
|
141 selector_modifier = function(selector)
|
bsw@851
|
142 if for_events then
|
bsw@851
|
143 selector:add_where("event.state = 'finished_without_winner'")
|
bsw@851
|
144 else
|
bsw@851
|
145 selector:add_where("issue.state = 'finished_without_winner'")
|
bsw@851
|
146 end
|
bsw@525
|
147 end
|
bsw@525
|
148 }
|
bsw@525
|
149 filter[#filter+1] = {
|
bsw@525
|
150 name = "cancelled",
|
bsw@525
|
151 label = _"Cancelled",
|
bsw@525
|
152 selector_modifier = function(selector)
|
bsw@851
|
153 if for_events then
|
bsw@851
|
154 selector:add_where("event.state NOT IN ('finished_with_winner', 'finished_without_winner')")
|
bsw@851
|
155 else
|
bsw@851
|
156 selector:add_where("issue.state NOT IN ('finished_with_winner', 'finished_without_winner')")
|
bsw@851
|
157 end
|
bsw@525
|
158 end
|
bsw@525
|
159 }
|
bsw@525
|
160 end
|
bsw@525
|
161
|
bsw@525
|
162 filters[#filters+1] = filter
|
bsw@525
|
163
|
bsw@525
|
164
|
bsw@414
|
165 if member then
|
bsw@414
|
166 local filter = {
|
bsw@414
|
167 name = "filter_interest",
|
bsw@414
|
168 }
|
bsw@459
|
169 if not for_member then
|
bsw@459
|
170 if not for_unit and not for_area then
|
bsw@459
|
171 filter[#filter+1] = {
|
bsw@459
|
172 name = "any",
|
bsw@459
|
173 label = _"All units",
|
bsw@459
|
174 selector_modifier = function() end
|
bsw@459
|
175 }
|
bsw@459
|
176 filter[#filter+1] = {
|
bsw@459
|
177 name = "unit",
|
bsw@459
|
178 label = _"My units",
|
bsw@459
|
179 selector_modifier = function(selector)
|
bsw@459
|
180 selector:join("area", nil, "area.id = issue.area_id")
|
bsw@459
|
181 selector:join("privilege", nil, { "privilege.unit_id = area.unit_id AND privilege.member_id = ? AND privilege.voting_right", member.id })
|
bsw@459
|
182 end
|
bsw@459
|
183 }
|
bsw@459
|
184 end
|
bsw@459
|
185 if for_unit and not for_area then
|
bsw@414
|
186 filter[#filter+1] = {
|
bsw@459
|
187 name = "any",
|
bsw@459
|
188 label = _"All areas",
|
bsw@459
|
189 selector_modifier = function() end
|
bsw@459
|
190 }
|
bsw@459
|
191 end
|
bsw@459
|
192 if not for_area then
|
bsw@459
|
193 filter[#filter+1] = {
|
bsw@459
|
194 name = "area",
|
bsw@459
|
195 label = _"My areas",
|
bsw@459
|
196 selector_modifier = function(selector)
|
bsw@459
|
197 selector:join("membership", nil, { "membership.area_id = issue.area_id AND membership.member_id = ?", member.id })
|
bsw@459
|
198 end
|
bsw@459
|
199 }
|
bsw@459
|
200 end
|
bsw@459
|
201 if for_area then
|
bsw@414
|
202 filter[#filter+1] = {
|
bsw@459
|
203 name = "any",
|
bsw@459
|
204 label = _"All issues",
|
bsw@459
|
205 selector_modifier = function() end
|
bsw@459
|
206 }
|
bsw@459
|
207 end
|
bsw@414
|
208 end
|
bsw@414
|
209 filter[#filter+1] = {
|
bsw@414
|
210 name = "issue",
|
bsw@414
|
211 label = _"Interested",
|
bsw@414
|
212 selector_modifier = function() end
|
bsw@414
|
213 }
|
bsw@414
|
214 filter[#filter+1] = {
|
bsw@851
|
215 name = "initiated",
|
bsw@851
|
216 label = _"Initiated",
|
bsw@851
|
217 selector_modifier = function(selector)
|
bsw@851
|
218 selector:add_where({ "EXISTS (SELECT 1 FROM initiative JOIN initiator ON initiator.initiative_id = initiative.id AND initiator.member_id = ? AND initiator.accepted WHERE initiative.issue_id = issue.id)", member.id })
|
bsw@851
|
219 end
|
bsw@851
|
220 }
|
bsw@851
|
221 filter[#filter+1] = {
|
bsw@414
|
222 name = "supported",
|
bsw@414
|
223 label = _"Supported",
|
bsw@414
|
224 selector_modifier = function() end
|
bsw@414
|
225 }
|
bsw@414
|
226 filter[#filter+1] = {
|
bsw@414
|
227 name = "potentially_supported",
|
bsw@414
|
228 label = _"Potentially supported",
|
bsw@414
|
229 selector_modifier = function() end
|
bsw@414
|
230 }
|
bsw@853
|
231 if state == 'closed' or (for_events) then
|
bsw@851
|
232 filter[#filter+1] = {
|
bsw@851
|
233 name = "voted",
|
bsw@851
|
234 label = _"Voted",
|
bsw@851
|
235 selector_modifier = function() end
|
bsw@851
|
236 }
|
bsw@851
|
237 end
|
bsw@414
|
238
|
bsw@414
|
239 filters[#filters+1] = filter
|
bsw@414
|
240 end
|
poelzi@127
|
241
|
bsw@414
|
242
|
bsw@414
|
243
|
bsw@414
|
244 if app.session.member then
|
bsw@414
|
245
|
bsw@414
|
246 local filter_interest = param.get_all_cgi()["filter_interest"]
|
bsw@414
|
247
|
bsw@414
|
248 if filter_interest ~= "any" and filter_interest ~= nil and (
|
bsw@853
|
249 filter_interest == "issue" or filter_interest == "supported" or filter_interest == "potentially_supported" or
|
bsw@853
|
250 (filter_interest == 'voted' and state ~= 'open')
|
bsw@552
|
251 ) then
|
bsw@552
|
252
|
bsw@552
|
253 local function add_default_joins(selector)
|
bsw@552
|
254 selector:left_join("interest", "filter_interest", { "filter_interest.issue_id = issue.id AND filter_interest.member_id = ? ", member.id })
|
bsw@552
|
255 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 })
|
bsw@552
|
256 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 })
|
bsw@552
|
257 end
|
bsw@552
|
258
|
bsw@414
|
259 filters[#filters+1] = {
|
bsw@414
|
260 name = "filter_delegation",
|
bsw@414
|
261 {
|
bsw@414
|
262 name = "any",
|
bsw@414
|
263 label = _"Direct and by delegation",
|
bsw@414
|
264 selector_modifier = function(selector)
|
bsw@552
|
265 add_default_joins(selector)
|
bsw@552
|
266 selector:add_where("CASE WHEN issue.fully_frozen ISNULL AND issue.closed ISNULL THEN filter_interest.member_id NOTNULL ELSE filter_interest_s.member_id NOTNULL END OR filter_d_interest_s.member_id NOTNULL")
|
bsw@552
|
267 if filter_interest == "supported" then
|
bsw@552
|
268 selector:add_where({
|
bsw@552
|
269 "CASE WHEN issue.fully_frozen ISNULL AND issue.closed ISNULL THEN " ..
|
bsw@552
|
270 "EXISTS(SELECT 1 FROM initiative JOIN supporter ON supporter.initiative_id = initiative.id AND supporter.member_id = ? LEFT JOIN critical_opinion ON critical_opinion.initiative_id = initiative.id AND critical_opinion.member_id = supporter.member_id WHERE initiative.issue_id = issue.id AND critical_opinion.member_id ISNULL) " ..
|
bsw@552
|
271 "ELSE " ..
|
bsw@552
|
272 "EXISTS(SELECT 1 FROM direct_supporter_snapshot WHERE direct_supporter_snapshot.event = issue.latest_snapshot_event AND direct_supporter_snapshot.issue_id = issue.id AND direct_supporter_snapshot.member_id = ? AND direct_supporter_snapshot.satisfied) " ..
|
bsw@552
|
273 "END OR EXISTS(SELECT 1 FROM direct_supporter_snapshot WHERE direct_supporter_snapshot.event = issue.latest_snapshot_event AND direct_supporter_snapshot.issue_id = issue.id AND direct_supporter_snapshot.member_id = filter_d_interest_s.delegate_member_ids[array_upper(filter_d_interest_s.delegate_member_ids,1)] AND direct_supporter_snapshot.satisfied)", member.id, member.id, member.id })
|
bsw@552
|
274
|
bsw@414
|
275 elseif filter_interest == "potentially_supported" then
|
bsw@552
|
276 selector:add_where({
|
bsw@552
|
277 "CASE WHEN issue.fully_frozen ISNULL AND issue.closed ISNULL THEN " ..
|
bsw@552
|
278 "EXISTS(SELECT 1 FROM initiative JOIN supporter ON supporter.initiative_id = initiative.id AND supporter.member_id = ? LEFT JOIN critical_opinion ON critical_opinion.initiative_id = initiative.id AND critical_opinion.member_id = supporter.member_id WHERE initiative.issue_id = issue.id AND critical_opinion.member_id NOTNULL) " ..
|
bsw@552
|
279 "ELSE " ..
|
bsw@552
|
280 "EXISTS(SELECT 1 FROM direct_supporter_snapshot WHERE direct_supporter_snapshot.event = issue.latest_snapshot_event AND direct_supporter_snapshot.issue_id = issue.id AND direct_supporter_snapshot.member_id = ? AND NOT direct_supporter_snapshot.satisfied) " ..
|
bsw@552
|
281 "END OR EXISTS(SELECT 1 FROM direct_supporter_snapshot WHERE direct_supporter_snapshot.event = issue.latest_snapshot_event AND direct_supporter_snapshot.issue_id = issue.id AND direct_supporter_snapshot.member_id = filter_d_interest_s.delegate_member_ids[array_upper(filter_d_interest_s.delegate_member_ids,1)] AND NOT direct_supporter_snapshot.satisfied)", member.id, member.id, member.id })
|
bsw@552
|
282
|
bsw@851
|
283 elseif filter_interest == "voted" then
|
bsw@851
|
284 selector:add_where({ "EXISTS(SELECT 1 FROM direct_voter WHERE direct_voter.issue_id = issue.id AND direct_voter.member_id = ?) OR EXISTS(SELECT 1 FROM delegating_voter WHERE delegating_voter.issue_id = issue.id AND delegating_voter.member_id = ?) ", member.id, member.id })
|
bsw@851
|
285
|
bsw@414
|
286 end
|
bsw@552
|
287
|
bsw@414
|
288 end
|
bsw@414
|
289 },
|
bsw@414
|
290 {
|
bsw@414
|
291 name = "direct",
|
bsw@414
|
292 label = _"Direct",
|
bsw@414
|
293 selector_modifier = function(selector)
|
bsw@552
|
294 add_default_joins(selector)
|
bsw@552
|
295 selector:add_where("CASE WHEN issue.fully_frozen ISNULL AND issue.closed ISNULL THEN filter_interest.member_id NOTNULL ELSE filter_interest_s.member_id NOTNULL END")
|
bsw@552
|
296
|
bsw@552
|
297 if filter_interest == "supported" then
|
bsw@552
|
298 selector:add_where({
|
bsw@552
|
299 "CASE WHEN issue.fully_frozen ISNULL AND issue.closed ISNULL THEN " ..
|
bsw@552
|
300 "EXISTS(SELECT 1 FROM initiative JOIN supporter ON supporter.initiative_id = initiative.id AND supporter.member_id = ? LEFT JOIN critical_opinion ON critical_opinion.initiative_id = initiative.id AND critical_opinion.member_id = supporter.member_id WHERE initiative.issue_id = issue.id AND critical_opinion.member_id ISNULL) " ..
|
bsw@552
|
301 "ELSE " ..
|
bsw@552
|
302 "EXISTS(SELECT 1 FROM direct_supporter_snapshot WHERE direct_supporter_snapshot.event = issue.latest_snapshot_event AND direct_supporter_snapshot.issue_id = issue.id AND direct_supporter_snapshot.member_id = ? AND direct_supporter_snapshot.satisfied) " ..
|
bsw@552
|
303 "END", member.id, member.id })
|
bsw@552
|
304
|
bsw@414
|
305 elseif filter_interest == "potentially_supported" then
|
bsw@552
|
306 selector:add_where({
|
bsw@552
|
307 "CASE WHEN issue.fully_frozen ISNULL AND issue.closed ISNULL THEN " ..
|
bsw@552
|
308 "EXISTS(SELECT 1 FROM initiative JOIN supporter ON supporter.initiative_id = initiative.id AND supporter.member_id = ? LEFT JOIN critical_opinion ON critical_opinion.initiative_id = initiative.id AND critical_opinion.member_id = supporter.member_id WHERE initiative.issue_id = issue.id AND critical_opinion.member_id NOTNULL) " ..
|
bsw@552
|
309 "ELSE " ..
|
bsw@552
|
310 "EXISTS(SELECT 1 FROM direct_supporter_snapshot WHERE direct_supporter_snapshot.event = issue.latest_snapshot_event AND direct_supporter_snapshot.issue_id = issue.id AND direct_supporter_snapshot.member_id = ? AND NOT direct_supporter_snapshot.satisfied) " ..
|
bsw@552
|
311 "END", member.id, member.id })
|
bsw@851
|
312 elseif filter_interest == "voted" then
|
bsw@851
|
313 selector:add_where({ "EXISTS(SELECT 1 FROM direct_voter WHERE direct_voter.issue_id = issue.id AND direct_voter.member_id = ?) ", member.id })
|
bsw@552
|
314
|
bsw@414
|
315 end
|
bsw@414
|
316 end
|
bsw@414
|
317 },
|
bsw@414
|
318 {
|
bsw@414
|
319 name = "delegated",
|
bsw@414
|
320 label = _"By delegation",
|
bsw@414
|
321 selector_modifier = function(selector)
|
bsw@552
|
322 add_default_joins(selector)
|
bsw@552
|
323 selector:add_where("filter_d_interest_s.member_id NOTNULL AND filter_interest.member_id ISNULL")
|
bsw@552
|
324
|
bsw@552
|
325 if filter_interest == "supported" then
|
bsw@552
|
326 selector:add_where({
|
bsw@552
|
327 "EXISTS(SELECT 1 FROM direct_supporter_snapshot WHERE direct_supporter_snapshot.event = issue.latest_snapshot_event AND direct_supporter_snapshot.issue_id = issue.id AND direct_supporter_snapshot.member_id = filter_d_interest_s.delegate_member_ids[array_upper(filter_d_interest_s.delegate_member_ids,1)] AND direct_supporter_snapshot.satisfied)", member.id })
|
bsw@552
|
328
|
bsw@414
|
329 elseif filter_interest == "potentially_supported" then
|
bsw@552
|
330 selector:add_where({
|
bsw@552
|
331 "EXISTS(SELECT 1 FROM direct_supporter_snapshot WHERE direct_supporter_snapshot.event = issue.latest_snapshot_event AND direct_supporter_snapshot.issue_id = issue.id AND direct_supporter_snapshot.member_id = filter_d_interest_s.delegate_member_ids[array_upper(filter_d_interest_s.delegate_member_ids,1)] AND NOT direct_supporter_snapshot.satisfied)", member.id })
|
bsw@851
|
332 elseif filter_interest == "voted" then
|
bsw@851
|
333 selector:add_where({ "EXISTS(SELECT 1 FROM delegating_voter WHERE delegating_voter.issue_id = issue.id AND delegating_voter.member_id = ?) ", member.id })
|
bsw@552
|
334
|
bsw@414
|
335 end
|
bsw@414
|
336 end
|
bsw@414
|
337 }
|
bsw@414
|
338 }
|
bsw@414
|
339 end
|
bsw@414
|
340
|
bsw@414
|
341 end
|
bsw@414
|
342
|
bsw@853
|
343 if not for_events and app.session.member and member.id == app.session.member_id and (param.get_all_cgi()["filter"] == "frozen") then
|
poelzi@127
|
344 filters[#filters+1] = {
|
bsw@275
|
345 name = "filter_voting",
|
poelzi@127
|
346 {
|
bsw@275
|
347 name = "any",
|
bsw@275
|
348 label = _"Any",
|
bsw@275
|
349 selector_modifier = function() end
|
poelzi@127
|
350 },
|
poelzi@127
|
351 {
|
bsw@275
|
352 name = "not_voted",
|
bsw@275
|
353 label = _"Not voted",
|
poelzi@127
|
354 selector_modifier = function(selector)
|
bsw@284
|
355 selector:left_join("direct_voter", nil, { "direct_voter.issue_id = issue.id AND direct_voter.member_id = ?", member.id })
|
bsw@275
|
356 selector:add_where("direct_voter.member_id ISNULL")
|
poelzi@127
|
357 end
|
poelzi@127
|
358 },
|
poelzi@127
|
359 {
|
bsw@275
|
360 name = "voted",
|
bsw@275
|
361 label = _"Voted",
|
poelzi@127
|
362 selector_modifier = function(selector)
|
bsw@284
|
363 selector:join("direct_voter", nil, { "direct_voter.issue_id = issue.id AND direct_voter.member_id = ?", member.id })
|
poelzi@127
|
364 end
|
poelzi@127
|
365 },
|
poelzi@127
|
366 }
|
poelzi@127
|
367 end
|
poelzi@127
|
368
|
bsw@414
|
369
|
bsw@414
|
370
|
bsw@309
|
371
|
poelzi@127
|
372 function filters:get_filter(group, name)
|
poelzi@127
|
373 for i,grp in ipairs(self) do
|
poelzi@127
|
374 if grp.name == group then
|
poelzi@127
|
375 for i,entry in ipairs(grp) do
|
poelzi@127
|
376 if entry.name == name then
|
poelzi@127
|
377 return entry
|
poelzi@127
|
378 end
|
poelzi@127
|
379 end
|
poelzi@127
|
380 end
|
poelzi@127
|
381 end
|
poelzi@127
|
382 end
|
poelzi@127
|
383
|
poelzi@127
|
384 return filters |