bsw/jbe@0: local members_selector = param.get("members_selector", "table") bsw@286: members_selector:add_where("member.activated NOTNULL") bsw@286: bsw@3: local initiative = param.get("initiative", "table") bsw@3: local issue = param.get("issue", "table") bsw@3: local trustee = param.get("trustee", "table") bsw@10: local initiator = param.get("initiator", "table") bsw@190: local for_votes = param.get("for_votes", atom.boolean) bsw@1045: local no_filter = param.get ( "no_filter", atom.boolean ) bsw@1045: local no_paginate = param.get ( "no_paginate", atom.boolean ) bsw@183: bsw@720: local paginator_name = param.get("paginator_name") bsw@720: bsw@1045: local member_class = param.get("member_class") bsw@1045: bsw@177: if initiative or issue then bsw@190: if for_votes then bsw@190: 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: members_selector:add_field("member.id = ANY(_member_list__delegating_voter.delegate_member_ids)", "in_delegation_chain") bsw@190: else bsw@190: 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: members_selector:add_field("member.id = ANY(_member_list__delegating_interest.delegate_member_ids)", "in_delegation_chain") bsw@190: end bsw@177: end bsw@177: bsw/jbe@19: ui.add_partial_param_names{ "member_list" } bsw/jbe@19: bsw@1080: local filter = { name = "member_filter" } bsw@3: bsw@1080: if issue or initiative then bsw@1080: filter[#filter+1] = { bsw@1080: name = "weight", bsw@1080: label = _"ordered by delegation count", bsw@1080: selector_modifier = function(members_selector) bsw@1080: if for_votes then bsw@1080: members_selector:add_order_by("voter_weight DESC") bsw@1080: else bsw@1080: members_selector:add_order_by("weight DESC") bsw@1080: end bsw@1080: -- pseudo random ordering of members with same weight bsw@1080: -- (using 45th and 47th fibonacci number) bsw@1080: members_selector:add_order_by("(issue.id # member.id) * 1134903170::INT8 % 2971215073") bsw@1080: members_selector:add_order_by("member.id") bsw@1080: end bsw@1080: } bsw@1080: else bsw@1080: filter[#filter+1] = { bsw@1080: name = "last_activity", bsw@1080: label = _"by latest activity", bsw@1080: selector_modifier = function(selector) selector:add_order_by("last_login DESC NULLS LAST, id DESC") end bsw@1080: } bsw@1080: filter[#filter+1] = { bsw@1080: name = "newest", bsw@1080: label = _"newest first", bsw@1080: selector_modifier = function(selector) selector:add_order_by("activated DESC, id DESC") end bsw@1080: } bsw@1080: filter[#filter+1] = { bsw@1080: name = "oldest", bsw@1080: label = _"oldest first", bsw@1080: selector_modifier = function(selector) selector:add_order_by("activated, id") end bsw@1080: } bsw@1080: end bsw@452: bsw@452: filter[#filter+1] = { bsw@452: name = "name", bsw@1080: label = _"by A-Z", bsw@452: selector_modifier = function(selector) selector:add_order_by("name") end bsw@452: } bsw@452: filter[#filter+1] = { bsw@452: name = "name_desc", bsw@1080: label = _"by Z-A", bsw@452: selector_modifier = function(selector) selector:add_order_by("name DESC") end bsw@452: } bsw@452: bsw@3: bsw@1045: function list_members() bsw@1045: local ui_paginate = ui.paginate bsw@1045: if no_paginate then bsw@1045: ui_paginate = function (args) args.content() end bsw@1045: end bsw@1045: ui_paginate{ bsw@1045: name = paginator_name, bsw@1045: anchor = paginator_name, bsw@1045: selector = members_selector, bsw@1078: per_page = 25, bsw@1045: content = function() bsw@1045: ui.container{ bsw@1045: attr = { class = "member_list" }, bsw@1045: content = function() bsw@1045: local members = members_selector:exec() bsw@1045: bsw@1045: for i, member in ipairs(members) do bsw@1045: ui.sectionRow( function() bsw@2: execute.view{ bsw@2: module = "member", bsw@2: view = "_show_thumb", bsw@10: params = { bsw@1045: class = member_class, bsw@10: member = member, bsw@10: initiative = initiative, bsw@10: issue = issue, bsw@10: trustee = trustee, bsw@10: initiator = initiator bsw@10: } bsw/jbe@0: } bsw@1045: end ) bsw@1045: end bsw/jbe@19: bsw@177: bsw@1045: end bsw@1045: } bsw@1045: end bsw@1045: } bsw@1045: end bsw@1045: bsw@1045: bsw@1045: if no_filter then bsw@1045: list_members() bsw@1045: else bsw@1045: ui.filters { bsw@1045: label = _"Change order", bsw@1045: selector = members_selector, bsw@1045: content = list_members, bsw@1045: filter bsw@1045: } bsw@1045: end