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