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  }

Impressum / About Us