| 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@1080
 | 
    26 local filter = { name = "member_filter" }
 | 
| 
bsw@3
 | 
    27 
 | 
| 
bsw@1080
 | 
    28 if issue or initiative then
 | 
| 
bsw@1080
 | 
    29   filter[#filter+1] = {
 | 
| 
bsw@1080
 | 
    30     name = "weight",
 | 
| 
bsw@1080
 | 
    31     label = _"ordered by delegation count",
 | 
| 
bsw@1080
 | 
    32     selector_modifier = function(members_selector) 
 | 
| 
bsw@1080
 | 
    33       if for_votes then
 | 
| 
bsw@1080
 | 
    34           members_selector:add_order_by("voter_weight DESC")
 | 
| 
bsw@1080
 | 
    35       else
 | 
| 
bsw@1080
 | 
    36           members_selector:add_order_by("weight DESC")
 | 
| 
bsw@1080
 | 
    37       end
 | 
| 
bsw@1080
 | 
    38       -- pseudo random ordering of members with same weight
 | 
| 
bsw@1080
 | 
    39       -- (using 45th and 47th fibonacci number)
 | 
| 
bsw@1080
 | 
    40       members_selector:add_order_by("(issue.id # member.id) * 1134903170::INT8 % 2971215073")
 | 
| 
bsw@1080
 | 
    41       members_selector:add_order_by("member.id")
 | 
| 
bsw@1080
 | 
    42     end
 | 
| 
bsw@1080
 | 
    43   }
 | 
| 
bsw@1080
 | 
    44 else
 | 
| 
bsw@1080
 | 
    45   filter[#filter+1] = {
 | 
| 
bsw@1080
 | 
    46     name = "last_activity",
 | 
| 
bsw@1080
 | 
    47     label = _"by latest activity",
 | 
| 
bsw@1080
 | 
    48     selector_modifier = function(selector) selector:add_order_by("last_login DESC NULLS LAST, id DESC") end
 | 
| 
bsw@1080
 | 
    49   }
 | 
| 
bsw@1080
 | 
    50   filter[#filter+1] = {
 | 
| 
bsw@1080
 | 
    51     name = "newest",
 | 
| 
bsw@1080
 | 
    52     label = _"newest first",
 | 
| 
bsw@1080
 | 
    53     selector_modifier = function(selector) selector:add_order_by("activated DESC, id DESC") end
 | 
| 
bsw@1080
 | 
    54   }
 | 
| 
bsw@1080
 | 
    55   filter[#filter+1] = {
 | 
| 
bsw@1080
 | 
    56     name = "oldest",
 | 
| 
bsw@1080
 | 
    57     label = _"oldest first",
 | 
| 
bsw@1080
 | 
    58     selector_modifier = function(selector) selector:add_order_by("activated, id") end
 | 
| 
bsw@1080
 | 
    59   }
 | 
| 
bsw@1080
 | 
    60 end
 | 
| 
bsw@452
 | 
    61 
 | 
| 
bsw@452
 | 
    62 filter[#filter+1] = {
 | 
| 
bsw@452
 | 
    63   name = "name",
 | 
| 
bsw@1080
 | 
    64   label = _"by A-Z",
 | 
| 
bsw@452
 | 
    65   selector_modifier = function(selector) selector:add_order_by("name") end
 | 
| 
bsw@452
 | 
    66 }
 | 
| 
bsw@452
 | 
    67 filter[#filter+1] = {
 | 
| 
bsw@452
 | 
    68   name = "name_desc",
 | 
| 
bsw@1080
 | 
    69   label = _"by Z-A",
 | 
| 
bsw@452
 | 
    70   selector_modifier = function(selector) selector:add_order_by("name DESC") end
 | 
| 
bsw@452
 | 
    71 }
 | 
| 
bsw@452
 | 
    72 
 | 
| 
bsw@3
 | 
    73 
 | 
| 
bsw@1145
 | 
    74 local function list_members()
 | 
| 
bsw@1045
 | 
    75   local ui_paginate = ui.paginate
 | 
| 
bsw@1045
 | 
    76   if no_paginate then
 | 
| 
bsw@1045
 | 
    77     ui_paginate = function (args) args.content() end
 | 
| 
bsw@1045
 | 
    78   end
 | 
| 
bsw@1045
 | 
    79   ui_paginate{
 | 
| 
bsw@1045
 | 
    80     name = paginator_name,
 | 
| 
bsw@1045
 | 
    81     anchor = paginator_name,
 | 
| 
bsw@1045
 | 
    82     selector = members_selector,
 | 
| 
bsw@1078
 | 
    83     per_page = 25,
 | 
| 
bsw@1045
 | 
    84     content = function() 
 | 
| 
bsw@1045
 | 
    85       ui.container{
 | 
| 
bsw@1045
 | 
    86         attr = { class = "member_list" },
 | 
| 
bsw@1045
 | 
    87         content = function()
 | 
| 
bsw@1045
 | 
    88           local members = members_selector:exec()
 | 
| 
bsw@1045
 | 
    89 
 | 
| 
bsw@1045
 | 
    90           for i, member in ipairs(members) do
 | 
| 
bsw@1045
 | 
    91             ui.sectionRow( function()
 | 
| 
bsw@2
 | 
    92               execute.view{
 | 
| 
bsw@2
 | 
    93                 module = "member",
 | 
| 
bsw@2
 | 
    94                 view = "_show_thumb",
 | 
| 
bsw@10
 | 
    95                 params = {
 | 
| 
bsw@1045
 | 
    96                   class = member_class,
 | 
| 
bsw@10
 | 
    97                   member = member,
 | 
| 
bsw@10
 | 
    98                   initiative = initiative,
 | 
| 
bsw@10
 | 
    99                   issue = issue,
 | 
| 
bsw@10
 | 
   100                   trustee = trustee,
 | 
| 
bsw@10
 | 
   101                   initiator = initiator
 | 
| 
bsw@10
 | 
   102                 }
 | 
| 
bsw/jbe@0
 | 
   103               }
 | 
| 
bsw@1045
 | 
   104             end )
 | 
| 
bsw@1045
 | 
   105           end
 | 
| 
bsw/jbe@19
 | 
   106 
 | 
| 
bsw@177
 | 
   107 
 | 
| 
bsw@1045
 | 
   108         end
 | 
| 
bsw@1045
 | 
   109       }
 | 
| 
bsw@1045
 | 
   110     end
 | 
| 
bsw@1045
 | 
   111   }
 | 
| 
bsw@1045
 | 
   112 end
 | 
| 
bsw@1045
 | 
   113 
 | 
| 
bsw@1045
 | 
   114   
 | 
| 
bsw@1045
 | 
   115 if no_filter then
 | 
| 
bsw@1045
 | 
   116   list_members()
 | 
| 
bsw@1045
 | 
   117 else
 | 
| 
bsw@1045
 | 
   118   ui.filters {
 | 
| 
bsw@1045
 | 
   119     label = _"Change order",
 | 
| 
bsw@1045
 | 
   120     selector = members_selector,
 | 
| 
bsw@1045
 | 
   121     content = list_members,
 | 
| 
bsw@1045
 | 
   122     filter
 | 
| 
bsw@1045
 | 
   123   }
 | 
| 
bsw@1045
 | 
   124 end |