bsw@357: local id = param.get_id()
bsw/jbe@0: 
bsw@357: local member = Member:by_id(id) or Member:new()
bsw/jbe@0: 
bsw@286: param.update(member, "identification", "notify_email", "admin")
bsw/jbe@0: 
bsw@286: if param.get("invite_member", atom.boolean) then
bsw@286:   member:send_invitation()
bsw/jbe@0: end
bsw/jbe@0: 
bsw/jbe@0: local err = member:try_save()
bsw/jbe@0: 
bsw/jbe@0: if err then
bsw/jbe@0:   slot.put_into("error", (_("Error while updating member, database reported:
 (#{errormessage})"):gsub("#{errormessage}", tostring(err.message))))
bsw/jbe@0:   return false
bsw@357: end
bsw@357: 
bsw@357: if not id and config.single_unit_id then
bsw@357:   local privilege = Privilege:new()
bsw@357:   privilege.member_id = member.id
bsw@357:   privilege.unit_id = config.single_unit_id
bsw@357:   privilege.voting_right = true
bsw@359:   privilege:save()
bsw@357: end
bsw@357: 
bsw@512: local units = Unit:new_selector()
bsw@512:   :add_field("privilege.member_id NOTNULL", "privilege_exists")
bsw@512:   :add_field("privilege.voting_right", "voting_right")
bsw@512:   :left_join("privilege", nil, { "privilege.member_id = ? AND privilege.unit_id = unit.id", member.id })
bsw@512:   :exec()
bsw@512: 
bsw@512: for i, unit in ipairs(units) do
bsw@512:   local value = param.get("unit_" .. unit.id, atom.boolean)
bsw@512:   if value and not unit.privilege_exists then
bsw@512:     privilege = Privilege:new()
bsw@512:     privilege.unit_id = unit.id
bsw@512:     privilege.member_id = member.id
bsw@512:     privilege.voting_right = true
bsw@512:     privilege:save()
bsw@512:   elseif not value and unit.privilege_exists then
bsw@512:     local privilege = Privilege:by_pk(unit.id, member.id)
bsw@512:     privilege:destroy()
bsw@512:   end
bsw@512: end
bsw@512: 
bsw@357: if id then
bsw@357:   slot.put_into("notice", _"Member successfully updated")
bsw/jbe@0: else
bsw@357:   slot.put_into("notice", _"Member successfully registered")
bsw@244: end