liquid_feedback_frontend

annotate app/main/member/_list.lua @ 1272:4be7efb236ce

Fixes on notification system
author bsw
date Sun Apr 17 17:23:13 2016 +0200 (2016-04-17)
parents 904f6807f7fa
children 32cc544d5a5b
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

Impressum / About Us