| 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 } |