Commit 1f4925d45a9f6a58806b95213b51b2c62e2e0946

Authored by Fabio Teixeira
Committed by Parley
1 parent c2f10b56
Exists in master and in 79 other branches add_sisp_to_chef, add_super_archives_plugin, api_for_colab, automates_core_packing, backup_not_prod, changes_in_buttons_on_content_panel, colab_automated_login, colab_spb_plugin_recipe, colab_widgets_settings, design_validation, dev_env_minimal, disable_email_dev, fix_breadcrumbs_position, fix_categories_software_link, fix_edit_institution, fix_edit_software_with_another_license, fix_get_license_info, fix_gitlab_assets_permission, fix_list_style_inside_article, fix_list_style_on_folder_elements, fix_members_pagination, fix_merge_request_url, fix_models_translations, fix_no_license, fix_software_api, fix_software_block_migration, fix_software_communities_translations, fix_software_communities_unit_test, fix_style_create_institution_admin_panel, fix_superarchives_imports, fix_sym_links_noosfero, focus_search_field_theme, gov-user-refactoring, gov-user-refactoring-rails4, header_fix, institution_modal_on_rating, kalibro-conf-refactoring, kalibro-processor-package, lxc_settings, margin_fix, mezuro_cookbook, prezento, refactor_download_block, refactor_software_communities, refactor_software_for_sisp, register_page, release-process, release-process-v2, remove-unused-images, remove_broken_theme, remove_secondary_email_from_user, remove_sisp_buttons, removing_super_archives_email, review_message, scope2method, signals_user_noosfero, sisp_catalog_header, sisp_colab_config, sisp_dev, sisp_dev_master, sisp_simple_version, software_as_organization, software_catalog_style_fix, software_communities_html_refactor, software_infos_api, spb_minimal_env, spb_to_rails4, spec_refactor, stable-4.1, stable-4.2, stable-4.x, temp_soft_comm_refactoring, theme_header, theme_javascript_refactory, thread_dropdown, thread_page, update_search_by_categories, update_software_api, update_softwares_boxes

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