Feature #38238 » 38238.patch
| app/models/issue.rb | ||
|---|---|---|
| 109 | 109 | |
| 110 | 110 |
before_validation :default_assign, on: :create |
| 111 | 111 |
before_validation :clear_disabled_fields |
| 112 |
before_create :add_auto_watcher |
|
| 112 | 113 |
before_save :close_duplicates, :update_done_ratio_from_issue_status, |
| 113 | 114 |
:force_updated_on_change, :update_closed_on |
| 114 | 115 |
after_save do |issue| |
| ... | ... | |
| 2020 | 2021 |
end |
| 2021 | 2022 |
end |
| 2022 | 2023 | |
| 2024 |
def add_auto_watcher |
|
| 2025 |
if author && |
|
| 2026 |
author.allowed_to?(:add_issue_watchers, project) && |
|
| 2027 |
author.pref.auto_watch_on?('issue_created') &&
|
|
| 2028 |
!Watcher.any_watched?(Array.wrap(self), author) |
|
| 2029 |
self.set_watcher(author, true) |
|
| 2030 |
end |
|
| 2031 |
end |
|
| 2032 | ||
| 2023 | 2033 |
def send_notification |
| 2024 | 2034 |
if notify? && Setting.notified_events.include?('issue_added')
|
| 2025 | 2035 |
Mailer.deliver_issue_add(self) |
| app/models/user_preference.rb | ||
|---|---|---|
| 44 | 44 | |
| 45 | 45 |
TEXTAREA_FONT_OPTIONS = ['monospace', 'proportional'] |
| 46 | 46 |
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] |
| 47 |
AUTO_WATCH_ON_OPTIONS = ['issue_contributed_to']
|
|
| 47 |
AUTO_WATCH_ON_OPTIONS = %w[issue_created issue_contributed_to]
|
|
| 48 | 48 | |
| 49 | 49 |
def initialize(attributes=nil, *args) |
| 50 | 50 |
super |
| config/locales/en.yml | ||
|---|---|---|
| 962 | 962 |
label_optional_description: Optional description |
| 963 | 963 |
label_add_another_file: Add another file |
| 964 | 964 |
label_auto_watch_on: Auto watch |
| 965 |
label_auto_watch_on_issue_created: Issues I created |
|
| 965 | 966 |
label_auto_watch_on_issue_contributed_to: Issues I contributed to |
| 966 | 967 |
label_preferences: Preferences |
| 967 | 968 |
label_chronological_order: In chronological order |
| db/migrate/20230126213739_add_issue_created_to_auto_watch_on_user_preferences.rb | ||
|---|---|---|
| 1 |
class AddIssueCreatedToAutoWatchOnUserPreferences < ActiveRecord::Migration[6.1] |
|
| 2 |
def up |
|
| 3 |
UserPreference.find_each do |pref| |
|
| 4 |
if pref.auto_watch_on?('issue_contributed_to')
|
|
| 5 |
pref.auto_watch_on << 'issue_created' |
|
| 6 |
pref.save |
|
| 7 |
end |
|
| 8 |
end |
|
| 9 |
end |
|
| 10 |
end |
|
| test/unit/issue_test.rb | ||
|---|---|---|
| 3445 | 3445 |
assert_equal [5], issue2.filter_projects_scope('').ids.sort
|
| 3446 | 3446 |
end |
| 3447 | 3447 | |
| 3448 |
def test_create_should_add_watcher |
|
| 3449 |
user = User.first |
|
| 3450 |
user.pref.auto_watch_on=['issue_created'] |
|
| 3451 |
user.pref.save |
|
| 3452 |
issue = Issue.new(:project_id => 1, :tracker_id => 1, :author_id => user.id, :subject => 'test_create_should_add_watcher') |
|
| 3453 | ||
| 3454 |
assert_difference 'Watcher.count', 1 do |
|
| 3455 |
assert_equal true, issue.save |
|
| 3456 |
end |
|
| 3457 |
end |
|
| 3458 | ||
| 3459 |
def test_create_should_not_add_watcher |
|
| 3460 |
user = User.first |
|
| 3461 |
user.pref.auto_watch_on=[] |
|
| 3462 |
user.pref.save |
|
| 3463 |
issue = Issue.new(:project_id => 1, :tracker_id => 1, :author_id => user.id, :subject => 'test_create_should_not_add_watcher') |
|
| 3464 | ||
| 3465 |
assert_no_difference 'Watcher.count' do |
|
| 3466 |
assert_equal true, issue.save |
|
| 3467 |
end |
|
| 3468 |
end |
|
| 3469 | ||
| 3448 | 3470 |
def test_like_should_escape_query |
| 3449 | 3471 |
issue = Issue.generate!(:subject => "asdf") |
| 3450 | 3472 |
r = Issue.like('as_f')
|
| test/unit/user_preference_test.rb | ||
|---|---|---|
| 59 | 59 | |
| 60 | 60 |
def test_auto_watch_on_should_default_to_setting |
| 61 | 61 |
preference = UserPreference.new |
| 62 |
assert_equal ['issue_contributed_to'], preference.auto_watch_on
|
|
| 62 |
assert_equal %w[issue_created issue_contributed_to], preference.auto_watch_on
|
|
| 63 | 63 |
end |
| 64 | 64 | |
| 65 | 65 |
def test_create |