liquid_feedback_frontend
view model/area.lua @ 217:73dbc9e2bfd4
Cummulative patch for enhancements at next generation frontend
| author | bsw | 
|---|---|
| date | Sat Mar 12 19:22:50 2011 +0100 (2011-03-12) | 
| parents | 3e4ad069847a | 
| children | 
 line source
     1 Area = mondelefant.new_class()
     2 Area.table = 'area'
     4 Area:add_reference{
     5   mode          = '1m',
     6   to            = "Issue",
     7   this_key      = 'id',
     8   that_key      = 'area_id',
     9   ref           = 'issues',
    10   back_ref      = 'area'
    11 }
    13 Area:add_reference{
    14   mode          = '1m',
    15   to            = "Membership",
    16   this_key      = 'id',
    17   that_key      = 'area_id',
    18   ref           = 'memberships',
    19   back_ref      = 'area'
    20 }
    22 Area:add_reference{
    23   mode          = '1m',
    24   to            = "Delegation",
    25   this_key      = 'id',
    26   that_key      = 'area_id',
    27   ref           = 'delegations',
    28   back_ref      = 'area'
    29 }
    31 Area:add_reference{
    32   mode          = 'm1',
    33   to            = "Unit",
    34   this_key      = 'unit_id',
    35   that_key      = 'id',
    36   ref           = 'unit',
    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            = "Membership",
    64   this_key      = 'id',
    65   that_key      = 'area_id',
    66   ref           = 'membership_for_member',
    67   back_ref      = 'area',
    68   selector_generator = function(list, options)
    69     local member_id = assert(options.member_id)
    71     -- build list of issue ids
    72     local ids = { sep = ", " }
    73     for i, object in ipairs(list) do
    74       local id = object.id
    75       if id ~= nil then
    76         ids[#ids+1] = {"?", id}
    77       end
    78     end
    80     if #ids == 0 then
    81       return Membership:new_selector():empty_list_mode()
    82     end
    84     local selector = Membership:new_selector()
    85     selector:add_where{ 'membership.area_id IN ($)', ids }
    86     selector:add_where{ 'membership.member_id = ?', member_id }
    88     return selector
    89   end
    90 }
    93 function Area.object_get:default_policy()
    94   return Policy:new_selector()
    95     :join("allowed_policy", nil, "allowed_policy.policy_id = policy.id")
    96     :add_where{ "allowed_policy.area_id = ? AND allowed_policy.default_policy", self.id }
    97     :optional_object_mode()
    98     :exec()
    99 end
   101 function Area:build_selector(args)
   102   local selector = Area:new_selector()
   103   if args.active ~= nil then
   104     selector:add_where{ "active = ?", args.active }
   105   end
   106   if args.unit_id then
   107     selector:add_where{ "unit_id = ?", args.unit_id }
   108   end
   109   if args.member_id then
   110     selector:join("membership", nil, { "membership.area_id = area.id AND membership.member_id = ?", args.member_id })
   111   end
   112   if args.not_member_id then
   113     selector:left_join("membership", nil, { "membership.area_id = area.id AND membership.member_id = ?", args.not_member_id })
   114     selector:add_where{ "membership.member_id ISNULL" }
   115   end
   116   if args.order == "name" then
   117     selector:add_order_by("area.name")
   118   end
   119   return selector
   120 end
