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@217
|
32 mode = 'm1',
|
bsw@217
|
33 to = "Unit",
|
bsw@217
|
34 this_key = 'unit_id',
|
bsw@217
|
35 that_key = 'id',
|
bsw@217
|
36 ref = 'unit',
|
bsw@217
|
37 }
|
bsw@217
|
38
|
bsw@217
|
39 Area:add_reference{
|
bsw/jbe@0
|
40 mode = 'mm',
|
bsw/jbe@0
|
41 to = "Member",
|
bsw/jbe@0
|
42 this_key = 'id',
|
bsw/jbe@0
|
43 that_key = 'id',
|
bsw/jbe@0
|
44 connected_by_table = 'membership',
|
bsw/jbe@0
|
45 connected_by_this_key = 'area_id',
|
bsw/jbe@0
|
46 connected_by_that_key = 'member_id',
|
bsw/jbe@0
|
47 ref = 'members'
|
bsw/jbe@0
|
48 }
|
bsw@7
|
49
|
bsw@7
|
50 Area:add_reference{
|
bsw@7
|
51 mode = 'mm',
|
bsw@7
|
52 to = "Policy",
|
bsw@7
|
53 this_key = 'id',
|
bsw@7
|
54 that_key = 'id',
|
bsw@7
|
55 connected_by_table = 'allowed_policy',
|
bsw@7
|
56 connected_by_this_key = 'area_id',
|
bsw@7
|
57 connected_by_that_key = 'policy_id',
|
bsw@7
|
58 ref = 'allowed_policies'
|
bsw@7
|
59 }
|
bsw@7
|
60
|
bsw@212
|
61 Area:add_reference{
|
bsw@212
|
62 mode = '11',
|
bsw@212
|
63 to = "Membership",
|
bsw@212
|
64 this_key = 'id',
|
bsw@212
|
65 that_key = 'area_id',
|
bsw@212
|
66 ref = 'membership_for_member',
|
bsw@212
|
67 back_ref = 'area',
|
bsw@212
|
68 selector_generator = function(list, options)
|
bsw@212
|
69 local member_id = assert(options.member_id)
|
bsw@212
|
70
|
bsw@212
|
71 -- build list of issue ids
|
bsw@212
|
72 local ids = { sep = ", " }
|
bsw@212
|
73 for i, object in ipairs(list) do
|
bsw@212
|
74 local id = object.id
|
bsw@212
|
75 if id ~= nil then
|
bsw@212
|
76 ids[#ids+1] = {"?", id}
|
bsw@212
|
77 end
|
bsw@212
|
78 end
|
bsw@212
|
79
|
bsw@212
|
80 if #ids == 0 then
|
bsw@212
|
81 return Membership:new_selector():empty_list_mode()
|
bsw@212
|
82 end
|
bsw@212
|
83
|
bsw@212
|
84 local selector = Membership:new_selector()
|
bsw@212
|
85 selector:add_where{ 'membership.area_id IN ($)', ids }
|
bsw@212
|
86 selector:add_where{ 'membership.member_id = ?', member_id }
|
bsw@212
|
87
|
bsw@212
|
88 return selector
|
bsw@212
|
89 end
|
bsw@212
|
90 }
|
bsw@212
|
91
|
bsw@212
|
92
|
bsw@7
|
93 function Area.object_get:default_policy()
|
bsw@7
|
94 return Policy:new_selector()
|
bsw@7
|
95 :join("allowed_policy", nil, "allowed_policy.policy_id = policy.id")
|
bsw@7
|
96 :add_where{ "allowed_policy.area_id = ? AND allowed_policy.default_policy", self.id }
|
bsw@10
|
97 :optional_object_mode()
|
bsw@7
|
98 :exec()
|
bsw@7
|
99 end
|
bsw@7
|
100
|
bsw@193
|
101 function Area:build_selector(args)
|
bsw@193
|
102 local selector = Area:new_selector()
|
bsw@193
|
103 if args.active ~= nil then
|
bsw@193
|
104 selector:add_where{ "active = ?", args.active }
|
bsw@193
|
105 end
|
bsw@217
|
106 if args.unit_id then
|
bsw@217
|
107 selector:add_where{ "unit_id = ?", args.unit_id }
|
bsw@217
|
108 end
|
bsw@211
|
109 if args.member_id then
|
bsw@211
|
110 selector:join("membership", nil, { "membership.area_id = area.id AND membership.member_id = ?", args.member_id })
|
bsw@211
|
111 end
|
bsw@211
|
112 if args.not_member_id then
|
bsw@211
|
113 selector:left_join("membership", nil, { "membership.area_id = area.id AND membership.member_id = ?", args.not_member_id })
|
bsw@211
|
114 selector:add_where{ "membership.member_id ISNULL" }
|
bsw@211
|
115 end
|
bsw@217
|
116 if args.order == "name" then
|
bsw@217
|
117 selector:add_order_by("area.name")
|
bsw@217
|
118 end
|
bsw@193
|
119 return selector
|
bsw@193
|
120 end
|