Patch #43640 » v2-01-group-controller-remove_users.patch
| app/controllers/context_menus_controller.rb (working copy) | ||
|---|---|---|
| 134 | 134 |
if @users.size == 1 |
| 135 | 135 |
@user = @users.first |
| 136 | 136 |
end |
| 137 |
@user_ids = @users.map(&:id) |
|
| 138 |
|
|
| 139 |
@groups_for_remove = Group.givable |
|
| 140 |
.joins(:groups_users) |
|
| 141 |
.where(groups_users: { user_id: @user_ids })
|
|
| 142 |
.distinct |
|
| 143 |
.order(:name) |
|
| 144 |
|
|
| 145 |
@groups_for_add = Group.givable |
|
| 146 |
.joins(<<-SQL.squish) |
|
| 147 |
LEFT JOIN groups_users gu |
|
| 148 |
ON gu.group_id = #{Group.table_name}.id
|
|
| 149 |
AND gu.user_id IN (#{@user_ids.map { |i| ActiveRecord::Base.connection.quote(i) }.join(',')})
|
|
| 150 |
SQL |
|
| 151 |
.group("#{Group.table_name}.id")
|
|
| 152 |
.having('COUNT(DISTINCT gu.user_id) < ?', @user_ids.size)
|
|
| 153 |
.order(:name) |
|
| 154 |
|
|
| 155 |
if @users.size <= 10 |
|
| 156 |
names = @users.map { |u| "#{u.firstname} #{u.lastname}".strip }
|
|
| 157 |
@user_names = names.join("\n")
|
|
| 158 |
end |
|
| 159 |
|
|
| 137 | 160 |
render layout: false |
| 138 | 161 |
end |
| 139 | 162 |
end |
| app/controllers/groups_controller.rb (working copy) | ||
|---|---|---|
| 23 | 23 | |
| 24 | 24 |
before_action :require_admin, :except => [:show] |
| 25 | 25 |
before_action :find_group, :except => [:index, :new, :create] |
| 26 |
accept_api_auth :index, :show, :create, :update, :destroy, :add_users, :remove_user |
|
| 26 |
accept_api_auth :index, :show, :create, :update, :destroy, :add_users, :remove_users
|
|
| 27 | 27 | |
| 28 |
require_sudo_mode :add_users, :remove_user, :create, :update, :destroy, :edit_membership, :destroy_membership |
|
| 28 |
require_sudo_mode :add_users, :remove_users, :create, :update, :destroy, :edit_membership, :destroy_membership
|
|
| 29 | 29 | |
| 30 | 30 |
helper :custom_fields |
| 31 | 31 |
helper :principal_memberships |
| ... | ... | |
| 117 | 117 |
@users = User.not_in_group(@group).where(:id => (params[:user_id] || params[:user_ids])).to_a |
| 118 | 118 |
@group.users << @users |
| 119 | 119 |
respond_to do |format| |
| 120 |
format.html {redirect_to edit_group_path(@group, :tab => 'users')}
|
|
| 120 |
format.html do |
|
| 121 |
flash[:notice] = l(:notice_successful_update) unless request.referer.presence == edit_group_path(@group, :tab => 'users') |
|
| 122 |
redirect_back_or_default edit_group_path(@group, tab: 'users'), referer: true |
|
| 123 |
end |
|
| 121 | 124 |
format.js |
| 122 | 125 |
format.api do |
| 123 | 126 |
if @users.any? |
| ... | ... | |
| 129 | 132 |
end |
| 130 | 133 |
end |
| 131 | 134 | |
| 132 |
def remove_user |
|
| 133 |
@group.users.delete(User.find(params[:user_id])) if request.delete? |
|
| 135 |
def remove_users |
|
| 136 |
@users = User.in_group(@group).where(:id => (params[:user_id] || params[:user_ids])).to_a |
|
| 137 |
@group.users.delete(@users) |
|
| 134 | 138 |
respond_to do |format| |
| 135 |
format.html {redirect_to edit_group_path(@group, :tab => 'users')}
|
|
| 139 |
format.html do |
|
| 140 |
flash[:notice] = l(:notice_successful_delete) unless request.referer.presence == edit_group_path(@group, :tab => 'users') |
|
| 141 |
redirect_back_or_default edit_group_path(@group, tab: 'users'), referer: true |
|
| 142 |
end |
|
| 136 | 143 |
format.js |
| 137 | 144 |
format.api {render_api_ok}
|
| 138 | 145 |
end |
| app/views/context_menus/users.html.erb (working copy) | ||
|---|---|---|
| 23 | 23 |
<% else %> |
| 24 | 24 |
<% unless @users.all?(&:locked?) %> |
| 25 | 25 |
<li> |
| 26 |
<%= context_menu_link sprite_icon('lock', l(:button_lock)), bulk_lock_users_path(ids: @users.map(&:id)), method: :post, class: 'icon icon-lock' %>
|
|
| 26 |
<%= context_menu_link sprite_icon('lock', l(:button_lock)), bulk_lock_users_path(ids: @user_ids), method: :post, class: 'icon icon-lock' %>
|
|
| 27 | 27 |
</li> |
| 28 | 28 |
<% else %> |
| 29 | 29 |
<li> |
| 30 |
<%= context_menu_link sprite_icon('unlock', l(:button_unlock)), bulk_unlock_users_path(ids: @users.map(&:id)), method: :post, class: 'icon icon-unlock' %>
|
|
| 30 |
<%= context_menu_link sprite_icon('unlock', l(:button_unlock)), bulk_unlock_users_path(ids: @user_ids), method: :post, class: 'icon icon-unlock' %>
|
|
| 31 | 31 |
</li> |
| 32 | 32 |
<% end %> |
| 33 | 33 |
<li> |
| 34 | 34 |
<%= context_menu_link sprite_icon('del', l(:button_delete)),
|
| 35 |
{controller: 'users', action: 'bulk_destroy', ids: @users.map(&:id)},
|
|
| 35 |
{controller: 'users', action: 'bulk_destroy', ids: @user_ids},
|
|
| 36 | 36 |
method: :delete, class: 'icon icon-del' %> |
| 37 | 37 |
</li> |
| 38 | 38 |
<% end %> |
| 39 |
<% if @groups_for_add.any? %> |
|
| 40 |
<li class="folder"> |
|
| 41 |
<a href="#" class="submenu"><%= l(:label_add_user_to_group) %></a> |
|
| 42 |
<span class="icon-only"><%= sprite_icon('angle-right', rtl: true) %></span>
|
|
| 43 |
<ul> |
|
| 44 |
<% @groups_for_add.each do |group| %> |
|
| 45 |
<li> |
|
| 46 |
<%= context_menu_link group.name, |
|
| 47 |
group_users_path(user_ids: @user_ids, id: group.id), |
|
| 48 |
:method => :post, |
|
| 49 |
:disabled => false %> |
|
| 50 |
</li> |
|
| 51 |
<% end %> |
|
| 52 |
</ul> |
|
| 53 |
</li> |
|
| 54 |
<% end %> |
|
| 55 |
<% if @groups_for_remove.any? %> |
|
| 56 |
<li class="folder"> |
|
| 57 |
<a href="#" class="submenu"><%= l(:label_remove_user_from_group) %></a> |
|
| 58 |
<span class="icon-only"><%= sprite_icon('angle-right', rtl: true) %></span>
|
|
| 59 |
<ul> |
|
| 60 |
<% @groups_for_remove.each do |group| %> |
|
| 61 |
<li> |
|
| 62 |
<%= context_menu_link group.name, |
|
| 63 |
group_remove_users_path(user_ids: @user_ids, id: group.id), |
|
| 64 |
method: :delete, |
|
| 65 |
data: { confirm: l(:text_remove_user_from_group_confirmation, count: @user_ids.size, groupname: group.name, users: @user_names) } %>
|
|
| 66 |
</li> |
|
| 67 |
<% end %> |
|
| 68 |
</ul> |
|
| 69 |
</li> |
|
| 70 |
<% end %> |
|
| 71 |
|
|
| 39 | 72 |
</ul> |
| app/views/groups/remove_user.js.erb (nonexistent) | ||
|---|---|---|
| 1 |
$('#tab-content-users').html('<%= escape_javascript(render :partial => 'groups/users') %>');
|
|
| 2 | 0 | |
| config/routes.rb (working copy) | ||
|---|---|---|
| 344 | 344 | |
| 345 | 345 |
get 'groups/:id/users/new', :to => 'groups#new_users', :id => /\d+/, :as => 'new_group_users' |
| 346 | 346 |
post 'groups/:id/users', :to => 'groups#add_users', :id => /\d+/, :as => 'group_users' |
| 347 |
delete 'groups/:id/users/:user_id', :to => 'groups#remove_user', :id => /\d+/, :as => 'group_user' |
|
| 347 |
delete 'groups/:id/users/:user_id', :to => 'groups#remove_users', :id => /\d+/, :as => 'group_user' |
|
| 348 |
delete 'groups/:id/users', :to => 'groups#remove_users', :id => /\d+/, :as => 'group_remove_users' |
|
| 348 | 349 | |
| 349 | 350 |
resources :trackers, :except => :show do |
| 350 | 351 |
collection do |