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> |