| rev | 
   line source | 
| 
bsw/jbe@1309
 | 
     1 slot.set_layout(nil, "application/json")
 | 
| 
bsw/jbe@1309
 | 
     2 
 | 
| 
bsw/jbe@1309
 | 
     3 local r = json.object{
 | 
| 
bsw/jbe@1309
 | 
     4   result = json.array{}
 | 
| 
bsw/jbe@1309
 | 
     5 }
 | 
| 
bsw/jbe@1309
 | 
     6 
 | 
| 
bsw/jbe@1309
 | 
     7 local selector = Event:new_selector()
 | 
| 
bsw/jbe@1309
 | 
     8 
 | 
| 
bsw/jbe@1309
 | 
     9 local member_id = param.get("member_id", atom.integer)
 | 
| 
bsw/jbe@1309
 | 
    10 local other_member_id = param.get("member_id", atom.integer)
 | 
| 
bsw/jbe@1309
 | 
    11 local scope = param.get("scope")
 | 
| 
bsw/jbe@1309
 | 
    12 local issue_id = param.get("issue_id", atom.integer)
 | 
| 
bsw/jbe@1309
 | 
    13 local state = param.get("state")
 | 
| 
bsw/jbe@1309
 | 
    14 local initiative_id = param.get("initiative_id", atom.integer)
 | 
| 
bsw/jbe@1309
 | 
    15 
 | 
| 
bsw/jbe@1309
 | 
    16 local include_members = param.get("include_members", atom.boolean)
 | 
| 
bsw/jbe@1309
 | 
    17 local include_other_members = param.get("include_other_members", atom.boolean)
 | 
| 
bsw/jbe@1309
 | 
    18 local include_profile = param.get("include_profile", atom.boolean)
 | 
| 
bsw/jbe@1309
 | 
    19 local include_issues = param.get("include_issues", atom.boolean)
 | 
| 
bsw/jbe@1309
 | 
    20 local include_initiatives = param.get("include_initiatives", atom.boolean)
 | 
| 
bsw/jbe@1309
 | 
    21 local include_drafts = param.get("include_drafts", atom.boolean)
 | 
| 
bsw/jbe@1309
 | 
    22 local include_suggestions = param.get("include_suggestions", atom.boolean)
 | 
| 
bsw/jbe@1309
 | 
    23 
 | 
| 
bsw/jbe@1309
 | 
    24 if member_id then
 | 
| 
bsw/jbe@1309
 | 
    25   selector:add_where{ "member_id = ?", member_id }
 | 
| 
bsw/jbe@1309
 | 
    26 end
 | 
| 
bsw/jbe@1309
 | 
    27 
 | 
| 
bsw/jbe@1309
 | 
    28 if other_member_id then
 | 
| 
bsw/jbe@1309
 | 
    29   selector:add_where{ "other_member_id = ?", other_member_id }
 | 
| 
bsw/jbe@1309
 | 
    30 end
 | 
| 
bsw/jbe@1309
 | 
    31 
 | 
| 
bsw/jbe@1309
 | 
    32 if scope then
 | 
| 
bsw/jbe@1309
 | 
    33   selector:add_where{ "scope = ?", scope }
 | 
| 
bsw/jbe@1309
 | 
    34 end
 | 
| 
bsw/jbe@1309
 | 
    35 
 | 
| 
bsw/jbe@1309
 | 
    36 if issue_id then
 | 
| 
bsw/jbe@1309
 | 
    37   selector:add_where{ "issue_id = ?", issue_id }
 | 
| 
bsw/jbe@1309
 | 
    38 end
 | 
| 
bsw/jbe@1309
 | 
    39 
 | 
| 
bsw/jbe@1309
 | 
    40 if scope then
 | 
| 
bsw/jbe@1309
 | 
    41   selector:add_where{ "scope = ?", scope }
 | 
| 
bsw/jbe@1309
 | 
    42 end
 | 
