# HG changeset patch # User bsw # Date 1329488162 -3600 # Node ID 6c88b4bfb56c5b913274e2e117697609b49c408d # Parent 38dbcd5106573c6dc274c58f3edd0df29d25889e Apply interest/support filter for member at member page diff -r 38dbcd510657 -r 6c88b4bfb56c app/main/area/_list.lua --- a/app/main/area/_list.lua Fri Feb 17 15:14:50 2012 +0100 +++ b/app/main/area/_list.lua Fri Feb 17 15:16:02 2012 +0100 @@ -214,25 +214,7 @@ params = { filter = "cancelled", issue_list = "newest", tab = "issues" } } end - }, - { - content = function(record) - if record.issues_to_vote_count > 0 then - ui.link{ - attr = { class = "not_voted" }, - text = _"Not yet voted" .. ": " .. tostring(record.issues_to_vote_count), - module = "area", - view = "show", - id = record.id, - params = { - filter = "frozen", - filter_voting = "not_voted", - tab = "issues" - } - } - end - end - }, + } } } --[[ diff -r 38dbcd510657 -r 6c88b4bfb56c app/main/area/show.lua --- a/app/main/area/show.lua Fri Feb 17 15:14:50 2012 +0100 +++ b/app/main/area/show.lua Fri Feb 17 15:16:02 2012 +0100 @@ -14,7 +14,10 @@ slot.select("title", function() - ui.tag{ content = area.name } + ui.link{ + content = area.name, + module = "area", view = "show", id = area.id + } if not config.single_unit_id then slot.put(" · ") diff -r 38dbcd510657 -r 6c88b4bfb56c app/main/initiative/_list.lua --- a/app/main/initiative/_list.lua Fri Feb 17 15:14:50 2012 +0100 +++ b/app/main/initiative/_list.lua Fri Feb 17 15:16:02 2012 +0100 @@ -4,17 +4,23 @@ local highlight_initiative = param.get("highlight_initiative", "table") +local for_member = param.get("for_member", "table") or app.session.member + initiatives_selector :join("issue", nil, "issue.id = initiative.issue_id") if app.session.member_id then initiatives_selector - :left_join("initiator", "_initiator", { "_initiator.initiative_id = initiative.id AND _initiator.member_id = ? AND _initiator.accepted", app.session.member.id} ) - :left_join("supporter", "_supporter", { "_supporter.initiative_id = initiative.id AND _supporter.member_id = ?", app.session.member.id} ) - + :left_join("initiator", "_initiator", { "_initiator.initiative_id = initiative.id AND _initiator.member_id = ? AND _initiator.accepted", for_member.id } ) + :left_join("supporter", "_supporter", { "_supporter.initiative_id = initiative.id AND _supporter.member_id = ?", for_member.id} ) + :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} ) + :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") + :add_field("(_initiator.member_id NOTNULL)", "is_initiator") - :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") - :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") + :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") + :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") + + :add_field("_direct_supporter_snapshot.member_id NOTNULL", "is_supporter_via_delegation") end local initiatives_count = initiatives_selector:count() diff -r 38dbcd510657 -r 6c88b4bfb56c app/main/initiative/_list_element.lua --- a/app/main/initiative/_list_element.lua Fri Feb 17 15:14:50 2012 +0100 +++ b/app/main/initiative/_list_element.lua Fri Feb 17 15:16:02 2012 +0100 @@ -90,6 +90,9 @@ if initiative.is_potential_supporter then link_class = link_class .. " potentially_supported" end + if initiative.is_supporter_via_delegation then + link_class = link_class .. " supported" + end ui.link{ attr = { id = link_name, class = link_class }, content = function() diff -r 38dbcd510657 -r 6c88b4bfb56c app/main/issue/_list.lua --- a/app/main/issue/_list.lua Fri Feb 17 15:14:50 2012 +0100 +++ b/app/main/issue/_list.lua Fri Feb 17 15:16:02 2012 +0100 @@ -1,9 +1,15 @@ local issues_selector = param.get("issues_selector", "table") +local for_member = param.get("for_member", "table") or app.session.member if app.session.member_id then issues_selector - :left_join("interest", "_interest", { "_interest.issue_id = issue.id AND _interest.member_id = ?", app.session.member.id} ) + :left_join("interest", "_interest", { "_interest.issue_id = issue.id AND _interest.member_id = ?", for_member.id } ) :add_field("(_interest.member_id NOTNULL)", "is_interested") + issues_selector + :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 } ) + :add_field("_delegating_interest.delegate_member_ids[1]", "is_interested_by_delegation_to_member_id") + :add_field("_delegating_interest.delegate_member_ids[array_upper(_delegating_interest.delegate_member_ids, 1)]", "is_interested_via_member_id") + :add_field("array_length(_delegating_interest.delegate_member_ids, 1)", "delegation_chain_length") end ui.add_partial_param_names{ @@ -14,7 +20,7 @@ "issue_list" } -local filters = execute.load_chunk{module="issue", chunk="_filters.lua"} +local filters = execute.load_chunk{module="issue", chunk="_filters.lua", params = { member = for_member }} filters.content = function() ui.paginate{ @@ -29,13 +35,52 @@ for i, issue in ipairs(issues) do local class = "issue" - if issue.is_interested then + if issue.is_interested or issue.is_interested_by_delegation_to_member_id then class = class .. " interested" end ui.container{ attr = { class = class }, content = function() ui.container{ attr = { class = "issue_info" }, content = function() + if issue.is_interested_by_delegation_to_member_id then + ui.tag{ + tag = "div", attr = { class = "interest_by_delegation"}, + content = function() + local member = Member:by_id(issue.is_interested_by_delegation_to_member_id) + ui.tag{ content = "->" } + execute.view{ + module = "member_image", + view = "_show", + params = { + member = member, + image_type = "avatar", + show_dummy = true, + class = "micro_avatar", + popup_text = member.name + } + } + if issue.is_interested_by_delegation_to_member_id ~= issue.is_interested_via_member_id then + if issue.delegation_chain_length > 2 then + ui.tag{ content = "-> ... " } + end + ui.tag{ content = "->" } + local member = Member:by_id(issue.is_interested_via_member_id) + execute.view{ + module = "member_image", + view = "_show", + params = { + member = member, + image_type = "avatar", + show_dummy = true, + class = "micro_avatar", + popup_text = member.name + } + } + end + end + } + end + ui.tag{ tag = "div", content = function() @@ -95,7 +140,8 @@ highlight_string = highlight_string, per_page = app.session.member_id and tonumber(app.session.member:get_setting_value("initiatives_preview_limit") or 3) or 3, no_sort = true, - limit = app.session.member_id and tonumber(app.session.member:get_setting_value("initiatives_preview_limit") or 3) or 3 + limit = app.session.member_id and tonumber(app.session.member:get_setting_value("initiatives_preview_limit") or 3) or 3, + for_member = for_member } } end } diff -r 38dbcd510657 -r 6c88b4bfb56c app/main/member/show_tab.lua --- a/app/main/member/show_tab.lua Fri Feb 17 15:14:50 2012 +0100 +++ b/app/main/member/show_tab.lua Fri Feb 17 15:16:02 2012 +0100 @@ -169,7 +169,10 @@ icon = { static = "icons/16/folder.png" }, module = "issue", view = "_list", - params = { issues_selector = issues_selector }, + params = { + issues_selector = issues_selector, for_member = member, + filter_interest = member.id ~= app.session.member_id and "my" or nil + }, } local outgoing_delegations_selector = member:get_reference_selector("outgoing_delegations") diff -r 38dbcd510657 -r 6c88b4bfb56c app/main/suggestion/_list.lua --- a/app/main/suggestion/_list.lua Fri Feb 17 15:14:50 2012 +0100 +++ b/app/main/suggestion/_list.lua Fri Feb 17 15:16:02 2012 +0100 @@ -36,7 +36,7 @@ { { name = "plus_unfulfilled", - label = _"requested", + label = _"most requested", selector_modifier = function(selector) selector:add_order_by("plus2_unfulfilled_count + plus1_unfulfilled_count DESC, id") end }, { @@ -116,7 +116,7 @@ ui.container{ attr = { class = "suggestion_my_opinion" }, content = function() - local has_voting_right = app.session.member:has_voting_right_for_unit_id(initiative.issue.area.unit_id) + local has_voting_right = app.session.member and app.session.member:has_voting_right_for_unit_id(initiative.issue.area.unit_id) if app.session.member_id and has_voting_right then if initiative.issue.state == "voting" or initiative.issue.state == "closed" then if degree == -2 then diff -r 38dbcd510657 -r 6c88b4bfb56c app/main/vote/list.lua --- a/app/main/vote/list.lua Fri Feb 17 15:14:50 2012 +0100 +++ b/app/main/vote/list.lua Fri Feb 17 15:16:02 2012 +0100 @@ -399,7 +399,8 @@ end ui.container{ content = function() - slot.put(encode.html(initiative.shortened_name)) + ui.tag{ content = "i" .. initiative.id .. ": " } + ui.tag{ content = initiative.shortened_name } if #initiators > 1 then ui.container{ attr = { style = "font-size: 80%;" }, diff -r 38dbcd510657 -r 6c88b4bfb56c static/style.css --- a/static/style.css Fri Feb 17 15:14:50 2012 +0100 +++ b/static/style.css Fri Feb 17 15:16:02 2012 +0100 @@ -823,6 +823,10 @@ font-size: 125%; } +.issues .issue .interest_by_delegation { + float: right; +} + .issues .issue .initiative_list a { font-weight: bold; }