bsw/jbe@0: Area = mondelefant.new_class() bsw/jbe@0: Area.table = 'area' bsw/jbe@0: bsw/jbe@0: Area:add_reference{ bsw/jbe@0: mode = '1m', bsw/jbe@0: to = "Issue", bsw/jbe@0: this_key = 'id', bsw/jbe@0: that_key = 'area_id', bsw/jbe@0: ref = 'issues', bsw/jbe@0: back_ref = 'area' bsw/jbe@0: } bsw/jbe@0: bsw/jbe@0: Area:add_reference{ bsw/jbe@0: mode = '1m', bsw/jbe@0: to = "Membership", bsw/jbe@0: this_key = 'id', bsw/jbe@0: that_key = 'area_id', bsw/jbe@0: ref = 'memberships', bsw/jbe@0: back_ref = 'area' bsw/jbe@0: } bsw/jbe@0: bsw/jbe@0: Area:add_reference{ bsw@2: mode = '1m', bsw@2: to = "Delegation", bsw@2: this_key = 'id', bsw@2: that_key = 'area_id', bsw@2: ref = 'delegations', bsw@2: back_ref = 'area' bsw@2: } bsw@2: bsw@2: Area:add_reference{ bsw@217: mode = 'm1', bsw@217: to = "Unit", bsw@217: this_key = 'unit_id', bsw@217: that_key = 'id', bsw@217: ref = 'unit', bsw@217: } bsw@217: bsw@217: Area:add_reference{ bsw/jbe@0: mode = 'mm', bsw/jbe@0: to = "Member", bsw/jbe@0: this_key = 'id', bsw/jbe@0: that_key = 'id', bsw/jbe@0: connected_by_table = 'membership', bsw/jbe@0: connected_by_this_key = 'area_id', bsw/jbe@0: connected_by_that_key = 'member_id', bsw/jbe@0: ref = 'members' bsw/jbe@0: } bsw@7: bsw@7: Area:add_reference{ bsw@7: mode = 'mm', bsw@7: to = "Policy", bsw@7: this_key = 'id', bsw@7: that_key = 'id', bsw@7: connected_by_table = 'allowed_policy', bsw@7: connected_by_this_key = 'area_id', bsw@7: connected_by_that_key = 'policy_id', bsw@7: ref = 'allowed_policies' bsw@7: } bsw@7: bsw@212: Area:add_reference{ bsw@212: mode = '11', bsw@212: to = "Membership", bsw@212: this_key = 'id', bsw@212: that_key = 'area_id', bsw@212: ref = 'membership_for_member', bsw@212: back_ref = 'area', bsw@212: selector_generator = function(list, options) bsw@212: local member_id = assert(options.member_id) bsw@212: bsw@212: -- build list of issue ids bsw@212: local ids = { sep = ", " } bsw@212: for i, object in ipairs(list) do bsw@212: local id = object.id bsw@212: if id ~= nil then bsw@212: ids[#ids+1] = {"?", id} bsw@212: end bsw@212: end bsw@212: bsw@212: if #ids == 0 then bsw@212: return Membership:new_selector():empty_list_mode() bsw@212: end bsw@212: bsw@212: local selector = Membership:new_selector() bsw@212: selector:add_where{ 'membership.area_id IN ($)', ids } bsw@212: selector:add_where{ 'membership.member_id = ?', member_id } bsw@212: bsw@212: return selector bsw@212: end bsw@212: } bsw@212: bsw@212: bsw@7: function Area.object_get:default_policy() bsw@7: return Policy:new_selector() bsw@7: :join("allowed_policy", nil, "allowed_policy.policy_id = policy.id") bsw@7: :add_where{ "allowed_policy.area_id = ? AND allowed_policy.default_policy", self.id } bsw@10: :optional_object_mode() bsw@7: :exec() bsw@7: end bsw@7: bsw@193: function Area:build_selector(args) bsw@193: local selector = Area:new_selector() bsw@193: if args.active ~= nil then bsw@193: selector:add_where{ "active = ?", args.active } bsw@193: end bsw@217: if args.unit_id then bsw@217: selector:add_where{ "unit_id = ?", args.unit_id } bsw@217: end bsw@211: if args.member_id then bsw@211: selector:join("membership", nil, { "membership.area_id = area.id AND membership.member_id = ?", args.member_id }) bsw@211: end bsw@211: if args.not_member_id then bsw@211: selector:left_join("membership", nil, { "membership.area_id = area.id AND membership.member_id = ?", args.not_member_id }) bsw@211: selector:add_where{ "membership.member_id ISNULL" } bsw@211: end bsw@217: if args.order == "name" then bsw@217: selector:add_order_by("area.name") bsw@217: end bsw@193: return selector bsw@193: end