##// END OF EJS Templates
r18645@gaspard (orig r1887): jplang | 2008-09-20 16:07:52 +0200...
r18645@gaspard (orig r1887): jplang | 2008-09-20 16:07:52 +0200 Fixed: Roadmap crashes when a version has a due date > 2037. r18646@gaspard (orig r1888): jplang | 2008-09-21 10:54:02 +0200 Fixed: invalid effective date (eg. 99999-01-01) causes an error on version edition screen. r18647@gaspard (orig r1889): jplang | 2008-09-21 10:54:50 +0200 Fixes VersionTest class. r18648@gaspard (orig r1890): jplang | 2008-09-21 14:07:44 +0200 Fixed: login filter providing incorrect back_url for Redmine installed in sub-directory (#1900). r18649@gaspard (orig r1891): winterheart | 2008-09-21 14:31:34 +0200 de.yml from #1745, thank to Sven Schuchmann and Thomas Löber for contribution r18650@gaspard (orig r1892): winterheart | 2008-09-21 14:32:16 +0200 #1928, update for Italian language r18651@gaspard (orig r1893): jplang | 2008-09-21 14:45:22 +0200 Unescape back_url param before calling redirect_to. r18652@gaspard (orig r1894): jplang | 2008-09-21 15:28:12 +0200 Strip LDAP attribute names before saving (#1890). r18653@gaspard (orig r1895): jplang | 2008-09-21 20:45:30 +0200 Switch order of current and previous revisions in side-by-side diff (#1903). r18654@gaspard (orig r1896): jplang | 2008-09-21 22:38:36 +0200 Typo in migration 97 name (#1929). r18655@gaspard (orig r1897): winterheart | 2008-09-22 16:49:18 +0200 #1921, pt translation git-svn-id: http://redmine.rubyforge.org/svn/branches/nbc@1898 e93f8b46-1217-0410-a6f0-8f06a7374b81

File last commit:

r1759:2042e3bbd9bb
r1896:9b94342bc3ba
Show More
custom_field.rb
75 lines | 2.8 KiB | text/x-ruby | RubyLexer
# redMine - project management software
# Copyright (C) 2006 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
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class CustomField < ActiveRecord::Base
has_many :custom_values, :dependent => :delete_all
acts_as_list :scope => 'type = \'#{self.class}\''
serialize :possible_values
FIELD_FORMATS = { "string" => { :name => :label_string, :order => 1 },
"text" => { :name => :label_text, :order => 2 },
"int" => { :name => :label_integer, :order => 3 },
"float" => { :name => :label_float, :order => 4 },
"list" => { :name => :label_list, :order => 5 },
"date" => { :name => :label_date, :order => 6 },
"bool" => { :name => :label_boolean, :order => 7 }
}.freeze
validates_presence_of :name, :field_format
validates_uniqueness_of :name, :scope => :type
validates_length_of :name, :maximum => 30
validates_format_of :name, :with => /^[\w\s\.\'\-]*$/i
validates_inclusion_of :field_format, :in => FIELD_FORMATS.keys
def initialize(attributes = nil)
super
self.possible_values ||= []
end
def before_validation
# remove empty values
self.possible_values = self.possible_values.collect{|v| v unless v.empty?}.compact
# make sure these fields are not searchable
self.searchable = false if %w(int float date bool).include?(field_format)
true
end
def validate
if self.field_format == "list"
errors.add(:possible_values, :activerecord_error_blank) if self.possible_values.nil? || self.possible_values.empty?
errors.add(:possible_values, :activerecord_error_invalid) unless self.possible_values.is_a? Array
end
# validate default value
v = CustomValue.new(:custom_field => self.clone, :value => default_value, :customized => nil)
v.custom_field.is_required = false
errors.add(:default_value, :activerecord_error_invalid) unless v.valid?
end
def <=>(field)
position <=> field.position
end
# to move in project_custom_field
def self.for_all
find(:all, :conditions => ["is_for_all=?", true], :order => 'position')
end
def type_name
nil
end
end