liquid_feedback_frontend

view app/main/member/_list.lua @ 1080:cb9e75ac968f

Better ordering of interested members
author bsw
date Wed Jul 23 20:47:57 2014 +0200 (2014-07-23)
parents aba047e2bac4
children 904f6807f7fa
line source
1 local members_selector = param.get("members_selector", "table")
2 members_selector:add_where("member.activated NOTNULL")
4 local initiative = param.get("initiative", "table")
5 local issue = param.get("issue", "table")
6 local trustee = param.get("trustee", "table")
7 local initiator = param.get("initiator", "table")
8 local for_votes = param.get("for_votes", atom.boolean)
9 local no_filter = param.get ( "no_filter", atom.boolean )
10 local no_paginate = param.get ( "no_paginate", atom.boolean )
12 local paginator_name = param.get("paginator_name")
14 local member_class = param.get("member_class")
16 if initiative or issue then
17 if for_votes then
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 })
19 members_selector:add_field("member.id = ANY(_member_list__delegating_voter.delegate_member_ids)", "in_delegation_chain")
20 else
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 })
22 members_selector:add_field("member.id = ANY(_member_list__delegating_interest.delegate_member_ids)", "in_delegation_chain")
23 end
24 end
26 ui.add_partial_param_names{ "member_list" }
28 local filter = { name = "member_filter" }
30 if issue or initiative then
31 filter[#filter+1] = {
32 name = "weight",
33 label = _"ordered by delegation count",
34 selector_modifier = function(members_selector)
35 if for_votes then
36 members_selector:add_order_by("voter_weight DESC")
37 else
38 members_selector:add_order_by("weight DESC")
39 end
40 -- pseudo random ordering of members with same weight
41 -- (using 45th and 47th fibonacci number)
42 members_selector:add_order_by("(issue.id # member.id) * 1134903170::INT8 % 2971215073")
43 members_selector:add_order_by("member.id")
44 end
45 }
46 else
47 filter[#filter+1] = {
48 name = "last_activity",
49 label = _"by latest activity",
50 selector_modifier = function(selector) selector:add_order_by("last_login DESC NULLS LAST, id DESC") end
51 }
52 filter[#filter+1] = {
53 name = "newest",
54 label = _"newest first",
55 selector_modifier = function(selector) selector:add_order_by("activated DESC, id DESC") end
56 }
57 filter[#filter+1] = {
58 name = "oldest",
59 label = _"oldest first",
60 selector_modifier = function(selector) selector:add_order_by("activated, id") end
61 }
62 end
64 filter[#filter+1] = {
65 name = "name",
66 label = _"by A-Z",
67 selector_modifier = function(selector) selector:add_order_by("name") end
68 }
69 filter[#filter+1] = {
70 name = "name_desc",
71 label = _"by Z-A",
72 selector_modifier = function(selector) selector:add_order_by("name DESC") end
73 }
76 function list_members()
77 local ui_paginate = ui.paginate
78 if no_paginate then
79 ui_paginate = function (args) args.content() end
80 end
81 ui_paginate{
82 name = paginator_name,
83 anchor = paginator_name,
84 selector = members_selector,
85 per_page = 25,
86 content = function()
87 ui.container{
88 attr = { class = "member_list" },
89 content = function()
90 local members = members_selector:exec()
92 for i, member in ipairs(members) do
93 ui.sectionRow( function()
94 execute.view{
95 module = "member",
96 view = "_show_thumb",
97 params = {
98 class = member_class,
99 member = member,
100 initiative = initiative,
101 issue = issue,
102 trustee = trustee,
103 initiator = initiator
104 }
105 }
106 end )
107 end
110 end
111 }
112 end
113 }
114 end
117 if no_filter then
118 list_members()
119 else
120 ui.filters {
121 label = _"Change order",
122 selector = members_selector,
123 content = list_members,
124 filter
125 }
126 end

Impressum / About Us