From 8ac8937d29ed9dd87a58729fb31132250c96f916 Mon Sep 17 00:00:00 2001 From: MAEDA Go Date: Fri, 18 Sep 2026 12:43:28 +0900 Subject: [PATCH] Add controller_issues_bulk_edit_after_save hook MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Patch by Tobias Böhm (user:aibo). --- app/controllers/issues_controller.rb | 1 + test/functional/issues_controller_test.rb | 52 +++++++++++++++++++++++ 2 files changed, 53 insertions(+) diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb index 8734a0035..144542a73 100644 --- a/app/controllers/issues_controller.rb +++ b/app/controllers/issues_controller.rb @@ -415,6 +415,7 @@ class IssuesController < ApplicationController call_hook(:controller_issues_bulk_edit_before_save, {:params => params, :issue => issue}) if issue.save saved_issues << issue + call_hook(:controller_issues_bulk_edit_after_save, { :params => params, :issue => issue, :journal => journal }) else unsaved_issues << orig_issue end diff --git a/test/functional/issues_controller_test.rb b/test/functional/issues_controller_test.rb index 7e67745ce..41368fed4 100644 --- a/test/functional/issues_controller_test.rb +++ b/test/functional/issues_controller_test.rb @@ -7807,6 +7807,58 @@ class IssuesControllerTest < Redmine::ControllerTest assert_equal 1, journal.details.size end + class BulkEditHookListener < Redmine::Hook::ViewListener + cattr_accessor :after_contexts + + def controller_issues_bulk_edit_after_save(context) + (self.class.after_contexts ||= []) << context + end + end + + Redmine::Hook.clear_listeners + + def test_bulk_update_should_call_after_save_hook + Redmine::Hook.clear_listeners + Redmine::Hook.add_listener(BulkEditHookListener) + BulkEditHookListener.after_contexts = [] + @request.session[:user_id] = 2 + post( + :bulk_update, + :params => { + :ids => [1, 2], + :notes => 'Bulk editing', + :issue => { + :priority_id => 7 + } + } + ) + + assert_equal [1, 2], BulkEditHookListener.after_contexts.map {|c| c[:issue].id}.sort + assert_equal ['Bulk editing'], BulkEditHookListener.after_contexts.map {|c| c[:journal].notes}.uniq + ensure + Redmine::Hook.clear_listeners + end + + def test_bulk_update_should_not_call_after_save_hook_when_save_fails + Redmine::Hook.clear_listeners + Redmine::Hook.add_listener(BulkEditHookListener) + BulkEditHookListener.after_contexts = [] + @request.session[:user_id] = 2 + post( + :bulk_update, + :params => { + :ids => [1, 2], + :issue => { + :start_date => 'foo' + } + } + ) + + assert_equal [], BulkEditHookListener.after_contexts + ensure + Redmine::Hook.clear_listeners + end + def test_bulk_update_with_group_assignee group = Group.find(11) project = Project.find(1) -- 2.55.0