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

Impressum / About Us