liquid_feedback_frontend
view app/main/api/initiative.lua @ 154:6b6c82f9ca9f
speedup member image loading when non set
we can add the location of the default file directy instead of going through another slow request
we can add the location of the default file directy instead of going through another slow request
| author | Daniel Poelzleithner <poelzi@poelzi.org> | 
|---|---|
| date | Fri Oct 08 15:25:10 2010 +0200 (2010-10-08) | 
| parents | ae5fbdbc1758 | 
| children | 
 line source
     1 local id             = param.get("id")
     2 local min_id         = param.get("min_id")
     3 local max_id         = param.get("max_id")
     4 local area_id        = param.get("area_id", atom.integer)
     5 local issue_id       = param.get("issue_id", atom.integer)
     6 local policy_id      = param.get("policy_id", atom.integer)
     7 local state          = param.get("state")
     8 local agreed         = param.get("agreed")
     9 local rank           = param.get("rank")
    10 --local search         = param.get("search")
    11 --local search_context = param.get("search_context") or "full"
    12 local limit          = param.get("limit", atom.integer)
    13 local order          = param.get("order")
    14 local render_draft   = param.get("render_draft")
    16 if render_draft and render_draft ~= "html" then
    17   error("unsupported render target, only 'html' is supported right now")
    18 end
    20 local initiatives_selector = Initiative:new_selector()
    21   :join("issue", nil, "issue.id = initiative.issue_id")
    22   :join("area", nil, "area.id = issue.area_id")
    23   :join("policy", nil, "policy.id = issue.policy_id")
    25 if id then
    26   initiatives_selector:add_where{"initiative.id = ?", id}
    27 end
    29 if min_id then
    30   initiatives_selector:add_where{"initiative.id >= ?", min_id}
    31 end
    33 if max_id then
    34   initiatives_selector:add_where{"initiative.id <= ?", max_id}
    35 end
    37 if area_id then
    38   initiatives_selector:add_where{"area.id = ?", area_id}
    39 end
    41 if issue_id then
    42   initiatives_selector:add_where{"issue.id = ?", issue_id}
    43 end
    45 if policy_id then
    46   initiatives_selector:add_where{"policy.id = ?", policy_id}
    47 end
    49 if state then
    50   Issue:modify_selector_for_state(initiatives_selector, state)
    51 end
    53 if agreed then
    54   initiatives_selector:add_where("initiative.agreed")
    55 end
    57 if rank then
    58   initiatives_selector:add_where{ "initiative.rank = ?", rank }
    59 end
    61 --[[
    62 if search then
    63   if search_context == "full" then
    64   elseif search_context == "title" then
    65   end
    66 end
    67 --]]
    69 if order == "supporter_count" then
    70   initiatives_selector:add_order_by("initiative.supporter_count")
    71 end
    73 if order == "id_desc" then
    74   initiatives_selector:add_order_by("initiative.id DESC")
    75 else
    76   initiatives_selector:add_order_by("initiative.id")
    77 end
    79 if limit then
    80   initiatives_selector:limit(limit)
    81 end
    83 local api_engine = param.get("api_engine") or "xml"
    85 local function format_timestamp(timestamp)
    86   if timestamp then
    87     return format.timestamp(timestamp)
    88   else
    89     return ""
    90   end
    91 end
    93 local fields = {
    95   { name = "area_id",                   field = "area.id" },
    96   { name = "area_name",                 field = "area.name" },
    97   { name = "issue_id",                  field = "issue.id" },
    98   {
    99     name = "issue_state",
   100     func = function(record)
   101       return record.issue.state
   102     end
   103   },
   104   {
   105     name = "issue_created",
   106     field = "issue.created",
   107     func = function(record)
   108       return format_timestamp(record.issue_created)
   109     end
   110   },
   111   {
   112     name = "issue_accepted",
   113     field = "issue.accepted",
   114     func = function(record)
   115       return format_timestamp(record.issue_accepted)
   116     end
   117   },
   118   {
   119     name = "issue_half_frozen",
   120     field = "issue.half_frozen",
   121     func = function(record)
   122       return format_timestamp(record.issue_half_frozen)
   123     end
   124   },
   125   {
   126     name = "issue_fully_frozen",
   127     field = "issue.fully_frozen",
   128     func = function(record)
   129       return format_timestamp(record.issue_fully_frozen)
   130     end
   131   },
   132   {
   133     name = "issue_closed",
   134     field = "issue.closed",
   135     func = function(record)
   136       return format_timestamp(record.issue_closed)
   137     end
   138   },
   139   { name = "issue_admission_time",      field = "issue.admission_time" },
   140   { name = "issue_discussion_time",     field = "issue.discussion_time" },
   141   { name = "issue_verification_time",   field = "issue.verification_time" },
   142   { name = "issue_voting_time",         field = "issue.voting_time" },
   143   { name = "issue_ranks_available",     field = "issue.ranks_available" },
   145   { name = "policy_issue_quorum_num",   field = "policy.issue_quorum_num" },
   146   { name = "policy_issue_quorum_den",   field = "policy.issue_quorum_den" },
   147   { name = "policy_initiative_quorum_num",
   148                                         field = "policy.initiative_quorum_num" },
   149   { name = "policy_initiative_quorum_den",
   150                                         field = "policy.initiative_quorum_den" },
   151   { name = "policy_majority_num",       field = "policy.majority_num" },
   152   { name = "policy_majority_den",       field = "policy.majority_den" },
   153   { name = "policy_majority_strict",    field = "policy.majority_strict" },
   154   { name = "id",                        field = "initiative.id" },
   155   { name = "name",                      field = "initiative.name" },
   156   { name = "discussion_url",            field = "initiative.discussion_url" },
   157   {
   158     name = "created",
   159     field = "initiative.created",
   160     func = function(record)
   161       return format_timestamp(record.created)
   162     end
   163   },
   164   {
   165     name = "revoked",
   166     field = "initiative.revoked",
   167     func = function(record)
   168       return format_timestamp(record.revoked)
   169     end
   170   },
   171   { name = "suggested_initiative_id",   field = "initiative.suggested_initiative_id" },
   172   { name = "admitted",                  field = "initiative.admitted" },
   173   { name = "issue_population",          field = "issue.population" },
   174   { name = "supporter_count",           field = "initiative.supporter_count" },
   175   { name = "informed_supporter_count",  field = "initiative.informed_supporter_count" },
   176   { name = "satisfied_supporter_count", field = "initiative.satisfied_supporter_count" },
   177   { name = "satisfied_informed_supporter_count",
   178                                         field = "initiative.satisfied_informed_supporter_count" },
   179   { name = "issue_vote_now",            field = "issue.vote_now" },
   180   { name = "issue_vote_later",          field = "issue.vote_later" },
   181   { name = "issue_voter_count",         field = "issue.voter_count" },
   182   { name = "positive_votes",            field = "initiative.positive_votes" },
   183   { name = "negative_votes",            field = "initiative.negative_votes" },
   184   { name = "agreed",                    field = "initiative.agreed" },
   185   { name = "rank",                      field = "initiative.rank" },
   186   {
   187     name = "current_draft_created",
   188     func = function(record)
   189       return format_timestamp(record.current_draft.created)
   190     end
   191   },
   192   {
   193     name = "current_draft_formatting_engine",
   194     func = function(record)
   195       return record.current_draft.formatting_engine
   196     end
   197   },
   198   {
   199     name = "current_draft_content",
   200     func = function(record)
   201       if render_draft then
   202         return record.current_draft:get_content(render_draft)
   203       else
   204         return record.current_draft.content
   205       end
   206     end
   207   }
   208 }
   210 util.autoapi{
   211   relation_name = "initiative",
   212   selector      = initiatives_selector,
   213   fields        = fields,
   214   api_engine    = api_engine
   215 }
