Feature #4347 » enable-to-setting-auto-watch-by-account.patch
app/helpers/users_helper.rb | ||
---|---|---|
33 | 33 |
[[l(:label_font_default), '']] + UserPreference::TEXTAREA_FONT_OPTIONS.map {|o| [l("label_font_#{o}"), o]} |
34 | 34 |
end |
35 | 35 | |
36 |
def auto_watch_on_options |
|
37 |
UserPreference::AUTO_WATCH_ON_OPTIONS.map {|o| [l("label_auto_watch_on_#{o}"), o]}.to_h |
|
38 |
end |
|
39 | ||
36 | 40 |
def change_status_link(user) |
37 | 41 |
url = {:controller => 'users', :action => 'update', :id => user, :page => params[:page], :status => params[:status], :tab => nil} |
38 | 42 |
app/models/journal.rb | ||
---|---|---|
42 | 42 |
" (#{JournalDetail.table_name}.prop_key = 'status_id' OR #{Journal.table_name}.notes <> '')").distinct |
43 | 43 | |
44 | 44 |
before_create :split_private_notes |
45 |
before_create :add_watcher |
|
45 | 46 |
after_create_commit :send_notification |
46 | 47 | |
47 | 48 |
scope :visible, lambda {|*args| |
... | ... | |
301 | 302 |
true |
302 | 303 |
end |
303 | 304 | |
305 |
def add_watcher |
|
306 |
if user.allowed_to?(:add_issue_watchers, project) && |
|
307 |
user.pref.auto_watch_on?('add_note') && |
|
308 |
Watcher.any_watched?(Array.wrap(journalized), user) == false |
|
309 |
journalized.set_watcher(user, true) |
|
310 |
end |
|
311 |
end |
|
312 | ||
304 | 313 |
def send_notification |
305 | 314 |
if notify? && (Setting.notified_events.include?('issue_updated') || |
306 | 315 |
(Setting.notified_events.include?('issue_note_added') && notes.present?) || |
app/models/user_preference.rb | ||
---|---|---|
30 | 30 |
'comments_sorting', |
31 | 31 |
'warn_on_leaving_unsaved', |
32 | 32 |
'no_self_notified', |
33 |
'textarea_font' |
|
33 |
'textarea_font', |
|
34 |
'auto_watch_on' |
|
34 | 35 | |
35 | 36 |
TEXTAREA_FONT_OPTIONS = ['monospace', 'proportional'] |
37 |
AUTO_WATCH_ON_OPTIONS = ['add_note'] |
|
36 | 38 | |
37 | 39 |
def initialize(attributes=nil, *args) |
38 | 40 |
super |
... | ... | |
46 | 48 |
unless attributes && attributes.key?(:no_self_notified) |
47 | 49 |
self.no_self_notified = true |
48 | 50 |
end |
51 |
unless attributes && attributes.key?(:auto_watch_on) |
|
52 |
self.auto_watch_on = AUTO_WATCH_ON_OPTIONS |
|
53 |
end |
|
49 | 54 |
end |
50 | 55 |
self.others ||= {} |
51 | 56 |
end |
... | ... | |
88 | 93 |
def textarea_font; self[:textarea_font] end |
89 | 94 |
def textarea_font=(value); self[:textarea_font]=value; end |
90 | 95 | |
96 |
def auto_watch_on; self[:auto_watch_on] || []; end |
|
97 |
def auto_watch_on=(values); self[:auto_watch_on]=values; end |
|
98 |
def auto_watch_on?(action); self.auto_watch_on.include?(action.to_s); end |
|
99 | ||
91 | 100 |
# Returns the names of groups that are displayed on user's page |
92 | 101 |
# Example: |
93 | 102 |
# preferences.my_page_groups |
app/views/my/account.html.erb | ||
---|---|---|
44 | 44 |
<%= render :partial => 'users/mail_notifications' %> |
45 | 45 |
</fieldset> |
46 | 46 | |
47 |
<fieldset class="box tabular"> |
|
48 |
<legend><%=l(:label_auto_watch_on)%></legend> |
|
49 |
<%= render :partial => 'users/auto_watch_on' %> |
|
50 |
</fieldset> |
|
51 | ||
47 | 52 |
<fieldset class="box tabular"> |
48 | 53 |
<legend><%=l(:label_preferences)%></legend> |
49 | 54 |
<%= render :partial => 'users/preferences' %> |
app/views/users/_auto_watch_on.html.erb | ||
---|---|---|
1 |
<%= labelled_fields_for :pref, @user.pref do |pref_fields| %> |
|
2 |
<%= pref_fields.collection_check_boxes :auto_watch_on, auto_watch_on_options, :last, :first, :checked => @user.pref.auto_watch_on do |b| %> |
|
3 |
<p><%= b.label %><%= b.check_box %></p> |
|
4 |
<% end %> |
|
5 |
<% end %> |
app/views/users/_form.html.erb | ||
---|---|---|
46 | 46 |
<%= render :partial => 'users/mail_notifications' %> |
47 | 47 |
</fieldset> |
48 | 48 | |
49 |
<fieldset class="box tabular"> |
|
50 |
<legend><%=l(:label_auto_watch_on)%></legend> |
|
51 |
<%= render :partial => 'users/auto_watch_on' %> |
|
52 |
</fieldset> |
|
53 | ||
49 | 54 |
<fieldset class="box tabular"> |
50 | 55 |
<legend><%=l(:label_preferences)%></legend> |
51 | 56 |
<%= render :partial => 'users/preferences' %> |
config/locales/en.yml | ||
---|---|---|
910 | 910 |
label_downloads_abbr: D/L |
911 | 911 |
label_optional_description: Optional description |
912 | 912 |
label_add_another_file: Add another file |
913 |
label_auto_watch_on: Auto watch |
|
914 |
label_auto_watch_on_add_note: Issues I added notes |
|
913 | 915 |
label_preferences: Preferences |
914 | 916 |
label_chronological_order: In chronological order |
915 | 917 |
label_reverse_chronological_order: In reverse chronological order |
test/unit/journal_test.rb | ||
---|---|---|
118 | 118 |
end |
119 | 119 |
end |
120 | 120 | |
121 |
def test_create_should_add_wacher |
|
122 |
user = User.first |
|
123 |
user.pref.auto_watch_on=['add_note'] |
|
124 |
user.save |
|
125 |
journal = Journal.new(:journalized => Issue.first, :notes => 'notes', :user => user) |
|
126 | ||
127 |
assert_difference 'Watcher.count', 1 do |
|
128 |
assert_equal true, journal.save |
|
129 |
end |
|
130 |
end |
|
131 | ||
132 |
def test_create_should_not_add_watcher |
|
133 |
user = User.first |
|
134 |
user.pref.auto_watch_on=[] |
|
135 |
user.save |
|
136 |
journal = Journal.new(:journalized => Issue.first, :notes => 'notes', :user => user) |
|
137 | ||
138 |
assert_no_difference 'Watcher.count' do |
|
139 |
assert_equal true, journal.save |
|
140 |
end |
|
141 |
end |
|
142 | ||
121 | 143 |
def test_visible_scope_for_anonymous |
122 | 144 |
# Anonymous user should see issues of public projects only |
123 | 145 |
journals = Journal.visible(User.anonymous).to_a |
test/unit/user_preference_test.rb | ||
---|---|---|
48 | 48 |
assert_equal true, preference.no_self_notified |
49 | 49 |
end |
50 | 50 | |
51 |
def test_auto_watch_on_should_default_to_setting |
|
52 |
preference = UserPreference.new |
|
53 |
assert_equal ['add_note'], preference.auto_watch_on |
|
54 |
end |
|
55 | ||
51 | 56 |
def test_create |
52 | 57 |
user = User.new(:firstname => "new", :lastname => "user", :mail => "newuser@somenet.foo") |
53 | 58 |
user.login = "newuser" |