| 
bsw/jbe@1309
 | 
    43 
 | 
| 
bsw/jbe@1309
 | 
    44 if initiative_id then
 | 
| 
bsw/jbe@1309
 | 
    45   selector:add_where{ "initiative_id = ?", initiative_id }
 | 
| 
bsw/jbe@1309
 | 
    46 end
 | 
| 
bsw/jbe@1309
 | 
    47 
 | 
| 
bsw/jbe@1309
 | 
    48 selector:add_order_by("id DESC")
 | 
| 
bsw/jbe@1309
 | 
    49 
 | 
| 
bsw/jbe@1309
 | 
    50 local events = selector:exec()
 | 
| 
bsw/jbe@1309
 | 
    51 
 | 
| 
bsw/jbe@1309
 | 
    52 local member_ids = {}
 | 
| 
bsw/jbe@1309
 | 
    53 local issue_ids = {}
 | 
| 
bsw/jbe@1309
 | 
    54 local initiative_ids = {}
 | 
| 
bsw/jbe@1309
 | 
    55 local draft_ids = {}
 | 
| 
bsw/jbe@1309
 | 
    56 local suggestion_ids = {}
 | 
| 
bsw/jbe@1309
 | 
    57 
 | 
| 
bsw/jbe@1309
 | 
    58 for i, event in ipairs(events) do
 | 
| 
bsw/jbe@1309
 | 
    59   local e = json.object()
 | 
| 
bsw/jbe@1309
 | 
    60   e.id = event.id
 | 
| 
bsw/jbe@1309
 | 
    61   e.occurrence = format.timestamp(event.occurrence)
 | 
| 
bsw/jbe@1309
 | 
    62   e.event = event.event
 | 
| 
bsw/jbe@1309
 | 
    63   e.member_id = event.member_id
 | 
| 
bsw/jbe@1309
 | 
    64   e.other_member_id = event.other_member_id
 | 
| 
bsw/jbe@1309
 | 
    65   e.scope = event.scope
 | 
| 
bsw/jbe@1309
 | 
    66   e.issue_id = event.issue_id
 | 
| 
bsw/jbe@1309
 | 
    67   e.state = event.state
 | 
| 
bsw/jbe@1309
 | 
    68   e.initiative_id = event.initiative_id
 | 
| 
bsw/jbe@1309
 | 
    69   e.draft_id = event.draft_id
 | 
| 
bsw/jbe@1309
 | 
    70   e.suggestion_id = event.suggestion_id
 | 
| 
bsw/jbe@1309
 | 
    71   e.value = event.value
 | 
| 
bsw/jbe@1309
 | 
    72   if include_members and e.member_id then
 | 
| 
bsw/jbe@1309
 | 
    73     member_ids[e.member_id] = true
 | 
| 
bsw/jbe@1309
 | 
    74   end
 | 
| 
bsw/jbe@1309
 | 
    75   if include_other_members and e.other_member_id then
 | 
| 
bsw/jbe@1309
 | 
    76     member_ids[e.member_id] = true
 | 
| 
bsw/jbe@1309
 | 
    77   end
 | 
| 
bsw/jbe@1309
 | 
    78   if include_issues and e.issue_id then
 | 
| 
bsw/jbe@1309
 | 
    79     issue_ids[e.issue_id] = true
 | 
| 
bsw/jbe@1309
 | 
    80   end
 | 
| 
bsw/jbe@1309
 | 
    81   if include_initiatives and e.initiative_id then
 | 
| 
bsw/jbe@1309
 | 
    82     initiative_ids[e.initiative_id] = true
 | 
| 
bsw/jbe@1309
 | 
    83   end
 | 
| 
bsw/jbe@1309
 | 
    84   if include_drafts and e.draft_id then
 | 
| 
bsw/jbe@1309
 | 
    85     draft_ids[e.draft_id] = true
 | 
| 
bsw/jbe@1309
 | 
    86   end
 | 
