Commit 1f4925d45a9f6a58806b95213b51b2c62e2e0946
Committed by
Parley
1 parent
c2f10b56
Exists in
master
and in
5 other branches
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>
Showing
2 changed files
with
58 additions
and
18 deletions
Show diff stats
lib/mpog_software_plugin.rb
@@ -237,18 +237,11 @@ class MpogSoftwarePlugin < Noosfero::Plugin | @@ -237,18 +237,11 @@ class MpogSoftwarePlugin < 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 < Noosfero::Plugin | @@ -349,4 +342,38 @@ class MpogSoftwarePlugin < 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> |