liquid_feedback_frontend

view app/main/api/initiative.lua @ 99:ae5fbdbc1758

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

Impressum / About Us