Patch by Takenori TAKAKI and Jens Krämer. git-svn-id: http://svn.redmine.org/redmine/trunk@21469 e93f8b46-1217-0410-a6f0-8f06a7374b81tags/5.0.0
@@ -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" |