Commit 1f4925d45a9f6a58806b95213b51b2c62e2e0946

Authored by Fabio Teixeira
Committed by Parley
1 parent c2f10b56

Enable user enter and exit from institutions on user profile editor

(more_inst_for_users)

Signed-off-by: Arthur Del Esposte <arthurmde@gmail.com>
Signed-off-by: Fabio Teixeira <fabio1079@gmail.com>
lib/mpog_software_plugin.rb
@@ -237,18 +237,11 @@ class MpogSoftwarePlugin &lt; Noosfero::Plugin @@ -237,18 +237,11 @@ class MpogSoftwarePlugin &lt; Noosfero::Plugin
237 end 237 end
238 238
239 def user_transaction 239 def user_transaction
240 - old_community = Institution.find(context.profile.user.institution_id).community  
241 - 240 + user_editor_institution_actions
  241 +
242 User.transaction do 242 User.transaction do
243 context.profile.user.update_attributes!(context.params[:user]) 243 context.profile.user.update_attributes!(context.params[:user])
244 end 244 end
245 -  
246 - new_community = Institution.find(context.params[:user][:institution_id]).community  
247 - if old_community != new_community  
248 - person = context.profile.user.person  
249 - old_community.remove_member(person)  
250 - new_community.add_member(person)  
251 - end  
252 end 245 end
253 246
254 def institution_transaction 247 def institution_transaction
@@ -349,4 +342,38 @@ class MpogSoftwarePlugin &lt; Noosfero::Plugin @@ -349,4 +342,38 @@ class MpogSoftwarePlugin &lt; Noosfero::Plugin
349 context.profile.software_info.controlled_vocabulary.update_attributes!(context.params[:controlled_vocabulary]) 342 context.profile.software_info.controlled_vocabulary.update_attributes!(context.params[:controlled_vocabulary])
350 end 343 end
351 end 344 end
  345 +
  346 + private
  347 +
  348 + # Add and remove the user from it's institutions communities
  349 + def user_editor_institution_actions
  350 + user = context.profile.user
  351 +
  352 + old_communities = []
  353 + context.profile.user.institutions.each do |institution|
  354 + old_communities << institution.community
  355 + end
  356 +
  357 + new_communities = []
  358 + unless context.params[:user][:institution_ids].nil?
  359 + context.params[:user][:institution_ids].delete("")
  360 +
  361 + context.params[:user][:institution_ids].each do |id|
  362 + new_communities << Institution.find(id).community
  363 + end
  364 + end
  365 +
  366 + leave_communities = (old_communities - new_communities)
  367 + enter_communities = (new_communities - old_communities)
  368 +
  369 + leave_communities.each do |community|
  370 + community.remove_member(user.person)
  371 + user.institutions.delete(community.institution)
  372 + end
  373 +
  374 + enter_communities.each do |community|
  375 + community.add_member(user.person)
  376 + user.institutions << community.institution
  377 + end
  378 + end
352 end 379 end
views/person_editor_extras.html.erb
@@ -15,15 +15,28 @@ @@ -15,15 +15,28 @@
15 </div> 15 </div>
16 16
17 <div class="formfieldline" id="select_institution"> 17 <div class="formfieldline" id="select_institution">
18 - <%= label_tag "user[institution_id]", _('Institution'), :class=>"formlabel" %> 18 + <%= label_tag "user[institution_ids]", _('Institutions'), :class=>"formlabel" %>
19 19
20 - <div class="formfield type-text">  
21 - <%= select_tag "user[institution_id]", options_for_select(Institution.all.map {|i| [i.name, i.id]}, context.profile.institution_id) %> 20 + <div class="institution_container">
  21 + <%= text_field_tag(:institution, "", :id=>"input_institution") %>
  22 +
  23 + <% context.profile.user.institutions.each do |institution| %>
  24 + <%= hidden_field_tag("user[institution_ids][]", institution.id, :class => 'user_institutions') %>
  25 + <% end %>
22 </div> 26 </div>
23 -<script type="text/javascript">  
24 -jQuery(document).ready(function(){  
25 - var select = jQuery("#select_institution select");  
26 - select.append("<option value='-1'><%=_('Other')%></option>");  
27 -});  
28 -</script> 27 +
  28 + <%= content_tag(:div, _("The searched institution does not exist"), :id=>"institution_empty_ajax_message", :class=>"errorExplanation hide-field") %>
  29 + <%= link_to(_("Add new institution"), "#", :class=>'button with-text icon-add', :id => 'add_new_institution') %>
  30 +
  31 + <%= hidden_field_tag("user[institution_ids][]", "", :class => 'user_institutions') %>
  32 + <%= hidden_field_tag("institution_selected", "") %>
  33 +
  34 + <ul class="institutions_added">
  35 + <% context.profile.user.institutions.each do |institution| %>
  36 + <li data-institution="<%= institution.id %>">
  37 + <%= institution.name %>
  38 + <%= link_to("", "#", :class => "button without-text icon-remove remove-institution") %>
  39 + </li>
  40 + <% end %>
  41 + </ul>
29 </div> 42 </div>