liquid_feedback_frontend

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

Impressum / About Us