commit 71317ed3d9fa6bcdaf9eadcf9f18684a31a5f6ad Author: Jan Schulz-Hofen Date: Sat Mar 9 17:29:43 2013 +0100 let user choose number of days to be reminded before an issue due date diff --git a/app/models/mailer.rb b/app/models/mailer.rb index d18394c..25ede13 100644 --- a/app/models/mailer.rb +++ b/app/models/mailer.rb @@ -359,7 +359,11 @@ class Mailer < ActionMailer::Base issues_by_assignee = scope.all(:include => [:status, :assigned_to, :project, :tracker]).group_by(&:assigned_to) issues_by_assignee.each do |assignee, issues| - deliver_reminder(assignee, issues, days) if assignee.is_a?(User) && assignee.active? + if assignee.is_a?(User) && assignee.active? && assignee.pref.reminder_days.present? + pref_days = assignee.pref.reminder_days.to_i + issues.reject!{|issue| issue.due_date.to_datetime > pref_days.days.from_now } + deliver_reminder(assignee, issues, pref_days < days ? pref_days : days) if issues.any? + end end end diff --git a/app/models/user_preference.rb b/app/models/user_preference.rb index 305e4b8..dd59e44 100644 --- a/app/models/user_preference.rb +++ b/app/models/user_preference.rb @@ -59,4 +59,7 @@ class UserPreference < ActiveRecord::Base def default_assign_issues_to_me; self[:default_assign_issues_to_me] || '0'; end def default_assign_issues_to_me=(value); self[:default_assign_issues_to_me]=value; end + + def reminder_days; self[:reminder_days] || ''; end + def reminder_days=(value); self[:reminder_days] = value.blank? ? '' : value.to_i; end end diff --git a/app/views/users/_preferences.html.erb b/app/views/users/_preferences.html.erb index 144761a..e56b744 100644 --- a/app/views/users/_preferences.html.erb +++ b/app/views/users/_preferences.html.erb @@ -4,5 +4,7 @@

<%= pref_fields.select :comments_sorting, [[l(:label_chronological_order), 'asc'], [l(:label_reverse_chronological_order), 'desc']] %>

<%= pref_fields.check_box :warn_on_leaving_unsaved %>

<%= pref_fields.check_box :default_assign_issues_to_me %>

+

<%= pref_fields.text_field :reminder_days, :size => 6 %> <%= l(:label_before) %> +<%= l(:text_reminder_days) %>

<% end %> diff --git a/config/locales/de.yml b/config/locales/de.yml index e99ae05..a0336f7 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -626,6 +626,7 @@ de: label_less_than_ago: vor weniger als label_more_than_ago: vor mehr als label_ago: vor + label_before: Tage vorher label_contains: enthält label_not_contains: enthält nicht label_day_plural: Tage @@ -961,7 +962,9 @@ de: setting_gantt_items_limit: Maximale Anzahl von Tickets die im Gantt-Chart angezeigt werden. field_default_assign_issues_to_me: Tickets die ich anlege mir selbst zuweisen field_warn_on_leaving_unsaved: vor dem Verlassen einer Seite mit ungesichertem Text im Editor warnen + field_reminder_days: E-Mail-Erinnerung für fällige Tickets text_warn_on_leaving_unsaved: Die aktuellen Änderungen gehen verloren, wenn Sie diese Seite verlassen. + text_reminder_days: Feld leer lassen für keine Erinnerungen label_my_queries: Meine eigenen Abfragen text_journal_changed_no_detail: "%{label} aktualisiert" label_news_comment_added: Kommentar zu einem Blog-Artikel hinzugefügt diff --git a/config/locales/en.yml b/config/locales/en.yml index 427bf43..2e6a9d0 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -323,6 +323,7 @@ en: field_visible: Visible field_default_assign_issues_to_me: Assign new issues to myself by default field_warn_on_leaving_unsaved: "Warn me when leaving a page with unsaved text" + field_reminder_days: Due issue email reminders field_issues_visibility: Issues visibility field_is_private: Private field_commit_logs_encoding: Commit messages encoding @@ -671,6 +672,7 @@ en: label_less_than_ago: less than days ago label_more_than_ago: more than days ago label_ago: days ago + label_before: days before label_contains: contains label_not_contains: doesn't contain label_day_plural: days @@ -1020,6 +1022,7 @@ en: text_issue_conflict_resolution_cancel: "Discard all my changes and redisplay %{link}" text_account_destroy_confirmation: "Are you sure you want to proceed?\nYour account will be permanently deleted, with no way to reactivate it." text_session_expiration_settings: "Warning: changing these settings may expire the current sessions including yours." + text_reminder_days: Leave blank for no reminders default_role_manager: Manager default_role_developer: Developer diff --git a/test/fixtures/user_preferences.yml b/test/fixtures/user_preferences.yml index 01e008d..674d7a7 100644 --- a/test/fixtures/user_preferences.yml +++ b/test/fixtures/user_preferences.yml @@ -17,6 +17,7 @@ user_preferences_001: user_preferences_002: others: | --- + :reminder_days: 42 :my_page_layout: left: - latestnews