bsw@1045: local member = param.get ( "member", "table" ) or app.session.member bsw@1045: bsw@1045: local unit = param.get ( "unit", "table" ) bsw@1045: bsw@1045: local areas_selector = Area:new_selector() bsw@1045: :reset_fields() bsw@1045: :add_field("area.id", nil, { "grouped" }) bsw@1045: :add_field("area.unit_id", nil, { "grouped" }) bsw@1045: :add_field("area.name", nil, { "grouped" }) bsw@1045: :add_where{ "area.unit_id = ?", unit.id } bsw@1045: :add_where{ "area.active" } bsw@1045: :add_order_by("area.name") bsw@1045: bsw@1045: if member then bsw@1045: areas_selector:left_join ( bsw@1045: "membership", nil, bsw@1045: { "membership.area_id = area.id AND membership.member_id = ?", member.id } bsw@1045: ) bsw@1045: areas_selector:add_field("membership.member_id NOTNULL", "subscribed", { "grouped" }) bsw@1045: end bsw@1045: bsw@1045: bsw@1045: local areas = areas_selector:exec() bsw@1045: if member then bsw@1045: unit:load_delegation_info_once_for_member_id(member.id) bsw@1045: areas:load_delegation_info_once_for_member_id(member.id) bsw@1045: end bsw@1045: bsw@1045: bsw@1045: ui.sidebar ( "tab-whatcanido", function () bsw@1045: bsw@1045: ui.sidebarHead( function () bsw@1045: ui.heading { bsw@1045: level = 2, content = _"Subject areas" bsw@1045: } bsw@1045: end ) bsw@1045: bsw@1045: if #areas > 0 then bsw@1045: bsw@1045: ui.container { class = "areas", content = function () bsw@1045: bsw@1045: for i, area in ipairs ( areas ) do bsw@1045: bsw@1045: ui.container { attr = { class = "sidebarRow" }, content = function () bsw@1045: bsw@1045: if member then bsw@1045: local delegation = Delegation:by_pk(member.id, nil, area.id, nil) bsw@1045: bsw@1045: if delegation then bsw@1045: ui.link { bsw@1045: module = "delegation", view = "show", params = { bsw@1045: area_id = area.id bsw@1045: }, bsw@1045: attr = { class = "delegation_info" }, bsw@1045: content = function () bsw@1045: ui.delegation(delegation.trustee_id, delegation.trustee_id and delegation.trustee.name) bsw@1045: end bsw@1045: } bsw@1045: end bsw@1045: end bsw@1045: bsw@1045: if area.subscribed then bsw@1045: ui.image { attr = { class = "icon24 star" }, static = "icons/48/star.png" } bsw@1045: end bsw@1045: bsw@1045: ui.link { bsw@1045: attr = { class = "area" }, bsw@1045: module = "area", view = "show", id = area.id, bsw@1045: content = area.name bsw@1045: } bsw@1045: bsw@1045: end } -- ui.tag "li" bsw@1045: bsw@1045: end -- for i, area bsw@1045: bsw@1045: end } -- ui.tag "ul" bsw@1045: bsw@1045: end -- if #areas > 0 bsw@1045: bsw@1045: end ) -- ui.sidebar