liquid_feedback_frontend

view model/area.lua @ 1668:6d75df24e66e

Updated German translation
author bsw
date Sun Mar 07 09:52:36 2021 +0100 (2021-03-07)
parents 5ca9de94cb13
children
line source
1 Area = mondelefant.new_class()
2 Area.table = 'area'
4 Area:add_reference{
5 mode = 'm1',
6 to = "Unit",
7 this_key = 'unit_id',
8 that_key = 'id',
9 ref = 'unit',
10 }
12 Area:add_reference{
13 mode = '1m',
14 to = "Issue",
15 this_key = 'id',
16 that_key = 'area_id',
17 ref = 'issues',
18 back_ref = 'area'
19 }
21 Area:add_reference{
22 mode = '1m',
23 to = "Membership",
24 this_key = 'id',
25 that_key = 'area_id',
26 ref = 'memberships',
27 back_ref = 'area'
28 }
30 Area:add_reference{
31 mode = '1m',
32 to = "Delegation",
33 this_key = 'id',
34 that_key = 'area_id',
35 ref = 'delegations',
36 back_ref = 'area'
37 }
39 Area:add_reference{
40 mode = 'mm',
41 to = "Member",
42 this_key = 'id',
43 that_key = 'id',
44 connected_by_table = 'membership',
45 connected_by_this_key = 'area_id',
46 connected_by_that_key = 'member_id',
47 ref = 'members'
48 }
50 Area:add_reference{
51 mode = 'mm',
52 to = "Policy",
53 this_key = 'id',
54 that_key = 'id',
55 connected_by_table = 'allowed_policy',
56 connected_by_this_key = 'area_id',
57 connected_by_that_key = 'policy_id',
58 ref = 'allowed_policies'
59 }
61 Area:add_reference{
62 mode = "11",
63 to = mondelefant.class_prototype,
64 this_key = "id",
65 that_key = "area_id",
66 ref = "delegation_info",
67 back_ref = "area",
68 selector_generator = function(list, options)
69 assert(options.member_id, "member_id mandatory for delegation_info")
70 local ids = { sep = ", " }
71 for i, object in ipairs(list) do
72 local id = object.id
73 if id ~= nil then
74 ids[#ids+1] = {"?", id}
75 end
76 end
77 local sub_selector = Area:get_db_conn():new_selector()
78 if #ids == 0 then
79 return sub_selector:empty_list_mode()
80 end
81 sub_selector:from("area")
82 sub_selector:add_field("area.id", "area_id")
83 sub_selector:add_field{ '(delegation_info(?, null, area.id, null, ?)).*', options.member_id, options.trustee_id }
84 sub_selector:add_where{ 'area.id IN ($)', ids }
86 local selector = Area:get_db_conn():new_selector()
87 selector:add_from(sub_selector, "delegation_info")
88 selector:left_join("member", "first_trustee", "first_trustee.id = delegation_info.first_trustee_id")
89 selector:left_join("member", "other_trustee", "other_trustee.id = delegation_info.other_trustee_id")
90 selector:add_field("delegation_info.*")
91 selector:add_field("first_trustee.name", "first_trustee_name")
92 selector:add_field("other_trustee.name", "other_trustee_name")
93 return selector
94 end
95 }
97 function Area.list:load_delegation_info_once_for_member_id(member_id, trustee_id)
98 if self._delegation_info_loaded_for_member_id ~= member_id then
99 self:load("delegation_info", { member_id = member_id, trustee_id = trustee_id })
100 for i, area in ipairs(self) do
101 area._delegation_info_loaded_for_member_id = member_id
102 end
103 self._delegation_info_loaded_for_member_id = member_id
104 end
105 end
107 function Area.object:load_delegation_info_once_for_member_id(member_id, trustee_id)
108 if self._delegation_info_loaded_for_member_id ~= member_id then
109 self:load("delegation_info", { member_id = member_id, trustee_id = trustee_id })
110 self._delegation_info_loaded_for_member_id = member_id
111 end
112 end
114 function Area.object_get:default_policy()
115 return Policy:new_selector()
116 :join("allowed_policy", nil, "allowed_policy.policy_id = policy.id")
117 :add_where{ "allowed_policy.area_id = ? AND allowed_policy.default_policy", self.id }
118 :optional_object_mode()
119 :exec()
120 end
122 function Area:build_selector(args)
123 local selector = Area:new_selector()
124 if args.active ~= nil then
125 selector:add_where{ "area.active = ?", args.active }
126 end
127 if args.unit_id ~= nil then
128 selector:add_where{ "area.unit_id = ?", args.unit_id }
129 end
130 return selector
131 end
133 function Area.object_get:name_with_unit_name()
134 if not config.single_unit_id then
135 return self.unit.name .. ", " .. self.name
136 else
137 return self.name
138 end
139 end

Impressum / About Us