From 23264ec3eb8e17543922a0093ed402a9d7ba5de9 Mon Sep 17 00:00:00 2001 From: Jean-Philippe Lang Date: Fri, 14 Sep 2007 15:30:46 +0000 Subject: [PATCH] Mail notification options restored (default is: issue_added and issue_updated). Added mail notification when adding a news (disabled by default). git-svn-id: http://redmine.rubyforge.org/svn/trunk@728 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- app/controllers/admin_controller.rb | 6 ++++++ app/controllers/documents_controller.rb | 2 +- app/controllers/issues_controller.rb | 4 ++-- app/controllers/projects_controller.rb | 7 ++++--- app/models/mailer.rb | 8 ++++++++ app/models/message_observer.rb | 2 +- app/models/setting.rb | 17 ++++++++++++----- app/views/admin/mail_options.rhtml | 18 +++++++++++++++++- app/views/mailer/news_added.rhtml | 6 ++++++ config/settings.yml | 6 ++++++ 10 files changed, 63 insertions(+), 13 deletions(-) create mode 100644 app/views/mailer/news_added.rhtml diff --git a/app/controllers/admin_controller.rb b/app/controllers/admin_controller.rb index 43dbb9964..2451f5ef6 100644 --- a/app/controllers/admin_controller.rb +++ b/app/controllers/admin_controller.rb @@ -46,6 +46,12 @@ class AdminController < ApplicationController end def mail_options + @notifiables = %w(issue_added issue_updated news_added document_added file_added message_posted) + if request.post? + Setting.notified_events = (params[:notified_events] || []) + flash[:notice] = l(:notice_successful_update) + redirect_to :controller => 'admin', :action => 'mail_options' + end end def test_email diff --git a/app/controllers/documents_controller.rb b/app/controllers/documents_controller.rb index 5659e9ced..b1b7deb64 100644 --- a/app/controllers/documents_controller.rb +++ b/app/controllers/documents_controller.rb @@ -52,7 +52,7 @@ class DocumentsController < ApplicationController a = Attachment.create(:container => @document, :file => file, :author => logged_in_user) @attachments << a unless a.new_record? } if params[:attachments] and params[:attachments].is_a? Array - Mailer.deliver_attachments_add(@attachments) if !@attachments.empty? #and Permission.find_by_controller_and_action(params[:controller], params[:action]).mail_enabled? + Mailer.deliver_attachments_add(@attachments) if !@attachments.empty? && Setting.notified_events.include?('document_added') redirect_to :action => 'show', :id => @document end diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb index 4bd359c89..eadd2ad71 100644 --- a/app/controllers/issues_controller.rb +++ b/app/controllers/issues_controller.rb @@ -103,7 +103,7 @@ class IssuesController < ApplicationController :value => a.filename) unless a.new_record? } if params[:attachments] and params[:attachments].is_a? Array flash[:notice] = l(:notice_successful_update) - Mailer.deliver_issue_edit(journal) #if Permission.find_by_controller_and_action(params[:controller], params[:action]).mail_enabled? + Mailer.deliver_issue_edit(journal) if Setting.notified_events.include?('issue_updated') redirect_to :action => 'show', :id => @issue return end @@ -137,7 +137,7 @@ class IssuesController < ApplicationController end flash[:notice] = l(:notice_successful_update) - Mailer.deliver_issue_edit(journal) #if Permission.find_by_controller_and_action(params[:controller], params[:action]).mail_enabled? + Mailer.deliver_issue_edit(journal) if Setting.notified_events.include?('issue_updated') redirect_to :action => 'show', :id => @issue end rescue ActiveRecord::StaleObjectError diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 148d54d48..22d514f4d 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -187,7 +187,7 @@ class ProjectsController < ApplicationController Attachment.create(:container => @document, :file => a, :author => logged_in_user) unless a.size == 0 } if params[:attachments] and params[:attachments].is_a? Array flash[:notice] = l(:notice_successful_create) - Mailer.deliver_document_add(@document) #if Permission.find_by_controller_and_action(params[:controller], params[:action]).mail_enabled? + Mailer.deliver_document_add(@document) if Setting.notified_events.include?('document_added') redirect_to :action => 'list_documents', :id => @project end end @@ -231,7 +231,7 @@ class ProjectsController < ApplicationController if @issue.save @attachments.each(&:save) flash[:notice] = l(:notice_successful_create) - Mailer.deliver_issue_add(@issue) #if Permission.find_by_controller_and_action(params[:controller], params[:action]).mail_enabled? + Mailer.deliver_issue_add(@issue) if Setting.notified_events.include?('issue_added') redirect_to :action => 'list_issues', :id => @project end end @@ -380,6 +380,7 @@ class ProjectsController < ApplicationController @news.author_id = self.logged_in_user.id if self.logged_in_user if @news.save flash[:notice] = l(:notice_successful_create) + Mailer.deliver_news_added(@news) if Setting.notified_events.include?('news_added') redirect_to :action => 'list_news', :id => @project end end @@ -405,7 +406,7 @@ class ProjectsController < ApplicationController a = Attachment.create(:container => @version, :file => file, :author => logged_in_user) @attachments << a unless a.new_record? } if params[:attachments] and params[:attachments].is_a? Array - Mailer.deliver_attachments_add(@attachments) if !@attachments.empty? #and Permission.find_by_controller_and_action(params[:controller], params[:action]).mail_enabled? + Mailer.deliver_attachments_add(@attachments) if !@attachments.empty? && Setting.notified_events.include?('file_added') redirect_to :controller => 'projects', :action => 'list_files', :id => @project end @versions = @project.versions.sort diff --git a/app/models/mailer.rb b/app/models/mailer.rb index b3ed16fc2..925d46ea7 100644 --- a/app/models/mailer.rb +++ b/app/models/mailer.rb @@ -90,6 +90,14 @@ class Mailer < ActionMailer::Base @body['url'] = url @body['added_to'] = added_to end + + def news_added(news) + set_language_if_valid(Setting.default_language) + @recipients = news.project.users.collect { |u| u.mail if u.mail_notification }.compact + @from = Setting.mail_from + @subject = "[#{news.project.name}] #{l(:label_news)}: #{news.title}" + @body['news'] = news + end def lost_password(token) set_language_if_valid(token.user.language) diff --git a/app/models/message_observer.rb b/app/models/message_observer.rb index cdf7b6ef6..1c311e25f 100644 --- a/app/models/message_observer.rb +++ b/app/models/message_observer.rb @@ -22,6 +22,6 @@ class MessageObserver < ActiveRecord::Observer # send notification to the board watchers recipients += message.board.watcher_recipients recipients = recipients.compact.uniq - Mailer.deliver_message_posted(message, recipients) unless recipients.empty? + Mailer.deliver_message_posted(message, recipients) if !recipients.empty? && Setting.notified_events.include?('message_posted') end end diff --git a/app/models/setting.rb b/app/models/setting.rb index c09b4bdb3..d4c82191a 100644 --- a/app/models/setting.rb +++ b/app/models/setting.rb @@ -27,16 +27,23 @@ class Setting < ActiveRecord::Base # Hash used to cache setting values @cached_settings = {} @cached_cleared_on = Time.now - + + def value + v = read_attribute(:value) + # Unserialize serialized settings + v = YAML::load(v) if @@available_settings[name]['serialized'] && v.is_a?(String) + v + end + # Returns the value of the setting named name def self.[](name) - value = @cached_settings[name] - value ? value : (@cached_settings[name] = find_or_default(name).value) + v = @cached_settings[name] + v ? v : (@cached_settings[name] = find_or_default(name).value) end - def self.[]=(name, value) + def self.[]=(name, v) setting = find_or_default(name) - setting.value = (value ? value.to_s : "") + setting.value = (v ? v : "") @cached_settings[name] = nil setting.save setting.value diff --git a/app/views/admin/mail_options.rhtml b/app/views/admin/mail_options.rhtml index cab94294f..2f61af4fa 100644 --- a/app/views/admin/mail_options.rhtml +++ b/app/views/admin/mail_options.rhtml @@ -1,3 +1,19 @@ +
+<%= link_to l(:label_send_test_email), :action => 'test_email' %> +
+

