Feature #30112 » 30112-stop-reminder-on-non-working-days.patch
| app/models/mailer.rb | ||
|---|---|---|
| 581 | 581 |
end |
| 582 | 582 |
end |
| 583 | 583 | |
| 584 |
non_working_week_days = Setting.non_working_week_days |
|
| 584 | 585 |
issues_by_assignee.each do |assignee, issues| |
| 585 | 586 |
if assignee.is_a?(User) && assignee.active? && issues.present? |
| 587 |
next if assignee.pref.no_reminders_on_non_working_days == '1' && non_working_week_days.include?("#{assignee.today.cwday}")
|
|
| 586 | 588 |
visible_issues = issues.select {|i| i.visible?(assignee)}
|
| 587 | 589 |
visible_issues.sort!{|a, b| (a.due_date <=> b.due_date).nonzero? || (a.id <=> b.id)}
|
| 588 | 590 |
reminder(assignee, visible_issues, days).deliver_later if visible_issues.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 |
'no_reminders_on_non_working_days' |
|
| 34 | 35 | |
| 35 | 36 |
TEXTAREA_FONT_OPTIONS = ['monospace', 'proportional'] |
| 36 | 37 | |
| ... | ... | |
| 73 | 74 |
end |
| 74 | 75 |
end |
| 75 | 76 | |
| 76 |
def comments_sorting; self[:comments_sorting] end |
|
| 77 |
def comments_sorting=(order); self[:comments_sorting]=order end |
|
| 77 |
def comments_sorting; self[:comments_sorting]; end
|
|
| 78 |
def comments_sorting=(order); self[:comments_sorting]=order; end
|
|
| 78 | 79 | |
| 79 | 80 |
def warn_on_leaving_unsaved; self[:warn_on_leaving_unsaved] || '1'; end |
| 80 | 81 |
def warn_on_leaving_unsaved=(value); self[:warn_on_leaving_unsaved]=value; end |
| ... | ... | |
| 82 | 83 |
def no_self_notified; (self[:no_self_notified] == true || self[:no_self_notified] == '1'); end |
| 83 | 84 |
def no_self_notified=(value); self[:no_self_notified]=value; end |
| 84 | 85 | |
| 85 |
def activity_scope; Array(self[:activity_scope]) ; end
|
|
| 86 |
def activity_scope=(value); self[:activity_scope]=value ; end
|
|
| 86 |
def activity_scope; Array(self[:activity_scope]); end |
|
| 87 |
def activity_scope=(value); self[:activity_scope]=value; end |
|
| 87 | 88 | |
| 88 |
def textarea_font; self[:textarea_font] end |
|
| 89 |
def textarea_font; self[:textarea_font]; end
|
|
| 89 | 90 |
def textarea_font=(value); self[:textarea_font]=value; end |
| 90 | 91 | |
| 92 |
def no_reminders_on_non_working_days; self[:no_reminders_on_non_working_days]; end |
|
| 93 |
def no_reminders_on_non_working_days=(value); self[:no_reminders_on_non_working_days]=value; end |
|
| 94 | ||
| 91 | 95 |
# Returns the names of groups that are displayed on user's page |
| 92 | 96 |
# Example: |
| 93 | 97 |
# preferences.my_page_groups |
| app/views/users/_mail_notifications.html.erb | ||
|---|---|---|
| 10 | 10 |
<%= content_tag 'fieldset', :id => 'notified-projects', :style => (@user.mail_notification == 'selected' ? '' : 'display:none;') do %> |
| 11 | 11 |
<legend><%= toggle_checkboxes_link("#notified-projects input[type=checkbox]") %><%=l(:label_project_plural)%></legend>
|
| 12 | 12 |
<%= render_project_nested_lists(@user.projects) do |project| |
| 13 |
content_tag('label',
|
|
| 13 |
content_tag('label',
|
|
| 14 | 14 |
check_box_tag( |
| 15 | 15 |
'user[notified_project_ids][]', |
| 16 | 16 |
project.id, |
| ... | ... | |
| 28 | 28 |
<%= pref_fields.check_box :no_self_notified %> |
| 29 | 29 |
<label for="pref_no_self_notified"><%= l(:label_user_mail_no_self_notified) %></label> |
| 30 | 30 |
</p> |
| 31 |
<p> |
|
| 32 |
<%= pref_fields.check_box :no_reminders_on_non_working_days %> |
|
| 33 |
<label for="pref_no_reminders_on_non_working_days"><%= l(:label_user_mail_no_reminders_on_non_working_days) %></label> |
|
| 34 |
</p> |
|
| 31 | 35 |
<% end %> |
| config/locales/en.yml | ||
|---|---|---|
| 889 | 889 |
label_user_mail_option_only_assigned: "Only for things I watch or I am assigned to" |
| 890 | 890 |
label_user_mail_option_only_owner: "Only for things I watch or I am the owner of" |
| 891 | 891 |
label_user_mail_no_self_notified: "I don't want to be notified of changes that I make myself" |
| 892 |
label_user_mail_no_reminders_on_non_working_days: "I don't want to receive email reminders on non-working days" |
|
| 892 | 893 |
label_registration_activation_by_email: account activation by email |
| 893 | 894 |
label_registration_manual_activation: manual account activation |
| 894 | 895 |
label_registration_automatic_activation: automatic account activation |
| test/functional/users_controller_test.rb | ||
|---|---|---|
| 244 | 244 |
'time_zone' => 'Paris', |
| 245 | 245 |
'comments_sorting' => 'desc', |
| 246 | 246 |
'warn_on_leaving_unsaved' => '0', |
| 247 |
'textarea_font' => 'proportional' |
|
| 247 |
'textarea_font' => 'proportional', |
|
| 248 |
'no_reminders_on_non_working_days' => '1' |
|
| 248 | 249 |
} |
| 249 | 250 |
} |
| 250 | 251 |
end |
| ... | ... | |
| 255 | 256 |
assert_equal 'desc', user.pref[:comments_sorting] |
| 256 | 257 |
assert_equal '0', user.pref[:warn_on_leaving_unsaved] |
| 257 | 258 |
assert_equal 'proportional', user.pref[:textarea_font] |
| 259 |
assert_equal '1', user.pref[:no_reminders_on_non_working_days] |
|
| 258 | 260 |
end |
| 259 | 261 | |
| 260 | 262 |
def test_create_with_generate_password_should_email_the_password |
| ... | ... | |
| 317 | 319 |
'hide_mail' => '1', |
| 318 | 320 |
'time_zone' => 'Paris', |
| 319 | 321 |
'comments_sorting' => 'desc', |
| 320 |
'warn_on_leaving_unsaved' => '0' |
|
| 322 |
'warn_on_leaving_unsaved' => '0', |
|
| 323 |
'no_reminders_on_non_working_days' => '1' |
|
| 321 | 324 |
} |
| 322 | 325 |
} |
| 323 | 326 |
end |
| ... | ... | |
| 325 | 328 | |
| 326 | 329 |
assert_select 'select#pref_time_zone option[selected=selected]', :text => /Paris/ |
| 327 | 330 |
assert_select 'input#pref_no_self_notified[value="1"][checked=checked]' |
| 331 |
assert_select 'input#pref_no_reminders_on_non_working_days[value="1"][checked=checked]' |
|
| 328 | 332 |
end |
| 329 | 333 | |
| 330 | 334 |
def test_create_admin_should_send_security_notification |
| test/unit/mailer_test.rb | ||
|---|---|---|
| 642 | 642 |
end |
| 643 | 643 |
end |
| 644 | 644 | |
| 645 |
def test_reminders_with_non_working_days |
|
| 646 |
user = User.find_by_login("dlopper")
|
|
| 647 |
with_settings :non_working_week_days => %W(#{user.today.cwday}) do
|
|
| 648 |
# Sending reminders to users who want to receive it on non-working days.(Default) |
|
| 649 |
user.pref.no_reminders_on_non_working_days = '0' |
|
| 650 |
user.pref.save! |
|
| 651 |
ActionMailer::Base.deliveries.clear |
|
| 652 |
Mailer.reminders(:users => [user.id]) |
|
| 653 |
assert_equal 1, ActionMailer::Base.deliveries.size |
|
| 654 | ||
| 655 |
# Not sending reminders to users who not want to receive it on non-working days. |
|
| 656 |
user.pref.no_reminders_on_non_working_days = '1' |
|
| 657 |
user.pref.save! |
|
| 658 |
ActionMailer::Base.deliveries.clear |
|
| 659 |
Mailer.reminders(:users => [user.id]) |
|
| 660 |
assert_equal 0, ActionMailer::Base.deliveries.size |
|
| 661 |
end |
|
| 662 |
end |
|
| 663 | ||
| 645 | 664 |
def test_security_notification |
| 646 | 665 |
set_language_if_valid User.find(1).language |
| 647 | 666 |
with_settings :emails_footer => "footer without link" do |