liquid_feedback_frontend
view app/main/member/_list.lua @ 1362:f6c0681aad68
Added generation of sequential number
| author | bsw | 
|---|---|
| date | Mon Aug 06 14:12:03 2018 +0200 (2018-08-06) | 
| parents | 32cc544d5a5b | 
| children | a5e1de39e19a | 
 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.snapshot_id = issue.latest_snapshot_id 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 local filter = { name = "member_filter" }
    28 if issue or initiative then
    29   filter[#filter+1] = {
    30     name = "weight",
    31     label = _"ordered by delegation count",
    32     selector_modifier = function(members_selector) 
    33       if for_votes then
    34           members_selector:add_order_by("voter_weight DESC")
    35       else
    36           members_selector:add_order_by("weight DESC")
    37       end
    38       -- pseudo random ordering of members with same weight
    39       -- (using 45th and 47th fibonacci number)
    40       members_selector:add_order_by("(issue.id # member.id) * 1134903170::INT8 % 2971215073")
    41       members_selector:add_order_by("member.id")
    42     end
    43   }
    44 else
    45   filter[#filter+1] = {
    46     name = "last_activity",
    47     label = _"by latest activity",
    48     selector_modifier = function(selector) selector:add_order_by("last_login DESC NULLS LAST, id DESC") end
    49   }
    50   filter[#filter+1] = {
    51     name = "newest",
    52     label = _"newest first",
    53     selector_modifier = function(selector) selector:add_order_by("activated DESC, id DESC") end
    54   }
    55   filter[#filter+1] = {
    56     name = "oldest",
    57     label = _"oldest first",
    58     selector_modifier = function(selector) selector:add_order_by("activated, id") end
    59   }
    60 end
    62 filter[#filter+1] = {
    63   name = "name",
    64   label = _"by A-Z",
    65   selector_modifier = function(selector) selector:add_order_by("name") end
    66 }
    67 filter[#filter+1] = {
    68   name = "name_desc",
    69   label = _"by Z-A",
    70   selector_modifier = function(selector) selector:add_order_by("name DESC") end
    71 }
    74 local function list_members()
    75   local ui_paginate = ui.paginate
    76   if no_paginate then
    77     ui_paginate = function (args) args.content() end
    78   end
    79   ui_paginate{
    80     name = paginator_name,
    81     anchor = paginator_name,
    82     selector = members_selector,
    83     per_page = 100,
    84     content = function() 
    85       ui.container{
    86         attr = { class = "member_list" },
    87         content = function()
    88           local members = members_selector:exec()
    90           for i, member in ipairs(members) do
    91             execute.view{
    92               module = "member",
    93               view = "_show_thumb",
    94               params = {
    95                 class = member_class,
    96                 member = member,
    97                 initiative = initiative,
    98                 issue = issue,
    99                 trustee = trustee,
   100                 initiator = initiator
   101               }
   102             }
   103           end
   106         end
   107       }
   108     end
   109   }
   110 end
   113 if no_filter then
   114   list_members()
   115 else
   116   ui.filters {
   117     label = _"Change order",
   118     selector = members_selector,
   119     content = list_members,
   120     filter
   121   }
   122 end
