liquid_feedback_frontend
diff app/main/api/initiative.lua @ 51:0849be391140
Public read access; Read-only API for initiatives; Prepared integration of OpenID
author | bsw |
---|---|
date | Sun Apr 04 22:05:11 2010 +0200 (2010-04-04) |
parents | |
children | 733f65c0c0a0 |
line diff
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/app/main/api/initiative.lua Sun Apr 04 22:05:11 2010 +0200 1.3 @@ -0,0 +1,193 @@ 1.4 +local id = param.get_id() 1.5 +local min_id = param.get("min_id") 1.6 +local max_id = param.get("max_id") 1.7 +local area_id = param.get("area_id", atom.integer) 1.8 +local issue_id = param.get("issue_id", atom.integer) 1.9 +local policy_id = param.get("policy_id", atom.integer) 1.10 +local state = param.get("state") 1.11 +local agreed = param.get("agreed") 1.12 +local rank = param.get("rank") 1.13 +local search = param.get("search") 1.14 +local search_context = param.get("search_context") or "full" 1.15 +local limit = param.get("limit", atom.integer) 1.16 +local order = param.get("order") 1.17 + 1.18 +local initiatives_selector = Initiative:new_selector() 1.19 + :join("issue", nil, "issue.id = initiative.id") 1.20 + :join("area", nil, "area.id = issue.area_id") 1.21 + :join("policy", nil, "policy.id = issue.policy_id") 1.22 + 1.23 +if id then 1.24 + initiatives_selector:add_where{"initiative.id = ?", id} 1.25 +end 1.26 + 1.27 +if min_id then 1.28 + initiatives_selector:add_where{"initiative.id >= ?", min_id} 1.29 +end 1.30 + 1.31 +if max_id then 1.32 + initiatives_selector:add_where{"initiative.id <= ?", max_id} 1.33 +end 1.34 + 1.35 +if area_id then 1.36 + initiatives_selector:add_where{"area.id = ?", area_id} 1.37 +end 1.38 + 1.39 +if issue_id then 1.40 + initiatives_selector:add_where{"issue.id = ?", issue_id} 1.41 +end 1.42 + 1.43 +if policy_id then 1.44 + initiatives_selector:add_where{"policy.id = ?", policy_id} 1.45 +end 1.46 + 1.47 +if state then 1.48 + Issue:modify_selector_for_state(state) 1.49 +end 1.50 + 1.51 +if agreed then 1.52 + initiatives_selector:add_where("initiative.agreed") 1.53 +end 1.54 + 1.55 +if rank then 1.56 + initiatives_selector:add_where{ "initiative.rank = ?", rank } 1.57 +end 1.58 + 1.59 +if search then 1.60 + if search_context == "full" then 1.61 + elseif search_context == "title" then 1.62 + end 1.63 +end 1.64 + 1.65 +if order == "supporter_count" then 1.66 + initiatives_selector:add_order_by("initiative.supporter_count") 1.67 +end 1.68 + 1.69 +initiatives_selector:add_order_by("initiative.id") 1.70 + 1.71 +if limit then 1.72 + initiatives_selector:limit(limit) 1.73 +end 1.74 + 1.75 +local api_engine = param.get("api_engine") or "xml" 1.76 + 1.77 +local function format_timestamp(timestamp) 1.78 + if timestamp then 1.79 + return format.timestamp(timestamp) 1.80 + else 1.81 + return "" 1.82 + end 1.83 +end 1.84 + 1.85 +local fields = { 1.86 + 1.87 + { name = "area_id", field = "area.id" }, 1.88 + { name = "area_name", field = "area.name" }, 1.89 + { name = "issue_id", field = "issue.id" }, 1.90 + { 1.91 + name = "issue_state", 1.92 + func = function(record) 1.93 + return record.issue.state 1.94 + end 1.95 + }, 1.96 + { 1.97 + name = "issue_created", 1.98 + field = "issue.created", 1.99 + func = function(record) 1.100 + return format_timestamp(record.issue_created) 1.101 + end 1.102 + }, 1.103 + { 1.104 + name = "issue_accepted", 1.105 + field = "issue.accepted", 1.106 + func = function(record) 1.107 + return format_timestamp(record.issue_accepted) 1.108 + end 1.109 + }, 1.110 + { 1.111 + name = "issue_half_frozen", 1.112 + field = "issue.half_frozen", 1.113 + func = function(record) 1.114 + return format_timestamp(record.issue_half_frozen) 1.115 + end 1.116 + }, 1.117 + { 1.118 + name = "issue_fully_frozen", 1.119 + field = "issue.fully_frozen", 1.120 + func = function(record) 1.121 + return format_timestamp(record.issue_fully_frozen) 1.122 + end 1.123 + }, 1.124 + { 1.125 + name = "issue_closed", 1.126 + field = "issue.closed", 1.127 + func = function(record) 1.128 + return format_timestamp(record.issue_closed) 1.129 + end 1.130 + }, 1.131 + { name = "issue_admission_time", field = "issue.admission_time" }, 1.132 + { name = "issue_discussion_time", field = "issue.discussion_time" }, 1.133 + { name = "issue_verification_time", field = "issue.verification_time" }, 1.134 + { name = "issue_voting_time", field = "issue.voting_time" }, 1.135 + { name = "issue_ranks_available", field = "issue.ranks_available" }, 1.136 + 1.137 + { name = "policy_issue_quorum_num", field = "policy.issue_quorum_num" }, 1.138 + { name = "policy_issue_quorum_den", field = "policy.issue_quorum_den" }, 1.139 + { name = "policy_initiative_quorum_num", 1.140 + field = "policy.initiative_quorum_num" }, 1.141 + { name = "policy_initiative_quorum_den", 1.142 + field = "policy.initiative_quorum_den" }, 1.143 + { name = "policy_majority_num", field = "policy.majority_num" }, 1.144 + { name = "policy_majority_den", field = "policy.majority_den" }, 1.145 + { name = "policy_majority_strict", field = "policy.majority_strict" }, 1.146 + { name = "id", field = "initiative.id" }, 1.147 + { name = "name", field = "initiative.name" }, 1.148 + { name = "discussion_url", field = "initiative.discussion_url" }, 1.149 + { 1.150 + name = "created", 1.151 + field = "initiative.created", 1.152 + func = function(record) 1.153 + return format.timestamp(record.created) 1.154 + end 1.155 + }, 1.156 + { name = "revoked", field = "initiative.revoked" }, 1.157 + { name = "suggested_initiative_id", field = "initiative.suggested_initiative_id" }, 1.158 + { name = "admitted", field = "initiative.admitted" }, 1.159 + { name = "issue_population", field = "issue.population" }, 1.160 + { name = "supporter_count", field = "initiative.supporter_count" }, 1.161 + { name = "informed_supporter_count", field = "initiative.informed_supporter_count" }, 1.162 + { name = "satisfied_supporter_count", field = "initiative.satisfied_supporter_count" }, 1.163 + { name = "satisfied_informed_supporter_count", 1.164 + field = "initiative.satisfied_informed_supporter_count" }, 1.165 + { name = "issue_vote_now", field = "issue.vote_now" }, 1.166 + { name = "issue_vote_later", field = "issue.vote_later" }, 1.167 + { name = "issue_voter_count", field = "issue.voter_count" }, 1.168 + { name = "positive_votes", field = "initiative.positive_votes" }, 1.169 + { name = "negative_votes", field = "initiative.negative_votes" }, 1.170 + { name = "agreed", field = "initiative.agreed" }, 1.171 + { name = "rank", field = "initiative.rank" }, 1.172 + { 1.173 + name = "current_draft_created", 1.174 + func = function(record) 1.175 + return format.timestamp(record.current_draft.created) 1.176 + end 1.177 + }, 1.178 + { 1.179 + name = "current_draft_formatting_engine", 1.180 + func = function(record) 1.181 + return record.current_draft.formatting_engine 1.182 + end 1.183 + }, 1.184 + { 1.185 + name = "current_draft_content", 1.186 + func = function(record) 1.187 + return record.current_draft.content 1.188 + end 1.189 + } 1.190 +} 1.191 + 1.192 +util.autoapi{ 1.193 + selector = initiatives_selector, 1.194 + fields = fields, 1.195 + api_engine = api_engine 1.196 +} 1.197 \ No newline at end of file