From 25a4cd5e57e188c9e7d6e9d0b32679fb8e177bf4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marius=20B=C4=82LTEANU?= Date: Tue, 14 Apr 2026 08:55:33 +0300 Subject: [PATCH 1/2] Refactor GroupsController#remove_user to remove_users and deprecate it. --- app/controllers/groups_controller.rb | 14 +++++--- app/views/groups/_users.html.erb | 2 +- ...remove_user.js.erb => remove_users.js.erb} | 0 config/routes.rb | 1 + test/functional/groups_controller_test.rb | 33 ++++++++++++++++--- test/integration/api_test/api_routing_test.rb | 1 + test/integration/routing/groups_test.rb | 1 + 7 files changed, 43 insertions(+), 9 deletions(-) rename app/views/groups/{remove_user.js.erb => remove_users.js.erb} (100%) diff --git a/app/controllers/groups_controller.rb b/app/controllers/groups_controller.rb index 45631939f..dca2b9c42 100644 --- a/app/controllers/groups_controller.rb +++ b/app/controllers/groups_controller.rb @@ -23,9 +23,9 @@ class GroupsController < ApplicationController before_action :require_admin, :except => [:show] before_action :find_group, :except => [:index, :new, :create] - accept_api_auth :index, :show, :create, :update, :destroy, :add_users, :remove_user + accept_api_auth :index, :show, :create, :update, :destroy, :add_users, :remove_users, :remove_user - require_sudo_mode :add_users, :remove_user, :create, :update, :destroy, :edit_membership, :destroy_membership + require_sudo_mode :add_users, :remove_users, :remove_user, :create, :update, :destroy, :edit_membership, :destroy_membership helper :custom_fields helper :principal_memberships @@ -129,8 +129,9 @@ class GroupsController < ApplicationController end end - def remove_user - @group.users.delete(User.find(params[:user_id])) if request.delete? + def remove_users + @users = User.where(:id => (params[:user_id] || params[:user_ids])).to_a + @group.users.delete(@users) if request.delete? respond_to do |format| format.html {redirect_to edit_group_path(@group, :tab => 'users')} format.js @@ -138,6 +139,11 @@ class GroupsController < ApplicationController end end + def remove_user + Rails.application.deprecators[:redmine].warn "GroupsController#remove_user is deprecated and will be removed in Redmine 8.0. Please use #remove_users instead." + remove_users + end + def autocomplete_for_user respond_to do |format| format.js diff --git a/app/views/groups/_users.html.erb b/app/views/groups/_users.html.erb index e581437e5..ad65e5416 100644 --- a/app/views/groups/_users.html.erb +++ b/app/views/groups/_users.html.erb @@ -11,7 +11,7 @@ <%= link_to_user user %> - <%= remove_link group_user_path(@group, :user_id => user), :remote => true %> + <%= remove_link group_users_path(@group, :user_id => user), :remote => true %> <% end %> diff --git a/app/views/groups/remove_user.js.erb b/app/views/groups/remove_users.js.erb similarity index 100% rename from app/views/groups/remove_user.js.erb rename to app/views/groups/remove_users.js.erb diff --git a/config/routes.rb b/config/routes.rb index 3d039aaaf..9edb2f855 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -346,6 +346,7 @@ Rails.application.routes.draw do get 'groups/:id/users/new', :to => 'groups#new_users', :id => /\d+/, :as => 'new_group_users' post 'groups/:id/users', :to => 'groups#add_users', :id => /\d+/, :as => 'group_users' + delete 'groups/:id/users', :to => 'groups#remove_users', :id => /\d+/ delete 'groups/:id/users/:user_id', :to => 'groups#remove_user', :id => /\d+/, :as => 'group_user' resources :trackers, :except => :show do diff --git a/test/functional/groups_controller_test.rb b/test/functional/groups_controller_test.rb index a8407e8e8..f2664700b 100644 --- a/test/functional/groups_controller_test.rb +++ b/test/functional/groups_controller_test.rb @@ -249,10 +249,10 @@ class GroupsControllerTest < Redmine::ControllerTest assert_match /John Smith/, response.body end - def test_remove_user + def test_remove_users assert_difference 'Group.find(10).users.count', -1 do delete( - :remove_user, + :remove_users, :params => { :id => 10, :user_id => '8' @@ -261,10 +261,24 @@ class GroupsControllerTest < Redmine::ControllerTest end end - def test_xhr_remove_user + def test_remove_users_plural + group = Group.find(10) + group.users << User.find(2) + assert_difference 'group.users.count', -2 do + delete( + :remove_users, + :params => { + :id => 10, + :user_ids => ['2', '8'] + } + ) + end + end + + def test_xhr_remove_users assert_difference 'Group.find(10).users.count', -1 do delete( - :remove_user, + :remove_users, :params => { :id => 10, :user_id => '8' @@ -276,6 +290,17 @@ class GroupsControllerTest < Redmine::ControllerTest end end + def test_remove_user_should_be_deprecated + Rails.application.deprecators[:redmine].expects(:warn).with(regexp_matches(/GroupsController#remove_user is deprecated/)) + delete( + :remove_user, + :params => { + :id => 10, + :user_id => '8' + } + ) + end + def test_autocomplete_for_user get( :autocomplete_for_user, diff --git a/test/integration/api_test/api_routing_test.rb b/test/integration/api_test/api_routing_test.rb index 9ba547275..5544d0396 100644 --- a/test/integration/api_test/api_routing_test.rb +++ b/test/integration/api_test/api_routing_test.rb @@ -51,6 +51,7 @@ class Redmine::ApiTest::ApiRoutingTest < Redmine::ApiTest::Routing def test_group_users should_route 'POST /groups/567/users' => 'groups#add_users', :id => '567' + should_route 'DELETE /groups/567/users' => 'groups#remove_users', :id => '567' should_route 'DELETE /groups/567/users/12' => 'groups#remove_user', :id => '567', :user_id => '12' end diff --git a/test/integration/routing/groups_test.rb b/test/integration/routing/groups_test.rb index 2ee5c27fa..032b269e6 100644 --- a/test/integration/routing/groups_test.rb +++ b/test/integration/routing/groups_test.rb @@ -37,6 +37,7 @@ class RoutingGroupsTest < Redmine::RoutingTest def test_group_users should_route 'GET /groups/567/users/new' => 'groups#new_users', :id => '567' should_route 'POST /groups/567/users' => 'groups#add_users', :id => '567' + should_route 'DELETE /groups/567/users' => 'groups#remove_users', :id => '567' should_route 'DELETE /groups/567/users/12' => 'groups#remove_user', :id => '567', :user_id => '12' end end -- 2.50.1 (Apple Git-155)