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