Commit 148b47c547a58f30906ea35e08fae7f6d5e0bede

Authored by André Guedes
Committed by André Guedes
1 parent 77ffeee2

Added assign option to roles

  Signed-off-by: Hebert Douglas <hebertdougl@gmail.com>
  Signed-off-by: Filipe Ribeiro <firibeiro77@live.com>
  Signed-off-by: André Bernardes <andrebsguedes@gmail.com>
app/controllers/my_profile/profile_roles_controller.rb
... ... @@ -3,7 +3,7 @@ class ProfileRolesController &lt; MyProfileController
3 3 include RoleHelper
4 4  
5 5 def index
6   - @roles = environment.roles.find(:all, :conditions => {:profile_id => profile.id} )
  6 + @roles = Profile::Roles.organization_custom_roles(environment.id, profile.id)
7 7 end
8 8  
9 9 def new
... ... @@ -28,6 +28,13 @@ class ProfileRolesController &lt; MyProfileController
28 28 @role = environment.roles.find(params[:id])
29 29 end
30 30  
  31 + def assign_role_by_members
  32 + return redirect_to "/" if params[:q].nil? or !request.xhr?
  33 + arg = params[:q].downcase
  34 + result = profile.members.where('LOWER(name) LIKE ?', "%#{arg}%")
  35 + render :text => prepare_to_token_input(result).to_json
  36 + end
  37 +
31 38 def destroy
32 39 @role = environment.roles.find(params[:id])
33 40 @members = profile.members_by_role(@role)
... ... @@ -38,11 +45,8 @@ class ProfileRolesController &lt; MyProfileController
38 45 def remove
39 46 @role = environment.roles.find(params[:id])
40 47 @members = profile.members_by_role(@role)
41   - new_roles = params[:roles] ? environment.roles.find(params[:roles].select{|r|!r.to_i.zero?}) : []
42   - @members.each do |person|
43   - member_roles = person.find_roles(profile).map(&:role) + new_roles
44   - person.define_roles(member_roles, profile)
45   - end
  48 + member_roles = params[:roles] ? environment.roles.find(params[:roles].select{|r|!r.to_i.zero?}) : []
  49 + append_roles(@members, member_roles, profile)
46 50 if @role.destroy
47 51 session[:notice] = _('Role successfuly removed!')
48 52 else
... ... @@ -61,5 +65,45 @@ class ProfileRolesController &lt; MyProfileController
61 65 end
62 66 end
63 67  
  68 + def assign
  69 + @role = environment.roles.find(params[:id])
  70 + @roles_list = Profile::Roles.organization_all_roles(environment.id, profile.id)
  71 + @roles_list.delete(@role)
  72 + end
  73 +
  74 + def define
  75 + @role = environment.roles.find(params[:id])
  76 + selected_role = params[:selected_role] ? environment.roles.find(params[:selected_role].to_i) : nil
  77 + if params[:assign_role_by].eql? "members"
  78 + members_list = params[:person_id].split(',').collect {|id| environment.profiles.find(id.to_i)}
  79 + members_list.collect{|person| person.add_role(@role, profile)}
  80 + elsif params[:assign_role_by].eql? "roles"
  81 + members = profile.members_by_role(selected_role)
  82 + replace_role(members, selected_role, @role, profile)
  83 + else
  84 + session[:notice] = _("Error")
  85 + end
  86 + redirect_to :action => 'index'
  87 + end
  88 +
  89 + protected
  90 +
  91 + def append_roles(members, roles, profile)
  92 + members.each do |person|
  93 + all_roles = person.find_roles(profile).map(&:role) + roles
  94 + person.define_roles(all_roles, profile)
  95 + end
  96 + end
  97 + def replace_roles(members, roles, profile)
  98 + members.each do |person|
  99 + person.define_roles(roles, profile)
  100 + end
  101 + end
  102 + def replace_role(members, role, new_role, profile)
  103 + members.each do |person|
  104 + person.remove_role(role, profile)
  105 + person.add_role(new_role, profile)
  106 + end
  107 + end
64 108  
65 109 end
... ...
app/views/profile_roles/assign.html.erb 0 → 100644
... ... @@ -0,0 +1,35 @@
  1 +<%= javascript_include_tag('assign_role.js') %>
  2 +
  3 +<h2> <%= _("Assign #{@role.name}") %> </h2>
  4 +
  5 +
  6 +<%= labelled_form_for :role, :url => { :action => 'define', :id => @role.id } do |f| %>
  7 +
  8 + <h4>
  9 + <%= _("Assign role by:") %>
  10 + </h3>
  11 + <p>
  12 + <%= labelled_radio_button _("Members"), :assign_role_by, "members", true, :id => "assign_role_by_members", :class => "assign_role_by" %>
  13 + &nbsp;
  14 + <%= labelled_radio_button _("Roles"), :assign_role_by, "roles", false, :id => "assign_role_by_roles", :class => "assign_role_by" %>
  15 + </p>
  16 + <div class="assign_by_members">
  17 + <%=token_input_field_tag(:person_id, 'search-article-privacy-exceptions', {:action => 'assign_role_by_members'},
  18 + {:focus => false, :hint_text => _('Select members to assign the role')}) %>
  19 +
  20 + <% button_bar do %>
  21 + <%= submit_button(:forward, _("Confirm")) %>
  22 + <% end %>
  23 + </div>
  24 + <div class="assign_by_roles" style="display: none;">
  25 + <h6>
  26 + <%= _("Replace role: ") %>
  27 + </h6>
  28 + <% @roles_list.each do |role| %>
  29 + <%= labelled_radio_button role.name , :selected_role, role.id , false, :class => "selected_role" %> <br>
  30 + <% end %>
  31 + <% button_bar do %>
  32 + <%= submit_button('save',_('Confirm'), :cancel => {:action => 'index'} ) %>
  33 + <% end %>
  34 + </div>
  35 +<% end %>
... ...
app/views/profile_roles/index.html.erb
... ... @@ -13,6 +13,7 @@
13 13 <td>
14 14 <%= button_without_text :edit, _('Edit'), :action => 'edit', :id => role %>
15 15 <%= button_without_text :delete, _('Delete'), :action => 'destroy', :id => role %>
  16 + <%= button_without_text :delete, _('Assign'), :action => 'assign', :id => role %>
16 17 </td>
17 18 </tr>
18 19 <% end %>
... ...
public/javascripts/assign_role.js 0 → 100644
... ... @@ -0,0 +1,19 @@
  1 +(function($){
  2 + 'use strict';
  3 +
  4 + function toggle_assignment_method() {
  5 + if (this.value != "roles") {
  6 + $('.assign_by_roles').hide();
  7 + $('.assign_by_members').show();
  8 + } else {
  9 + $('.assign_by_members').hide();
  10 + $('.assign_by_roles').show();
  11 + }
  12 + }
  13 +
  14 + $(document).ready(function() {
  15 + $('.assign_by_roles').hide();
  16 + // Event triggers
  17 + $('.assign_role_by').click(toggle_assignment_method);
  18 + });
  19 +})(jQuery);
... ...