]> source.dussan.org Git - redmine.git/commitdiff
Changed the notifications to use a hierarchy UI
authorEric Davis <edavis@littlestreamsoftware.com>
Tue, 28 Sep 2010 21:09:06 +0000 (21:09 +0000)
committerEric Davis <edavis@littlestreamsoftware.com>
Tue, 28 Sep 2010 21:09:06 +0000 (21:09 +0000)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@4222 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/helpers/settings_helper.rb
app/views/settings/_notifications.rhtml
lib/redmine/notifiable.rb
public/javascripts/application.js
public/stylesheets/application.css
test/unit/lib/redmine/notifiable_test.rb

index e57b75fcc884ee965b075a2bd039a316be94bfa4..6dc33a8e1356a50cec6e51a3ac4e82aa652c7b94 100644 (file)
@@ -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
index 2c62cdf9f485b3d8a0d5eaa3d5884ac01b502580..bf2b9d8715fa67f01286249e0c57c32e2e681188 100644 (file)
 
 </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>
index 84f3ccd6c6bf6a87422f1a0ede2a6abfd22a570f..71d1ba5017dee638522500f5138fdf3cee015136 100644 (file)
@@ -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
index 989065b3af9df3b659401bce9967bb0df1e0b89c..8f6c5182813d47f277a638c8b08f9720d750c8ba 100644 (file)
@@ -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);
index 233d94e4545319a9d81924cca6054d31d848785f..b286ee23c30ad13bcab229e97f3c293bd128f9f8 100644 (file)
@@ -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;}
index acfe6be5fd480be70ccc00263a4ed9a433f67d1c..494d16b95248677742e22a42ff9c38a52daa3aa6 100644 (file)
@@ -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