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)