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 237 end
238 238  
239 239 def user_transaction
240   - old_community = Institution.find(context.profile.user.institution_id).community
241   -
  240 + user_editor_institution_actions
  241 +
242 242 User.transaction do
243 243 context.profile.user.update_attributes!(context.params[:user])
244 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 245 end
253 246  
254 247 def institution_transaction
... ... @@ -349,4 +342,38 @@ class MpogSoftwarePlugin &lt; Noosfero::Plugin
349 342 context.profile.software_info.controlled_vocabulary.update_attributes!(context.params[:controlled_vocabulary])
350 343 end
351 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 379 end
... ...
views/person_editor_extras.html.erb
... ... @@ -15,15 +15,28 @@
15 15 </div>
16 16  
17 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 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 42 </div>
... ...