liquid_feedback_frontend
view app/main/member/_list.lua @ 1114:f41b584efaf4
Going to version 3.0.3
| author | bsw | 
|---|---|
| date | Mon Nov 10 18:57:49 2014 +0100 (2014-11-10) | 
| parents | cb9e75ac968f | 
| 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
