summaryrefslogtreecommitdiffstats
path: root/app
diff options
context:
space:
mode:
Diffstat (limited to 'app')
-rw-r--r--app/controllers/admin_controller.rb6
-rw-r--r--app/controllers/documents_controller.rb2
-rw-r--r--app/controllers/issues_controller.rb4
-rw-r--r--app/controllers/projects_controller.rb7
-rw-r--r--app/models/mailer.rb8
-rw-r--r--app/models/message_observer.rb2
-rw-r--r--app/models/setting.rb17
-rw-r--r--app/views/admin/mail_options.rhtml18
-rw-r--r--app/views/mailer/news_added.rhtml6
9 files changed, 57 insertions, 13 deletions
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 @@
+<div class="contextual">
+<%= link_to l(:label_send_test_email), :action => 'test_email' %>
+</div>
+
<h2><%=l(:field_mail_notification)%></h2>
-<%= link_to l(:label_send_test_email), :action => 'test_email' %>
+<% form_tag({:action => 'mail_options'}, :id => 'mail-options-form') do %>
+
+<fieldset class="box"><legend><%=l(:text_select_mail_notifications)%></legend>
+<% @notifiables.each do |notifiable| %>
+ <p><label><%= check_box_tag "notified_events[]", notifiable, Setting.notified_events.include?(notifiable) %>
+ <%= notifiable.humanize %></label></p>
+<% end %>
+<div class="clear"></div>
+</fieldset>
+
+<p><%= check_all_links('mail-options-form') %></p>
+<%= 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 %>
+