Feature #4347 » 0001-auto-watch-issues-a-user-contributes-to.patch
app/helpers/users_helper.rb | ||
---|---|---|
42 | 42 |
[l('label_last_tab_visited'), 'last_tab_visited']] |
43 | 43 |
end |
44 | 44 | |
45 |
def auto_watch_on_options |
|
46 |
UserPreference::AUTO_WATCH_ON_OPTIONS.map {|o| [l("label_auto_watch_on_#{o}"), o]}.to_h |
|
47 |
end |
|
48 | ||
45 | 49 |
def change_status_link(user) |
46 | 50 |
url = {:controller => 'users', :action => 'update', :id => user, :page => params[:page], :status => params[:status], :tab => nil} |
47 | 51 |
app/models/journal.rb | ||
---|---|---|
59 | 59 |
end |
60 | 60 |
) |
61 | 61 |
before_create :split_private_notes |
62 |
before_create :add_watcher |
|
62 | 63 |
after_create_commit :send_notification |
63 | 64 | |
64 | 65 |
scope :visible, (lambda do |*args| |
... | ... | |
324 | 325 |
true |
325 | 326 |
end |
326 | 327 | |
328 |
def add_watcher |
|
329 |
if user && |
|
330 |
user.allowed_to?(:add_issue_watchers, project) && |
|
331 |
user.pref.auto_watch_on?('add_note') && |
|
332 |
!Watcher.any_watched?(Array.wrap(journalized), user) |
|
333 |
journalized.set_watcher(user, true) |
|
334 |
end |
|
335 |
end |
|
336 | ||
327 | 337 |
def send_notification |
328 | 338 |
if notify? && |
329 | 339 |
( |
app/models/user_preference.rb | ||
---|---|---|
37 | 37 |
'textarea_font', |
38 | 38 |
'recently_used_projects', |
39 | 39 |
'history_default_tab', |
40 |
'toolbar_language_options') |
|
40 |
'toolbar_language_options', |
|
41 |
'auto_watch_on', |
|
42 |
) |
|
41 | 43 | |
42 | 44 |
TEXTAREA_FONT_OPTIONS = ['monospace', 'proportional'] |
43 | 45 |
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] |
46 |
AUTO_WATCH_ON_OPTIONS = ['add_note'] |
|
44 | 47 | |
45 | 48 |
def initialize(attributes=nil, *args) |
46 | 49 |
super |
... | ... | |
54 | 57 |
unless attributes && attributes.key?(:no_self_notified) |
55 | 58 |
self.no_self_notified = Setting.default_users_no_self_notified |
56 | 59 |
end |
60 |
unless attributes && attributes.key?(:auto_watch_on) |
|
61 |
self.auto_watch_on = AUTO_WATCH_ON_OPTIONS |
|
62 |
end |
|
57 | 63 |
end |
58 | 64 |
self.others ||= {} |
59 | 65 |
end |
... | ... | |
116 | 122 |
self[:toolbar_language_options] = languages.join(',') |
117 | 123 |
end |
118 | 124 | |
125 |
def auto_watch_on; self[:auto_watch_on] || []; end |
|
126 |
def auto_watch_on=(values); self[:auto_watch_on]=values; end |
|
127 |
def auto_watch_on?(action); self.auto_watch_on.include?(action.to_s); end |
|
128 | ||
119 | 129 |
# Returns the names of groups that are displayed on user's page |
120 | 130 |
# Example: |
121 | 131 |
# preferences.my_page_groups |
app/views/my/account.html.erb | ||
---|---|---|
58 | 58 |
<%= render :partial => 'users/mail_notifications' %> |
59 | 59 |
</fieldset> |
60 | 60 | |
61 |
<fieldset class="box"> |
|
62 |
<legend><%=l(:label_auto_watch_on)%></legend> |
|
63 |
<%= render :partial => 'users/auto_watch_on' %> |
|
64 |
</fieldset> |
|
65 | ||
61 | 66 |
<fieldset class="box tabular"> |
62 | 67 |
<legend><%=l(:label_preferences)%></legend> |
63 | 68 |
<%= 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.check_box %> <%= b.label %></p> |
|
4 |
<% end %> |
|
5 |
<% end %> |
app/views/users/_form.html.erb | ||
---|---|---|
66 | 66 |
<%= render :partial => 'users/mail_notifications' %> |
67 | 67 |
</fieldset> |
68 | 68 | |
69 |
<fieldset class="box"> |
|
70 |
<legend><%=l(:label_auto_watch_on)%></legend> |
|
71 |
<%= render :partial => 'users/auto_watch_on' %> |
|
72 |
</fieldset> |
|
73 | ||
69 | 74 |
<fieldset class="box tabular"> |
70 | 75 |
<legend><%=l(:label_preferences)%></legend> |
71 | 76 |
<%= render :partial => 'users/preferences' %> |
config/locales/en.yml | ||
---|---|---|
951 | 951 |
label_downloads_abbr: D/L |
952 | 952 |
label_optional_description: Optional description |
953 | 953 |
label_add_another_file: Add another file |
954 |
label_auto_watch_on: Auto watch |
|
955 |
label_auto_watch_on_add_note: Issues I contributed to |
|
954 | 956 |
label_preferences: Preferences |
955 | 957 |
label_chronological_order: In chronological order |
956 | 958 |
label_reverse_chronological_order: In reverse chronological order |
test/unit/journal_test.rb | ||
---|---|---|
120 | 120 |
end |
121 | 121 |
end |
122 | 122 | |
123 |
def test_create_should_add_wacher |
|
124 |
user = User.first |
|
125 |
user.pref.auto_watch_on=['add_note'] |
|
126 |
user.save |
|
127 |
journal = Journal.new(:journalized => Issue.first, :notes => 'notes', :user => user) |
|
128 | ||
129 |
assert_difference 'Watcher.count', 1 do |
|
130 |
assert_equal true, journal.save |
|
131 |
end |
|
132 |
end |
|
133 | ||
134 |
def test_create_should_not_add_watcher |
|
135 |
user = User.first |
|
136 |
user.pref.auto_watch_on=[] |
|
137 |
user.save |
|
138 |
journal = Journal.new(:journalized => Issue.first, :notes => 'notes', :user => user) |
|
139 | ||
140 |
assert_no_difference 'Watcher.count' do |
|
141 |
assert_equal true, journal.save |
|
142 |
end |
|
143 |
end |
|
144 | ||
123 | 145 |
def test_visible_scope_for_anonymous |
124 | 146 |
# Anonymous user should see issues of public projects only |
125 | 147 |
journals = Journal.visible(User.anonymous).to_a |
test/unit/user_preference_test.rb | ||
---|---|---|
57 | 57 |
end |
58 | 58 |
end |
59 | 59 | |
60 |
def test_auto_watch_on_should_default_to_setting |
|
61 |
preference = UserPreference.new |
|
62 |
assert_equal ['add_note'], preference.auto_watch_on |
|
63 |
end |
|
64 | ||
60 | 65 |
def test_create |
61 | 66 |
user = User.new(:firstname => "new", :lastname => "user", :mail => "newuser@somenet.foo") |
62 | 67 |
user.login = "newuser" |
- « Previous
- 1
- …
- 3
- 4
- 5
- Next »