diff --git a/lib/mpog_software_plugin.rb b/lib/mpog_software_plugin.rb index 78337c4..5b8c002 100644 --- a/lib/mpog_software_plugin.rb +++ b/lib/mpog_software_plugin.rb @@ -237,18 +237,11 @@ class MpogSoftwarePlugin < Noosfero::Plugin end def user_transaction - old_community = Institution.find(context.profile.user.institution_id).community - + user_editor_institution_actions + User.transaction do context.profile.user.update_attributes!(context.params[:user]) end - - new_community = Institution.find(context.params[:user][:institution_id]).community - if old_community != new_community - person = context.profile.user.person - old_community.remove_member(person) - new_community.add_member(person) - end end def institution_transaction @@ -349,4 +342,38 @@ class MpogSoftwarePlugin < Noosfero::Plugin context.profile.software_info.controlled_vocabulary.update_attributes!(context.params[:controlled_vocabulary]) end end + + private + + # Add and remove the user from it's institutions communities + def user_editor_institution_actions + user = context.profile.user + + old_communities = [] + context.profile.user.institutions.each do |institution| + old_communities << institution.community + end + + new_communities = [] + unless context.params[:user][:institution_ids].nil? + context.params[:user][:institution_ids].delete("") + + context.params[:user][:institution_ids].each do |id| + new_communities << Institution.find(id).community + end + end + + leave_communities = (old_communities - new_communities) + enter_communities = (new_communities - old_communities) + + leave_communities.each do |community| + community.remove_member(user.person) + user.institutions.delete(community.institution) + end + + enter_communities.each do |community| + community.add_member(user.person) + user.institutions << community.institution + end + end end diff --git a/views/person_editor_extras.html.erb b/views/person_editor_extras.html.erb index 0415f36..074c0bb 100644 --- a/views/person_editor_extras.html.erb +++ b/views/person_editor_extras.html.erb @@ -15,15 +15,28 @@