mirror of
https://github.com/meineerde/redmine.git
synced 2026-02-03 23:53:23 +00:00
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
This commit is contained in:
parent
23874fa913
commit
e50190a82a
@ -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}
|
||||
|
||||
|
||||
@ -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? &&
|
||||
(
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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' %>
|
||||
|
||||
@ -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' %>
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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"
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user