# HG changeset patch # User Daniel Poelzleithner # Date 1286200342 -7200 # Node ID 36aedac3e4bfd06dde80a1a1694a37f93f9ea036 # Parent eb6509288d67081be09fe38bb3a6f141ab08f54b Add default policy selector in area admin diff -r eb6509288d67 -r 36aedac3e4bf app/main/admin/_action/area_update.lua --- a/app/main/admin/_action/area_update.lua Mon Oct 04 14:37:13 2010 +0200 +++ b/app/main/admin/_action/area_update.lua Mon Oct 04 15:52:22 2010 +0200 @@ -24,4 +24,28 @@ foreign_reference = "policy_id" } +-- we have to update the default flag because update_relationship can't handle it +old_default = AllowedPolicy:new_selector() +:add_where{ "allowed_policy.area_id = ? AND allowed_policy.default_policy = 't'", area.id } +:optional_object_mode() +:exec() + +if old_default then + old_default.default_policy = false; + old_default:save() +end + +default_policy_id = param.get("default_policy", atom.integer) + +if default_policy_id and default_policy_id ~= -1 then + pol = AllowedPolicy:new_selector() + :add_where{ "allowed_policy.area_id = ? AND allowed_policy.policy_id = ?", area.id, default_policy_id } + :optional_object_mode() + :exec() + if pol then + pol.default_policy = true; + pol:save() + end +end + slot.put_into("notice", _"Area successfully updated") diff -r eb6509288d67 -r 36aedac3e4bf app/main/admin/area_show.lua --- a/app/main/admin/area_show.lua Mon Oct 04 14:37:13 2010 +0200 +++ b/app/main/admin/area_show.lua Mon Oct 04 15:52:22 2010 +0200 @@ -21,11 +21,28 @@ }, id = area and area.id or nil, content = function() + policies = Policy:new_selector():add_where{ "active='t'"}:exec() + local def_policy = { + { + id = "-1", + name = _"No default" + } + } + for i, record in ipairs(policies) do + def_policy[#def_policy+1] = record + end + ui.field.text{ label = _"Name", name = "name" } ui.field.boolean{ label = _"Active?", name = "active" } ui.field.text{ label = _"Description", name = "description", multiline = true } + ui.field.select{ label = _"Default Policy", name = "default_policy", + value=area.default_policy and area.default_policy.id or "-1", + foreign_records = def_policy, + foreign_id = "id", + foreign_name = "name" + } ui.multiselect{ label = _"Policies", name = "allowed_policies[]", - foreign_records = Policy:new_selector():add_where{ "active='t'"}:exec(), + foreign_records = policies, foreign_id = "id", foreign_name = "name", connecting_records = area.allowed_policies, diff -r eb6509288d67 -r 36aedac3e4bf model/allowed_policy.lua --- a/model/allowed_policy.lua Mon Oct 04 14:37:13 2010 +0200 +++ b/model/allowed_policy.lua Mon Oct 04 15:52:22 2010 +0200 @@ -1,2 +1,3 @@ AllowedPolicy = mondelefant.new_class() AllowedPolicy.table = 'allowed_policy' +AllowedPolicy.primary_key = { "area_id", "policy_id" }