diff app/models/custom_field.rb @ 441:cbce1fd3b1b7 redmine-1.2

Update to Redmine 1.2-stable branch (Redmine SVN rev 6000)
author Chris Cannam
date Mon, 06 Jun 2011 14:24:13 +0100
parents 8661b858af72
children cbb26bc654de
line wrap: on
line diff
--- a/app/models/custom_field.rb	Thu Mar 03 11:42:28 2011 +0000
+++ b/app/models/custom_field.rb	Mon Jun 06 14:24:13 2011 +0100
@@ -1,5 +1,5 @@
-# redMine - project management software
-# Copyright (C) 2006  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  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
@@ -48,6 +48,35 @@
     errors.add(:default_value, :invalid) unless v.valid?
   end
   
+  def possible_values_options(obj=nil)
+    case field_format
+    when 'user', 'version'
+      if obj.respond_to?(:project) && obj.project
+        case field_format
+        when 'user'
+          obj.project.users.sort.collect {|u| [u.to_s, u.id.to_s]}
+        when 'version'
+          obj.project.versions.sort.collect {|u| [u.to_s, u.id.to_s]}
+        end
+      elsif obj.is_a?(Array)
+        obj.collect {|o| possible_values_options(o)}.inject {|memo, v| memo & v}
+      else
+        []
+      end
+    else
+      read_attribute :possible_values
+    end
+  end
+  
+  def possible_values(obj=nil)
+    case field_format
+    when 'user', 'version'
+      possible_values_options(obj).collect(&:last)
+    else
+      read_attribute :possible_values
+    end
+  end
+  
   # Makes possible_values accept a multiline string
   def possible_values=(arg)
     if arg.is_a?(Array)
@@ -71,6 +100,8 @@
         casted = value.to_i
       when 'float'
         casted = value.to_f
+      when 'user', 'version'
+        casted = (value.blank? ? nil : field_format.classify.constantize.find_by_id(value.to_i))
       end
     end
     casted