# HG changeset patch # User bsw # Date 1334163830 -7200 # Node ID d0e12e1b8761ced3709310886bec1e87d8737fbe # Parent 97311991822a7f0f0ae73052ef34f264fd6edab9 Make member privileges editable in admin section diff -r 97311991822a -r d0e12e1b8761 app/main/admin/_action/member_update.lua --- a/app/main/admin/_action/member_update.lua Tue Mar 27 18:54:42 2012 +0200 +++ b/app/main/admin/_action/member_update.lua Wed Apr 11 19:03:50 2012 +0200 @@ -23,6 +23,26 @@ privilege:save() end +local units = Unit:new_selector() + :add_field("privilege.member_id NOTNULL", "privilege_exists") + :add_field("privilege.voting_right", "voting_right") + :left_join("privilege", nil, { "privilege.member_id = ? AND privilege.unit_id = unit.id", member.id }) + :exec() + +for i, unit in ipairs(units) do + local value = param.get("unit_" .. unit.id, atom.boolean) + if value and not unit.privilege_exists then + privilege = Privilege:new() + privilege.unit_id = unit.id + privilege.member_id = member.id + privilege.voting_right = true + privilege:save() + elseif not value and unit.privilege_exists then + local privilege = Privilege:by_pk(unit.id, member.id) + privilege:destroy() + end +end + if id then slot.put_into("notice", _"Member successfully updated") else diff -r 97311991822a -r d0e12e1b8761 app/main/admin/member_edit.lua --- a/app/main/admin/member_edit.lua Tue Mar 27 18:54:42 2012 +0200 +++ b/app/main/admin/member_edit.lua Wed Apr 11 19:03:50 2012 +0200 @@ -8,6 +8,12 @@ slot.put_into("title", encode.html(_"Register new member")) end +local units = Unit:new_selector() + :add_field("privilege.voting_right", "voting_right") + :left_join("privilege", nil, { "privilege.member_id = ? AND privilege.unit_id = unit.id", member.id }) + :exec() + + ui.form{ attr = { class = "vertical" }, module = "admin", @@ -27,14 +33,15 @@ ui.field.text{ label = _"Notification email", name = "notify_email" } ui.field.boolean{ label = _"Admin?", name = "admin" } - ui.multiselect{ label = _"Voting privileges", - name = "units_with_voting_right[]", - foreign_records = Unit:new_selector():exec(), - foreign_id = "id", - foreign_name = "name", - connecting_records = {}, - foreign_reference = "id", - } + slot.put("
") + + for i, unit in ipairs(units) do + ui.field.boolean{ + name = "unit_" .. unit.id, + label = unit.name, + value = unit.voting_right + } + end slot.put("

") ui.field.boolean{ label = _"Send invite?", name = "invite_member" } diff -r 97311991822a -r d0e12e1b8761 model/privilege.lua --- a/model/privilege.lua Tue Mar 27 18:54:42 2012 +0200 +++ b/model/privilege.lua Wed Apr 11 19:03:50 2012 +0200 @@ -18,3 +18,9 @@ ref = 'unit', } +function Privilege:by_pk(unit_id, member_id) + return self:new_selector() + :add_where{ "unit_id = ? AND member_id = ?", unit_id, member_id } + :optional_object_mode() + :exec() +end \ No newline at end of file