Commit 148b47c547a58f30906ea35e08fae7f6d5e0bede
Committed by
André Guedes
1 parent
77ffeee2
Exists in
master
and in
29 other branches
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>
Showing
4 changed files
with
105 additions
and
6 deletions
Show diff stats
app/controllers/my_profile/profile_roles_controller.rb
@@ -3,7 +3,7 @@ class ProfileRolesController < MyProfileController | @@ -3,7 +3,7 @@ class ProfileRolesController < MyProfileController | ||
3 | include RoleHelper | 3 | include RoleHelper |
4 | 4 | ||
5 | def index | 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 | end | 7 | end |
8 | 8 | ||
9 | def new | 9 | def new |
@@ -28,6 +28,13 @@ class ProfileRolesController < MyProfileController | @@ -28,6 +28,13 @@ class ProfileRolesController < MyProfileController | ||
28 | @role = environment.roles.find(params[:id]) | 28 | @role = environment.roles.find(params[:id]) |
29 | end | 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 | def destroy | 38 | def destroy |
32 | @role = environment.roles.find(params[:id]) | 39 | @role = environment.roles.find(params[:id]) |
33 | @members = profile.members_by_role(@role) | 40 | @members = profile.members_by_role(@role) |
@@ -38,11 +45,8 @@ class ProfileRolesController < MyProfileController | @@ -38,11 +45,8 @@ class ProfileRolesController < MyProfileController | ||
38 | def remove | 45 | def remove |
39 | @role = environment.roles.find(params[:id]) | 46 | @role = environment.roles.find(params[:id]) |
40 | @members = profile.members_by_role(@role) | 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 | if @role.destroy | 50 | if @role.destroy |
47 | session[:notice] = _('Role successfuly removed!') | 51 | session[:notice] = _('Role successfuly removed!') |
48 | else | 52 | else |
@@ -61,5 +65,45 @@ class ProfileRolesController < MyProfileController | @@ -61,5 +65,45 @@ class ProfileRolesController < MyProfileController | ||
61 | end | 65 | end |
62 | end | 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 | end | 109 | end |
@@ -0,0 +1,35 @@ | @@ -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 | + | ||
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,6 +13,7 @@ | ||
13 | <td> | 13 | <td> |
14 | <%= button_without_text :edit, _('Edit'), :action => 'edit', :id => role %> | 14 | <%= button_without_text :edit, _('Edit'), :action => 'edit', :id => role %> |
15 | <%= button_without_text :delete, _('Delete'), :action => 'destroy', :id => role %> | 15 | <%= button_without_text :delete, _('Delete'), :action => 'destroy', :id => role %> |
16 | + <%= button_without_text :delete, _('Assign'), :action => 'assign', :id => role %> | ||
16 | </td> | 17 | </td> |
17 | </tr> | 18 | </tr> |
18 | <% end %> | 19 | <% end %> |
@@ -0,0 +1,19 @@ | @@ -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); |