liquid_feedback_frontend
changeset 285:6c88b4bfb56c
Apply interest/support filter for member at member page
author | bsw |
---|---|
date | Fri Feb 17 15:16:02 2012 +0100 (2012-02-17) |
parents | 38dbcd510657 |
children | c587d8762e62 |
files | app/main/area/_list.lua app/main/area/show.lua app/main/initiative/_list.lua app/main/initiative/_list_element.lua app/main/issue/_list.lua app/main/member/show_tab.lua app/main/suggestion/_list.lua app/main/vote/list.lua static/style.css |
line diff
1.1 --- a/app/main/area/_list.lua Fri Feb 17 15:14:50 2012 +0100 1.2 +++ b/app/main/area/_list.lua Fri Feb 17 15:16:02 2012 +0100 1.3 @@ -214,25 +214,7 @@ 1.4 params = { filter = "cancelled", issue_list = "newest", tab = "issues" } 1.5 } 1.6 end 1.7 - }, 1.8 - { 1.9 - content = function(record) 1.10 - if record.issues_to_vote_count > 0 then 1.11 - ui.link{ 1.12 - attr = { class = "not_voted" }, 1.13 - text = _"Not yet voted" .. ": " .. tostring(record.issues_to_vote_count), 1.14 - module = "area", 1.15 - view = "show", 1.16 - id = record.id, 1.17 - params = { 1.18 - filter = "frozen", 1.19 - filter_voting = "not_voted", 1.20 - tab = "issues" 1.21 - } 1.22 - } 1.23 - end 1.24 - end 1.25 - }, 1.26 + } 1.27 } 1.28 } 1.29 --[[
2.1 --- a/app/main/area/show.lua Fri Feb 17 15:14:50 2012 +0100 2.2 +++ b/app/main/area/show.lua Fri Feb 17 15:16:02 2012 +0100 2.3 @@ -14,7 +14,10 @@ 2.4 2.5 2.6 slot.select("title", function() 2.7 - ui.tag{ content = area.name } 2.8 + ui.link{ 2.9 + content = area.name, 2.10 + module = "area", view = "show", id = area.id 2.11 + } 2.12 2.13 if not config.single_unit_id then 2.14 slot.put(" · ")
3.1 --- a/app/main/initiative/_list.lua Fri Feb 17 15:14:50 2012 +0100 3.2 +++ b/app/main/initiative/_list.lua Fri Feb 17 15:16:02 2012 +0100 3.3 @@ -4,17 +4,23 @@ 3.4 3.5 local highlight_initiative = param.get("highlight_initiative", "table") 3.6 3.7 +local for_member = param.get("for_member", "table") or app.session.member 3.8 + 3.9 initiatives_selector 3.10 :join("issue", nil, "issue.id = initiative.issue_id") 3.11 3.12 if app.session.member_id then 3.13 initiatives_selector 3.14 - :left_join("initiator", "_initiator", { "_initiator.initiative_id = initiative.id AND _initiator.member_id = ? AND _initiator.accepted", app.session.member.id} ) 3.15 - :left_join("supporter", "_supporter", { "_supporter.initiative_id = initiative.id AND _supporter.member_id = ?", app.session.member.id} ) 3.16 - 3.17 + :left_join("initiator", "_initiator", { "_initiator.initiative_id = initiative.id AND _initiator.member_id = ? AND _initiator.accepted", for_member.id } ) 3.18 + :left_join("supporter", "_supporter", { "_supporter.initiative_id = initiative.id AND _supporter.member_id = ?", for_member.id} ) 3.19 + :left_join("delegating_interest_snapshot", "_delegating_interest_snapshot", { "_delegating_interest_snapshot.issue_id = initiative.issue_id AND _delegating_interest_snapshot.member_id = ? AND _delegating_interest_snapshot.event = issue.latest_snapshot_event", for_member.id} ) 3.20 + :left_join("direct_supporter_snapshot", "_direct_supporter_snapshot", "_direct_supporter_snapshot.initiative_id = initiative.id AND _direct_supporter_snapshot.member_id = _delegating_interest_snapshot.delegate_member_ids[array_upper(_delegating_interest_snapshot.delegate_member_ids, 1)] AND _direct_supporter_snapshot.event = issue.latest_snapshot_event") 3.21 + 3.22 :add_field("(_initiator.member_id NOTNULL)", "is_initiator") 3.23 - :add_field({"(_supporter.member_id NOTNULL) AND NOT EXISTS(SELECT 1 FROM opinion WHERE opinion.initiative_id = initiative.id AND opinion.member_id = ? AND ((opinion.degree = 2 AND NOT fulfilled) OR (opinion.degree = -2 AND fulfilled)))", app.session.member.id }, "is_supporter") 3.24 - :add_field({"EXISTS(SELECT 1 FROM opinion WHERE opinion.initiative_id = initiative.id AND opinion.member_id = ? AND ((opinion.degree = 2 AND NOT fulfilled) OR (opinion.degree = -2 AND fulfilled)))", app.session.member.id }, "is_potential_supporter") 3.25 + :add_field({"(_supporter.member_id NOTNULL) AND NOT EXISTS(SELECT 1 FROM opinion WHERE opinion.initiative_id = initiative.id AND opinion.member_id = ? AND ((opinion.degree = 2 AND NOT fulfilled) OR (opinion.degree = -2 AND fulfilled)))", for_member.id }, "is_supporter") 3.26 + :add_field({"EXISTS(SELECT 1 FROM opinion WHERE opinion.initiative_id = initiative.id AND opinion.member_id = ? AND ((opinion.degree = 2 AND NOT fulfilled) OR (opinion.degree = -2 AND fulfilled)))", for_member.id }, "is_potential_supporter") 3.27 + 3.28 + :add_field("_direct_supporter_snapshot.member_id NOTNULL", "is_supporter_via_delegation") 3.29 end 3.30 3.31 local initiatives_count = initiatives_selector:count()
4.1 --- a/app/main/initiative/_list_element.lua Fri Feb 17 15:14:50 2012 +0100 4.2 +++ b/app/main/initiative/_list_element.lua Fri Feb 17 15:16:02 2012 +0100 4.3 @@ -90,6 +90,9 @@ 4.4 if initiative.is_potential_supporter then 4.5 link_class = link_class .. " potentially_supported" 4.6 end 4.7 + if initiative.is_supporter_via_delegation then 4.8 + link_class = link_class .. " supported" 4.9 + end 4.10 ui.link{ 4.11 attr = { id = link_name, class = link_class }, 4.12 content = function()
5.1 --- a/app/main/issue/_list.lua Fri Feb 17 15:14:50 2012 +0100 5.2 +++ b/app/main/issue/_list.lua Fri Feb 17 15:16:02 2012 +0100 5.3 @@ -1,9 +1,15 @@ 5.4 local issues_selector = param.get("issues_selector", "table") 5.5 +local for_member = param.get("for_member", "table") or app.session.member 5.6 5.7 if app.session.member_id then 5.8 issues_selector 5.9 - :left_join("interest", "_interest", { "_interest.issue_id = issue.id AND _interest.member_id = ?", app.session.member.id} ) 5.10 + :left_join("interest", "_interest", { "_interest.issue_id = issue.id AND _interest.member_id = ?", for_member.id } ) 5.11 :add_field("(_interest.member_id NOTNULL)", "is_interested") 5.12 + issues_selector 5.13 + :left_join("delegating_interest_snapshot", "_delegating_interest", { "_delegating_interest.issue_id = issue.id AND _delegating_interest.member_id = ? AND _delegating_interest.event = issue.latest_snapshot_event", for_member.id } ) 5.14 + :add_field("_delegating_interest.delegate_member_ids[1]", "is_interested_by_delegation_to_member_id") 5.15 + :add_field("_delegating_interest.delegate_member_ids[array_upper(_delegating_interest.delegate_member_ids, 1)]", "is_interested_via_member_id") 5.16 + :add_field("array_length(_delegating_interest.delegate_member_ids, 1)", "delegation_chain_length") 5.17 end 5.18 5.19 ui.add_partial_param_names{ 5.20 @@ -14,7 +20,7 @@ 5.21 "issue_list" 5.22 } 5.23 5.24 -local filters = execute.load_chunk{module="issue", chunk="_filters.lua"} 5.25 +local filters = execute.load_chunk{module="issue", chunk="_filters.lua", params = { member = for_member }} 5.26 5.27 filters.content = function() 5.28 ui.paginate{ 5.29 @@ -29,13 +35,52 @@ 5.30 for i, issue in ipairs(issues) do 5.31 5.32 local class = "issue" 5.33 - if issue.is_interested then 5.34 + if issue.is_interested or issue.is_interested_by_delegation_to_member_id then 5.35 class = class .. " interested" 5.36 end 5.37 ui.container{ attr = { class = class }, content = function() 5.38 5.39 ui.container{ attr = { class = "issue_info" }, content = function() 5.40 5.41 + if issue.is_interested_by_delegation_to_member_id then 5.42 + ui.tag{ 5.43 + tag = "div", attr = { class = "interest_by_delegation"}, 5.44 + content = function() 5.45 + local member = Member:by_id(issue.is_interested_by_delegation_to_member_id) 5.46 + ui.tag{ content = "->" } 5.47 + execute.view{ 5.48 + module = "member_image", 5.49 + view = "_show", 5.50 + params = { 5.51 + member = member, 5.52 + image_type = "avatar", 5.53 + show_dummy = true, 5.54 + class = "micro_avatar", 5.55 + popup_text = member.name 5.56 + } 5.57 + } 5.58 + if issue.is_interested_by_delegation_to_member_id ~= issue.is_interested_via_member_id then 5.59 + if issue.delegation_chain_length > 2 then 5.60 + ui.tag{ content = "-> ... " } 5.61 + end 5.62 + ui.tag{ content = "->" } 5.63 + local member = Member:by_id(issue.is_interested_via_member_id) 5.64 + execute.view{ 5.65 + module = "member_image", 5.66 + view = "_show", 5.67 + params = { 5.68 + member = member, 5.69 + image_type = "avatar", 5.70 + show_dummy = true, 5.71 + class = "micro_avatar", 5.72 + popup_text = member.name 5.73 + } 5.74 + } 5.75 + end 5.76 + end 5.77 + } 5.78 + end 5.79 + 5.80 ui.tag{ 5.81 tag = "div", 5.82 content = function() 5.83 @@ -95,7 +140,8 @@ 5.84 highlight_string = highlight_string, 5.85 per_page = app.session.member_id and tonumber(app.session.member:get_setting_value("initiatives_preview_limit") or 3) or 3, 5.86 no_sort = true, 5.87 - limit = app.session.member_id and tonumber(app.session.member:get_setting_value("initiatives_preview_limit") or 3) or 3 5.88 + limit = app.session.member_id and tonumber(app.session.member:get_setting_value("initiatives_preview_limit") or 3) or 3, 5.89 + for_member = for_member 5.90 } 5.91 } 5.92 end }
6.1 --- a/app/main/member/show_tab.lua Fri Feb 17 15:14:50 2012 +0100 6.2 +++ b/app/main/member/show_tab.lua Fri Feb 17 15:16:02 2012 +0100 6.3 @@ -169,7 +169,10 @@ 6.4 icon = { static = "icons/16/folder.png" }, 6.5 module = "issue", 6.6 view = "_list", 6.7 - params = { issues_selector = issues_selector }, 6.8 + params = { 6.9 + issues_selector = issues_selector, for_member = member, 6.10 + filter_interest = member.id ~= app.session.member_id and "my" or nil 6.11 + }, 6.12 } 6.13 6.14 local outgoing_delegations_selector = member:get_reference_selector("outgoing_delegations")
7.1 --- a/app/main/suggestion/_list.lua Fri Feb 17 15:14:50 2012 +0100 7.2 +++ b/app/main/suggestion/_list.lua Fri Feb 17 15:16:02 2012 +0100 7.3 @@ -36,7 +36,7 @@ 7.4 { 7.5 { 7.6 name = "plus_unfulfilled", 7.7 - label = _"requested", 7.8 + label = _"most requested", 7.9 selector_modifier = function(selector) selector:add_order_by("plus2_unfulfilled_count + plus1_unfulfilled_count DESC, id") end 7.10 }, 7.11 { 7.12 @@ -116,7 +116,7 @@ 7.13 ui.container{ 7.14 attr = { class = "suggestion_my_opinion" }, 7.15 content = function() 7.16 - local has_voting_right = app.session.member:has_voting_right_for_unit_id(initiative.issue.area.unit_id) 7.17 + local has_voting_right = app.session.member and app.session.member:has_voting_right_for_unit_id(initiative.issue.area.unit_id) 7.18 if app.session.member_id and has_voting_right then 7.19 if initiative.issue.state == "voting" or initiative.issue.state == "closed" then 7.20 if degree == -2 then
8.1 --- a/app/main/vote/list.lua Fri Feb 17 15:14:50 2012 +0100 8.2 +++ b/app/main/vote/list.lua Fri Feb 17 15:16:02 2012 +0100 8.3 @@ -399,7 +399,8 @@ 8.4 end 8.5 ui.container{ 8.6 content = function() 8.7 - slot.put(encode.html(initiative.shortened_name)) 8.8 + ui.tag{ content = "i" .. initiative.id .. ": " } 8.9 + ui.tag{ content = initiative.shortened_name } 8.10 if #initiators > 1 then 8.11 ui.container{ 8.12 attr = { style = "font-size: 80%;" },
9.1 --- a/static/style.css Fri Feb 17 15:14:50 2012 +0100 9.2 +++ b/static/style.css Fri Feb 17 15:16:02 2012 +0100 9.3 @@ -823,6 +823,10 @@ 9.4 font-size: 125%; 9.5 } 9.6 9.7 +.issues .issue .interest_by_delegation { 9.8 + float: right; 9.9 +} 9.10 + 9.11 .issues .issue .initiative_list a { 9.12 font-weight: bold; 9.13 }