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