liquid_feedback_frontend

view app/main/api/initiative.lua @ 81:134fce4bede3

Cache for rendered wiki texts; Accountless API keys; Reverse id order for initiative API
- Support for caching html version of drafts
- Using pre-rendered html versions of help messages
- Added Support for api keys not connected to an account
- Added order option "id_desc" to initiative API
author bsw
date Sat Jul 24 17:22:05 2010 +0200 (2010-07-24)
parents 733f65c0c0a0
children 6a12fb7e4963
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")
15 local initiatives_selector = Initiative:new_selector()
16 :join("issue", nil, "issue.id = initiative.issue_id")
17 :join("area", nil, "area.id = issue.area_id")
18 :join("policy", nil, "policy.id = issue.policy_id")
20 if id then
21 initiatives_selector:add_where{"initiative.id = ?", id}
22 end
24 if min_id then
25 initiatives_selector:add_where{"initiative.id >= ?", min_id}
26 end
28 if max_id then
29 initiatives_selector:add_where{"initiative.id <= ?", max_id}
30 end
32 if area_id then
33 initiatives_selector:add_where{"area.id = ?", area_id}
34 end
36 if issue_id then
37 initiatives_selector:add_where{"issue.id = ?", issue_id}
38 end
40 if policy_id then
41 initiatives_selector:add_where{"policy.id = ?", policy_id}
42 end
44 if state then
45 Issue:modify_selector_for_state(initiatives_selector, state)
46 end
48 if agreed then
49 initiatives_selector:add_where("initiative.agreed")
50 end
52 if rank then
53 initiatives_selector:add_where{ "initiative.rank = ?", rank }
54 end
56 if search then
57 if search_context == "full" then
58 elseif search_context == "title" then
59 end
60 end
62 if order == "supporter_count" then
63 initiatives_selector:add_order_by("initiative.supporter_count")
64 end
66 if order == "id_desc" then
67 initiatives_selector:add_order_by("initiative.id DESC")
68 else
69 initiatives_selector:add_order_by("initiative.id")
70 end
72 if limit then
73 initiatives_selector:limit(limit)
74 end
76 local api_engine = param.get("api_engine") or "xml"
78 local function format_timestamp(timestamp)
79 if timestamp then
80 return format.timestamp(timestamp)
81 else
82 return ""
83 end
84 end
86 local fields = {
88 { name = "area_id", field = "area.id" },
89 { name = "area_name", field = "area.name" },
90 { name = "issue_id", field = "issue.id" },
91 {
92 name = "issue_state",
93 func = function(record)
94 return record.issue.state
95 end
96 },
97 {
98 name = "issue_created",
99 field = "issue.created",
100 func = function(record)
101 return format_timestamp(record.issue_created)
102 end
103 },
104 {
105 name = "issue_accepted",
106 field = "issue.accepted",
107 func = function(record)
108 return format_timestamp(record.issue_accepted)
109 end
110 },
111 {
112 name = "issue_half_frozen",
113 field = "issue.half_frozen",
114 func = function(record)
115 return format_timestamp(record.issue_half_frozen)
116 end
117 },
118 {
119 name = "issue_fully_frozen",
120 field = "issue.fully_frozen",
121 func = function(record)
122 return format_timestamp(record.issue_fully_frozen)
123 end
124 },
125 {
126 name = "issue_closed",
127 field = "issue.closed",
128 func = function(record)
129 return format_timestamp(record.issue_closed)
130 end
131 },
132 { name = "issue_admission_time", field = "issue.admission_time" },
133 { name = "issue_discussion_time", field = "issue.discussion_time" },
134 { name = "issue_verification_time", field = "issue.verification_time" },
135 { name = "issue_voting_time", field = "issue.voting_time" },
136 { name = "issue_ranks_available", field = "issue.ranks_available" },
138 { name = "policy_issue_quorum_num", field = "policy.issue_quorum_num" },
139 { name = "policy_issue_quorum_den", field = "policy.issue_quorum_den" },
140 { name = "policy_initiative_quorum_num",
141 field = "policy.initiative_quorum_num" },
142 { name = "policy_initiative_quorum_den",
143 field = "policy.initiative_quorum_den" },
144 { name = "policy_majority_num", field = "policy.majority_num" },
145 { name = "policy_majority_den", field = "policy.majority_den" },
146 { name = "policy_majority_strict", field = "policy.majority_strict" },
147 { name = "id", field = "initiative.id" },
148 { name = "name", field = "initiative.name" },
149 { name = "discussion_url", field = "initiative.discussion_url" },
150 {
151 name = "created",
152 field = "initiative.created",
153 func = function(record)
154 return format.timestamp(record.created)
155 end
156 },
157 { name = "revoked", field = "initiative.revoked" },
158 { name = "suggested_initiative_id", field = "initiative.suggested_initiative_id" },
159 { name = "admitted", field = "initiative.admitted" },
160 { name = "issue_population", field = "issue.population" },
161 { name = "supporter_count", field = "initiative.supporter_count" },
162 { name = "informed_supporter_count", field = "initiative.informed_supporter_count" },
163 { name = "satisfied_supporter_count", field = "initiative.satisfied_supporter_count" },
164 { name = "satisfied_informed_supporter_count",
165 field = "initiative.satisfied_informed_supporter_count" },
166 { name = "issue_vote_now", field = "issue.vote_now" },
167 { name = "issue_vote_later", field = "issue.vote_later" },
168 { name = "issue_voter_count", field = "issue.voter_count" },
169 { name = "positive_votes", field = "initiative.positive_votes" },
170 { name = "negative_votes", field = "initiative.negative_votes" },
171 { name = "agreed", field = "initiative.agreed" },
172 { name = "rank", field = "initiative.rank" },
173 {
174 name = "current_draft_created",
175 func = function(record)
176 return format.timestamp(record.current_draft.created)
177 end
178 },
179 {
180 name = "current_draft_formatting_engine",
181 func = function(record)
182 return record.current_draft.formatting_engine
183 end
184 },
185 {
186 name = "current_draft_content",
187 func = function(record)
188 return record.current_draft.content
189 end
190 }
191 }
193 util.autoapi{
194 relation_name = "initiative",
195 selector = initiatives_selector,
196 fields = fields,
197 api_engine = api_engine

Impressum / About Us