liquid_feedback_frontend

view app/main/index/_member_home.lua @ 706:7d39b6245e5b

Fixed filtering of areas in my units
author bsw
date Tue Jun 26 22:28:37 2012 +0200 (2012-06-26)
parents 8478b5027817
children 74e9dc5bdce8
line source
1 local member = param.get("member", "table")
2 local for_member = param.get("for_member", atom.boolean)
3 local filter_unit = param.get_all_cgi()["filter_unit"] or "my_areas"
5 if not for_member then
7 ui.container{ attr = { class = "ui_filter" }, content = function()
8 ui.container{ attr = { class = "ui_filter_head" }, content = function()
10 ui.link{
11 attr = { class = filter_unit == "my_areas" and "ui_tabs_link active" or nil },
12 text = _"My areas",
13 module = "index", view = "index", params = { filter_unit = "my_areas" }
14 }
16 slot.put(" ")
18 ui.link{
19 attr = { class = filter_unit == "my_units" and "ui_tabs_link active" or nil },
20 text = _"All areas in my units",
21 module = "index", view = "index", params = { filter_unit = "my_units" }
22 }
24 slot.put(" ")
26 ui.link{
27 attr = { class = filter_unit == "global" and "active" or nil },
28 text = _"All units",
29 module = "index", view = "index", params = { filter_unit = "global" }
30 }
31 end }
32 end }
33 end
35 if not for_member then
36 if filter_unit == "global" then
37 execute.view{ module = "unit", view = "_list" }
38 return
39 end
41 end
43 local units = Unit:new_selector():add_order_by("name"):exec()
45 if member then
46 units:load_delegation_info_once_for_member_id(member.id)
47 end
49 for i, unit in ipairs(units) do
50 if member:has_voting_right_for_unit_id(unit.id) then
52 local areas_selector = Area:new_selector()
53 :reset_fields()
54 :add_field("area.id", nil, { "grouped" })
55 :add_field("area.name", nil, { "grouped" })
56 :add_field("member_weight", nil, { "grouped" })
57 :add_field("direct_member_count", nil, { "grouped" })
58 :add_field("(SELECT COUNT(*) FROM issue WHERE issue.area_id = area.id AND issue.accepted ISNULL AND issue.closed ISNULL)", "issues_new_count")
59 :add_field("(SELECT COUNT(*) FROM issue WHERE issue.area_id = area.id AND issue.accepted NOTNULL AND issue.half_frozen ISNULL AND issue.closed ISNULL)", "issues_discussion_count")
60 :add_field("(SELECT COUNT(*) FROM issue WHERE issue.area_id = area.id AND issue.half_frozen NOTNULL AND issue.fully_frozen ISNULL AND issue.closed ISNULL)", "issues_frozen_count")
61 :add_field("(SELECT COUNT(*) FROM issue WHERE issue.area_id = area.id AND issue.fully_frozen NOTNULL AND issue.closed ISNULL)", "issues_voting_count")
62 :add_field("(SELECT COUNT(*) FROM issue WHERE issue.area_id = area.id AND issue.fully_frozen NOTNULL AND issue.closed NOTNULL)", "issues_finished_count")
63 :add_field("(SELECT COUNT(*) FROM issue WHERE issue.area_id = area.id AND issue.fully_frozen ISNULL AND issue.closed NOTNULL)", "issues_cancelled_count")
64 :add_where{ "area.unit_id = ?", unit.id }
65 :add_where{ "area.active" }
66 :add_order_by("area.name")
68 if filter_unit == "my_areas" then
69 areas_selector:join("membership", nil, { "membership.area_id = area.id AND membership.member_id = ?", member.id })
70 else
71 areas_selector:join("privilege", nil, { "privilege.unit_id = area.unit_id AND privilege.member_id = ? AND privilege.voting_right", member.id })
72 end
74 local area_count = areas_selector:count()
76 local max_area_count = Area:new_selector()
77 :add_where{ "area.unit_id = ?", unit.id }
78 :add_where{ "area.active" }
79 :count()
80 local more_area_count = max_area_count - area_count
81 local delegated_count = Area:new_selector()
82 :add_where{ "area.unit_id = ?", unit.id }
83 :add_where{ "area.active" }
84 :left_join("membership", nil, { "membership.area_id = area.id AND membership.member_id = ?", member.id } )
85 :add_where{ "membership.member_id ISNULL" }
86 :join("delegation", nil, { "delegation.area_id = area.id AND delegation.truster_id = ?", member.id } )
87 :add_where{ "delegation.trustee_id NOTNULL" }
88 :count()
90 local more_area_text
91 if area_count == 0 and more_area_count == 1 then
92 more_area_text = _("You are not participating in the only area of the unit")
93 elseif area_count == 0 and more_area_count > 0 then
94 more_area_text = _("You are not participating in any of the #{count} areas in this unit", { count = more_area_count })
95 elseif area_count > 0 and more_area_count == 1 then
96 more_area_text = _("One more area in this unit")
97 elseif area_count > 0 and more_area_count > 0 then
98 more_area_text = _("#{count} more areas in this unit", { count = more_area_count })
99 end
100 local delegated_text
101 if delegated_count == 1 then
102 delegated_text = _("One of them have an area delegation set", { count = delegated_count })
103 elseif delegated_count > 0 then
104 delegated_text = _("#{count} of them have an area delegation set", { count = delegated_count })
105 end
107 ui.container{ attr = { class = "area_list" }, content = function()
109 execute.view{ module = "unit", view = "_head", params = { unit = unit, show_content = true } }
111 if area_count > 0 then
112 local areas = areas_selector:exec()
113 for i, area in ipairs(areas) do
114 execute.view{
115 module = "area", view = "_list_entry", params = {
116 area = area
117 }
118 }
119 end
120 end
122 if area_count == 0 and member:has_voting_right_for_unit_id(unit.id) or
123 more_area_count > 0 then
125 end
126 end }
127 ui.container{ attr = { class = "area", style="margin-top: 1ex; margin-left: 10px;" }, content = function()
128 ui.container{ attr = { class = "title" }, content = function()
129 if more_area_text then
130 ui.link{ module = "unit", view = "show", id = unit.id, text = more_area_text }
131 end
132 if delegated_text then
133 slot.put(" · ")
134 ui.tag{ content = delegated_text }
135 end
136 end }
137 end }
138 slot.put("<br />")
139 end
140 end

Impressum / About Us