summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Davis <edavis@littlestreamsoftware.com>2010-09-28 21:09:06 +0000
committerEric Davis <edavis@littlestreamsoftware.com>2010-09-28 21:09:06 +0000
commit26ef9da02b7ef7550712317ad050e5a2f31744c6 (patch)
tree2bd63ea6bb64aca39a733ca598253c48aa57e72d
parent4c9f261a245b256ecd299801583ad23bb6921ec2 (diff)
downloadredmine-26ef9da02b7ef7550712317ad050e5a2f31744c6.tar.gz
redmine-26ef9da02b7ef7550712317ad050e5a2f31744c6.zip
Changed the notifications to use a hierarchy UI
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@4222 e93f8b46-1217-0410-a6f0-8f06a7374b81
-rw-r--r--app/helpers/settings_helper.rb10
-rw-r--r--app/views/settings/_notifications.rhtml12
-rw-r--r--lib/redmine/notifiable.rb33
-rw-r--r--public/javascripts/application.js8
-rw-r--r--public/stylesheets/application.css1
-rw-r--r--test/unit/lib/redmine/notifiable_test.rb13
6 files changed, 46 insertions, 31 deletions
diff --git a/app/helpers/settings_helper.rb b/app/helpers/settings_helper.rb
index e57b75fcc..6dc33a8e1 100644
--- a/app/helpers/settings_helper.rb
+++ b/app/helpers/settings_helper.rb
@@ -71,4 +71,14 @@ module SettingsHelper
label = options.delete(:label)
label != false ? content_tag("label", l(label || "setting_#{setting}")) : ''
end
+
+ # Renders a notification field for a Redmine::Notifiable option
+ def notification_field(notifiable)
+ return content_tag(:label,
+ check_box_tag('settings[notified_events][]',
+ notifiable.name,
+ Setting.notified_events.include?(notifiable.name)) +
+ l_or_humanize(notifiable.name, :prefix => 'label_'),
+ :class => notifiable.parent.present? ? "parent" : '')
+ end
end
diff --git a/app/views/settings/_notifications.rhtml b/app/views/settings/_notifications.rhtml
index 2c62cdf9f..bf2b9d871 100644
--- a/app/views/settings/_notifications.rhtml
+++ b/app/views/settings/_notifications.rhtml
@@ -12,11 +12,13 @@
</div>
-<fieldset class="box settings" id="notified_events"><legend><%=l(:text_select_mail_notifications)%></legend>
- <%= setting_multiselect(:notified_events,
- @notifiables.collect {|notifiable| [l_or_humanize(notifiable, :prefix => 'label_'), notifiable]}, :label => false) %>
-
- <p><%= check_all_links('notified_events') %></p>
+<fieldset class="box" id="notified_events"><legend><%=l(:text_select_mail_notifications)%></legend>
+<%= hidden_field_tag 'settings[notified_events][]', '' %>
+<% @notifiables.each do |notifiable| %>
+<%= notification_field notifiable %>
+<br />
+<% end %>
+<p><%= check_all_links('notified_events') %></p>
</fieldset>
<fieldset class="box"><legend><%= l(:setting_emails_footer) %></legend>
diff --git a/lib/redmine/notifiable.rb b/lib/redmine/notifiable.rb
index 84f3ccd6c..71d1ba501 100644
--- a/lib/redmine/notifiable.rb
+++ b/lib/redmine/notifiable.rb
@@ -1,22 +1,25 @@
module Redmine
- class Notifiable
- CoreNotifications = [
- 'issue_added',
- 'issue_updated',
- 'issue_note_added',
- 'issue_status_updated',
- 'issue_priority_updated',
- 'news_added',
- 'document_added',
- 'file_added',
- 'message_posted',
- 'wiki_content_added',
- 'wiki_content_updated'
- ]
+ class Notifiable < Struct.new(:name, :parent)
+ def to_s
+ name
+ end
+
# TODO: Plugin API for adding a new notification?
def self.all
- CoreNotifications
+ notifications = []
+ notifications << Notifiable.new('issue_added')
+ notifications << Notifiable.new('issue_updated')
+ notifications << Notifiable.new('issue_note_added', 'issue_updated')
+ notifications << Notifiable.new('issue_status_updated', 'issue_updated')
+ notifications << Notifiable.new('issue_priority_updated', 'issue_updated')
+ notifications << Notifiable.new('news_added')
+ notifications << Notifiable.new('document_added')
+ notifications << Notifiable.new('file_added')
+ notifications << Notifiable.new('message_posted')
+ notifications << Notifiable.new('wiki_content_added')
+ notifications << Notifiable.new('wiki_content_updated')
+ notifications
end
end
end
diff --git a/public/javascripts/application.js b/public/javascripts/application.js
index 989065b3a..8f6c51828 100644
--- a/public/javascripts/application.js
+++ b/public/javascripts/application.js
@@ -17,6 +17,13 @@ function toggleCheckboxesBySelector(selector) {
for (i = 0; i < boxes.length; i++) { boxes[i].checked = !all_checked; }
}
+function setCheckboxesBySelector(checked, selector) {
+ var boxes = $$(selector);
+ boxes.each(function(ele) {
+ ele.checked = checked;
+ });
+}
+
function showAndScrollTo(id, focus) {
Element.show(id);
if (focus!=null) { Form.Element.focus(focus); }
@@ -56,7 +63,6 @@ function addFileField() {
dLabel.addClassName('inline');
// Pulls the languge value used for Optional Description
dLabel.update($('attachment_description_label_content').innerHTML)
-
p = document.getElementById("attachments_fields");
p.appendChild(document.createElement("br"));
p.appendChild(f);
diff --git a/public/stylesheets/application.css b/public/stylesheets/application.css
index 233d94e45..b286ee23c 100644
--- a/public/stylesheets/application.css
+++ b/public/stylesheets/application.css
@@ -419,6 +419,7 @@ input#time_entry_comments { width: 90%;}
.tabular.settings textarea { width: 99%; }
fieldset.settings label { display: block; }
+.parent { padding-left: 20px; }
.required {color: #bb0000;}
.summary {font-style: italic;}
diff --git a/test/unit/lib/redmine/notifiable_test.rb b/test/unit/lib/redmine/notifiable_test.rb
index acfe6be5f..494d16b95 100644
--- a/test/unit/lib/redmine/notifiable_test.rb
+++ b/test/unit/lib/redmine/notifiable_test.rb
@@ -21,18 +21,11 @@ class Redmine::NotifiableTest < ActiveSupport::TestCase
def setup
end
- def test_included_core_notifications
- assert_equal 11, Redmine::Notifiable::CoreNotifications.length
- Redmine::Notifiable::CoreNotifications.length
+ def test_all
+ assert_equal 11, Redmine::Notifiable.all.length
%w(issue_added issue_updated issue_note_added issue_status_updated issue_priority_updated news_added document_added file_added message_posted wiki_content_added wiki_content_updated).each do |notifiable|
- assert Redmine::Notifiable::CoreNotifications.include?(notifiable), "missing #{notifiable}"
- end
- end
-
- def test_all_should_include_all_of_the_core_notifications
- Redmine::Notifiable::CoreNotifications.each do |notifiable|
- assert Redmine::Notifiable.all.include?(notifiable), "missing #{notifiable} in #all"
+ assert Redmine::Notifiable.all.collect(&:name).include?(notifiable), "missing #{notifiable}"
end
end
end