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