mirror of
https://github.com/redmine/redmine.git
synced 2025-11-10 15:26:03 +01:00
Auto watch issues on issue creation (#38238).
Patch by Felix Schäfer. git-svn-id: https://svn.redmine.org/redmine/trunk@22115 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
@@ -121,7 +121,11 @@ class Issue < ActiveRecord::Base
|
||||
# Should be after_create but would be called before previous after_save callbacks
|
||||
after_save :after_create_from_copy, :create_parent_issue_journal
|
||||
after_destroy :update_parent_attributes, :create_parent_issue_journal
|
||||
# add_auto_watcher needs to run before sending notifications, thus it needs
|
||||
# to be added after send_notification (after_ callbacks are run in inverse order)
|
||||
# https://api.rubyonrails.org/v5.2.3/classes/ActiveSupport/Callbacks/ClassMethods.html#method-i-set_callback
|
||||
after_create_commit :send_notification
|
||||
after_create_commit :add_auto_watcher
|
||||
|
||||
# Returns a SQL conditions string used to find all issues visible by the specified user
|
||||
def self.visible_condition(user, options={})
|
||||
@@ -2020,6 +2024,15 @@ class Issue < ActiveRecord::Base
|
||||
end
|
||||
end
|
||||
|
||||
def add_auto_watcher
|
||||
if author &&
|
||||
author.allowed_to?(:add_issue_watchers, project) &&
|
||||
author.pref.auto_watch_on?('issue_created') &&
|
||||
self.watcher_user_ids.exclude?(author.id)
|
||||
self.set_watcher(author, true)
|
||||
end
|
||||
end
|
||||
|
||||
def send_notification
|
||||
if notify? && Setting.notified_events.include?('issue_added')
|
||||
Mailer.deliver_issue_add(self)
|
||||
|
||||
@@ -44,7 +44,7 @@ class UserPreference < ActiveRecord::Base
|
||||
|
||||
TEXTAREA_FONT_OPTIONS = ['monospace', 'proportional']
|
||||
DEFAULT_TOOLBAR_LANGUAGE_OPTIONS = %w[c cpp csharp css diff go groovy html java javascript objc perl php python r ruby sass scala shell sql swift xml yaml]
|
||||
AUTO_WATCH_ON_OPTIONS = ['issue_contributed_to']
|
||||
AUTO_WATCH_ON_OPTIONS = %w[issue_created issue_contributed_to]
|
||||
|
||||
def initialize(attributes=nil, *args)
|
||||
super
|
||||
|
||||
@@ -961,6 +961,7 @@ en:
|
||||
label_optional_description: Optional description
|
||||
label_add_another_file: Add another file
|
||||
label_auto_watch_on: Auto watch
|
||||
label_auto_watch_on_issue_created: Issues I created
|
||||
label_auto_watch_on_issue_contributed_to: Issues I contributed to
|
||||
label_preferences: Preferences
|
||||
label_chronological_order: In chronological order
|
||||
|
||||
@@ -3445,6 +3445,40 @@ class IssueTest < ActiveSupport::TestCase
|
||||
assert_equal [5], issue2.filter_projects_scope('').ids.sort
|
||||
end
|
||||
|
||||
def test_create_should_add_watcher
|
||||
user = User.first
|
||||
user.pref.auto_watch_on=['issue_created']
|
||||
user.pref.save
|
||||
issue = Issue.new(:project_id => 1, :tracker_id => 1, :author_id => user.id, :subject => 'test_create_should_add_watcher')
|
||||
|
||||
assert_difference 'Watcher.count', 1 do
|
||||
assert_equal true, issue.save
|
||||
end
|
||||
end
|
||||
|
||||
def test_create_should_add_author_watcher_only_once
|
||||
user = User.first
|
||||
user.pref.auto_watch_on=['issue_created']
|
||||
user.pref.save
|
||||
issue = Issue.new(:project_id => 1, :tracker_id => 1, :author_id => user.id, :subject => 'test_create_should_add_watcher')
|
||||
issue.watcher_user_ids = [user.id]
|
||||
|
||||
assert_difference 'Watcher.count', 1 do
|
||||
assert_equal true, issue.save
|
||||
end
|
||||
end
|
||||
|
||||
def test_create_should_not_add_watcher
|
||||
user = User.first
|
||||
user.pref.auto_watch_on=[]
|
||||
user.pref.save
|
||||
issue = Issue.new(:project_id => 1, :tracker_id => 1, :author_id => user.id, :subject => 'test_create_should_not_add_watcher')
|
||||
|
||||
assert_no_difference 'Watcher.count' do
|
||||
assert_equal true, issue.save
|
||||
end
|
||||
end
|
||||
|
||||
def test_like_should_escape_query
|
||||
issue = Issue.generate!(:subject => "asdf")
|
||||
r = Issue.like('as_f')
|
||||
|
||||
@@ -59,7 +59,7 @@ class UserPreferenceTest < ActiveSupport::TestCase
|
||||
|
||||
def test_auto_watch_on_should_default_to_setting
|
||||
preference = UserPreference.new
|
||||
assert_equal ['issue_contributed_to'], preference.auto_watch_on
|
||||
assert_equal %w[issue_created issue_contributed_to], preference.auto_watch_on
|
||||
end
|
||||
|
||||
def test_create
|
||||
|
||||
Reference in New Issue
Block a user