diff app/models/issue_priority.rb @ 1338:25603efa57b5

Merge from live branch
author Chris Cannam
date Thu, 20 Jun 2013 13:14:14 +0100
parents 433d4f72a19b
children 622f24f53b42
line wrap: on
line diff
--- a/app/models/issue_priority.rb	Wed Jan 23 13:11:25 2013 +0000
+++ b/app/models/issue_priority.rb	Thu Jun 20 13:14:14 2013 +0100
@@ -1,5 +1,5 @@
 # Redmine - project management software
-# Copyright (C) 2006-2011  Jean-Philippe Lang
+# Copyright (C) 2006-2012  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -18,6 +18,9 @@
 class IssuePriority < Enumeration
   has_many :issues, :foreign_key => 'priority_id'
 
+  after_destroy {|priority| priority.class.compute_position_names}
+  after_save {|priority| priority.class.compute_position_names if priority.position_changed? && priority.position}
+
   OptionName = :enumeration_issue_priorities
 
   def option_name
@@ -31,4 +34,35 @@
   def transfer_relations(to)
     issues.update_all("priority_id = #{to.id}")
   end
+
+  def css_classes
+    "priority-#{id} priority-#{position_name}"
+  end
+
+  # Clears position_name for all priorities
+  # Called from migration 20121026003537_populate_enumerations_position_name
+  def self.clear_position_names
+    update_all :position_name => nil
+  end
+
+  # Updates position_name for active priorities
+  # Called from migration 20121026003537_populate_enumerations_position_name
+  def self.compute_position_names
+    priorities = where(:active => true).all.sort_by(&:position)
+    if priorities.any?
+      default = priorities.detect(&:is_default?) || priorities[(priorities.size - 1) / 2]
+      priorities.each_with_index do |priority, index|
+        name = case
+          when priority.position == default.position
+            "default"
+          when priority.position < default.position
+            index == 0 ? "lowest" : "low#{index+1}"
+          else
+            index == (priorities.size - 1) ? "highest" : "high#{priorities.size - index}"
+          end
+
+        update_all({:position_name => name}, :id => priority.id)
+      end
+    end
+  end
 end