Commit 148b47c547a58f30906ea35e08fae7f6d5e0bede
Committed by
André Guedes
1 parent
77ffeee2
Exists in
master
and in
26 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 | 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 < 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 < 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 < 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 | ... | ... |
... | ... | @@ -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 | 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 %> | ... | ... |
... | ... | @@ -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); | ... | ... |