summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarius Balteanu <marius.balteanu@zitec.com>2022-03-19 10:14:29 +0000
committerMarius Balteanu <marius.balteanu@zitec.com>2022-03-19 10:14:29 +0000
commite50190a82a5b6a066a3fadfdebf9df6e268719ad (patch)
treec49f3341b96612314a1f0e238102cce24f1aaaa7
parent23874fa913c62f7da23f2d1fab6e5e1a445ae290 (diff)
downloadredmine-e50190a82a5b6a066a3fadfdebf9df6e268719ad.tar.gz
redmine-e50190a82a5b6a066a3fadfdebf9df6e268719ad.zip
Automatically add the user to the watchers list after contributing to an issue (#4347). User can enable/disable this feature from My Account.
Patch by Takenori TAKAKI and Jens Krämer. git-svn-id: http://svn.redmine.org/redmine/trunk@21469 e93f8b46-1217-0410-a6f0-8f06a7374b81
-rw-r--r--app/helpers/users_helper.rb4
-rw-r--r--app/models/journal.rb10
-rw-r--r--app/models/user_preference.rb11
-rw-r--r--app/views/my/account.html.erb5
-rw-r--r--app/views/users/_form.html.erb5
-rw-r--r--config/locales/en.yml2
-rw-r--r--test/unit/journal_test.rb22
-rw-r--r--test/unit/user_preference_test.rb5
8 files changed, 63 insertions, 1 deletions
diff --git a/app/helpers/users_helper.rb b/app/helpers/users_helper.rb
index 9724a3487..0dbb0f1bd 100644
--- a/app/helpers/users_helper.rb
+++ b/app/helpers/users_helper.rb
@@ -66,6 +66,10 @@ module UsersHelper
[l('label_last_tab_visited'), 'last_tab_visited']]
end
+ def auto_watch_on_options
+ UserPreference::AUTO_WATCH_ON_OPTIONS.index_by {|o| l("label_auto_watch_on_#{o}")}
+ end
+
def change_status_link(user)
url = {:controller => 'users', :action => 'update', :id => user, :page => params[:page], :status => params[:status], :tab => nil}
diff --git a/app/models/journal.rb b/app/models/journal.rb
index 3d1feb906..01d5debcd 100644
--- a/app/models/journal.rb
+++ b/app/models/journal.rb
@@ -60,6 +60,7 @@ class Journal < ActiveRecord::Base
)
acts_as_mentionable :attributes => ['notes']
before_create :split_private_notes
+ before_create :add_watcher
after_create_commit :send_notification
scope :visible, (lambda do |*args|
@@ -327,6 +328,15 @@ class Journal < ActiveRecord::Base
true
end
+ def add_watcher
+ if user &&
+ user.allowed_to?(:add_issue_watchers, project) &&
+ user.pref.auto_watch_on?('issue_contributed_to') &&
+ !Watcher.any_watched?(Array.wrap(journalized), user)
+ journalized.set_watcher(user, true)
+ end
+ end
+
def send_notification
if notify? &&
(
diff --git a/app/models/user_preference.rb b/app/models/user_preference.rb
index a0fea2851..758736824 100644
--- a/app/models/user_preference.rb
+++ b/app/models/user_preference.rb
@@ -39,10 +39,12 @@ class UserPreference < ActiveRecord::Base
'history_default_tab',
'default_issue_query',
'default_project_query',
- 'toolbar_language_options')
+ 'toolbar_language_options',
+ 'auto_watch_on')
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']
def initialize(attributes=nil, *args)
super
@@ -56,6 +58,9 @@ class UserPreference < ActiveRecord::Base
unless attributes && attributes.key?(:no_self_notified)
self.no_self_notified = Setting.default_users_no_self_notified
end
+ unless attributes && attributes.key?(:auto_watch_on)
+ self.auto_watch_on = AUTO_WATCH_ON_OPTIONS
+ end
end
self.others ||= {}
end
@@ -124,6 +129,10 @@ class UserPreference < ActiveRecord::Base
def default_project_query; self[:default_project_query] end
def default_project_query=(value); self[:default_project_query]=value; end
+ def auto_watch_on; self[:auto_watch_on] || []; end
+ def auto_watch_on=(values); self[:auto_watch_on]=values; end
+ def auto_watch_on?(action); self.auto_watch_on.include?(action.to_s); end
+
# Returns the names of groups that are displayed on user's page
# Example:
# preferences.my_page_groups
diff --git a/app/views/my/account.html.erb b/app/views/my/account.html.erb
index fc27dc61c..4240832b7 100644
--- a/app/views/my/account.html.erb
+++ b/app/views/my/account.html.erb
@@ -55,6 +55,11 @@
<%= render :partial => 'users/mail_notifications' %>
</fieldset>
+<fieldset class="box">
+ <legend><%=l(:label_auto_watch_on)%></legend>
+ <%= render :partial => 'users/auto_watch_on' %>
+</fieldset>
+
<fieldset class="box tabular">
<legend><%=l(:label_preferences)%></legend>
<%= render :partial => 'users/preferences' %>
diff --git a/app/views/users/_form.html.erb b/app/views/users/_form.html.erb
index 5505766b4..6d6058c49 100644
--- a/app/views/users/_form.html.erb
+++ b/app/views/users/_form.html.erb
@@ -63,6 +63,11 @@
<%= render :partial => 'users/mail_notifications' %>
</fieldset>
+<fieldset class="box">
+ <legend><%=l(:label_auto_watch_on)%></legend>
+ <%= render :partial => 'users/auto_watch_on' %>
+</fieldset>
+
<fieldset class="box tabular">
<legend><%=l(:label_preferences)%></legend>
<%= render :partial => 'users/preferences' %>
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 2378e56d5..62577376f 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -956,6 +956,8 @@ en:
label_downloads_abbr: D/L
label_optional_description: Optional description
label_add_another_file: Add another file
+ label_auto_watch_on: Auto watch
+ label_auto_watch_on_issue_contributed_to: Issues I contributed to
label_preferences: Preferences
label_chronological_order: In chronological order
label_reverse_chronological_order: In reverse chronological order
diff --git a/test/unit/journal_test.rb b/test/unit/journal_test.rb
index f9c269291..cf86a7990 100644
--- a/test/unit/journal_test.rb
+++ b/test/unit/journal_test.rb
@@ -120,6 +120,28 @@ class JournalTest < ActiveSupport::TestCase
end
end
+ def test_create_should_add_wacher
+ user = User.first
+ user.pref.auto_watch_on=['issue_contributed_to']
+ user.save
+ journal = Journal.new(:journalized => Issue.first, :notes => 'notes', :user => user)
+
+ assert_difference 'Watcher.count', 1 do
+ assert_equal true, journal.save
+ end
+ end
+
+ def test_create_should_not_add_watcher
+ user = User.first
+ user.pref.auto_watch_on=[]
+ user.save
+ journal = Journal.new(:journalized => Issue.first, :notes => 'notes', :user => user)
+
+ assert_no_difference 'Watcher.count' do
+ assert_equal true, journal.save
+ end
+ end
+
def test_visible_scope_for_anonymous
# Anonymous user should see issues of public projects only
journals = Journal.visible(User.anonymous).to_a
diff --git a/test/unit/user_preference_test.rb b/test/unit/user_preference_test.rb
index 9ac213b5f..4ca79400e 100644
--- a/test/unit/user_preference_test.rb
+++ b/test/unit/user_preference_test.rb
@@ -57,6 +57,11 @@ class UserPreferenceTest < ActiveSupport::TestCase
end
end
+ def test_auto_watch_on_should_default_to_setting
+ preference = UserPreference.new
+ assert_equal ['issue_contributed_to'], preference.auto_watch_on
+ end
+
def test_create
user = User.new(:firstname => "new", :lastname => "user", :mail => "newuser@somenet.foo")
user.login = "newuser"