Patch #6450 ยป scvmc_redmine_668p1_custom_field_dates.diff
app/models/custom_value.rb (working copy) | ||
---|---|---|
16 | 16 |
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
17 | 17 | |
18 | 18 |
class CustomValue < ActiveRecord::Base |
19 |
include Redmine::I18n |
|
20 |
|
|
19 | 21 |
belongs_to :custom_field |
20 | 22 |
belongs_to :customized, :polymorphic => true |
21 | 23 | |
24 |
before_save :transform |
|
25 | ||
22 | 26 |
def after_initialize |
23 | 27 |
if new_record? && custom_field && (customized_type.blank? || (customized && customized.new_record?)) |
24 | 28 |
self.value ||= custom_field.default_value |
... | ... | |
41 | 45 |
def to_s |
42 | 46 |
value.to_s |
43 | 47 |
end |
44 |
|
|
48 |
|
|
45 | 49 |
protected |
46 | 50 |
def validate |
47 | 51 |
if value.blank? |
... | ... | |
58 | 62 |
when 'float' |
59 | 63 |
begin; Kernel.Float(value); rescue; errors.add(:value, :invalid) end |
60 | 64 |
when 'date' |
61 |
errors.add(:value, :not_a_date) unless value =~ /^\d{4}-\d{2}-\d{2}$/
|
|
65 |
errors.add(:value, :not_a_date) unless parse_user_date(value)
|
|
62 | 66 |
when 'list' |
63 | 67 |
errors.add(:value, :inclusion) unless custom_field.possible_values.include?(value) |
64 | 68 |
end |
65 | 69 |
end |
66 | 70 |
end |
71 | ||
72 |
private |
|
73 | ||
74 |
def transform |
|
75 |
self.value = parse_user_date(value) if custom_field.field_format == 'date' |
|
76 |
end |
|
77 | ||
67 | 78 |
end |
lib/redmine/i18n.rb (working copy) | ||
---|---|---|
39 | 39 |
return nil unless date |
40 | 40 |
Setting.date_format.blank? ? ::I18n.l(date.to_date) : date.strftime(Setting.date_format) |
41 | 41 |
end |
42 | ||
43 |
def parse_user_date(datestring) |
|
44 |
return nil unless datestring |
|
45 |
begin |
|
46 |
if datestring =~ /^\d{4}-\d{2}-\d{2}$/ |
|
47 |
r = Date.strptime(datestring, '%F') |
|
48 |
elsif |
|
49 |
r = Setting.date_format.blank? ? Date.parse(datestring) : Date.strptime(datestring, Setting.date_format) |
|
50 |
end |
|
51 |
rescue |
|
52 |
r = nil |
|
53 |
end |
|
54 |
return r |
|
55 |
end |
|
42 | 56 |
|
43 | 57 |
def format_time(time, include_date = true) |
44 | 58 |
return nil unless time |