<%=l(:field_mail_notification)%>

-<%= link_to l(:label_send_test_email), :action => 'test_email' %> +<% form_tag({:action => 'mail_options'}, :id => 'mail-options-form') do %> + +
<%=l(:text_select_mail_notifications)%> +<% @notifiables.each do |notifiable| %> +

+<% end %> +
+
+ +

<%= check_all_links('mail-options-form') %>

+<%= submit_tag l(:button_save) %> +<% end %> diff --git a/app/views/mailer/news_added.rhtml b/app/views/mailer/news_added.rhtml new file mode 100644 index 000000000..18ddfe17d --- /dev/null +++ b/app/views/mailer/news_added.rhtml @@ -0,0 +1,6 @@ +<%= @news.title %> +<%= url_for :only_path => false, :host => Setting.host_name, :controller => 'news', :action => 'show', :id => @news %> +<%= @news.author.name %> + +<%= @news.description %> + diff --git a/config/settings.yml b/config/settings.yml index 718401f5f..0ab1bc184 100644 --- a/config/settings.yml +++ b/config/settings.yml @@ -74,3 +74,9 @@ date_format: default: 0 cross_project_issue_relations: default: 0 +notified_events: + serialized: true + default: -- + - issue_added + - issue_updated + \ No newline at end of file -- 2.39.5