liquid_feedback_frontend
annotate app/main/api/initiative.lua @ 159:5d797c6706d5
implement quorum display
show the initiative quorum as a small 1px line in bargraph
allow to update your support on the diff page
better linked title in diff page
show absolute quorum numbers in detail pages of issue and initiative
show the initiative quorum as a small 1px line in bargraph
allow to update your support on the diff page
better linked title in diff page
show absolute quorum numbers in detail pages of issue and initiative
author | Daniel Poelzleithner <poelzi@poelzi.org> |
---|---|
date | Sat Oct 09 03:42:48 2010 +0200 (2010-10-09) |
parents | ae5fbdbc1758 |
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 } |