rev |
line source |
bsw/jbe@0
|
1 Area = mondelefant.new_class()
|
bsw/jbe@0
|
2 Area.table = 'area'
|
bsw/jbe@0
|
3
|
bsw/jbe@0
|
4 Area:add_reference{
|
bsw/jbe@0
|
5 mode = '1m',
|
bsw/jbe@0
|
6 to = "Issue",
|
bsw/jbe@0
|
7 this_key = 'id',
|
bsw/jbe@0
|
8 that_key = 'area_id',
|
bsw/jbe@0
|
9 ref = 'issues',
|
bsw/jbe@0
|
10 back_ref = 'area'
|
bsw/jbe@0
|
11 }
|
bsw/jbe@0
|
12
|
bsw/jbe@0
|
13 Area:add_reference{
|
bsw/jbe@0
|
14 mode = '1m',
|
bsw/jbe@0
|
15 to = "Membership",
|
bsw/jbe@0
|
16 this_key = 'id',
|
bsw/jbe@0
|
17 that_key = 'area_id',
|
bsw/jbe@0
|
18 ref = 'memberships',
|
bsw/jbe@0
|
19 back_ref = 'area'
|
bsw/jbe@0
|
20 }
|
bsw/jbe@0
|
21
|
bsw/jbe@0
|
22 Area:add_reference{
|
bsw@2
|
23 mode = '1m',
|
bsw@2
|
24 to = "Delegation",
|
bsw@2
|
25 this_key = 'id',
|
bsw@2
|
26 that_key = 'area_id',
|
bsw@2
|
27 ref = 'delegations',
|
bsw@2
|
28 back_ref = 'area'
|
bsw@2
|
29 }
|
bsw@2
|
30
|
bsw@2
|
31 Area:add_reference{
|
bsw/jbe@0
|
32 mode = 'mm',
|
bsw/jbe@0
|
33 to = "Member",
|
bsw/jbe@0
|
34 this_key = 'id',
|
bsw/jbe@0
|
35 that_key = 'id',
|
bsw/jbe@0
|
36 connected_by_table = 'membership',
|
bsw/jbe@0
|
37 connected_by_this_key = 'area_id',
|
bsw/jbe@0
|
38 connected_by_that_key = 'member_id',
|
bsw/jbe@0
|
39 ref = 'members'
|
bsw/jbe@0
|
40 }
|
bsw@7
|
41
|
bsw@7
|
42 Area:add_reference{
|
bsw@7
|
43 mode = 'mm',
|
bsw@7
|
44 to = "Policy",
|
bsw@7
|
45 this_key = 'id',
|
bsw@7
|
46 that_key = 'id',
|
bsw@7
|
47 connected_by_table = 'allowed_policy',
|
bsw@7
|
48 connected_by_this_key = 'area_id',
|
bsw@7
|
49 connected_by_that_key = 'policy_id',
|
bsw@7
|
50 ref = 'allowed_policies'
|
bsw@7
|
51 }
|
bsw@7
|
52
|
bsw@212
|
53 Area:add_reference{
|
bsw@212
|
54 mode = '11',
|
bsw@212
|
55 to = "Membership",
|
bsw@212
|
56 this_key = 'id',
|
bsw@212
|
57 that_key = 'area_id',
|
bsw@212
|
58 ref = 'membership_for_member',
|
bsw@212
|
59 back_ref = 'area',
|
bsw@212
|
60 selector_generator = function(list, options)
|
bsw@212
|
61 local member_id = assert(options.member_id)
|
bsw@212
|
62
|
bsw@212
|
63 -- build list of issue ids
|
bsw@212
|
64 local ids = { sep = ", " }
|
bsw@212
|
65 for i, object in ipairs(list) do
|
bsw@212
|
66 local id = object.id
|
bsw@212
|
67 if id ~= nil then
|
bsw@212
|
68 ids[#ids+1] = {"?", id}
|
bsw@212
|
69 end
|
bsw@212
|
70 end
|
bsw@212
|
71
|
bsw@212
|
72 if #ids == 0 then
|
bsw@212
|
73 return Membership:new_selector():empty_list_mode()
|
bsw@212
|
74 end
|
bsw@212
|
75
|
bsw@212
|
76 local selector = Membership:new_selector()
|
bsw@212
|
77 selector:add_where{ 'membership.area_id IN ($)', ids }
|
bsw@212
|
78 selector:add_where{ 'membership.member_id = ?', member_id }
|
bsw@212
|
79
|
bsw@212
|
80 return selector
|
bsw@212
|
81 end
|
bsw@212
|
82 }
|
bsw@212
|
83
|
bsw@212
|
84
|
bsw@7
|
85 function Area.object_get:default_policy()
|
bsw@7
|
86 return Policy:new_selector()
|
bsw@7
|
87 :join("allowed_policy", nil, "allowed_policy.policy_id = policy.id")
|
bsw@7
|
88 :add_where{ "allowed_policy.area_id = ? AND allowed_policy.default_policy", self.id }
|
bsw@10
|
89 :optional_object_mode()
|
bsw@7
|
90 :exec()
|
bsw@7
|
91 end
|
bsw@7
|
92
|
bsw@193
|
93 function Area:build_selector(args)
|
bsw@193
|
94 local selector = Area:new_selector()
|
bsw@193
|
95 if args.active ~= nil then
|
bsw@193
|
96 selector:add_where{ "active = ?", args.active }
|
bsw@193
|
97 end
|
bsw@211
|
98 if args.member_id then
|
bsw@211
|
99 selector:join("membership", nil, { "membership.area_id = area.id AND membership.member_id = ?", args.member_id })
|
bsw@211
|
100 end
|
bsw@211
|
101 if args.not_member_id then
|
bsw@211
|
102 selector:left_join("membership", nil, { "membership.area_id = area.id AND membership.member_id = ?", args.not_member_id })
|
bsw@211
|
103 selector:add_where{ "membership.member_id ISNULL" }
|
bsw@211
|
104 end
|
bsw@193
|
105 return selector
|
bsw@193
|
106 end
|