| 
bsw/jbe@1309
 | 
    87   if include_suggestions and e.suggestion_id then
 | 
| 
bsw/jbe@1309
 | 
    88     suggestion_ids[e.suggestion_id] = true
 | 
| 
bsw/jbe@1309
 | 
    89   end
 | 
| 
bsw/jbe@1309
 | 
    90   r.result[#r.result+1] = e
 | 
| 
bsw/jbe@1309
 | 
    91 end
 | 
| 
bsw/jbe@1309
 | 
    92 
 | 
| 
bsw/jbe@1309
 | 
    93 function util.keys_to_array(tbl)
 | 
| 
bsw/jbe@1309
 | 
    94   local r = {}
 | 
| 
bsw/jbe@1309
 | 
    95   for k, v in pairs(tbl) do
 | 
| 
bsw/jbe@1309
 | 
    96     r[#r+1] = k
 | 
| 
bsw/jbe@1309
 | 
    97   end
 | 
| 
bsw/jbe@1309
 | 
    98   return r
 | 
| 
bsw/jbe@1309
 | 
    99 end
 | 
| 
bsw/jbe@1309
 | 
   100 
 | 
| 
bsw/jbe@1309
 | 
   101 function util.array_to_json_object(tbl, key)
 | 
| 
bsw/jbe@1309
 | 
   102   local r = json.object()
 | 
| 
bsw/jbe@1309
 | 
   103   for i, v in ipairs(tbl) do
 | 
| 
bsw/jbe@1309
 | 
   104     r[v[key]] = v
 | 
| 
bsw/jbe@1309
 | 
   105   end
 | 
| 
bsw/jbe@1309
 | 
   106   return r
 | 
| 
bsw/jbe@1309
 | 
   107 end
 | 
| 
bsw/jbe@1309
 | 
   108 
 | 
| 
bsw/jbe@1309
 | 
   109 if next(member_ids) then
 | 
| 
bsw/jbe@1309
 | 
   110   local members = Member:by_ids(util.keys_to_array(member_ids))
 | 
| 
bsw/jbe@1309
 | 
   111   r.members = util.array_to_json_object(
 | 
| 
bsw/jbe@1309
 | 
   112     execute.chunk{ module = "api", chunk = "_member", params = { members = members, include_profile = include_profile } },
 | 
| 
bsw/jbe@1309
 | 
   113     "id"
 | 
| 
bsw/jbe@1309
 | 
   114   )
 | 
| 
bsw/jbe@1309
 | 
   115   if r.members == false then
 | 
| 
bsw/jbe@1309
 | 
   116     return
 | 
| 
bsw/jbe@1309
 | 
   117   end
 | 
| 
bsw/jbe@1309
 | 
   118 end
 | 
| 
bsw/jbe@1309
 | 
   119 
 | 
| 
bsw/jbe@1309
 | 
   120 if next(issue_ids) then
 | 
| 
bsw/jbe@1309
 | 
   121   local issues = Issue:by_ids(util.keys_to_array(issue_ids))
 | 
| 
bsw/jbe@1309
 | 
   122   r.issues = util.array_to_json_object(
 | 
| 
bsw/jbe@1309
 | 
   123     execute.chunk{ module = "api", chunk = "_issue", params = { issues = issues } },
 | 
| 
bsw/jbe@1309
 | 
   124     "id"
 | 
| 
bsw/jbe@1309
 | 
   125   )
 | 
| 
bsw/jbe@1309
 | 
   126   if r.issues == false then
 | 
| 
bsw/jbe@1309
 | 
   127     return
 | 
| 
bsw/jbe@1309
 | 
   128   end
 | 
| 
bsw/jbe@1309
 | 
   129 end
 | 
| 
bsw/jbe@1309
 | 
   130 
 | 
| 
bsw/jbe@1309
 | 
   131 
 | 
| 
bsw/jbe@1309
 | 
   132 slot.put_into("data", json.export(r))
 |