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" |