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