# 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