From 1f4925d45a9f6a58806b95213b51b2c62e2e0946 Mon Sep 17 00:00:00 2001 From: Fabio Teixeira Date: Tue, 19 Aug 2014 16:50:39 -0300 Subject: [PATCH] Enable user enter and exit from institutions on user profile editor --- lib/mpog_software_plugin.rb | 45 ++++++++++++++++++++++++++++++++++++--------- views/person_editor_extras.html.erb | 31 ++++++++++++++++++++++--------- 2 files changed, 58 insertions(+), 18 deletions(-) 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 @@
- <%= label_tag "user[institution_id]", _('Institution'), :class=>"formlabel" %> + <%= label_tag "user[institution_ids]", _('Institutions'), :class=>"formlabel" %> -
- <%= select_tag "user[institution_id]", options_for_select(Institution.all.map {|i| [i.name, i.id]}, context.profile.institution_id) %> +
+ <%= text_field_tag(:institution, "", :id=>"input_institution") %> + + <% context.profile.user.institutions.each do |institution| %> + <%= hidden_field_tag("user[institution_ids][]", institution.id, :class => 'user_institutions') %> + <% end %>
- + + <%= content_tag(:div, _("The searched institution does not exist"), :id=>"institution_empty_ajax_message", :class=>"errorExplanation hide-field") %> + <%= link_to(_("Add new institution"), "#", :class=>'button with-text icon-add', :id => 'add_new_institution') %> + + <%= hidden_field_tag("user[institution_ids][]", "", :class => 'user_institutions') %> + <%= hidden_field_tag("institution_selected", "") %> + +
    + <% context.profile.user.institutions.each do |institution| %> +
  • + <%= institution.name %> + <%= link_to("", "#", :class => "button without-text icon-remove remove-institution") %> +
  • + <% end %> +
-- libgit2 0.21.2