liquid_feedback_frontend

changeset 547:57a261a81c5a

Added preloading to issue list
author bsw
date Tue May 29 20:43:27 2012 +0200 (2012-05-29)
parents 9f8aa189cac4
children 8af806af86a0
files app/main/delegation/_info.lua app/main/issue/_list.lua app/main/issue/_show.lua model/issue.lua model/member.lua
line diff
     1.1 --- a/app/main/delegation/_info.lua	Sun May 27 23:08:33 2012 +0200
     1.2 +++ b/app/main/delegation/_info.lua	Tue May 29 20:43:27 2012 +0200
     1.3 @@ -25,8 +25,7 @@
     1.4  end
     1.5  
     1.6  if issue then
     1.7 -  issue:load_delegation_info_once_for_member_id(app.session.member_id)
     1.8 -  info = issue.delegation_info
     1.9 +  info = issue.member_info
    1.10    delegation_text = _"Delegate issue"
    1.11  end
    1.12  
     2.1 --- a/app/main/issue/_list.lua	Sun May 27 23:08:33 2012 +0200
     2.2 +++ b/app/main/issue/_list.lua	Tue May 29 20:43:27 2012 +0200
     2.3 @@ -30,14 +30,16 @@
     2.4      selector = issues_selector,
     2.5      content = function()
     2.6        local highlight_string = param.get("highlight_string", "string")
     2.7 -      local issues = issues or issues_selector:exec()
     2.8 -      issues:load('policy')
     2.9 -      -- issues:load(initiatives)
    2.10 +      local issues = issues_selector:exec()
    2.11 +      issues:load_everything_for_member_id(member.id)
    2.12 +
    2.13        ui.container{ attr = { class = "issues" }, content = function()
    2.14  
    2.15          for i, issue in ipairs(issues) do
    2.16  
    2.17 -          execute.view{ module = "issue", view = "_show", params = { issue = issue, for_listing = true } }
    2.18 +          execute.view{ module = "issue", view = "_show", params = {
    2.19 +            issue = issue, for_listing = true
    2.20 +          } }
    2.21            
    2.22          end
    2.23        end }
     3.1 --- a/app/main/issue/_show.lua	Sun May 27 23:08:33 2012 +0200
     3.2 +++ b/app/main/issue/_show.lua	Tue May 29 20:43:27 2012 +0200
     3.3 @@ -4,7 +4,7 @@
     3.4  
     3.5  local direct_voter
     3.6  if app.session.member_id then
     3.7 -  direct_voter = DirectVoter:by_pk(issue.id, app.session.member.id)
     3.8 +  direct_voter = issue.member_info.direct_voted
     3.9  end
    3.10  
    3.11  local voteable = app.session.member_id and issue.state == 'voting' and
    3.12 @@ -12,8 +12,6 @@
    3.13  
    3.14  local vote_link_text = direct_voter and _"Change vote" or "Vote now"
    3.15  
    3.16 -issue:load_delegation_info_once_for_member_id(app.session.member_id)
    3.17 -
    3.18  
    3.19  local class = "issue"
    3.20  if issue.is_interested then
    3.21 @@ -97,7 +95,7 @@
    3.22      end
    3.23  
    3.24      if not issue.closed then
    3.25 -      if issue.delegation_info.own_delegation_scope ~= "issue" then
    3.26 +      if issue.member_info.own_delegation_scope ~= "issue" then
    3.27          ui.link{ text = _"Delegate issue", module = "delegation", view = "show", params = { issue_id = issue.id } }
    3.28        else
    3.29          ui.link{ text = _"Change issue delegation", module = "delegation", view = "show", params = { issue_id = issue.id } }
     4.1 --- a/model/issue.lua	Sun May 27 23:08:33 2012 +0200
     4.2 +++ b/model/issue.lua	Tue May 29 20:43:27 2012 +0200
     4.3 @@ -113,10 +113,10 @@
     4.4    to                 = mondelefant.class_prototype,
     4.5    this_key           = "id",
     4.6    that_key           = "issue_id",
     4.7 -  ref                = "delegation_info",
     4.8 +  ref                = "member_info",
     4.9    back_ref           = "issue",
    4.10    selector_generator = function(list, options)
    4.11 -    assert(options.member_id, "member_id mandatory for delegation_info")
    4.12 +    assert(options.member_id, "member_id mandatory for member_info")
    4.13      local ids = { sep = ", " }
    4.14      for i, object in ipairs(list) do
    4.15        local id = object.id
    4.16 @@ -134,34 +134,26 @@
    4.17      sub_selector:add_where{ 'issue.id IN ($)', ids }
    4.18  
    4.19      local selector = Issue:get_db_conn():new_selector()
    4.20 -    selector:add_from(sub_selector, "delegation_info")
    4.21 +    selector:add_from("issue")
    4.22 +    selector:join(sub_selector, "delegation_info", "delegation_info.issue_id = issue.id")
    4.23      selector:left_join("member", "first_trustee", "first_trustee.id = delegation_info.first_trustee_id")
    4.24      selector:left_join("member", "other_trustee", "other_trustee.id = delegation_info.other_trustee_id")
    4.25      selector:add_field("delegation_info.*")
    4.26      selector:add_field("first_trustee.name", "first_trustee_name")
    4.27      selector:add_field("other_trustee.name", "other_trustee_name")
    4.28 +    selector:left_join("direct_voter", nil, { "direct_voter.issue_id = issue.id AND direct_voter.member_id = ?", options.member_id })
    4.29 +    selector:add_field("direct_voter.member_id NOTNULL", "direct_voted")
    4.30      return selector
    4.31    end
    4.32  }
    4.33  
    4.34 -function Issue.list:load_delegation_info_once_for_member_id(member_id, trustee_id)
    4.35 -  if self._delegation_info_loaded_for_member_id ~= member_id then
    4.36 -    self:load("delegation_info", { member_id = member_id, trustee_id = trustee_id })
    4.37 -    for i, issue in ipairs(self) do
    4.38 -      issue._delegation_info_loaded_for_member_id = member_id
    4.39 -    end
    4.40 -    self._delegation_info_loaded_for_member_id = member_id
    4.41 -  end
    4.42 +function Issue.list:load_everything_for_member_id(member_id)
    4.43 +  local areas = self:load("area")
    4.44 +  areas:load("unit")
    4.45 +  self:load("policy")
    4.46 +  self:load("member_info", { member_id = member_id })
    4.47  end
    4.48  
    4.49 -function Issue.object:load_delegation_info_once_for_member_id(member_id, trustee_id)
    4.50 -  if self._delegation_info_loaded_for_member_id ~= member_id then
    4.51 -    self:load("delegation_info", { member_id = member_id, trustee_id = trustee_id })
    4.52 -    self._delegation_info_loaded_for_member_id = member_id
    4.53 -  end
    4.54 -end
    4.55 -
    4.56 -
    4.57  function Issue:get_state_name_for_state(value)
    4.58    local state_name_table = {
    4.59      new          = _"New",
     5.1 --- a/model/member.lua	Sun May 27 23:08:33 2012 +0200
     5.2 +++ b/model/member.lua	Tue May 29 20:43:27 2012 +0200
     5.3 @@ -481,13 +481,18 @@
     5.4  end
     5.5  
     5.6  function Member.object:has_voting_right_for_unit_id(unit_id)
     5.7 -  return (Privilege:new_selector()
     5.8 -    :add_where{ "member_id = ?", self.id }
     5.9 -    :add_where{ "unit_id = ?", unit_id }
    5.10 -    :add_where("voting_right")
    5.11 -    :optional_object_mode()
    5.12 -    :for_share()
    5.13 -    :exec()) and true or false
    5.14 +  if not self.__units_with_voting_right_hash then
    5.15 +    local privileges = Privilege:new_selector()
    5.16 +      :add_where{ "member_id = ?", self.id }
    5.17 +      :add_where("voting_right")
    5.18 +      :for_share()
    5.19 +      :exec()
    5.20 +    self.__units_with_voting_right_hash = {}
    5.21 +      for i, privilege in ipairs(privileges) do
    5.22 +        self.__units_with_voting_right_hash[privilege.unit_id] = true
    5.23 +      end
    5.24 +  end
    5.25 +  return self.__units_with_voting_right_hash[unit_id] and true or false
    5.26  end
    5.27  
    5.28  function Member.object:get_delegatee_member(unit_id, area_id, issue_id)

Impressum / About Us