rev |
line source |
bsw/jbe@1309
|
1 local members = param.get("members", "table")
|
bsw/jbe@1309
|
2
|
bsw@1504
|
3 local include_unit_ids = param.get("include_unit_ids", atom.boolean)
|
bsw@1504
|
4 local include_units = param.get("include_units", atom.boolean)
|
bsw@1504
|
5 local include_roles = param.get("include_roles", atom.boolean)
|
bsw/jbe@1309
|
6 local include_profile = param.get("include_profile", atom.boolean)
|
bsw/jbe@1309
|
7
|
bsw/jbe@1309
|
8 if include_profile and not app.scopes.read_profiles then
|
bsw/jbe@1309
|
9 return util.api_error(403, "Forbidden", "insufficient_scope", "Scope read_profiles required")
|
bsw/jbe@1309
|
10 end
|
bsw/jbe@1309
|
11
|
bsw/jbe@1309
|
12 local fields = {}
|
bsw/jbe@1309
|
13
|
bsw/jbe@1309
|
14 if app.scopes.read_authors or app.scopes.read_identities then
|
bsw/jbe@1309
|
15 fields = { "id", "created", "last_activity", "admin", "name", "location" }
|
bsw/jbe@1309
|
16 end
|
bsw/jbe@1309
|
17
|
bsw/jbe@1309
|
18 if app.scopes.read_identities then
|
bsw/jbe@1309
|
19 fields[#fields+1] = "identification"
|
bsw/jbe@1309
|
20 end
|
bsw/jbe@1309
|
21
|
bsw/jbe@1309
|
22 local r = json.array()
|
bsw/jbe@1309
|
23
|
bsw/jbe@1309
|
24 if app.scopes.read_identities then
|
bsw@1504
|
25
|
bsw@1504
|
26 if include_unit_ids or include_units or include_roles then
|
bsw@1504
|
27 members:load("units")
|
bsw@1504
|
28 end
|
bsw@1504
|
29
|
bsw/jbe@1309
|
30 if include_profile then
|
bsw/jbe@1309
|
31 members:load("profile")
|
bsw/jbe@1309
|
32 end
|
bsw/jbe@1309
|
33
|
bsw/jbe@1309
|
34 for i, member in ipairs(members) do
|
bsw/jbe@1309
|
35 local m = json.object()
|
bsw/jbe@1309
|
36 for j, field in ipairs(fields) do
|
bsw/jbe@1309
|
37 local value = member[field]
|
bsw/jbe@1309
|
38 if value == nil then
|
bsw/jbe@1309
|
39 value = json.null
|
bsw/jbe@1309
|
40 else
|
bsw/jbe@1309
|
41 value = tostring(value)
|
bsw/jbe@1309
|
42 end
|
bsw/jbe@1309
|
43 m[field] = value
|
bsw/jbe@1309
|
44 end
|
bsw@1504
|
45 if include_unit_ids or include_units or include_roles then
|
bsw@1504
|
46 if include_unit_ids then
|
bsw@1504
|
47 m.unit_ids = json.array()
|
bsw@1504
|
48 end
|
bsw@1504
|
49 if include_units then
|
bsw@1504
|
50 m.units = json.array()
|
bsw@1504
|
51 end
|
bsw@1504
|
52 if include_roles then
|
bsw@1504
|
53 m.roles = json.object()
|
bsw@1504
|
54 end
|
bsw@1504
|
55 for i, unit in ipairs(member.units) do
|
bsw@1504
|
56 if unit.attr.hidden ~= true then
|
bsw@1504
|
57 if include_unit_ids then
|
bsw@1504
|
58 table.insert(m.unit_ids, unit.id)
|
bsw@1504
|
59 end
|
bsw@1504
|
60 if include_units then
|
bsw@1504
|
61 table.insert(m.units, json.object{
|
bsw@1504
|
62 id = unit.id,
|
bsw@1504
|
63 parent_id = unit.parent_id,
|
bsw@1504
|
64 name = unit.name,
|
bsw@1504
|
65 description = unit.description
|
bsw@1504
|
66 })
|
bsw@1504
|
67 end
|
bsw@1504
|
68 end
|
bsw@1504
|
69 if include_roles then
|
bsw@1504
|
70 if unit.attr.role then
|
bsw@1504
|
71 if not unit.attr.only_visible_for_role
|
bsw@1504
|
72 or app.access_token
|
bsw@1504
|
73 and app.access_token.member:has_role(unit.attr.only_visible_for_role)
|
bsw@1504
|
74 then
|
bsw@1504
|
75 m.roles[unit.attr.role] = true
|
bsw@1504
|
76 end
|
bsw@1504
|
77 end
|
bsw@1504
|
78 end
|
bsw@1504
|
79 end
|
bsw@1504
|
80 end
|
bsw/jbe@1309
|
81 if include_profile then
|
bsw/jbe@1309
|
82 m.profile = execute.chunk{ module = "api", chunk = "_profile", params = { profile = member.profile } }
|
bsw/jbe@1309
|
83 end
|
bsw/jbe@1309
|
84 r[#r+1] = m
|
bsw/jbe@1309
|
85 end
|
bsw/jbe@1309
|
86 end
|
bsw/jbe@1309
|
87
|
bsw/jbe@1309
|
88 return r
|