rev |
line source |
bsw@75
|
1 local id = param.get("id")
|
bsw@51
|
2 local min_id = param.get("min_id")
|
bsw@51
|
3 local max_id = param.get("max_id")
|
bsw@51
|
4 local area_id = param.get("area_id", atom.integer)
|
bsw@51
|
5 local issue_id = param.get("issue_id", atom.integer)
|
bsw@51
|
6 local policy_id = param.get("policy_id", atom.integer)
|
bsw@51
|
7 local state = param.get("state")
|
bsw@51
|
8 local agreed = param.get("agreed")
|
bsw@51
|
9 local rank = param.get("rank")
|
bsw@95
|
10 --local search = param.get("search")
|
bsw@95
|
11 --local search_context = param.get("search_context") or "full"
|
bsw@51
|
12 local limit = param.get("limit", atom.integer)
|
bsw@51
|
13 local order = param.get("order")
|
bsw@95
|
14 local render_draft = param.get("render_draft")
|
bsw@95
|
15
|
bsw@95
|
16 if render_draft and render_draft ~= "html" then
|
bsw@95
|
17 error("unsupported render target, only 'html' is supported right now")
|
bsw@95
|
18 end
|
bsw@51
|
19
|
bsw@51
|
20 local initiatives_selector = Initiative:new_selector()
|
bsw@75
|
21 :join("issue", nil, "issue.id = initiative.issue_id")
|
bsw@51
|
22 :join("area", nil, "area.id = issue.area_id")
|
bsw@51
|
23 :join("policy", nil, "policy.id = issue.policy_id")
|
bsw@51
|
24
|
bsw@51
|
25 if id then
|
bsw@51
|
26 initiatives_selector:add_where{"initiative.id = ?", id}
|
bsw@51
|
27 end
|
bsw@51
|
28
|
bsw@51
|
29 if min_id then
|
bsw@51
|
30 initiatives_selector:add_where{"initiative.id >= ?", min_id}
|
bsw@51
|
31 end
|
bsw@51
|
32
|
bsw@51
|
33 if max_id then
|
bsw@51
|
34 initiatives_selector:add_where{"initiative.id <= ?", max_id}
|
bsw@51
|
35 end
|
bsw@51
|
36
|
bsw@51
|
37 if area_id then
|
bsw@51
|
38 initiatives_selector:add_where{"area.id = ?", area_id}
|
bsw@51
|
39 end
|
bsw@51
|
40
|
bsw@51
|
41 if issue_id then
|
bsw@51
|
42 initiatives_selector:add_where{"issue.id = ?", issue_id}
|
bsw@51
|
43 end
|
bsw@51
|
44
|
bsw@51
|
45 if policy_id then
|
bsw@51
|
46 initiatives_selector:add_where{"policy.id = ?", policy_id}
|
bsw@51
|
47 end
|
bsw@51
|
48
|
bsw@51
|
49 if state then
|
bsw@75
|
50 Issue:modify_selector_for_state(initiatives_selector, state)
|
bsw@51
|
51 end
|
bsw@51
|
52
|
bsw@51
|
53 if agreed then
|
bsw@51
|
54 initiatives_selector:add_where("initiative.agreed")
|
bsw@51
|
55 end
|
bsw@51
|
56
|
bsw@51
|
57 if rank then
|
bsw@51
|
58 initiatives_selector:add_where{ "initiative.rank = ?", rank }
|
bsw@51
|
59 end
|
bsw@51
|
60
|
bsw@95
|
61 --[[
|
bsw@51
|
62 if search then
|
bsw@51
|
63 if search_context == "full" then
|
bsw@51
|
64 elseif search_context == "title" then
|
bsw@51
|
65 end
|
bsw@51
|
66 end
|
bsw@95
|
67 --]]
|
bsw@51
|
68
|
bsw@51
|
69 if order == "supporter_count" then
|
bsw@51
|
70 initiatives_selector:add_order_by("initiative.supporter_count")
|
bsw@51
|
71 end
|
bsw@51
|
72
|
bsw@81
|
73 if order == "id_desc" then
|
bsw@81
|
74 initiatives_selector:add_order_by("initiative.id DESC")
|
bsw@81
|
75 else
|
bsw@81
|
76 initiatives_selector:add_order_by("initiative.id")
|
bsw@81
|
77 end
|
bsw@51
|
78
|
bsw@51
|
79 if limit then
|
bsw@51
|
80 initiatives_selector:limit(limit)
|
bsw@51
|
81 end
|
bsw@51
|
82
|
bsw@51
|
83 local api_engine = param.get("api_engine") or "xml"
|
bsw@51
|
84
|
bsw@51
|
85 local function format_timestamp(timestamp)
|
bsw@51
|
86 if timestamp then
|
bsw@51
|
87 return format.timestamp(timestamp)
|
bsw@51
|
88 else
|
bsw@51
|
89 return ""
|
bsw@51
|
90 end
|
bsw@51
|
91 end
|
bsw@51
|
92
|
bsw@51
|
93 local fields = {
|
bsw@51
|
94
|
bsw@51
|
95 { name = "area_id", field = "area.id" },
|
bsw@51
|
96 { name = "area_name", field = "area.name" },
|
bsw@51
|
97 { name = "issue_id", field = "issue.id" },
|
bsw@51
|
98 {
|
bsw@51
|
99 name = "issue_state",
|
bsw@51
|
100 func = function(record)
|
bsw@51
|
101 return record.issue.state
|
bsw@51
|
102 end
|
bsw@51
|
103 },
|
bsw@51
|
104 {
|
bsw@51
|
105 name = "issue_created",
|
bsw@51
|
106 field = "issue.created",
|
bsw@51
|
107 func = function(record)
|
bsw@51
|
108 return format_timestamp(record.issue_created)
|
bsw@51
|
109 end
|
bsw@51
|
110 },
|
bsw@51
|
111 {
|
bsw@51
|
112 name = "issue_accepted",
|
bsw@51
|
113 field = "issue.accepted",
|
bsw@51
|
114 func = function(record)
|
bsw@51
|
115 return format_timestamp(record.issue_accepted)
|
bsw@51
|
116 end
|
bsw@51
|
117 },
|
bsw@51
|
118 {
|
bsw@51
|
119 name = "issue_half_frozen",
|
bsw@51
|
120 field = "issue.half_frozen",
|
bsw@51
|
121 func = function(record)
|
bsw@51
|
122 return format_timestamp(record.issue_half_frozen)
|
bsw@51
|
123 end
|
bsw@51
|
124 },
|
bsw@51
|
125 {
|
bsw@51
|
126 name = "issue_fully_frozen",
|
bsw@51
|
127 field = "issue.fully_frozen",
|
bsw@51
|
128 func = function(record)
|
bsw@51
|
129 return format_timestamp(record.issue_fully_frozen)
|
bsw@51
|
130 end
|
bsw@51
|
131 },
|
bsw@51
|
132 {
|
bsw@51
|
133 name = "issue_closed",
|
bsw@51
|
134 field = "issue.closed",
|
bsw@51
|
135 func = function(record)
|
bsw@51
|
136 return format_timestamp(record.issue_closed)
|
bsw@51
|
137 end
|
bsw@51
|
138 },
|
bsw@51
|
139 { name = "issue_admission_time", field = "issue.admission_time" },
|
bsw@51
|
140 { name = "issue_discussion_time", field = "issue.discussion_time" },
|
bsw@51
|
141 { name = "issue_verification_time", field = "issue.verification_time" },
|
bsw@51
|
142 { name = "issue_voting_time", field = "issue.voting_time" },
|
bsw@51
|
143 { name = "issue_ranks_available", field = "issue.ranks_available" },
|
bsw@51
|
144
|
bsw@51
|
145 { name = "policy_issue_quorum_num", field = "policy.issue_quorum_num" },
|
bsw@51
|
146 { name = "policy_issue_quorum_den", field = "policy.issue_quorum_den" },
|
bsw@51
|
147 { name = "policy_initiative_quorum_num",
|
bsw@51
|
148 field = "policy.initiative_quorum_num" },
|
bsw@51
|
149 { name = "policy_initiative_quorum_den",
|
bsw@51
|
150 field = "policy.initiative_quorum_den" },
|
bsw@51
|
151 { name = "policy_majority_num", field = "policy.majority_num" },
|
bsw@51
|
152 { name = "policy_majority_den", field = "policy.majority_den" },
|
bsw@51
|
153 { name = "policy_majority_strict", field = "policy.majority_strict" },
|
bsw@51
|
154 { name = "id", field = "initiative.id" },
|
bsw@51
|
155 { name = "name", field = "initiative.name" },
|
bsw@51
|
156 { name = "discussion_url", field = "initiative.discussion_url" },
|
bsw@51
|
157 {
|
bsw@51
|
158 name = "created",
|
bsw@51
|
159 field = "initiative.created",
|
bsw@51
|
160 func = function(record)
|
bsw@99
|
161 return format_timestamp(record.created)
|
bsw@51
|
162 end
|
bsw@51
|
163 },
|
bsw@95
|
164 {
|
bsw@95
|
165 name = "revoked",
|
bsw@95
|
166 field = "initiative.revoked",
|
bsw@95
|
167 func = function(record)
|
bsw@99
|
168 return format_timestamp(record.revoked)
|
bsw@95
|
169 end
|
bsw@95
|
170 },
|
bsw@51
|
171 { name = "suggested_initiative_id", field = "initiative.suggested_initiative_id" },
|
bsw@51
|
172 { name = "admitted", field = "initiative.admitted" },
|
bsw@51
|
173 { name = "issue_population", field = "issue.population" },
|
bsw@51
|
174 { name = "supporter_count", field = "initiative.supporter_count" },
|
bsw@51
|
175 { name = "informed_supporter_count", field = "initiative.informed_supporter_count" },
|
bsw@51
|
176 { name = "satisfied_supporter_count", field = "initiative.satisfied_supporter_count" },
|
bsw@51
|
177 { name = "satisfied_informed_supporter_count",
|
bsw@51
|
178 field = "initiative.satisfied_informed_supporter_count" },
|
bsw@51
|
179 { name = "issue_vote_now", field = "issue.vote_now" },
|
bsw@51
|
180 { name = "issue_vote_later", field = "issue.vote_later" },
|
bsw@51
|
181 { name = "issue_voter_count", field = "issue.voter_count" },
|
bsw@51
|
182 { name = "positive_votes", field = "initiative.positive_votes" },
|
bsw@51
|
183 { name = "negative_votes", field = "initiative.negative_votes" },
|
bsw@51
|
184 { name = "agreed", field = "initiative.agreed" },
|
bsw@51
|
185 { name = "rank", field = "initiative.rank" },
|
bsw@51
|
186 {
|
bsw@51
|
187 name = "current_draft_created",
|
bsw@51
|
188 func = function(record)
|
bsw@99
|
189 return format_timestamp(record.current_draft.created)
|
bsw@51
|
190 end
|
bsw@51
|
191 },
|
bsw@51
|
192 {
|
bsw@51
|
193 name = "current_draft_formatting_engine",
|
bsw@51
|
194 func = function(record)
|
bsw@51
|
195 return record.current_draft.formatting_engine
|
bsw@51
|
196 end
|
bsw@51
|
197 },
|
bsw@51
|
198 {
|
bsw@51
|
199 name = "current_draft_content",
|
bsw@51
|
200 func = function(record)
|
bsw@95
|
201 if render_draft then
|
bsw@95
|
202 return record.current_draft:get_content(render_draft)
|
bsw@95
|
203 else
|
bsw@95
|
204 return record.current_draft.content
|
bsw@95
|
205 end
|
bsw@51
|
206 end
|
bsw@51
|
207 }
|
bsw@51
|
208 }
|
bsw@51
|
209
|
bsw@51
|
210 util.autoapi{
|
bsw@75
|
211 relation_name = "initiative",
|
bsw@95
|
212 selector = initiatives_selector,
|
bsw@95
|
213 fields = fields,
|
bsw@95
|
214 api_engine = api_engine
|
bsw@51
|
215 } |