| 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@262
 | 
     5   mode          = 'm1',
 | 
| 
bsw@262
 | 
     6   to            = "Unit",
 | 
| 
bsw@262
 | 
     7   this_key      = 'unit_id',
 | 
| 
bsw@262
 | 
     8   that_key      = 'id',
 | 
| 
bsw@262
 | 
     9   ref           = 'unit',
 | 
| 
bsw@262
 | 
    10 }
 | 
| 
bsw@262
 | 
    11 
 | 
| 
bsw@262
 | 
    12 Area:add_reference{
 | 
| 
bsw/jbe@0
 | 
    13   mode          = '1m',
 | 
| 
bsw/jbe@0
 | 
    14   to            = "Issue",
 | 
| 
bsw/jbe@0
 | 
    15   this_key      = 'id',
 | 
| 
bsw/jbe@0
 | 
    16   that_key      = 'area_id',
 | 
| 
bsw/jbe@0
 | 
    17   ref           = 'issues',
 | 
| 
bsw/jbe@0
 | 
    18   back_ref      = 'area'
 | 
| 
bsw/jbe@0
 | 
    19 }
 | 
| 
bsw/jbe@0
 | 
    20 
 | 
| 
bsw/jbe@0
 | 
    21 Area:add_reference{
 | 
| 
bsw/jbe@0
 | 
    22   mode          = '1m',
 | 
| 
bsw/jbe@0
 | 
    23   to            = "Membership",
 | 
| 
bsw/jbe@0
 | 
    24   this_key      = 'id',
 | 
| 
bsw/jbe@0
 | 
    25   that_key      = 'area_id',
 | 
| 
bsw/jbe@0
 | 
    26   ref           = 'memberships',
 | 
| 
bsw/jbe@0
 | 
    27   back_ref      = 'area'
 | 
| 
bsw/jbe@0
 | 
    28 }
 | 
| 
bsw/jbe@0
 | 
    29 
 | 
| 
bsw/jbe@0
 | 
    30 Area:add_reference{
 | 
| 
bsw@2
 | 
    31   mode          = '1m',
 | 
| 
bsw@2
 | 
    32   to            = "Delegation",
 | 
| 
bsw@2
 | 
    33   this_key      = 'id',
 | 
| 
bsw@2
 | 
    34   that_key      = 'area_id',
 | 
| 
bsw@2
 | 
    35   ref           = 'delegations',
 | 
| 
bsw@2
 | 
    36   back_ref      = 'area'
 | 
| 
bsw@2
 | 
    37 }
 | 
| 
bsw@2
 | 
    38 
 | 
