liquid_feedback_frontend
view app/main/api/initiative.lua @ 172:165f4bd02cf3
don't show the first draft of a new initiative as a new draft event in the timeline
new draft should only show changes of drafts drafts of new initiatives as they are handled by the new initiative event
new draft should only show changes of drafts drafts of new initiatives as they are handled by the new initiative event
author | Daniel Poelzleithner <poelzi@poelzi.org> |
---|---|
date | Sun Oct 10 19:40:32 2010 +0200 (2010-10-10) |
parents | ae5fbdbc1758 |
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
215 }