# HG changeset patch # User bsw # Date 1338317007 -7200 # Node ID 57a261a81c5ac0f6c7234e80ea928572afd4ed4e # Parent 9f8aa189cac484d78a8abe6a293e43327fae60ba Added preloading to issue list diff -r 9f8aa189cac4 -r 57a261a81c5a app/main/delegation/_info.lua --- a/app/main/delegation/_info.lua Sun May 27 23:08:33 2012 +0200 +++ b/app/main/delegation/_info.lua Tue May 29 20:43:27 2012 +0200 @@ -25,8 +25,7 @@ end if issue then - issue:load_delegation_info_once_for_member_id(app.session.member_id) - info = issue.delegation_info + info = issue.member_info delegation_text = _"Delegate issue" end diff -r 9f8aa189cac4 -r 57a261a81c5a app/main/issue/_list.lua --- a/app/main/issue/_list.lua Sun May 27 23:08:33 2012 +0200 +++ b/app/main/issue/_list.lua Tue May 29 20:43:27 2012 +0200 @@ -30,14 +30,16 @@ selector = issues_selector, content = function() local highlight_string = param.get("highlight_string", "string") - local issues = issues or issues_selector:exec() - issues:load('policy') - -- issues:load(initiatives) + local issues = issues_selector:exec() + issues:load_everything_for_member_id(member.id) + ui.container{ attr = { class = "issues" }, content = function() for i, issue in ipairs(issues) do - execute.view{ module = "issue", view = "_show", params = { issue = issue, for_listing = true } } + execute.view{ module = "issue", view = "_show", params = { + issue = issue, for_listing = true + } } end end } diff -r 9f8aa189cac4 -r 57a261a81c5a app/main/issue/_show.lua --- a/app/main/issue/_show.lua Sun May 27 23:08:33 2012 +0200 +++ b/app/main/issue/_show.lua Tue May 29 20:43:27 2012 +0200 @@ -4,7 +4,7 @@ local direct_voter if app.session.member_id then - direct_voter = DirectVoter:by_pk(issue.id, app.session.member.id) + direct_voter = issue.member_info.direct_voted end local voteable = app.session.member_id and issue.state == 'voting' and @@ -12,8 +12,6 @@ local vote_link_text = direct_voter and _"Change vote" or "Vote now" -issue:load_delegation_info_once_for_member_id(app.session.member_id) - local class = "issue" if issue.is_interested then @@ -97,7 +95,7 @@ end if not issue.closed then - if issue.delegation_info.own_delegation_scope ~= "issue" then + if issue.member_info.own_delegation_scope ~= "issue" then ui.link{ text = _"Delegate issue", module = "delegation", view = "show", params = { issue_id = issue.id } } else ui.link{ text = _"Change issue delegation", module = "delegation", view = "show", params = { issue_id = issue.id } } diff -r 9f8aa189cac4 -r 57a261a81c5a model/issue.lua --- a/model/issue.lua Sun May 27 23:08:33 2012 +0200 +++ b/model/issue.lua Tue May 29 20:43:27 2012 +0200 @@ -113,10 +113,10 @@ to = mondelefant.class_prototype, this_key = "id", that_key = "issue_id", - ref = "delegation_info", + ref = "member_info", back_ref = "issue", selector_generator = function(list, options) - assert(options.member_id, "member_id mandatory for delegation_info") + assert(options.member_id, "member_id mandatory for member_info") local ids = { sep = ", " } for i, object in ipairs(list) do local id = object.id @@ -134,34 +134,26 @@ sub_selector:add_where{ 'issue.id IN ($)', ids } local selector = Issue:get_db_conn():new_selector() - selector:add_from(sub_selector, "delegation_info") + selector:add_from("issue") + selector:join(sub_selector, "delegation_info", "delegation_info.issue_id = issue.id") selector:left_join("member", "first_trustee", "first_trustee.id = delegation_info.first_trustee_id") selector:left_join("member", "other_trustee", "other_trustee.id = delegation_info.other_trustee_id") selector:add_field("delegation_info.*") selector:add_field("first_trustee.name", "first_trustee_name") selector:add_field("other_trustee.name", "other_trustee_name") + selector:left_join("direct_voter", nil, { "direct_voter.issue_id = issue.id AND direct_voter.member_id = ?", options.member_id }) + selector:add_field("direct_voter.member_id NOTNULL", "direct_voted") return selector end } -function Issue.list:load_delegation_info_once_for_member_id(member_id, trustee_id) - if self._delegation_info_loaded_for_member_id ~= member_id then - self:load("delegation_info", { member_id = member_id, trustee_id = trustee_id }) - for i, issue in ipairs(self) do - issue._delegation_info_loaded_for_member_id = member_id - end - self._delegation_info_loaded_for_member_id = member_id - end +function Issue.list:load_everything_for_member_id(member_id) + local areas = self:load("area") + areas:load("unit") + self:load("policy") + self:load("member_info", { member_id = member_id }) end -function Issue.object:load_delegation_info_once_for_member_id(member_id, trustee_id) - if self._delegation_info_loaded_for_member_id ~= member_id then - self:load("delegation_info", { member_id = member_id, trustee_id = trustee_id }) - self._delegation_info_loaded_for_member_id = member_id - end -end - - function Issue:get_state_name_for_state(value) local state_name_table = { new = _"New", diff -r 9f8aa189cac4 -r 57a261a81c5a model/member.lua --- a/model/member.lua Sun May 27 23:08:33 2012 +0200 +++ b/model/member.lua Tue May 29 20:43:27 2012 +0200 @@ -481,13 +481,18 @@ end function Member.object:has_voting_right_for_unit_id(unit_id) - return (Privilege:new_selector() - :add_where{ "member_id = ?", self.id } - :add_where{ "unit_id = ?", unit_id } - :add_where("voting_right") - :optional_object_mode() - :for_share() - :exec()) and true or false + if not self.__units_with_voting_right_hash then + local privileges = Privilege:new_selector() + :add_where{ "member_id = ?", self.id } + :add_where("voting_right") + :for_share() + :exec() + self.__units_with_voting_right_hash = {} + for i, privilege in ipairs(privileges) do + self.__units_with_voting_right_hash[privilege.unit_id] = true + end + end + return self.__units_with_voting_right_hash[unit_id] and true or false end function Member.object:get_delegatee_member(unit_id, area_id, issue_id)