rev |
line source |
bsw/jbe@0
|
1 local members_selector = param.get("members_selector", "table")
|
bsw@286
|
2 members_selector:add_where("member.activated NOTNULL")
|
bsw@286
|
3
|
bsw@3
|
4 local initiative = param.get("initiative", "table")
|
bsw@3
|
5 local issue = param.get("issue", "table")
|
bsw@3
|
6 local trustee = param.get("trustee", "table")
|
bsw@10
|
7 local initiator = param.get("initiator", "table")
|
bsw@190
|
8 local for_votes = param.get("for_votes", atom.boolean)
|
bsw@1045
|
9 local no_filter = param.get ( "no_filter", atom.boolean )
|
bsw@1045
|
10 local no_paginate = param.get ( "no_paginate", atom.boolean )
|
bsw@183
|
11
|
bsw@720
|
12 local paginator_name = param.get("paginator_name")
|
bsw@720
|
13
|
bsw@1045
|
14 local member_class = param.get("member_class")
|
bsw@1045
|
15
|
bsw@177
|
16 if initiative or issue then
|
bsw@190
|
17 if for_votes then
|
bsw@190
|
18 members_selector:left_join("delegating_voter", "_member_list__delegating_voter", { "_member_list__delegating_voter.issue_id = issue.id AND _member_list__delegating_voter.member_id = ?", app.session.member_id })
|
bsw@1045
|
19 members_selector:add_field("member.id = ANY(_member_list__delegating_voter.delegate_member_ids)", "in_delegation_chain")
|
bsw@190
|
20 else
|
bsw@190
|
21 members_selector:left_join("delegating_interest_snapshot", "_member_list__delegating_interest", { "_member_list__delegating_interest.event = issue.latest_snapshot_event AND _member_list__delegating_interest.issue_id = issue.id AND _member_list__delegating_interest.member_id = ?", app.session.member_id })
|
bsw@1045
|
22 members_selector:add_field("member.id = ANY(_member_list__delegating_interest.delegate_member_ids)", "in_delegation_chain")
|
bsw@190
|
23 end
|
bsw@177
|
24 end
|
bsw@177
|
25
|
bsw/jbe@19
|
26 ui.add_partial_param_names{ "member_list" }
|
bsw/jbe@19
|
27
|
bsw@1080
|
28 local filter = { name = "member_filter" }
|
bsw@3
|
29
|
bsw@1080
|
30 if issue or initiative then
|
bsw@1080
|
31 filter[#filter+1] = {
|
bsw@1080
|
32 name = "weight",
|
bsw@1080
|
33 label = _"ordered by delegation count",
|
bsw@1080
|
34 selector_modifier = function(members_selector)
|
bsw@1080
|
35 if for_votes then
|
bsw@1080
|
36 members_selector:add_order_by("voter_weight DESC")
|
bsw@1080
|
37 else
|
bsw@1080
|
38 members_selector:add_order_by("weight DESC")
|
bsw@1080
|
39 end
|
bsw@1080
|
40 -- pseudo random ordering of members with same weight
|
bsw@1080
|
41 -- (using 45th and 47th fibonacci number)
|
bsw@1080
|
42 members_selector:add_order_by("(issue.id # member.id) * 1134903170::INT8 % 2971215073")
|
bsw@1080
|
43 members_selector:add_order_by("member.id")
|
bsw@1080
|
44 end
|
bsw@1080
|
45 }
|
bsw@1080
|
46 else
|
bsw@1080
|
47 filter[#filter+1] = {
|
bsw@1080
|
48 name = "last_activity",
|
bsw@1080
|
49 label = _"by latest activity",
|
bsw@1080
|
50 selector_modifier = function(selector) selector:add_order_by("last_login DESC NULLS LAST, id DESC") end
|
bsw@1080
|
51 }
|
bsw@1080
|
52 filter[#filter+1] = {
|
bsw@1080
|
53 name = "newest",
|
bsw@1080
|
54 label = _"newest first",
|
bsw@1080
|
55 selector_modifier = function(selector) selector:add_order_by("activated DESC, id DESC") end
|
bsw@1080
|
56 }
|
bsw@1080
|
57 filter[#filter+1] = {
|
bsw@1080
|
58 name = "oldest",
|
bsw@1080
|
59 label = _"oldest first",
|
bsw@1080
|
60 selector_modifier = function(selector) selector:add_order_by("activated, id") end
|
bsw@1080
|
61 }
|
bsw@1080
|
62 end
|
bsw@452
|
63
|
bsw@452
|
64 filter[#filter+1] = {
|
bsw@452
|
65 name = "name",
|
bsw@1080
|
66 label = _"by A-Z",
|
bsw@452
|
67 selector_modifier = function(selector) selector:add_order_by("name") end
|
bsw@452
|
68 }
|
bsw@452
|
69 filter[#filter+1] = {
|
bsw@452
|
70 name = "name_desc",
|
bsw@1080
|
71 label = _"by Z-A",
|
bsw@452
|
72 selector_modifier = function(selector) selector:add_order_by("name DESC") end
|
bsw@452
|
73 }
|
bsw@452
|
74
|
bsw@3
|
75
|
bsw@1045
|
76 function list_members()
|
bsw@1045
|
77 local ui_paginate = ui.paginate
|
bsw@1045
|
78 if no_paginate then
|
bsw@1045
|
79 ui_paginate = function (args) args.content() end
|
bsw@1045
|
80 end
|
bsw@1045
|
81 ui_paginate{
|
bsw@1045
|
82 name = paginator_name,
|
bsw@1045
|
83 anchor = paginator_name,
|
bsw@1045
|
84 selector = members_selector,
|
bsw@1078
|
85 per_page = 25,
|
bsw@1045
|
86 content = function()
|
bsw@1045
|
87 ui.container{
|
bsw@1045
|
88 attr = { class = "member_list" },
|
bsw@1045
|
89 content = function()
|
bsw@1045
|
90 local members = members_selector:exec()
|
bsw@1045
|
91
|
bsw@1045
|
92 for i, member in ipairs(members) do
|
bsw@1045
|
93 ui.sectionRow( function()
|
bsw@2
|
94 execute.view{
|
bsw@2
|
95 module = "member",
|
bsw@2
|
96 view = "_show_thumb",
|
bsw@10
|
97 params = {
|
bsw@1045
|
98 class = member_class,
|
bsw@10
|
99 member = member,
|
bsw@10
|
100 initiative = initiative,
|
bsw@10
|
101 issue = issue,
|
bsw@10
|
102 trustee = trustee,
|
bsw@10
|
103 initiator = initiator
|
bsw@10
|
104 }
|
bsw/jbe@0
|
105 }
|
bsw@1045
|
106 end )
|
bsw@1045
|
107 end
|
bsw/jbe@19
|
108
|
bsw@177
|
109
|
bsw@1045
|
110 end
|
bsw@1045
|
111 }
|
bsw@1045
|
112 end
|
bsw@1045
|
113 }
|
bsw@1045
|
114 end
|
bsw@1045
|
115
|
bsw@1045
|
116
|
bsw@1045
|
117 if no_filter then
|
bsw@1045
|
118 list_members()
|
bsw@1045
|
119 else
|
bsw@1045
|
120 ui.filters {
|
bsw@1045
|
121 label = _"Change order",
|
bsw@1045
|
122 selector = members_selector,
|
bsw@1045
|
123 content = list_members,
|
bsw@1045
|
124 filter
|
bsw@1045
|
125 }
|
bsw@1045
|
126 end |