| 
bsw@2
 | 
    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@525
 | 
    61 Area:add_reference{
 | 
| 
bsw@525
 | 
    62   mode               = "11",
 | 
| 
bsw@525
 | 
    63   to                 = mondelefant.class_prototype,
 | 
| 
bsw@525
 | 
    64   this_key           = "id",
 | 
| 
bsw@525
 | 
    65   that_key           = "area_id",
 | 
| 
bsw@525
 | 
    66   ref                = "delegation_info",
 | 
| 
bsw@525
 | 
    67   back_ref           = "area",
 | 
| 
bsw@525
 | 
    68   selector_generator = function(list, options)
 | 
| 
bsw@525
 | 
    69     assert(options.member_id, "member_id mandatory for delegation_info")
 | 
| 
bsw@525
 | 
    70     local ids = { sep = ", " }
 | 
| 
bsw@525
 | 
    71     for i, object in ipairs(list) do
 | 
| 
bsw@525
 | 
    72       local id = object.id
 | 
| 
bsw@525
 | 
    73       if id ~= nil then
 | 
| 
bsw@525
 | 
    74         ids[#ids+1] = {"?", id}
 | 
| 
bsw@525
 | 
    75       end
 | 
| 
bsw@525
 | 
    76     end
 | 
| 
bsw@525
 | 
    77     local sub_selector = Area:get_db_conn():new_selector()
 | 
| 
bsw@525
 | 
    78     if #ids == 0 then
 | 
| 
bsw@525
 | 
    79       return sub_selector:empty_list_mode()
 | 
| 
bsw@525
 | 
    80     end
 | 
| 
bsw@525
 | 
    81     sub_selector:from("area")
 | 
| 
bsw@525
 | 
    82     sub_selector:add_field("area.id", "area_id")
 | 
| 
bsw@529
 | 
    83     sub_selector:add_field{ '(delegation_info(?, null, area.id, null, ?)).*', options.member_id, options.trustee_id }
 | 
| 
bsw@525
 | 
    84     sub_selector:add_where{ 'area.id IN ($)', ids }
 | 
| 
bsw@525
 | 
    85 
 | 
| 
bsw@525
 | 
    86     local selector = Area:get_db_conn():new_selector()
 | 
| 
bsw@525
 | 
    87     selector:add_from(sub_selector, "delegation_info")
 | 
| 
bsw@525
 | 
    88     selector:left_join("member", "first_trustee", "first_trustee.id = delegation_info.first_trustee_id")
 | 
| 
bsw@525
 | 
    89     selector:left_join("member", "other_trustee", "other_trustee.id = delegation_info.other_trustee_id")
 | 
| 
bsw@525
 | 
    90     selector:add_field("delegation_info.*")
 | 
| 
bsw@525
 | 
    91     selector:add_field("first_trustee.name", "first_trustee_name")
 | 
| 
bsw@525
 | 
    92     selector:add_field("other_trustee.name", "other_trustee_name")
 | 
| 
bsw@525
 | 
    93     return selector
 | 
| 
bsw@525
 | 
    94   end
 | 
| 
bsw@525
 | 
    95 }
 | 
| 
bsw@525
 | 
    96 
 | 
| 
bsw@529
 | 
    97 function Area.list:load_delegation_info_once_for_member_id(member_id, trustee_id)
 | 
| 
bsw@525
 | 
    98   if self._delegation_info_loaded_for_member_id ~= member_id then
 | 
| 
bsw@529
 | 
    99     self:load("delegation_info", { member_id = member_id, trustee_id = trustee_id })
 | 
| 
bsw@525
 | 
   100     for i, area in ipairs(self) do
 | 
| 
bsw@525
 | 
   101       area._delegation_info_loaded_for_member_id = member_id
 | 
| 
bsw@525
 | 
   102     end
 | 
| 
bsw@525
 | 
   103     self._delegation_info_loaded_for_member_id = member_id
 | 
| 
bsw@525
 | 
   104   end
 | 
| 
bsw@525
 | 
   105 end
 | 
| 
bsw@525
 | 
   106 
 | 
| 
bsw@529
 | 
   107 function Area.object:load_delegation_info_once_for_member_id(member_id, trustee_id)
 | 
| 
bsw@525
 | 
   108   if self._delegation_info_loaded_for_member_id ~= member_id then
 | 
| 
bsw@529
 | 
   109     self:load("delegation_info", { member_id = member_id, trustee_id = trustee_id })
 | 
| 
bsw@525
 | 
   110     self._delegation_info_loaded_for_member_id = member_id
 | 
| 
bsw@525
 | 
   111   end
 | 
| 
bsw@525
 | 
   112 end
 | 
| 
bsw@525
 | 
   113 
 | 
| 
bsw@7
 | 
   114 function Area.object_get:default_policy()
 | 
| 
bsw@7
 | 
   115   return Policy:new_selector()
 | 
| 
bsw@7
 | 
   116     :join("allowed_policy", nil, "allowed_policy.policy_id = policy.id")
 | 
| 
bsw@7
 | 
   117     :add_where{ "allowed_policy.area_id = ? AND allowed_policy.default_policy", self.id }
 | 
| 
bsw@10
 | 
   118     :optional_object_mode()
 | 
| 
bsw@7
 | 
   119     :exec()
 | 
| 
bsw@7
 | 
   120 end
 | 
| 
bsw@7
 | 
   121 
 | 
| 
bsw@193
 | 
   122 function Area:build_selector(args)
 | 
| 
bsw@193
 | 
   123   local selector = Area:new_selector()
 | 
| 
bsw@193
 | 
   124   if args.active ~= nil then
 | 
| 
bsw@274
 | 
   125     selector:add_where{ "area.active = ?", args.active }
 | 
| 
bsw@193
 | 
   126   end
 | 
| 
bsw@241
 | 
   127   if args.unit_id ~= nil then
 | 
| 
bsw@274
 | 
   128     selector:add_where{ "area.unit_id = ?", args.unit_id }
 | 
| 
bsw@241
 | 
   129   end
 | 
| 
bsw@193
 | 
   130   return selector
 | 
| 
bsw@193
 | 
   131 end
 | 
| 
bsw@262
 | 
   132 
 | 
| 
bsw@262
 | 
   133 function Area.object_get:name_with_unit_name()
 | 
| 
bsw@264
 | 
   134   if not config.single_unit_id then
 | 
| 
bsw@280
 | 
   135     return self.unit.name .. ", " .. self.name
 | 
| 
bsw@264
 | 
   136   else
 | 
| 
bsw@264
 | 
   137     return self.name
 | 
| 
bsw@262
 | 
   138   end
 | 
| 
bsw@262
 | 
   139 end |